Implement indirect function calls

llvm-svn: 5024
diff --git a/llvm/lib/Target/X86/InstSelectSimple.cpp b/llvm/lib/Target/X86/InstSelectSimple.cpp
index d9759c4..4a44dbf 100644
--- a/llvm/lib/Target/X86/InstSelectSimple.cpp
+++ b/llvm/lib/Target/X86/InstSelectSimple.cpp
@@ -577,8 +577,14 @@
 	  break;
 	}
     }
-  // Emit a CALL instruction with PC-relative displacement.
-  BuildMI (BB, X86::CALLpcrel32, 1).addPCDisp (CI.getCalledValue ());
+
+  if (Function *F = CI.getCalledFunction()) {
+    // Emit a CALL instruction with PC-relative displacement.
+    BuildMI(BB, X86::CALLpcrel32, 1).addPCDisp(F);
+  } else {
+    unsigned Reg = getReg(CI.getCalledValue());
+    BuildMI(BB, X86::CALLr32, 1).addReg(Reg);
+  }
 
   // Adjust the stack by `bytesPushed' amount if non-zero
   if (bytesPushed > 0)