[PATCH] Avoid JIT recursive compilation

Yaron Keren yaron.keren at gmail.com
Sun Jun 22 02:51:09 PDT 2014


Recursion not needed, just get the aliasee and continue.

http://reviews.llvm.org/D4244

Files:
  lib/ExecutionEngine/JIT/JITEmitter.cpp
  test/ExecutionEngine/test-alias.ll

Index: lib/ExecutionEngine/JIT/JITEmitter.cpp
===================================================================
--- lib/ExecutionEngine/JIT/JITEmitter.cpp
+++ lib/ExecutionEngine/JIT/JITEmitter.cpp
@@ -691,9 +691,11 @@
 
   if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) {
     // We can only handle simple cases.
-    if (GlobalValue *GV = getSimpleAliasee(GA->getAliasee()))
-      return TheJIT->getPointerToGlobal(GV);
-    return nullptr;
+    if (GlobalValue *GV = getSimpleAliasee(GA->getAliasee())) {
+      V = getSimpleAliasee(GA->getAliasee());
+      if (!V)
+        return nullptr;
+    }
   }
 
   // If we have already compiled the function, return a pointer to its body.
Index: test/ExecutionEngine/test-alias.ll
===================================================================
--- test/ExecutionEngine/test-alias.ll
+++ test/ExecutionEngine/test-alias.ll
@@ -0,0 +1,23 @@
+; RUN: %lli %s > /dev/null
+
+%class.C = type { i32 (...)** }
+
+ at _ZN1CD1Ev = alias void (%class.C*)* @_ZN1CD2Ev
+
+define x86_thiscallcc void @_ZN1CD2Ev(%class.C* %this) unnamed_addr #0 align 2 {
+entry:
+  %this.addr = alloca %class.C*, align 4
+  store %class.C* %this, %class.C** %this.addr, align 4
+  %this1 = load %class.C** %this.addr
+  ret void
+}
+
+define i32 @main() #1 {
+entry:
+  %retval = alloca i32, align 4
+  %c = alloca %class.C, align 4
+  call x86_thiscallcc void @_ZN1CD1Ev(%class.C* %c)
+  store i32 0, i32* %retval
+  %0 = load i32* %retval
+  ret i32 %0
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4244.10727.patch
Type: text/x-patch
Size: 1481 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140622/4e000f07/attachment.bin>


More information about the llvm-commits mailing list