[LLVMdev] How to use LLVM optimizations with clang

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


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