Frank Winter via llvm-dev
2016-Feb-03 01:55 UTC
[llvm-dev] opt with Polly doesn't find the passes
I just checkout release_38 branches of llvm, clang and polly and built it on and x86 Ubuntu with cmake: CMAKE_BUILD_TYPE="Debug" CMAKE_INSTALL_PREFIX="$HOME/toolchain/install/llvm-3.8" LLVM_TARGETS_TO_BUILD="X86" cmake -G "Unix Makefiles" \ -DBUILD_SHARED_LIBS="ON" \ -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \ -DCMAKE_INSTALL_PREFIX=$CMAKE_INSTALL_PREFIX \ -DLLVM_TARGETS_TO_BUILD=$LLVM_TARGETS_TO_BUILD \ $SRC The build went fine, even 'make check-polly' looks okay: Scanning dependencies of target check-polly [100%] Running polly regression tests Testing Time: 37.39s Expected Passes : 574 Expected Failures : 17 [100%] Built target check-polly Now, I like to follow the matmul example in polly. But whatever polly pass I am trying to run opt seem to not find it: opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so -S -polly-canonicalize matmul.s > matmul.preopt.ll opt: Unknown command line argument '-polly-canonicalize'. Try: 'opt -help' opt: Did you mean '-polly-delinearize'? I am sure that loading the library works, since opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so -help prints out: Polly Options: Configure the polly loop optimizer -polly - Enable the polly optimizer (only at -O3) -polly-2nd-level-tiling - Enable a 2nd level loop of loop tiling -polly-context=<isl parameter set> - Provide additional constraints on the context parameters -polly-only-func=<string> - Only run on functions that contain a certain string -polly-only-region=<identifier> - Only run on certain regions (The provided identifier must appear in the name of the region's entry block -polly-only-scop-detection - Only run scop detection, but no other optimizations -polly-parallel - Generate thread parallel code (isl codegen only) -polly-parallel-force - Force generation of thread parallel code ignoring any cost model -polly-process-unprofitable - Process scops that are unlikely to benefit from Polly optimizations. -polly-register-tiling - Enable register tiling -polly-report - Print information about the activities of Polly -polly-show - Highlight the code regions that will be optimized in a (CFG BBs and LLVM-IR instructions) -polly-show-only - Highlight the code regions that will be optimized in a (CFG only BBs) -polly-tiling - Enable loop tiling -polly-vectorizer - Select the vectorization strategy =none - No Vectorization =polly - Polly internal vectorizer =stripmine - Strip-mine outer loops for the loop-vectorizer to trigger (If I grep the polly source for 'canonicalize' I see the module pass class PollyCanonicalize). What am I missing? Thanks, Frank
Tobias Grosser via llvm-dev
2016-Feb-03 09:46 UTC
[llvm-dev] opt with Polly doesn't find the passes
On 02/03/2016 02:55 AM, Frank Winter via llvm-dev wrote:> I just checkout release_38 branches of llvm, clang and polly and built > it on and x86 Ubuntu with cmake: > > CMAKE_BUILD_TYPE="Debug" > CMAKE_INSTALL_PREFIX="$HOME/toolchain/install/llvm-3.8" > LLVM_TARGETS_TO_BUILD="X86" > > cmake -G "Unix Makefiles" \ > -DBUILD_SHARED_LIBS="ON" \ > -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \ > -DCMAKE_INSTALL_PREFIX=$CMAKE_INSTALL_PREFIX \ > -DLLVM_TARGETS_TO_BUILD=$LLVM_TARGETS_TO_BUILD \ > $SRC > > The build went fine, even 'make check-polly' looks okay: > > Scanning dependencies of target check-polly > [100%] Running polly regression tests > Testing Time: 37.39s > Expected Passes : 574 > Expected Failures : 17 > [100%] Built target check-polly > > Now, I like to follow the matmul example in polly. But whatever polly > pass I am trying to run opt seem to not find it: > > opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so -S > -polly-canonicalize matmul.s > matmul.preopt.ll > > opt: Unknown command line argument '-polly-canonicalize'. Try: 'opt -help' > opt: Did you mean '-polly-delinearize'? > > I am sure that loading the library works, since opt -load > ~/toolchain/install/llvm-3.8/lib/libPolly.so -help prints out:Hi Frank, this is interesting and I do not yet understand what is going on here. Let me shoot some first guesses: Which 'opt' are you runnning. Did you run: ~/toolchain/install/llvm-3.8/bin/opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so or rather some /usr/local/bin/opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so Also, what does: ~/toolchain/install/llvm-3.8/bin/opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so -help-hidden | grep canonicalize give you? Best, Tobias
Frank Winter via llvm-dev
2016-Feb-03 14:36 UTC
[llvm-dev] opt with Polly doesn't find the passes
Hi Tobias, the system does not have a /usr/local/bin/opt (I didn't install any Ubuntu clang rpm). I made sure I was using the correct 'opt'. But I also qualify the full pathname and it responds the same way. If I grep -help-hidden for canonicalize I get an empty output. Below is the full (polly related) output. This is odd. Thanks, Frank ~/toolchain/install/llvm-3.8/bin/opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so -help-hidden|grep polly -polly-dce-precise-steps=<int> - The number of precise steps between two approximating iterations. (A value of -1 schedules another approximation stage before the actual dead code elimination. -polly-num-threads=<int> - Number of threads to use (0 = auto) -polly-view-all - Also show functions without any scops -polly-view-only=<string> - Only view functions that match this pattern Configure the polly loop optimizer -disable-polly-legality - Disable polly legality check -enable-polly-aligned - Assumed aligned memory accesses. -polly - Enable the polly optimizer (only at -O3) -polly-2nd-level-default-tile-size=<int> - The default 2nd-level tile size (if not enough were provided by --polly-2nd-level-tile-sizes) -polly-2nd-level-tile-sizes=<int> - A tile size for each loop dimension, filled with --polly-default-tile-size -polly-2nd-level-tiling - Enable a 2nd level loop of loop tiling -polly-allow-nonaffine - Allow non affine access functions in arrays -polly-allow-nonaffine-branches - Allow non affine conditions for branches -polly-allow-nonaffine-loops - Allow non affine conditions for loops -polly-allow-unsigned - Allow unsigned expressions -polly-analyze-read-only-scalars - Model read-only scalar values in the scop description -polly-ast-detect-parallel - Detect parallelism -polly-ast-use-context - Use context -polly-code-generator - Select the code generator -polly-codegen-add-debug-printing - Add printf calls that show the values loaded/stored. -polly-context=<isl parameter set> - Provide additional constraints on the context parameters -polly-default-tile-size=<int> - The default tile size (if not enough were provided by --polly-tile-sizes) -polly-delinearize - Delinearize array access functions -polly-dependences-analysis-type - The kind of dependence analysis to use -polly-dependences-computeout=<int> - Bound the dependence analysis by a maximal amount of computational steps (0 means no bound) -polly-dependences-use-reductions - Exploit reductions in dependence analysis -polly-detect-keep-going - Do not fail on the first error. -polly-detect-profitability-min-per-loop-insts=<int> - The minimal number of per-loop instructions before a single loop region is considered profitable -polly-detect-reductions - Detect and exploit reductions -polly-detect-track-failures - Track failure strings in detecting scop regions -polly-detect-verify - Verify the detected SCoPs after each transformation -polly-disable-multiplicative-reductions - Disable multiplicative reductions -polly-dot - Enable the Polly DOT printer in -O3 -polly-dot-only - Enable the Polly DOT printer in -O3 (no BB content) -polly-export - Export the polyhedral description of the detected Scops -polly-ignore-aliasing - Ignore possible aliasing of the array bases -polly-ignore-integer-wrapping - Do not build run-time checks to proof absence of integer wrapping -polly-import - Export the polyhedral description of the detected Scops -polly-import-jscop-dir=<Directory path> - The directory to import the .jscop files from. -polly-import-jscop-postfix=<File postfix> - Postfix to append to the import .jsop files. -polly-max-disjuncts-assumed=<int> - The maximal number of disjuncts we allow in the assumption context (this bounds compile time) -polly-only-func=<string> - Only run on functions that contain a certain string -polly-only-region=<identifier> - Only run on certain regions (The provided identifier must appear in the name of the region's entry block -polly-only-scop-detection - Only run scop detection, but no other optimizations -polly-opt-fusion=<string> - The fusion strategy to choose (min/max) -polly-opt-max-coefficient=<int> - The maximal coefficient allowed (-1 is unlimited) -polly-opt-max-constant-term=<int> - The maximal constant term allowed (-1 is unlimited) -polly-opt-maximize-bands=<string> - Maximize the band depth (yes/no) -polly-opt-optimize-only=<string> - Only a certain kind of dependences (all/raw) -polly-opt-simplify-deps=<string> - Dependences should be simplified (yes/no) -polly-optimizer - Select the scheduling optimizer -polly-parallel - Generate thread parallel code (isl codegen only) -polly-parallel-force - Force generation of thread parallel code ignoring any cost model -polly-position - Where to run polly in the pass pipeline -polly-prevect-width=<int> - The number of loop iterations to strip-mine for pre-vectorization -polly-process-unprofitable - Process scops that are unlikely to benefit from Polly optimizations. -polly-register-tile-sizes=<int> - A tile size for each loop dimension, filled with --polly-register-tile-size -polly-register-tiling - Enable register tiling -polly-register-tiling-default-tile-size=<int> - The default register tile size (if not enough were provided by --polly-register-tile-sizes) -polly-report - Print information about the activities of Polly -polly-rtc-max-arrays-per-group=<uint> - The maximal number of arrays to compare in each alias group. -polly-rtc-max-parameters=<uint> - The maximal number of parameters allowed in RTCs. -polly-run-dce - Run the dead code elimination -polly-run-inliner - Run an early inliner pass before Polly -polly-show - Highlight the code regions that will be optimized in a (CFG BBs and LLVM-IR instructions) -polly-show-only - Highlight the code regions that will be optimized in a (CFG only BBs) -polly-tile-sizes=<int> - A tile size for each loop dimension, filled with --polly-default-tile-size -polly-tiling - Enable loop tiling -polly-use-runtime-alias-checks - Use runtime alias checks to resolve possible aliasing. -polly-vectorizer - Select the vectorization strategy =polly - Polly internal vectorizer -polly-view-cfg - Show the Polly CFG right after code generation On 02/03/2016 04:46 AM, Tobias Grosser wrote:> On 02/03/2016 02:55 AM, Frank Winter via llvm-dev wrote: >> I just checkout release_38 branches of llvm, clang and polly and built >> it on and x86 Ubuntu with cmake: >> >> CMAKE_BUILD_TYPE="Debug" >> CMAKE_INSTALL_PREFIX="$HOME/toolchain/install/llvm-3.8" >> LLVM_TARGETS_TO_BUILD="X86" >> >> cmake -G "Unix Makefiles" \ >> -DBUILD_SHARED_LIBS="ON" \ >> -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \ >> -DCMAKE_INSTALL_PREFIX=$CMAKE_INSTALL_PREFIX \ >> -DLLVM_TARGETS_TO_BUILD=$LLVM_TARGETS_TO_BUILD \ >> $SRC >> >> The build went fine, even 'make check-polly' looks okay: >> >> Scanning dependencies of target check-polly >> [100%] Running polly regression tests >> Testing Time: 37.39s >> Expected Passes : 574 >> Expected Failures : 17 >> [100%] Built target check-polly >> >> Now, I like to follow the matmul example in polly. But whatever polly >> pass I am trying to run opt seem to not find it: >> >> opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so -S >> -polly-canonicalize matmul.s > matmul.preopt.ll >> >> opt: Unknown command line argument '-polly-canonicalize'. Try: 'opt >> -help' >> opt: Did you mean '-polly-delinearize'? >> >> I am sure that loading the library works, since opt -load >> ~/toolchain/install/llvm-3.8/lib/libPolly.so -help prints out: > > Hi Frank, > > this is interesting and I do not yet understand what is going on here. > Let me shoot some first guesses: > > Which 'opt' are you runnning. Did you run: > > ~/toolchain/install/llvm-3.8/bin/opt -load > ~/toolchain/install/llvm-3.8/lib/libPolly.so > > or rather some > > /usr/local/bin/opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so > > Also, what does: > > ~/toolchain/install/llvm-3.8/bin/opt -load > ~/toolchain/install/llvm-3.8/lib/libPolly.so -help-hidden | grep > canonicalize give you? > > Best, > Tobias
Frank Winter via llvm-dev
2016-Feb-03 15:37 UTC
[llvm-dev] opt with Polly doesn't find the passes
Hi Tobias, I tried to invoke other passes and none of them are available, e.g.: ~/toolchain/install/llvm-3.8/bin/opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so -polly-cleanup opt: Unknown command line argument '-polly-cleanup'. Try: '/home/fwinter/toolchain/install/llvm-3.8/bin/opt -help' opt: Did you mean '-polly-tiling'? I am just shooting around hoping to get a clue what's going on... On thing.. I recall reading the polly documentation that there was the option to link opt statically with the polly library which I did not select. But that's likely not the problem since a lot of polly options are apparently there. Out of ideas for now. Thanks, Frank fwinter at frank-vaio:~/svn/llvm-3.8/tools/polly$ grep -r INITIALIZE_PASS_BEGIN * lib/CodeGen/CodegenCleanup.cpp:INITIALIZE_PASS_BEGIN(CodegenCleanup, "polly-cleanup", lib/CodeGen/CodeGeneration.cpp:INITIALIZE_PASS_BEGIN(CodeGeneration, "polly-codegen", lib/CodeGen/IslAst.cpp:INITIALIZE_PASS_BEGIN(IslAstInfo, "polly-ast", lib/Transform/CodePreparation.cpp:INITIALIZE_PASS_BEGIN(CodePreparation, "polly-prepare", lib/Transform/Canonicalization.cpp:INITIALIZE_PASS_BEGIN(PollyCanonicalize, "polly-canonicalize", lib/Transform/ScheduleOptimizer.cpp:INITIALIZE_PASS_BEGIN(IslScheduleOptimizer, "polly-opt-isl", lib/Transform/DeadCodeElimination.cpp:INITIALIZE_PASS_BEGIN(DeadCodeElim, "polly-dce", lib/Analysis/DependenceInfo.cpp:INITIALIZE_PASS_BEGIN(DependenceInfo, "polly-dependences", lib/Analysis/ScopDetection.cpp:INITIALIZE_PASS_BEGIN(ScopDetection, "polly-detect", lib/Analysis/ScopInfo.cpp:INITIALIZE_PASS_BEGIN(ScopInfo, "polly-scops", lib/Exchange/JSONExporter.cpp:INITIALIZE_PASS_BEGIN(JSONExporter, "polly-export-jscop", lib/Exchange/JSONExporter.cpp:INITIALIZE_PASS_BEGIN(JSONImporter, "polly-import-jscop", On 02/03/2016 04:46 AM, Tobias Grosser wrote:> On 02/03/2016 02:55 AM, Frank Winter via llvm-dev wrote: >> I just checkout release_38 branches of llvm, clang and polly and built >> it on and x86 Ubuntu with cmake: >> >> CMAKE_BUILD_TYPE="Debug" >> CMAKE_INSTALL_PREFIX="$HOME/toolchain/install/llvm-3.8" >> LLVM_TARGETS_TO_BUILD="X86" >> >> cmake -G "Unix Makefiles" \ >> -DBUILD_SHARED_LIBS="ON" \ >> -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \ >> -DCMAKE_INSTALL_PREFIX=$CMAKE_INSTALL_PREFIX \ >> -DLLVM_TARGETS_TO_BUILD=$LLVM_TARGETS_TO_BUILD \ >> $SRC >> >> The build went fine, even 'make check-polly' looks okay: >> >> Scanning dependencies of target check-polly >> [100%] Running polly regression tests >> Testing Time: 37.39s >> Expected Passes : 574 >> Expected Failures : 17 >> [100%] Built target check-polly >> >> Now, I like to follow the matmul example in polly. But whatever polly >> pass I am trying to run opt seem to not find it: >> >> opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so -S >> -polly-canonicalize matmul.s > matmul.preopt.ll >> >> opt: Unknown command line argument '-polly-canonicalize'. Try: 'opt >> -help' >> opt: Did you mean '-polly-delinearize'? >> >> I am sure that loading the library works, since opt -load >> ~/toolchain/install/llvm-3.8/lib/libPolly.so -help prints out: > > Hi Frank, > > this is interesting and I do not yet understand what is going on here. > Let me shoot some first guesses: > > Which 'opt' are you runnning. Did you run: > > ~/toolchain/install/llvm-3.8/bin/opt -load > ~/toolchain/install/llvm-3.8/lib/libPolly.so > > or rather some > > /usr/local/bin/opt -load ~/toolchain/install/llvm-3.8/lib/libPolly.so > > Also, what does: > > ~/toolchain/install/llvm-3.8/bin/opt -load > ~/toolchain/install/llvm-3.8/lib/libPolly.so -help-hidden | grep > canonicalize give you? > > Best, > Tobias