* Materialize GlobalAddress and ExternalSym with MOV32ri rather than
  LEA32r.
* Do not lower GlobalAddress to TargetGlobalAddress. Let isel does it.

llvm-svn: 25246
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 25ac370..8b15727 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -1723,8 +1723,8 @@
                        DAG.getValueType(AVT), InFlag);
   }
   case ISD::GlobalAddress: {
+    SDOperand Result;
     GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
-    SDOperand GVOp = DAG.getTargetGlobalAddress(GV, getPointerTy());
     // For Darwin, external and weak symbols are indirect, so we want to load
     // the value at address GV, not the value of GV itself.  This means that
     // the GlobalAddress must be in the base or index register of the address,
@@ -1732,11 +1732,10 @@
     if (getTargetMachine().
         getSubtarget<X86Subtarget>().getIndirectExternAndWeakGlobals() &&
         (GV->hasWeakLinkage() || GV->isExternal()))
-      return DAG.getLoad(MVT::i32, DAG.getEntryNode(),
-                         GVOp, DAG.getSrcValue(NULL));
-    else
-      return GVOp;
-    break;
+      Result = DAG.getLoad(MVT::i32, DAG.getEntryNode(),
+                           DAG.getTargetGlobalAddress(GV, getPointerTy()),
+                           DAG.getSrcValue(NULL));
+    return Result;
   }
   }
 }