[llvm-dev] What is ConstantExpr?

Zeson Wu via llvm-dev
Thu, 09 Mar 2017 13:28:28 -0000

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>