Minor speedup by avoiding callbacks to functions already generated

llvm-svn: 6052
diff --git a/llvm/lib/ExecutionEngine/JIT/Callback.cpp b/llvm/lib/ExecutionEngine/JIT/Callback.cpp
index 75abf43..fc13a10 100644
--- a/llvm/lib/ExecutionEngine/JIT/Callback.cpp
+++ b/llvm/lib/ExecutionEngine/JIT/Callback.cpp
@@ -46,7 +46,6 @@
 #endif
 }
 
-
 void VM::registerCallback() {
   TheVM = this;
 }
diff --git a/llvm/lib/ExecutionEngine/JIT/Emitter.cpp b/llvm/lib/ExecutionEngine/JIT/Emitter.cpp
index d6f75c0..69e2453 100644
--- a/llvm/lib/ExecutionEngine/JIT/Emitter.cpp
+++ b/llvm/lib/ExecutionEngine/JIT/Emitter.cpp
@@ -131,11 +131,15 @@
 
 void Emitter::emitGlobalAddress(GlobalValue *V, bool isPCRelative) {
   if (isPCRelative) { // must be a call, this is a major hack!
-    // FIXME: Try looking up the function to see if it is already compiled!
-    TheVM.addFunctionRef(CurByte, cast<Function>(V));
+    // Try looking up the function to see if it is already compiled!
+    if (void *Addr = TheVM.getPointerToGlobalIfAvailable(V)) {
+      emitAddress(Addr, isPCRelative);
+    } else {  // Function has not yet been code generated!
+      TheVM.addFunctionRef(CurByte, cast<Function>(V));
 
-    // Delayed resolution...
-    emitAddress((void*)VM::CompilationCallback, isPCRelative);
+      // Delayed resolution...
+      emitAddress((void*)VM::CompilationCallback, isPCRelative);
+    }
   } else {
     emitAddress(TheVM.getPointerToGlobal(V), isPCRelative);
   }