[LLVMdev] Prevent instruction elimination

Devang Patel dpatel at apple.com
Mon Oct 25 09:55:39 PDT 2010


On Oct 25, 2010, at 9:45 AM, Xinfinity wrote:

> Devang Patel wrote:
>> 
>> 
>> Use of metadata will not prevent optimizer from removing an instruction.
>> Actually, that is the corner stone of LLVM metadata design. 
>> 
>> I am curious, what information you want to carry and until what point ?
>> -
>> Devang
>> 
>> 
> 
> I want to handle new pragma inserted in the C/C++ source code and to adapt
> clang to transform them in metadata information. I want to keep this
> information until I run some passes on the *.bc files and manipulate the
> code. Then, I delete those "dummy" instructions. 
> I want to transform this:
> #pragma my_pragma {
> 
> C/C++ code
> C/C++ code
> }
> 
> into 
> LLVM_dummy_inst1 , !metadata_info !0
> optimized LLVM code
> optimized LLVM code
> LLVM_dummy_inst2, !metadata_info !1
> 
> but if I run this with clang -O2 or with opt -O2, my dummy_inst are removed,
> so I cannot find the pragmas in the LLVM IR.
> 
> I know that metadata will not prevent the elimination, but I am asking if
> there is any way to prevent this, or what kind of instructions I could use
> to have a minimal influence on the optimizers.

What are you going to do if "optimized LLVM code" is hoisted above or sinked below LLVM_dummy_inst by the optimizer ? It seems you are looking for a way communicate some info for a block of instructions. If that is the case then one solution is to extract interesting block of instructions in a separate function and make sure that function is not inlined. If this is not feasible than attaching your info with each instructions in "optimized LLVM code" block is better than trying to find artificial barriers to communicate some info.
-
Devang



More information about the llvm-dev mailing list