actually, just eliminate PCRelGVRequiresExtraLoad. It makes the code
authorChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 05:48:03 +0000 (05:48 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 05:48:03 +0000 (05:48 +0000)
more complex and slow than just directly testing what we care about.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75231 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86FastISel.cpp
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86Subtarget.cpp
lib/Target/X86/X86Subtarget.h

index bbf773871b0c55598e78b9791be342529f5fb9f2..6359a4bef48c19c2c5ff35dd56c302f2a37be42f 100644 (file)
@@ -587,7 +587,7 @@ bool X86FastISel::X86SelectCallAddress(Value *V, X86AddressMode &AM) {
         (AM.Base.Reg != 0 || AM.IndexReg != 0))
       return false;
 
-    // Can't handle TLS yet.
+    // Can't handle TLS or DLLImport.
     if (GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV))
       if (GVar->isThreadLocal() || GVar->hasDLLImportLinkage())
         return false;
@@ -597,7 +597,6 @@ bool X86FastISel::X86SelectCallAddress(Value *V, X86AddressMode &AM) {
     
     // No ABI requires an extra load for anything other than DLLImport, which
     // we rejected above. Return a direct reference to the global.
-    assert(!Subtarget->PCRelGVRequiresExtraLoad(GV, TM));
     if (Subtarget->isPICStyleRIPRel()) {
       // Use rip-relative addressing if we can.  Above we verified that the
       // base and index registers are unused.
index 5e615484028cde7783184bd028e166d2ce62af39..40cd608ef9e86169549ccea30295d5ab3f8e697e 100644 (file)
@@ -1902,7 +1902,7 @@ SDValue X86TargetLowering::LowerCALL(SDValue Op, SelectionDAG &DAG) {
     // We should use extra load for direct calls to dllimported functions in
     // non-JIT mode.
     GlobalValue *GV = G->getGlobal();
-    if (!Subtarget->PCRelGVRequiresExtraLoad(GV, getTargetMachine())) {
+    if (!GV->hasDLLImportLinkage()) {
       unsigned char OpFlags = 0;
     
       // On ELF targets, in both X86-64 and X86-32 mode, direct calls to
index 6eb0235e15dadc304ee06b32aea02053e7412903..d966e34de77cc4a2b9b2c18d4ea4b329b8d44522 100644 (file)
@@ -72,19 +72,6 @@ bool X86Subtarget::GVRequiresExtraLoad(const GlobalValue *GV,
   return false;
 }
 
-/// PCRelGVRequiresExtraLoad - True if accessing the GV from a PC-relative
-/// operand like a call target requires an extra load.
-bool X86Subtarget::PCRelGVRequiresExtraLoad(const GlobalValue *GV,
-                                            const TargetMachine &TM) const {
-  // Windows targets only require an extra load for DLLImport linkage values,
-  // and they need these regardless of whether we're in PIC mode or not.
-  if (isTargetCygMing() || isTargetWindows())
-    return GV->hasDLLImportLinkage();
-
-  return false;
-}
-
-
 /// True if accessing the GV requires a register.  This is a superset of the
 /// cases where GVRequiresExtraLoad is true.  Some variations of PIC require
 /// a register, but not an extra load.
index b2e518ed39f754bbed5135c8e0d7a7421ea2e4d5..7148d0d8b67a77caa5ecdd5dcb29ddafe73af912 100644 (file)
@@ -204,12 +204,6 @@ public:
   bool GVRequiresExtraLoad(const GlobalValue* GV, const TargetMachine &TM,
                            bool isDirectCall) const;
 
-  /// PCRelGVRequiresExtraLoad - True if accessing the GV from a PC-relative
-  /// operand like a call target requires an extra load.
-  bool PCRelGVRequiresExtraLoad(const GlobalValue *GV,
-                                const TargetMachine &TM) const;
-  
-  
   /// True if accessing the GV requires a register.  This is a superset of the
   /// cases where GVRequiresExtraLoad is true.  Some variations of PIC require
   /// a register, but not an extra load.