When lowering direct calls, lower them to use a targetglobaladress directly
[oota-llvm.git] / lib / Target / PowerPC / PPCISelLowering.cpp
index 30525cffd067ea00f694f98850fa15518159caf1..d196c10fae772d8a83a299261e43376973703088 100644 (file)
@@ -691,6 +691,11 @@ PPCTargetLowering::LowerCallTo(SDOperand Chain,
     RetVals.push_back(ActualRetTyVT);
   RetVals.push_back(MVT::Other);
   
+  // If the callee is a GlobalAddress node (quite common, every direct call is)
+  // turn it into a TargetGlobalAddress node so that legalize doesn't hack it.
+  if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
+    Callee = DAG.getTargetGlobalAddress(G->getGlobal(), MVT::i32);
+  
   SDOperand TheCall = SDOperand(DAG.getCall(RetVals,
                                             Chain, Callee, args_to_use), 0);
   Chain = TheCall.getValue(RetTyVT != MVT::isVoid);