[NVPTX] Re-enable assembly printing support for inline assembly
[oota-llvm.git] / lib / Target / SystemZ / SystemZInstrInfo.h
index 1392745672f42e92956db72c6f15c16c91e510ed..3c4e8af0e61411b56722d4871d7eb1072bbf43dc 100644 (file)
@@ -28,20 +28,20 @@ class SystemZTargetMachine;
 namespace SystemZII {
   enum {
     // See comments in SystemZInstrFormats.td.
-    SimpleBDXLoad   = (1 << 0),
-    SimpleBDXStore  = (1 << 1),
-    Has20BitOffset  = (1 << 2),
-    HasIndex        = (1 << 3),
-    Is128Bit        = (1 << 4),
-    AccessSizeMask  = (31 << 5),
-    AccessSizeShift = 5,
-    CCValuesMask    = (15 << 10),
-    CCValuesShift   = 10,
-    CCHasZero       = (1 << 14),
-    CCHasOrder      = (1 << 15),
-    CCMaskFirst     = (1 << 16),
-    CCMaskLast      = (1 << 17),
-    IsLogical       = (1 << 18)
+    SimpleBDXLoad          = (1 << 0),
+    SimpleBDXStore         = (1 << 1),
+    Has20BitOffset         = (1 << 2),
+    HasIndex               = (1 << 3),
+    Is128Bit               = (1 << 4),
+    AccessSizeMask         = (31 << 5),
+    AccessSizeShift        = 5,
+    CCValuesMask           = (15 << 10),
+    CCValuesShift          = 10,
+    CompareZeroCCMaskMask  = (15 << 14),
+    CompareZeroCCMaskShift = 14,
+    CCMaskFirst            = (1 << 18),
+    CCMaskLast             = (1 << 19),
+    IsLogical              = (1 << 20)
   };
   static inline unsigned getAccessSize(unsigned int Flags) {
     return (Flags & AccessSizeMask) >> AccessSizeShift;
@@ -49,6 +49,9 @@ namespace SystemZII {
   static inline unsigned getCCValues(unsigned int Flags) {
     return (Flags & CCValuesMask) >> CCValuesShift;
   }
+  static inline unsigned getCompareZeroCCMask(unsigned int Flags) {
+    return (Flags & CompareZeroCCMaskMask) >> CompareZeroCCMaskShift;
+  }
 
   // SystemZ MachineOperand target flags.
   enum {
@@ -69,7 +72,15 @@ namespace SystemZII {
 
     // An instruction that peforms a 64-bit signed comparison and branches
     // on the result.
-    BranchCG
+    BranchCG,
+
+    // An instruction that decrements a 32-bit register and branches if
+    // the result is nonzero.
+    BranchCT,
+
+    // An instruction that decrements a 64-bit register and branches if
+    // the result is nonzero.
+    BranchCTG
   };
   // Information about a branch instruction.
   struct Branch {
@@ -118,6 +129,12 @@ public:
                                 MachineBasicBlock *FBB,
                                 const SmallVectorImpl<MachineOperand> &Cond,
                                 DebugLoc DL) const LLVM_OVERRIDE;
+  bool analyzeCompare(const MachineInstr *MI, unsigned &SrcReg,
+                      unsigned &SrcReg2, int &Mask, int &Value) const
+    LLVM_OVERRIDE;
+  bool optimizeCompareInstr(MachineInstr *CmpInstr, unsigned SrcReg,
+                            unsigned SrcReg2, int Mask, int Value,
+                            const MachineRegisterInfo *MRI) const LLVM_OVERRIDE;
   virtual bool isPredicable(MachineInstr *MI) const LLVM_OVERRIDE;
   virtual bool isProfitableToIfCvt(MachineBasicBlock &MBB, unsigned NumCycles,
                                    unsigned ExtraPredCycles,