[LLVMdev] Does getelementptr get optimized in compile-time?

Duncan Sands baldrick at free.fr
Thu Jan 3 01:14:40 PST 2013


Hi Journeyer,

On 03/01/13 10:12, Journeyer J. Joh wrote:
> Hello Duncan Sands,
>
>> If however the operands are all numerical values (eg the pointer operand is "null" and the others are numbers like "1") then it will be turned into a number by the optimizers.
>
> I think my case is stated above among your answer.
>
> http://nondot.org/sabre/LLVMNotes/SizeOf-OffsetOf-VariableSizedStructs.txt
>
> There is a brief document about using getelmentptr trick above.
> And I was wondering something similar to this case.
>
>    %Size = getelementptr %T* null, int 1
>    %SizeI = cast %T* %Size to uint

yes, this kind of thing will be turned into a number by the optimizers, assuming
that data layout information is available (since the optimizers need to know
the size of a %T to do this optimization).

Ciao, Duncan.

>
> I understood that for this case, getelementptr will be collapsed to a
> number during optimization. It is also explained in the brief document
> above. I didn't understood by the document at that time.
>
> OK. Thank you very much. I understood very well.
>
> Sincerely
> Journeyer
>
>
> 2013/1/3 Duncan Sands <baldrick at free.fr>:
>> Hi Journeyer,
>>
>>
>>> I've got a question about getelementptr.
>>>
>>>
>>> I've been told that getelementptr is evaluated in compile-time NOT in
>>> run-time.
>>
>>
>> this is impossible if the arguments are not constants.  If they are
>> constant,
>> then the optimizers will turn a getelementptr instruction into a
>> getelementptr
>> constant expression
>> (http://llvm.org/docs/LangRef.html#constant-expressions).
>> Even so it usually isn't evaluable at compile time, since typically the
>> pointer
>> operand is a global variable for which the address is only known when the
>> program loader loads the final executable into memory.  If however the
>> operands
>> are all numerical values (eg the pointer operand is "null" and the others
>> are
>> numbers like "1") then it will be turned into a number by the optimizers.
>>
>> Ciao, Duncan.
>>
>>
>>>
>>> So I tested it with clang web compiler below.
>>> http://llvm.org/demo/index.cgi
>>>
>>> But with LTO nor Standard, neither one optimize getelementptr out.
>>>
>>> Does getelementptr get evaluated in compile-time?
>>> Or doesn't it get executed in run-time? (I believed so. Now I am
>>> wondering.)
>>>
>>> Thank you in advance.
>>>
>>
>> _______________________________________________
>> 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