add a predicate to determine if a global var reference requires a
authorChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 07:33:30 +0000 (07:33 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 07:33:30 +0000 (07:33 +0000)
PIC-base to be added in.

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

lib/Target/X86/X86InstrInfo.h

index 83f63452750e1c30b2cfa73e3fbf2ade1435de78..75f366753f8e070472c5a99f654ab58f5b05372c 100644 (file)
@@ -199,6 +199,22 @@ inline static bool isGlobalStubReference(unsigned char TargetFlag) {
     return false;
   }
 }
+
+/// isGlobalRelativeToPICBase - Return true if the specified global value
+/// reference is relative to a 32-bit PIC base (X86ISD::GlobalBaseReg).  If this
+/// is true, the addressing mode has the PIC base register added in (e.g. EBX).
+inline static bool isGlobalRelativeToPICBase(unsigned char TargetFlag) {
+  switch (TargetFlag) {
+  case X86II::MO_GOTOFF:                         // isPICStyleGOT: local global.
+  case X86II::MO_GOT:                            // isPICStyleGOT: other global.
+  case X86II::MO_PIC_BASE_OFFSET:                // Darwin local global.
+  case X86II::MO_DARWIN_NONLAZY_PIC_BASE:        // Darwin/32 external global.
+  case X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE: // Darwin/32 hidden global.
+    return true;
+  default:
+    return false;
+  }
+}
  
 /// X86II - This namespace holds all of the target specific flags that
 /// instruction info tracks.