Does LLVM have loop multiversioning ? it seems it does not with clang++ -O3 -mllvm -debug-pass=Arguments program.c -c bash-4.1$ clang++ -O3 -mllvm -debug-pass=Arguments fast_algorithms.c -c clang-3.6: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo -no-aa -tbaa -scoped-noalias -assumption-tracker -basicaa -verify -add-discriminators -simplifycfg -domtree -sroa -early-cse -lower-expect Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo -no-aa -tbaa -scoped-noalias -assumption-tracker -basicaa -verify-di -ipsccp -globalopt -deadargelim -domtree -instcombine -simplifycfg -basiccg -prune-eh -inline-cost -inline -functionattrs -argpromotion -sroa -domtree -early-cse -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -domtree -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -indvars -loop-idiom -loop-deletion -function_tti -loop-unroll -memdep -mldst-motion -domtree -memdep -gvn -memdep -memcpyopt -sccp -domtree -instcombine -lazy-value-info -jump-threading -correlated-propagation -domtree -memdep -dse -adce -simplifycfg -domtree -instcombine -barrier -domtree -loops -loop-simplify -lcssa -branch-prob -block-freq -scalar-evolution -loop-vectorize -instcombine -scalar-evolution -slp-vectorizer -simplifycfg -domtree -instcombine -loops -loop-simplify -lcssa -scalar-evolution -function_tti -loop-unroll -alignment-from-assumptions -strip-dead-prototypes -globaldce -constmerge -domtree -loops -loop-simplify -lcssa -licm Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo -jump-instr-table-info -targetpassconfig -no-aa -tbaa -scoped-noalias -assumption-tracker -basicaa -collector-metadata -machinemoduleinfo -machine-branch-prob -jump-instr-tables -atomic-expand -verify -verify-di -domtree -loops -loop-simplify -scalar-evolution -iv-users -loop-reduce -gc-lowering -unreachableblockelim -consthoist -partially-inline-libcalls -codegenprepare -rewrite-symbols -verify-di -stack-protector -verify -domtree -loops -branch-prob -machinedomtree -expand-isel-pseudos -tailduplication -opt-phis -machinedomtree -slotindexes -stack-coloring -localstackalloc -dead-mi-elimination -machinedomtree -machine-loops -machine-trace-metrics -early-ifcvt -machinelicm -machine-cse -machinepostdomtree -machine-block-freq -machine-sink -peephole-opts -dead-mi-elimination -processimpdefs -unreachable-mbb-elimination -livevars -machinedomtree -machine-loops -phi-node-elimination -twoaddressinstruction -slotindexes -liveintervals -simple-register-coalescing -misched -machine-block-freq -livedebugvars -livestacks -virtregmap -liveregmatrix -edge-bundles -spill-code-placement -virtregrewriter -stack-slot-coloring -machinelicm -edge-bundles -prologepilog -machine-block-freq -branch-folder -tailduplication -machine-cp -postrapseudos -machinedomtree -machine-loops -post-RA-sched -gc-analysis -machine-block-freq -block-placement2 -stackmap-liveness Thanks, Trent -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150117/a5dfc025/attachment.html>
----- Original Message -----> From: "Xin Tong" <trent.tong at gmail.com> > To: llvmdev at cs.uiuc.edu > Sent: Saturday, January 17, 2015 3:06:13 PM > Subject: [LLVMdev] loop multiversioning > > > Does LLVM have loop multiversioning ? it seems it does not with > clang++ -O3 -mllvm -debug-pass=Arguments program.c -c >No, we currently don't. In what kind of multiversioning are you interested (memory dependence, partial specialization, etc.)? -Hal> > > bash-4.1$ clang++ -O3 -mllvm -debug-pass=Arguments fast_algorithms.c > -c > clang-3.6: warning: treating 'c' input as 'c++' when in C++ mode, > this behavior is deprecated > Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo > -no-aa -tbaa -scoped-noalias -assumption-tracker -basicaa -verify > -add-discriminators -simplifycfg -domtree -sroa -early-cse > -lower-expect > Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo > -no-aa -tbaa -scoped-noalias -assumption-tracker -basicaa -verify-di > -ipsccp -globalopt -deadargelim -domtree -instcombine -simplifycfg > -basiccg -prune-eh -inline-cost -inline -functionattrs -argpromotion > -sroa -domtree -early-cse -lazy-value-info -jump-threading > -correlated-propagation -simplifycfg -domtree -instcombine > -tailcallelim -simplifycfg -reassociate -domtree -loops > -loop-simplify -lcssa -loop-rotate -licm -loop-unswitch -instcombine > -scalar-evolution -loop-simplify -lcssa -indvars -loop-idiom > -loop-deletion -function_tti -loop-unroll -memdep -mldst-motion > -domtree -memdep -gvn -memdep -memcpyopt -sccp -domtree -instcombine > -lazy-value-info -jump-threading -correlated-propagation -domtree > -memdep -dse -adce -simplifycfg -domtree -instcombine -barrier > -domtree -loops -loop-simplify -lcssa -branch-prob -block-freq > -scalar-evolution -loop-vectorize -instcombine -scalar-evolution > -slp-vectorizer -simplifycfg -domtree -instcombine -loops > -loop-simplify -lcssa -scalar-evolution -function_tti -loop-unroll > -alignment-from-assumptions -strip-dead-prototypes -globaldce > -constmerge -domtree -loops -loop-simplify -lcssa -licm > Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo > -jump-instr-table-info -targetpassconfig -no-aa -tbaa > -scoped-noalias -assumption-tracker -basicaa -collector-metadata > -machinemoduleinfo -machine-branch-prob -jump-instr-tables > -atomic-expand -verify -verify-di -domtree -loops -loop-simplify > -scalar-evolution -iv-users -loop-reduce -gc-lowering > -unreachableblockelim -consthoist -partially-inline-libcalls > -codegenprepare -rewrite-symbols -verify-di -stack-protector -verify > -domtree -loops -branch-prob -machinedomtree -expand-isel-pseudos > -tailduplication -opt-phis -machinedomtree -slotindexes > -stack-coloring -localstackalloc -dead-mi-elimination > -machinedomtree -machine-loops -machine-trace-metrics -early-ifcvt > -machinelicm -machine-cse -machinepostdomtree -machine-block-freq > -machine-sink -peephole-opts -dead-mi-elimination -processimpdefs > -unreachable-mbb-elimination -livevars -machinedomtree > -machine-loops -phi-node-elimination -twoaddressinstruction > -slotindexes -liveintervals -simple-register-coalescing -misched > -machine-block-freq -livedebugvars -livestacks -virtregmap > -liveregmatrix -edge-bundles -spill-code-placement -virtregrewriter > -stack-slot-coloring -machinelicm -edge-bundles -prologepilog > -machine-block-freq -branch-folder -tailduplication -machine-cp > -postrapseudos -machinedomtree -machine-loops -post-RA-sched > -gc-analysis -machine-block-freq -block-placement2 > -stackmap-liveness > > > Thanks, > Trent > > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-- Hal Finkel Assistant Computational Scientist Leadership Computing Facility Argonne National Laboratory
Copying Ashutosh who is preparing an LICM patch to expose some of its functionalities with the aim of using them in multiversioned loops. We can work together on this. Our main aim is to enable licm(specifically array scalarization) when may-alias in loops stops such xforms. Sent from my Windows Phone ________________________________ From: Xin Tong<mailto:trent.tong at gmail.com> Sent: 1/18/2015 2:40 AM To: llvmdev at cs.uiuc.edu<mailto:llvmdev at cs.uiuc.edu> Subject: [LLVMdev] loop multiversioning Does LLVM have loop multiversioning ? it seems it does not with clang++ -O3 -mllvm -debug-pass=Arguments program.c -c bash-4.1$ clang++ -O3 -mllvm -debug-pass=Arguments fast_algorithms.c -c clang-3.6: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo -no-aa -tbaa -scoped-noalias -assumption-tracker -basicaa -verify -add-discriminators -simplifycfg -domtree -sroa -early-cse -lower-expect Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo -no-aa -tbaa -scoped-noalias -assumption-tracker -basicaa -verify-di -ipsccp -globalopt -deadargelim -domtree -instcombine -simplifycfg -basiccg -prune-eh -inline-cost -inline -functionattrs -argpromotion -sroa -domtree -early-cse -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -domtree -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -indvars -loop-idiom -loop-deletion -function_tti -loop-unroll -memdep -mldst-motion -domtree -memdep -gvn -memdep -memcpyopt -sccp -domtree -instcombine -lazy-value-info -jump-threading -correlated-propagation -domtree -memdep -dse -adce -simplifycfg -domtree -instcombine -barrier -domtree -loops -loop-simplify -lcssa -branch-prob -block-freq -scalar-evolution -loop-vectorize -instcombine -scalar-evolution -slp-vectorizer -simplifycfg -domtree -instcombine -loops -loop-simplify -lcssa -scalar-evolution -function_tti -loop-unroll -alignment-from-assumptions -strip-dead-prototypes -globaldce -constmerge -domtree -loops -loop-simplify -lcssa -licm Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo -jump-instr-table-info -targetpassconfig -no-aa -tbaa -scoped-noalias -assumption-tracker -basicaa -collector-metadata -machinemoduleinfo -machine-branch-prob -jump-instr-tables -atomic-expand -verify -verify-di -domtree -loops -loop-simplify -scalar-evolution -iv-users -loop-reduce -gc-lowering -unreachableblockelim -consthoist -partially-inline-libcalls -codegenprepare -rewrite-symbols -verify-di -stack-protector -verify -domtree -loops -branch-prob -machinedomtree -expand-isel-pseudos -tailduplication -opt-phis -machinedomtree -slotindexes -stack-coloring -localstackalloc -dead-mi-elimination -machinedomtree -machine-loops -machine-trace-metrics -early-ifcvt -machinelicm -machine-cse -machinepostdomtree -machine-block-freq -machine-sink -peephole-opts -dead-mi-elimination -processimpdefs -unreachable-mbb-elimination -livevars -machinedomtree -machine-loops -phi-node-elimination -twoaddressinstruction -slotindexes -liveintervals -simple-register-coalescing -misched -machine-block-freq -livedebugvars -livestacks -virtregmap -liveregmatrix -edge-bundles -spill-code-placement -virtregrewriter -stack-slot-coloring -machinelicm -edge-bundles -prologepilog -machine-block-freq -branch-folder -tailduplication -machine-cp -postrapseudos -machinedomtree -machine-loops -post-RA-sched -gc-analysis -machine-block-freq -block-placement2 -stackmap-liveness Thanks, Trent -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150118/f29e8b9a/attachment.html>
Hi Trent, I don't think LLVM has loop multi versioning. Some passes i.e. loopVectorizer has implemented its own multi versioning followed by memory check. Recently I also came across similar need in LICM. Can you please elaborate what multi versioning you are interested in ? Regards, Ashutosh -----Original Message----- From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of Hal Finkel Sent: Sunday, January 18, 2015 3:33 AM To: Xin Tong Cc: llvmdev at cs.uiuc.edu Subject: Re: [LLVMdev] loop multiversioning ----- Original Message -----> From: "Xin Tong" <trent.tong at gmail.com> > To: llvmdev at cs.uiuc.edu > Sent: Saturday, January 17, 2015 3:06:13 PM > Subject: [LLVMdev] loop multiversioning > > > Does LLVM have loop multiversioning ? it seems it does not with > clang++ -O3 -mllvm -debug-pass=Arguments program.c -c >No, we currently don't. In what kind of multiversioning are you interested (memory dependence, partial specialization, etc.)? -Hal> > > bash-4.1$ clang++ -O3 -mllvm -debug-pass=Arguments fast_algorithms.c > -c > clang-3.6: warning: treating 'c' input as 'c++' when in C++ mode, this > behavior is deprecated Pass Arguments: -datalayout -notti -basictti > -x86tti -targetlibinfo -no-aa -tbaa -scoped-noalias > -assumption-tracker -basicaa -verify -add-discriminators -simplifycfg > -domtree -sroa -early-cse -lower-expect Pass Arguments: -datalayout > -notti -basictti -x86tti -targetlibinfo -no-aa -tbaa -scoped-noalias > -assumption-tracker -basicaa -verify-di -ipsccp -globalopt > -deadargelim -domtree -instcombine -simplifycfg -basiccg -prune-eh > -inline-cost -inline -functionattrs -argpromotion -sroa -domtree > -early-cse -lazy-value-info -jump-threading -correlated-propagation > -simplifycfg -domtree -instcombine -tailcallelim -simplifycfg > -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm > -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa > -indvars -loop-idiom -loop-deletion -function_tti -loop-unroll -memdep > -mldst-motion -domtree -memdep -gvn -memdep -memcpyopt -sccp -domtree > -instcombine -lazy-value-info -jump-threading -correlated-propagation > -domtree -memdep -dse -adce -simplifycfg -domtree -instcombine > -barrier -domtree -loops -loop-simplify -lcssa -branch-prob > -block-freq -scalar-evolution -loop-vectorize -instcombine > -scalar-evolution -slp-vectorizer -simplifycfg -domtree -instcombine > -loops -loop-simplify -lcssa -scalar-evolution -function_tti > -loop-unroll -alignment-from-assumptions -strip-dead-prototypes > -globaldce -constmerge -domtree -loops -loop-simplify -lcssa -licm > Pass Arguments: -datalayout -notti -basictti -x86tti -targetlibinfo > -jump-instr-table-info -targetpassconfig -no-aa -tbaa -scoped-noalias > -assumption-tracker -basicaa -collector-metadata -machinemoduleinfo > -machine-branch-prob -jump-instr-tables -atomic-expand -verify > -verify-di -domtree -loops -loop-simplify -scalar-evolution -iv-users > -loop-reduce -gc-lowering -unreachableblockelim -consthoist > -partially-inline-libcalls -codegenprepare -rewrite-symbols -verify-di > -stack-protector -verify -domtree -loops -branch-prob -machinedomtree > -expand-isel-pseudos -tailduplication -opt-phis -machinedomtree > -slotindexes -stack-coloring -localstackalloc -dead-mi-elimination > -machinedomtree -machine-loops -machine-trace-metrics -early-ifcvt > -machinelicm -machine-cse -machinepostdomtree -machine-block-freq > -machine-sink -peephole-opts -dead-mi-elimination -processimpdefs > -unreachable-mbb-elimination -livevars -machinedomtree -machine-loops > -phi-node-elimination -twoaddressinstruction -slotindexes > -liveintervals -simple-register-coalescing -misched > -machine-block-freq -livedebugvars -livestacks -virtregmap > -liveregmatrix -edge-bundles -spill-code-placement -virtregrewriter > -stack-slot-coloring -machinelicm -edge-bundles -prologepilog > -machine-block-freq -branch-folder -tailduplication -machine-cp > -postrapseudos -machinedomtree -machine-loops -post-RA-sched > -gc-analysis -machine-block-freq -block-placement2 -stackmap-liveness > > > Thanks, > Trent > > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-- Hal Finkel Assistant Computational Scientist Leadership Computing Facility Argonne National Laboratory _______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev