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 *.llThanks 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-08 17:21 UTC
[LLVMdev] How to use LLVM optimizations with clang
Hello Duncan Sorry for the mistake. Actually that error occurred when I was compiling all the files at once, NOT in for loop. The for loop is working perfectly as it is dealing with individual files. I have now one new issue. Let me specify it briefly. If I compile the program using the following command line i.e. $ clang -O3 -lm *.c 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. 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 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,> If I compile the program using the following command line i.e. > > $ clang -O3 -lm *.cthis 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 *.llTry 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 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>> >>>> >>