[LLVMdev] lower-lever IR (A-normal form)
criswell at illinois.edu
Wed Jul 10 12:33:56 PDT 2013
On 7/10/13 1:35 PM, Eirini _ wrote:
> i would like to ask you, if i can get a lower-level representation
> than the llvm IR.
> For example, having the following instruction in the llvm IR,
> call void @llvm.memcpy.i32(i8* %19, i8* getelementptr inbounds ([2 x
> [2 x [3 x i8]]]* @main.s, i32 0, i32 0, i32 0, i32 0), i32 12, i32 1)
As Tim has pointed out, the "nested" getelementptr isn't really a nested
instruction. It is a compile-time constant. The reason why it looks
like a GEP is that it is in a symbolic form.
If you really want to convert these constants into instructions, take a
look at the BreakConstantGEPs pass in SAFECode. It converts some (but
not all) constant expressions into LLVM instructions and will alleviate
the "nesting" that you see.
As Tim also said, this conversion is not an optimization. You should
not expect the resulting IR to compile into efficient code.
-- John T.
> i would like to get something like this (in _A-normal form_ (without
> nested instructions):
> *%temp* = i8* getelementptr inbounds ([2 x [2 x [3 x i8]]]* @main.s,
> i32 0, i32 0, i32 0, i32 0)
> call void @llvm.memcpy.i32(i8* %19,* %temp*, i32 12, i32 1)
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev