add a new predicate method that says whether a GlobalValue
authorChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 06:06:17 +0000 (06:06 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 10 Jul 2009 06:06:17 +0000 (06:06 +0000)
MachineOperand is a reference to a stub, not a reference to the
global variable itself.  Look no context needed!

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

lib/Target/X86/X86InstrInfo.h

index 83f3f09797d7dc5d50bcecfff6516b72208d7d30..0838739468e0916ed3e34eca673185fee70fdfe1 100644 (file)
@@ -178,8 +178,34 @@ namespace X86II {
     /// indicates that the reference is actually to "FOO$non_lazy_ptr -PICBASE",
     /// which is a PIC-base-relative reference to a hidden dyld lazy pointer
     /// stub.
-    MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE = 17,
+    MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE = 17
     
+  };
+}
+
+/// isGlobalStubReference - Return true if the specified GlobalValue operand is
+/// a reference to a stub for a global, not the global itself.
+inline static bool isGlobalStubReference(const MachineOperand &MO) {
+  assert(MO.isGlobal() && "Predicate only works on globalvalue operands");
+  switch (MO.getTargetFlags()) {
+  case X86II::MO_DLLIMPORT: // dllimport stub.
+  case X86II::MO_GOTPCREL:  // rip-relative GOT reference.
+  case X86II::MO_GOT:       // normal GOT reference.
+  case X86II::MO_DARWIN_NONLAZY_PIC_BASE:        // Normal $non_lazy_ptr ref.
+  case X86II::MO_DARWIN_NONLAZY:                 // Normal $non_lazy_ptr ref.
+  case X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE: // Hidden $non_lazy_ptr ref.
+  case X86II::MO_DARWIN_HIDDEN_NONLAZY:          // Hidden $non_lazy_ptr ref.
+    return true;
+  default:
+    return false;
+  }
+}
+/// X86II - This namespace holds all of the target specific flags that
+/// instruction info tracks.
+///
+namespace X86II {
+  enum {
     //===------------------------------------------------------------------===//
     // Instruction encodings.  These are the standard/most common forms for X86
     // instructions.