<div dir="ltr">Hi, All.<div><br></div><div>Does anybody know about ConstantExpr in llvm? What's it?</div><div>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.<br><br>Here is a my example, but there is still existing code to compute value in run-time.<br><br clear="all"><div><div>cat a.C</div><div>int n=5;</div><div>int main(){</div><div>  long a = (long)&n+7;</div><div>  int b = a;</div><div>  return b;</div><div>}<br><br><div>clang++ a.C  -c -O2 -emit-llvm -S;cat a.ll</div><div>; ModuleID = 'a.C'</div><div>target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"</div><div>target triple = "x86_64-apple-macosx10.12.0"</div><div><br></div><div>@n = global i32 5, align 4</div><div><br></div><div>; Function Attrs: norecurse nounwind readnone ssp uwtable</div><div>define i32 @main() #0 {</div><div>  ret i32 trunc (i64 add (i64 ptrtoint (i32* @n to i64), i64 7) to i32)</div><div>}</div><br><div>clang++ a.C  -c -O2;objdump -d a.O</div><div><br></div><div>a.O:<span class="gmail-Apple-tab-span" style="white-space:pre">       </span>file format Mach-O 64-bit x86-64</div><div><br></div><div>Disassembly of section __TEXT,__text:</div><div>_main:</div><div>       0:<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>55 <span class="gmail-Apple-tab-span" style="white-space:pre">   </span>pushq<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>%rbp</div><div>       1:<span class="gmail-Apple-tab-span" style="white-space:pre">      </span>48 89 e5 <span class="gmail-Apple-tab-span" style="white-space:pre">     </span>movq<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>%rsp, %rbp</div><div>       4:<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>48 8d 05 00 00 00 00 <span class="gmail-Apple-tab-span" style="white-space:pre"> </span>leaq<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>(%rip), %rax</div><div>       b:<span class="gmail-Apple-tab-span" style="white-space:pre">      </span>83 c0 07 <span class="gmail-Apple-tab-span" style="white-space:pre">     </span><b>addl<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>$7, %eax</b></div><div>       e:<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>5d <span class="gmail-Apple-tab-span" style="white-space:pre">   </span>popq<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>%rbp</div><div>       f:<span class="gmail-Apple-tab-span" style="white-space:pre">      </span>c3 <span class="gmail-Apple-tab-span" style="white-space:pre">   </span>retq</div><br></div></div><div>I am confused about what is its functionality in llvm?<br></div><div><br></div>Thanks.<br>---------<br></div><div><br><div class="gmail_signature"><div dir="ltr">Zeson<br></div></div>
</div></div>