[LLVMdev] How to use LLVM optimizations with clang

Duncan Sands baldrick at free.fr
Fri Jun 8 10:00:59 PDT 2012


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
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>
>>




More information about the llvm-dev mailing list