Abdul Wahid Memon
2012-Jun-12 10:26 UTC
[LLVMdev] How to use LLVM optimizations with clang
Hi Yes, they both are exactly the same. Regards Shahzad On Tue, Jun 12, 2012 at 9:38 AM, Duncan Sands <baldrick at free.fr> wrote:> Hi, is the comb.ll used here: > > >> $ time lli ./comb.ll >> >> then the runtime is >> >> real 0m2.671s >> user 0m2.640s >> sys 0m0.020s >> >> But, if I convert this same file comb,ll in to native binary > > > the same as the comb.ll used here: > >> $ clang comb.ll > > > ? > > Ciao, Duncan. > > >> >> and execute it, then the runtime increases alot >> >> $ time ./a.out >> >> real 0m8.008s >> user 0m7.964s >> >> The binary generated directly by clang have runtime of around 2 >> seconds while generated after LLVM IR have around 8 secs but LLVM >> bytecode having same optimizations when executed with lli have runtime >> of around 2 secs. >> >> What steps are exactly taken by clang to produce the binary in order >> to achieve the runtime of around 2 secs. If it is a question of link >> time optimizations then how can we achieve that? >> >> Best Regards >> >> Shahzad >> >> On Fri, Jun 8, 2012 at 7:29 PM, Abdul Wahid Memon >> <engrwahidmemon at gmail.com> wrote: >>> >>> Thanks Duncan >>> >>> It was really helpful. >>> >>> Regards >>> >>> Abdul >>> >>> On Fri, Jun 8, 2012 at 7:23 PM, Duncan Sands<baldrick at free.fr> wrote: >>>> >>>> Hi, >>>> >>>> >>>>> If I compile the program using the following command line i.e. >>>>> >>>>> $ clang -O3 -lm *.c >>>> >>>> >>>> >>>> this may be doing link time optimization. >>>> >>>> >>>>> >>>>> then >>>>> >>>>> $ time ./a.out >>>>> >>>>> real 0m2.606s >>>>> user 0m2.584s >>>>> sys 0m0.012s >>>>> >>>>> BUT, if I use all the optimizations enabled with -O3 but specify them >>>>> explicity i.e. >>>> >>>> >>>> >>>> you can just use "opt -O3" here. >>>> >>>> >>>>> >>>>> for F in *.c ; do B=`basename $F .c` ; gcc >>>>> -fplugin=/damm/compilers/dragonegg-3.1.src/dragonegg.so -S -o - $F >>>>> -fplugin-arg-dragonegg-emit-ir | opt -targetlibinfo -no-aa -tbaa >>>>> -basicaa -globalopt -ipsccp -deadargelim -instcombine -simplifycfg >>>>> -basiccg -prune-eh -inline -functionattrs -argpromotion >>>>> -scalarrepl-ssa -domtree -early-cse -simplify-libcalls >>>>> -lazy-value-info -jump-threading -correlated-propagation -simplifycfg >>>>> -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops >>>>> -loop-simplify -lcssa -loop-rotate -licm -lcssa -loop-unswitch >>>>> -instcombine -scalar-evolution -loop-simplify -lcssa -indvars >>>>> -loop-idiom -loop-deletion -loop-unroll -memdep -gvn -memdep >>>>> -memcpyopt -sccp -instcombine -lazy-value-info -jump-threading >>>>> -correlated-propagation -domtree -memdep -dse -adce -simplifycfg >>>>> -instcombine -strip-dead-prototypes -globaldce -constmerge -preverify >>>>> -domtree -verify -o $B.ll ; done >>>>> >>>>> $ clang *.ll >>>> >>>> >>>> >>>> Try clang -O3 *.ll >>>> >>>> If it makes a difference then that means that clang is linking all these >>>> files >>>> together to form one mega file which it is then optimizing. >>>> >>>> Ciao, Duncan. >>>> >>>> >>>>> >>>>> then >>>>> >>>>> time ./a.out >>>>> >>>>> real 0m7.791s >>>>> user 0m7.760s >>>>> sys 0m0.008s >>>>> >>>>> Am I missing something here? >>>>> >>>>> Though directly compiling files i.e. >>>>> >>>>> $ clang *.c >>>>> >>>>> results in >>>>> >>>>> time ./a.out >>>>> >>>>> real 0m10.167s >>>>> user 0m10.121s >>>>> sys 0m0.016s >>>>> >>>>> Regards >>>>> >>>>> Shahzad >>>>> >>>>> On Fri, Jun 8, 2012 at 7:00 PM, Duncan Sands<baldrick at free.fr> >>>>> wrote: >>>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> >>>>>>> I tried it with -o - but its producing an error >>>>>>> >>>>>>> gcc: fatal error: cannot specify -o with -c, -S or -E with multiple >>>>>>> files >>>>>>> >>>>>>> What you suggest? >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> what I wrote: >>>>>> >>>>>>>> for F in *.c ; do B=`basename $F .c` ; gcc >>>>>>>> -fplugin=/path/to/dragonegg.so >>>>>>>> -S -o - $F -fplugin-arg-dragonegg-emit-ir | opt -adce -o $B.ll ; >>>>>>>> done >>>>>>>> clang *.ll >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Thanks to the for loop and passing $F to gcc, you are no longer using >>>>>> gcc >>>>>> with >>>>>> multiple files. So if you are getting that message then you are don't >>>>>> what >>>>>> I >>>>>> suggested. >>>>>> >>>>>> Ciao, Duncan. >>>>>> >>>>>> >>>>>>>> >>>>>>>> Ciao, Duncan. >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> $ clang *.s >>>>>>>>> >>>>>>>>> Regards >>>>>>>>> >>>>>>>>> Shahzad >>>>>>>>> >>>>>>>>> On Fri, Jun 8, 2012 at 9:10 AM, Duncan Sands<baldrick at free.fr> >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Hi Shahzad, >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> Is it possible that we can use LLVM optimization beside O1, O2, >>>>>>>>>>> O3 >>>>>>>>>>> along with dragonegg plugin? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> sure, try this: >>>>>>>>>> >>>>>>>>>> gcc -fplugin=path/dragonegg.so ...other_options_here... -S -o - >>>>>>>>>> -fplugin-arg-dragonegg-emit-ir >>>>>>>>>> -fplugin-arg-dragonegg-llvm-ir-optimize=0 >>>>>>>>>> | >>>>>>>>>> opt -pass1 -pass2 ... >>>>>>>>>> >>>>>>>>>> Here -fplugin-arg-dragonegg-emit-ir tells it to output LLVM IR >>>>>>>>>> rather >>>>>>>>>> than >>>>>>>>>> target assembler. You can also use -flto here. >>>>>>>>>> >>>>>>>>>> -fplugin-arg-dragonegg-llvm-ir-optimize=0 disables the standard >>>>>>>>>> set >>>>>>>>>> of >>>>>>>>>> LLVM >>>>>>>>>> optimizations. >>>>>>>>>> >>>>>>>>>> In general, if a front-end can produce LLVM IR then you can do >>>>>>>>>> this, >>>>>>>>>> by >>>>>>>>>> outputting the IR and passing it to "opt". >>>>>>>>>> >>>>>>>>>> Ciao, Duncan. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Regards >>>>>>>>>>> >>>>>>>>>>> Shahzad >>>>>>>>>>> >>>>>>>>>>> On Thu, Jun 7, 2012 at 10:59 PM, Abdul Wahid Memon >>>>>>>>>>> <engrwahidmemon at gmail.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Thanks alot Chad for these quick and fine responses. >>>>>>>>>>>> >>>>>>>>>>>> Regards >>>>>>>>>>>> >>>>>>>>>>>> Abdul >>>>>>>>>>>> >>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:57 PM, Chad Rosier<mcrosier at apple.com> >>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Jun 7, 2012, at 1:53 PM, Abdul Wahid Memon wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks again chad. One more question please. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Is it possible that I can use these optimization using >>>>>>>>>>>>>> dragonegg >>>>>>>>>>>>>> plugin >>>>>>>>>>>>>> somehow? >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> I haven't a clue. Maybe Duncan can answer that? >>>>>>>>>>>>> >>>>>>>>>>>>> Chad >>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Regards >>>>>>>>>>>>>> >>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:51 PM, Chad >>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Jun 7, 2012, at 1:48 PM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:44 PM, Chad >>>>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Jun 7, 2012, at 1:39 PM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thanks alot Chad for quick response. Does this means that, >>>>>>>>>>>>>>>>>> we >>>>>>>>>>>>>>>>>> can >>>>>>>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>> use LLVM optimizations except O1, O2, O3, O4 and >>>>>>>>>>>>>>>>>> unroll-loops >>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>>> clang? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Try using the -debug-pass=Arguments options to see what >>>>>>>>>>>>>>>>> passes >>>>>>>>>>>>>>>>> are >>>>>>>>>>>>>>>>> being run at each optimization level. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Yes, I have seen those optimization but I want to disable >>>>>>>>>>>>>>>> all >>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>> default optimization (-O0) and specify them individually to >>>>>>>>>>>>>>>> test >>>>>>>>>>>>>>>> their >>>>>>>>>>>>>>>> effect. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 1. Generate the bitcode/ir with -O0 >>>>>>>>>>>>>>> 2. Run opt with the optimization in question. You should be >>>>>>>>>>>>>>> able >>>>>>>>>>>>>>> to >>>>>>>>>>>>>>> specify most any pass with opt. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> E.g., >>>>>>>>>>>>>>>>> clang -O[0-3] -mllvm -debug-pass=Arguments foo.c. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> One more thing I would like to know that If I want to >>>>>>>>>>>>>>>>>> process >>>>>>>>>>>>>>>>>> multiple >>>>>>>>>>>>>>>>>> modules with opt at the same time like >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> opt -adce *.bc >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I don't think this will work. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ok. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> then how is it possible with opt in one go, if I process >>>>>>>>>>>>>>>>>> all >>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>> bytecode files within Makefile. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> You should be able to define a rule in the Makefile to >>>>>>>>>>>>>>>>> compile >>>>>>>>>>>>>>>>> your >>>>>>>>>>>>>>>>> bitcode/IR files. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ok. I got the point. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thanks alot >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Chad >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thanks. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 9:22 PM, Chad >>>>>>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On Jun 7, 2012, at 10:59 AM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Hello everyone >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> I am trying to use some LLVM optimizations like -die or >>>>>>>>>>>>>>>>>>>> -adce. >>>>>>>>>>>>>>>>>>>> Is >>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>> possible to use them along clang? >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Or is there a way where these optimization can be passed >>>>>>>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>> "opt" >>>>>>>>>>>>>>>>>>>> tool through clang, if opt is being used by clang behind >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>> scenes? >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> No, opt only works on llvm IR/bitcode. You can generate >>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>> like >>>>>>>>>>>>>>>>>>> this: >>>>>>>>>>>>>>>>>>> clang -c foo.c -emit-llvm -o foo.bc >>>>>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>> clang -S foo.c -emit-llvm -o foo.ll >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Then you can run the optimization(s): >>>>>>>>>>>>>>>>>>> opt -adce foo.bc -o foo-adce.bc >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Then you can compile using clang >>>>>>>>>>>>>>>>>>> clang -c foo-adce.bc -o foo-adce.o >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Chad >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Thanks alot >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Regards >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>>>>>>> LLVM Developers mailing list >>>>>>>>>>>>>>>>>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>>>>>>>>>>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>> >>>> >
Hi,> Yes, they both are exactly the same.then I don't know what is going on. I suggest you send a copy of comb.ll to the list so that we can see for ourselves. Ciao, Duncan.> > Regards > > Shahzad > > On Tue, Jun 12, 2012 at 9:38 AM, Duncan Sands<baldrick at free.fr> wrote: >> Hi, is the comb.ll used here: >> >> >>> $ time lli ./comb.ll >>> >>> then the runtime is >>> >>> real 0m2.671s >>> user 0m2.640s >>> sys 0m0.020s >>> >>> But, if I convert this same file comb,ll in to native binary >> >> >> the same as the comb.ll used here: >> >>> $ clang comb.ll >> >> >> ? >> >> Ciao, Duncan. >> >> >>> >>> and execute it, then the runtime increases alot >>> >>> $ time ./a.out >>> >>> real 0m8.008s >>> user 0m7.964s >>> >>> The binary generated directly by clang have runtime of around 2 >>> seconds while generated after LLVM IR have around 8 secs but LLVM >>> bytecode having same optimizations when executed with lli have runtime >>> of around 2 secs. >>> >>> What steps are exactly taken by clang to produce the binary in order >>> to achieve the runtime of around 2 secs. If it is a question of link >>> time optimizations then how can we achieve that? >>> >>> Best Regards >>> >>> Shahzad >>> >>> On Fri, Jun 8, 2012 at 7:29 PM, Abdul Wahid Memon >>> <engrwahidmemon at gmail.com> wrote: >>>> >>>> Thanks Duncan >>>> >>>> It was really helpful. >>>> >>>> Regards >>>> >>>> Abdul >>>> >>>> On Fri, Jun 8, 2012 at 7:23 PM, Duncan Sands<baldrick at free.fr> wrote: >>>>> >>>>> Hi, >>>>> >>>>> >>>>>> If I compile the program using the following command line i.e. >>>>>> >>>>>> $ clang -O3 -lm *.c >>>>> >>>>> >>>>> >>>>> this may be doing link time optimization. >>>>> >>>>> >>>>>> >>>>>> then >>>>>> >>>>>> $ time ./a.out >>>>>> >>>>>> real 0m2.606s >>>>>> user 0m2.584s >>>>>> sys 0m0.012s >>>>>> >>>>>> BUT, if I use all the optimizations enabled with -O3 but specify them >>>>>> explicity i.e. >>>>> >>>>> >>>>> >>>>> you can just use "opt -O3" here. >>>>> >>>>> >>>>>> >>>>>> for F in *.c ; do B=`basename $F .c` ; gcc >>>>>> -fplugin=/damm/compilers/dragonegg-3.1.src/dragonegg.so -S -o - $F >>>>>> -fplugin-arg-dragonegg-emit-ir | opt -targetlibinfo -no-aa -tbaa >>>>>> -basicaa -globalopt -ipsccp -deadargelim -instcombine -simplifycfg >>>>>> -basiccg -prune-eh -inline -functionattrs -argpromotion >>>>>> -scalarrepl-ssa -domtree -early-cse -simplify-libcalls >>>>>> -lazy-value-info -jump-threading -correlated-propagation -simplifycfg >>>>>> -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops >>>>>> -loop-simplify -lcssa -loop-rotate -licm -lcssa -loop-unswitch >>>>>> -instcombine -scalar-evolution -loop-simplify -lcssa -indvars >>>>>> -loop-idiom -loop-deletion -loop-unroll -memdep -gvn -memdep >>>>>> -memcpyopt -sccp -instcombine -lazy-value-info -jump-threading >>>>>> -correlated-propagation -domtree -memdep -dse -adce -simplifycfg >>>>>> -instcombine -strip-dead-prototypes -globaldce -constmerge -preverify >>>>>> -domtree -verify -o $B.ll ; done >>>>>> >>>>>> $ clang *.ll >>>>> >>>>> >>>>> >>>>> Try clang -O3 *.ll >>>>> >>>>> If it makes a difference then that means that clang is linking all these >>>>> files >>>>> together to form one mega file which it is then optimizing. >>>>> >>>>> Ciao, Duncan. >>>>> >>>>> >>>>>> >>>>>> then >>>>>> >>>>>> time ./a.out >>>>>> >>>>>> real 0m7.791s >>>>>> user 0m7.760s >>>>>> sys 0m0.008s >>>>>> >>>>>> Am I missing something here? >>>>>> >>>>>> Though directly compiling files i.e. >>>>>> >>>>>> $ clang *.c >>>>>> >>>>>> results in >>>>>> >>>>>> time ./a.out >>>>>> >>>>>> real 0m10.167s >>>>>> user 0m10.121s >>>>>> sys 0m0.016s >>>>>> >>>>>> Regards >>>>>> >>>>>> Shahzad >>>>>> >>>>>> On Fri, Jun 8, 2012 at 7:00 PM, Duncan Sands<baldrick at free.fr> >>>>>> wrote: >>>>>>> >>>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> >>>>>>>> I tried it with -o - but its producing an error >>>>>>>> >>>>>>>> gcc: fatal error: cannot specify -o with -c, -S or -E with multiple >>>>>>>> files >>>>>>>> >>>>>>>> What you suggest? >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> what I wrote: >>>>>>> >>>>>>>>> for F in *.c ; do B=`basename $F .c` ; gcc >>>>>>>>> -fplugin=/path/to/dragonegg.so >>>>>>>>> -S -o - $F -fplugin-arg-dragonegg-emit-ir | opt -adce -o $B.ll ; >>>>>>>>> done >>>>>>>>> clang *.ll >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Thanks to the for loop and passing $F to gcc, you are no longer using >>>>>>> gcc >>>>>>> with >>>>>>> multiple files. So if you are getting that message then you are don't >>>>>>> what >>>>>>> I >>>>>>> suggested. >>>>>>> >>>>>>> Ciao, Duncan. >>>>>>> >>>>>>> >>>>>>>>> >>>>>>>>> Ciao, Duncan. >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> $ clang *.s >>>>>>>>>> >>>>>>>>>> Regards >>>>>>>>>> >>>>>>>>>> Shahzad >>>>>>>>>> >>>>>>>>>> On Fri, Jun 8, 2012 at 9:10 AM, Duncan Sands<baldrick at free.fr> >>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Hi Shahzad, >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> Is it possible that we can use LLVM optimization beside O1, O2, >>>>>>>>>>>> O3 >>>>>>>>>>>> along with dragonegg plugin? >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> sure, try this: >>>>>>>>>>> >>>>>>>>>>> gcc -fplugin=path/dragonegg.so ...other_options_here... -S -o - >>>>>>>>>>> -fplugin-arg-dragonegg-emit-ir >>>>>>>>>>> -fplugin-arg-dragonegg-llvm-ir-optimize=0 >>>>>>>>>>> | >>>>>>>>>>> opt -pass1 -pass2 ... >>>>>>>>>>> >>>>>>>>>>> Here -fplugin-arg-dragonegg-emit-ir tells it to output LLVM IR >>>>>>>>>>> rather >>>>>>>>>>> than >>>>>>>>>>> target assembler. You can also use -flto here. >>>>>>>>>>> >>>>>>>>>>> -fplugin-arg-dragonegg-llvm-ir-optimize=0 disables the standard >>>>>>>>>>> set >>>>>>>>>>> of >>>>>>>>>>> LLVM >>>>>>>>>>> optimizations. >>>>>>>>>>> >>>>>>>>>>> In general, if a front-end can produce LLVM IR then you can do >>>>>>>>>>> this, >>>>>>>>>>> by >>>>>>>>>>> outputting the IR and passing it to "opt". >>>>>>>>>>> >>>>>>>>>>> Ciao, Duncan. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Regards >>>>>>>>>>>> >>>>>>>>>>>> Shahzad >>>>>>>>>>>> >>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:59 PM, Abdul Wahid Memon >>>>>>>>>>>> <engrwahidmemon at gmail.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks alot Chad for these quick and fine responses. >>>>>>>>>>>>> >>>>>>>>>>>>> Regards >>>>>>>>>>>>> >>>>>>>>>>>>> Abdul >>>>>>>>>>>>> >>>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:57 PM, Chad Rosier<mcrosier at apple.com> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Jun 7, 2012, at 1:53 PM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks again chad. One more question please. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Is it possible that I can use these optimization using >>>>>>>>>>>>>>> dragonegg >>>>>>>>>>>>>>> plugin >>>>>>>>>>>>>>> somehow? >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> I haven't a clue. Maybe Duncan can answer that? >>>>>>>>>>>>>> >>>>>>>>>>>>>> Chad >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Regards >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:51 PM, Chad >>>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Jun 7, 2012, at 1:48 PM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:44 PM, Chad >>>>>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On Jun 7, 2012, at 1:39 PM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Thanks alot Chad for quick response. Does this means that, >>>>>>>>>>>>>>>>>>> we >>>>>>>>>>>>>>>>>>> can >>>>>>>>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>>> use LLVM optimizations except O1, O2, O3, O4 and >>>>>>>>>>>>>>>>>>> unroll-loops >>>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>>>> clang? >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Try using the -debug-pass=Arguments options to see what >>>>>>>>>>>>>>>>>> passes >>>>>>>>>>>>>>>>>> are >>>>>>>>>>>>>>>>>> being run at each optimization level. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Yes, I have seen those optimization but I want to disable >>>>>>>>>>>>>>>>> all >>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>> default optimization (-O0) and specify them individually to >>>>>>>>>>>>>>>>> test >>>>>>>>>>>>>>>>> their >>>>>>>>>>>>>>>>> effect. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 1. Generate the bitcode/ir with -O0 >>>>>>>>>>>>>>>> 2. Run opt with the optimization in question. You should be >>>>>>>>>>>>>>>> able >>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>> specify most any pass with opt. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> E.g., >>>>>>>>>>>>>>>>>> clang -O[0-3] -mllvm -debug-pass=Arguments foo.c. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> One more thing I would like to know that If I want to >>>>>>>>>>>>>>>>>>> process >>>>>>>>>>>>>>>>>>> multiple >>>>>>>>>>>>>>>>>>> modules with opt at the same time like >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> opt -adce *.bc >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I don't think this will work. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> ok. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> then how is it possible with opt in one go, if I process >>>>>>>>>>>>>>>>>>> all >>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>> bytecode files within Makefile. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> You should be able to define a rule in the Makefile to >>>>>>>>>>>>>>>>>> compile >>>>>>>>>>>>>>>>>> your >>>>>>>>>>>>>>>>>> bitcode/IR files. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> ok. I got the point. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks alot >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Chad >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Thanks. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 9:22 PM, Chad >>>>>>>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> On Jun 7, 2012, at 10:59 AM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Hello everyone >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> I am trying to use some LLVM optimizations like -die or >>>>>>>>>>>>>>>>>>>>> -adce. >>>>>>>>>>>>>>>>>>>>> Is >>>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>> possible to use them along clang? >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Or is there a way where these optimization can be passed >>>>>>>>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>> "opt" >>>>>>>>>>>>>>>>>>>>> tool through clang, if opt is being used by clang behind >>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>> scenes? >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> No, opt only works on llvm IR/bitcode. You can generate >>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>> like >>>>>>>>>>>>>>>>>>>> this: >>>>>>>>>>>>>>>>>>>> clang -c foo.c -emit-llvm -o foo.bc >>>>>>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>>> clang -S foo.c -emit-llvm -o foo.ll >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Then you can run the optimization(s): >>>>>>>>>>>>>>>>>>>> opt -adce foo.bc -o foo-adce.bc >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Then you can compile using clang >>>>>>>>>>>>>>>>>>>> clang -c foo-adce.bc -o foo-adce.o >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Chad >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Thanks alot >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Regards >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>>>>>>>> LLVM Developers mailing list >>>>>>>>>>>>>>>>>>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>>>>>>>>>>>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>> >>>>> >>
Abdul Wahid Memon
2012-Jun-12 10:32 UTC
[LLVMdev] How to use LLVM optimizations with clang
Sure. The comb.ll and data files are attached and can be invoked as the following $ lli comb.ll data -c Regards Shahzad On Tue, Jun 12, 2012 at 12:28 PM, Duncan Sands <baldrick at free.fr> wrote:> Hi, > > >> Yes, they both are exactly the same. > > > then I don't know what is going on. I suggest you send a copy of comb.ll to > the > list so that we can see for ourselves. > > > Ciao, Duncan. > >> >> Regards >> >> Shahzad >> >> On Tue, Jun 12, 2012 at 9:38 AM, Duncan Sands<baldrick at free.fr> wrote: >>> >>> Hi, is the comb.ll used here: >>> >>> >>>> $ time lli ./comb.ll >>>> >>>> then the runtime is >>>> >>>> real 0m2.671s >>>> user 0m2.640s >>>> sys 0m0.020s >>>> >>>> But, if I convert this same file comb,ll in to native binary >>> >>> >>> >>> the same as the comb.ll used here: >>> >>>> $ clang comb.ll >>> >>> >>> >>> ? >>> >>> Ciao, Duncan. >>> >>> >>>> >>>> and execute it, then the runtime increases alot >>>> >>>> $ time ./a.out >>>> >>>> real 0m8.008s >>>> user 0m7.964s >>>> >>>> The binary generated directly by clang have runtime of around 2 >>>> seconds while generated after LLVM IR have around 8 secs but LLVM >>>> bytecode having same optimizations when executed with lli have runtime >>>> of around 2 secs. >>>> >>>> What steps are exactly taken by clang to produce the binary in order >>>> to achieve the runtime of around 2 secs. If it is a question of link >>>> time optimizations then how can we achieve that? >>>> >>>> Best Regards >>>> >>>> Shahzad >>>> >>>> On Fri, Jun 8, 2012 at 7:29 PM, Abdul Wahid Memon >>>> <engrwahidmemon at gmail.com> wrote: >>>>> >>>>> >>>>> Thanks Duncan >>>>> >>>>> It was really helpful. >>>>> >>>>> Regards >>>>> >>>>> Abdul >>>>> >>>>> On Fri, Jun 8, 2012 at 7:23 PM, Duncan Sands<baldrick at free.fr> >>>>> wrote: >>>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> >>>>>>> If I compile the program using the following command line i.e. >>>>>>> >>>>>>> $ clang -O3 -lm *.c >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> this may be doing link time optimization. >>>>>> >>>>>> >>>>>>> >>>>>>> then >>>>>>> >>>>>>> $ time ./a.out >>>>>>> >>>>>>> real 0m2.606s >>>>>>> user 0m2.584s >>>>>>> sys 0m0.012s >>>>>>> >>>>>>> BUT, if I use all the optimizations enabled with -O3 but specify them >>>>>>> explicity i.e. >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> you can just use "opt -O3" here. >>>>>> >>>>>> >>>>>>> >>>>>>> for F in *.c ; do B=`basename $F .c` ; gcc >>>>>>> -fplugin=/damm/compilers/dragonegg-3.1.src/dragonegg.so -S -o - $F >>>>>>> -fplugin-arg-dragonegg-emit-ir | opt -targetlibinfo -no-aa -tbaa >>>>>>> -basicaa -globalopt -ipsccp -deadargelim -instcombine -simplifycfg >>>>>>> -basiccg -prune-eh -inline -functionattrs -argpromotion >>>>>>> -scalarrepl-ssa -domtree -early-cse -simplify-libcalls >>>>>>> -lazy-value-info -jump-threading -correlated-propagation -simplifycfg >>>>>>> -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops >>>>>>> -loop-simplify -lcssa -loop-rotate -licm -lcssa -loop-unswitch >>>>>>> -instcombine -scalar-evolution -loop-simplify -lcssa -indvars >>>>>>> -loop-idiom -loop-deletion -loop-unroll -memdep -gvn -memdep >>>>>>> -memcpyopt -sccp -instcombine -lazy-value-info -jump-threading >>>>>>> -correlated-propagation -domtree -memdep -dse -adce -simplifycfg >>>>>>> -instcombine -strip-dead-prototypes -globaldce -constmerge -preverify >>>>>>> -domtree -verify -o $B.ll ; done >>>>>>> >>>>>>> $ clang *.ll >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Try clang -O3 *.ll >>>>>> >>>>>> If it makes a difference then that means that clang is linking all >>>>>> these >>>>>> files >>>>>> together to form one mega file which it is then optimizing. >>>>>> >>>>>> Ciao, Duncan. >>>>>> >>>>>> >>>>>>> >>>>>>> then >>>>>>> >>>>>>> time ./a.out >>>>>>> >>>>>>> real 0m7.791s >>>>>>> user 0m7.760s >>>>>>> sys 0m0.008s >>>>>>> >>>>>>> Am I missing something here? >>>>>>> >>>>>>> Though directly compiling files i.e. >>>>>>> >>>>>>> $ clang *.c >>>>>>> >>>>>>> results in >>>>>>> >>>>>>> time ./a.out >>>>>>> >>>>>>> real 0m10.167s >>>>>>> user 0m10.121s >>>>>>> sys 0m0.016s >>>>>>> >>>>>>> Regards >>>>>>> >>>>>>> Shahzad >>>>>>> >>>>>>> On Fri, Jun 8, 2012 at 7:00 PM, Duncan Sands<baldrick at free.fr> >>>>>>> wrote: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> >>>>>>>>> I tried it with -o - but its producing an error >>>>>>>>> >>>>>>>>> gcc: fatal error: cannot specify -o with -c, -S or -E with multiple >>>>>>>>> files >>>>>>>>> >>>>>>>>> What you suggest? >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> what I wrote: >>>>>>>> >>>>>>>>>> for F in *.c ; do B=`basename $F .c` ; gcc >>>>>>>>>> -fplugin=/path/to/dragonegg.so >>>>>>>>>> -S -o - $F -fplugin-arg-dragonegg-emit-ir | opt -adce -o $B.ll ; >>>>>>>>>> done >>>>>>>>>> clang *.ll >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Thanks to the for loop and passing $F to gcc, you are no longer >>>>>>>> using >>>>>>>> gcc >>>>>>>> with >>>>>>>> multiple files. So if you are getting that message then you are >>>>>>>> don't >>>>>>>> what >>>>>>>> I >>>>>>>> suggested. >>>>>>>> >>>>>>>> Ciao, Duncan. >>>>>>>> >>>>>>>> >>>>>>>>>> >>>>>>>>>> Ciao, Duncan. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> $ clang *.s >>>>>>>>>>> >>>>>>>>>>> Regards >>>>>>>>>>> >>>>>>>>>>> Shahzad >>>>>>>>>>> >>>>>>>>>>> On Fri, Jun 8, 2012 at 9:10 AM, Duncan Sands<baldrick at free.fr> >>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Hi Shahzad, >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> Is it possible that we can use LLVM optimization beside O1, O2, >>>>>>>>>>>>> O3 >>>>>>>>>>>>> along with dragonegg plugin? >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> sure, try this: >>>>>>>>>>>> >>>>>>>>>>>> gcc -fplugin=path/dragonegg.so ...other_options_here... -S -o - >>>>>>>>>>>> -fplugin-arg-dragonegg-emit-ir >>>>>>>>>>>> -fplugin-arg-dragonegg-llvm-ir-optimize=0 >>>>>>>>>>>> | >>>>>>>>>>>> opt -pass1 -pass2 ... >>>>>>>>>>>> >>>>>>>>>>>> Here -fplugin-arg-dragonegg-emit-ir tells it to output LLVM IR >>>>>>>>>>>> rather >>>>>>>>>>>> than >>>>>>>>>>>> target assembler. You can also use -flto here. >>>>>>>>>>>> >>>>>>>>>>>> -fplugin-arg-dragonegg-llvm-ir-optimize=0 disables the standard >>>>>>>>>>>> set >>>>>>>>>>>> of >>>>>>>>>>>> LLVM >>>>>>>>>>>> optimizations. >>>>>>>>>>>> >>>>>>>>>>>> In general, if a front-end can produce LLVM IR then you can do >>>>>>>>>>>> this, >>>>>>>>>>>> by >>>>>>>>>>>> outputting the IR and passing it to "opt". >>>>>>>>>>>> >>>>>>>>>>>> Ciao, Duncan. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Regards >>>>>>>>>>>>> >>>>>>>>>>>>> Shahzad >>>>>>>>>>>>> >>>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:59 PM, Abdul Wahid Memon >>>>>>>>>>>>> <engrwahidmemon at gmail.com> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks alot Chad for these quick and fine responses. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Regards >>>>>>>>>>>>>> >>>>>>>>>>>>>> Abdul >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:57 PM, Chad >>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Jun 7, 2012, at 1:53 PM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thanks again chad. One more question please. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Is it possible that I can use these optimization using >>>>>>>>>>>>>>>> dragonegg >>>>>>>>>>>>>>>> plugin >>>>>>>>>>>>>>>> somehow? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I haven't a clue. Maybe Duncan can answer that? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Chad >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Regards >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:51 PM, Chad >>>>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Jun 7, 2012, at 1:48 PM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 10:44 PM, Chad >>>>>>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On Jun 7, 2012, at 1:39 PM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Thanks alot Chad for quick response. Does this means >>>>>>>>>>>>>>>>>>>> that, >>>>>>>>>>>>>>>>>>>> we >>>>>>>>>>>>>>>>>>>> can >>>>>>>>>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>>>> use LLVM optimizations except O1, O2, O3, O4 and >>>>>>>>>>>>>>>>>>>> unroll-loops >>>>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>>>>> clang? >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Try using the -debug-pass=Arguments options to see what >>>>>>>>>>>>>>>>>>> passes >>>>>>>>>>>>>>>>>>> are >>>>>>>>>>>>>>>>>>> being run at each optimization level. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Yes, I have seen those optimization but I want to disable >>>>>>>>>>>>>>>>>> all >>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>> default optimization (-O0) and specify them individually >>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>> test >>>>>>>>>>>>>>>>>> their >>>>>>>>>>>>>>>>>> effect. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> 1. Generate the bitcode/ir with -O0 >>>>>>>>>>>>>>>>> 2. Run opt with the optimization in question. You should >>>>>>>>>>>>>>>>> be >>>>>>>>>>>>>>>>> able >>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>> specify most any pass with opt. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> E.g., >>>>>>>>>>>>>>>>>>> clang -O[0-3] -mllvm -debug-pass=Arguments foo.c. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> One more thing I would like to know that If I want to >>>>>>>>>>>>>>>>>>>> process >>>>>>>>>>>>>>>>>>>> multiple >>>>>>>>>>>>>>>>>>>> modules with opt at the same time like >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> opt -adce *.bc >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> I don't think this will work. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> ok. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> then how is it possible with opt in one go, if I process >>>>>>>>>>>>>>>>>>>> all >>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>> bytecode files within Makefile. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> You should be able to define a rule in the Makefile to >>>>>>>>>>>>>>>>>>> compile >>>>>>>>>>>>>>>>>>> your >>>>>>>>>>>>>>>>>>> bitcode/IR files. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> ok. I got the point. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thanks alot >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Chad >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Thanks. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> On Thu, Jun 7, 2012 at 9:22 PM, Chad >>>>>>>>>>>>>>>>>>>> Rosier<mcrosier at apple.com> >>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> On Jun 7, 2012, at 10:59 AM, Abdul Wahid Memon wrote: >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Hello everyone >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> I am trying to use some LLVM optimizations like -die >>>>>>>>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>>>>> -adce. >>>>>>>>>>>>>>>>>>>>>> Is >>>>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>>> possible to use them along clang? >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Or is there a way where these optimization can be >>>>>>>>>>>>>>>>>>>>>> passed >>>>>>>>>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>> "opt" >>>>>>>>>>>>>>>>>>>>>> tool through clang, if opt is being used by clang >>>>>>>>>>>>>>>>>>>>>> behind >>>>>>>>>>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>>> scenes? >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> No, opt only works on llvm IR/bitcode. You can >>>>>>>>>>>>>>>>>>>>> generate >>>>>>>>>>>>>>>>>>>>> it >>>>>>>>>>>>>>>>>>>>> like >>>>>>>>>>>>>>>>>>>>> this: >>>>>>>>>>>>>>>>>>>>> clang -c foo.c -emit-llvm -o foo.bc >>>>>>>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>>>>> clang -S foo.c -emit-llvm -o foo.ll >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Then you can run the optimization(s): >>>>>>>>>>>>>>>>>>>>> opt -adce foo.bc -o foo-adce.bc >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Then you can compile using clang >>>>>>>>>>>>>>>>>>>>> clang -c foo-adce.bc -o foo-adce.o >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Chad >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Thanks alot >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Regards >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Shahzad >>>>>>>>>>>>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>>>>>>>>>>>> LLVM Developers mailing list >>>>>>>>>>>>>>>>>>>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>>>>>>>>>>>>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>> >>> >-------------- next part -------------- A non-text attachment was scrubbed... Name: comb.ll Type: application/octet-stream Size: 92552 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120612/738865c9/attachment.obj> -------------- next part -------------- A non-text attachment was scrubbed... Name: data Type: application/octet-stream Size: 270015 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120612/738865c9/attachment-0001.obj>