[llvm-dev] What is ConstantExpr?
Zeson Wu via llvm-dev
llvm-dev at lists.llvm.org
Thu Mar 9 05:28:28 PST 2017
Hi, All.
Does anybody know about ConstantExpr in llvm? What's it?
Since it always appears after llvm optimization such as -O2 level, what is
it supposed to be to codegen? I am wondering it represents constant value
which can be determined or computed at compile-time(actually is link-time)
to improve performance. Although we do not know the actual constant value
util the object file is linked.
Here is a my example, but there is still existing code to compute value in
run-time.
cat a.C
int n=5;
int main(){
long a = (long)&n+7;
int b = a;
return b;
}
clang++ a.C -c -O2 -emit-llvm -S;cat a.ll
; ModuleID = 'a.C'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.12.0"
@n = global i32 5, align 4
; Function Attrs: norecurse nounwind readnone ssp uwtable
define i32 @main() #0 {
ret i32 trunc (i64 add (i64 ptrtoint (i32* @n to i64), i64 7) to i32)
}
clang++ a.C -c -O2;objdump -d a.O
a.O: file format Mach-O 64-bit x86-64
Disassembly of section __TEXT,__text:
_main:
0: 55 pushq %rbp
1: 48 89 e5 movq %rsp, %rbp
4: 48 8d 05 00 00 00 00 leaq (%rip), %rax
b: 83 c0 07 *addl $7, %eax*
e: 5d popq %rbp
f: c3 retq
I am confused about what is its functionality in llvm?
Thanks.
---------
Zeson
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170309/cc02b2be/attachment.html>
More information about the llvm-dev
mailing list