[llvm-dev] What is ConstantExpr?
Matthias Braun via llvm-dev
llvm-dev at lists.llvm.org
Fri Mar 17 16:04:55 PDT 2017
> On Mar 9, 2017, at 5:28 AM, Zeson Wu via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>
> Hi, All.
>
> Does anybody know about ConstantExpr in llvm? What's it?
The short version is: Some values can stand on their own in llvm independently of a basic block or a function. These include things like numbers, addresses of global variables or functions, etc. You can even do computations on them giving you ConstantExpr. Take for example:
int array[10];
int *x = &array + 5;
giving this llvm IR:
@array = common global [10 x i32] zeroinitializer, align 16
@x = global i32* bitcast (i8* getelementptr (i8, i8* bitcast ([10 x i32]* @array to i8*), i64 20) to i32*), align 8
and this assembly:
.globl _x ## @x
.p2align 3
_x:
.quad _array+20
They will be lowered at various places (some in the backend, some by the linker, some by the dynamic loader) but will be a constant value when the program is loaded.
- Matthias
More information about the llvm-dev
mailing list