Be nice to CellSPU: for this target getSetCCResultType
[oota-llvm.git] / lib / CodeGen / SimpleRegisterCoalescing.h
index 62738952aa2ce5b7304fa08e710095b373e1b092..330c476dbf5a92bf1a301feac2718589706f15f3 100644 (file)
@@ -100,9 +100,13 @@ namespace llvm {
     ///
     SmallPtrSet<MachineInstr*, 32> ReMatCopies;
 
+    /// ReMatDefs - Keep track of definition instructions which have
+    /// been remat'ed.
+    SmallPtrSet<MachineInstr*, 8> ReMatDefs;
+
   public:
     static char ID; // Pass identifcation, replacement for typeid
-    SimpleRegisterCoalescing() : MachineFunctionPass((intptr_t)&ID) {}
+    SimpleRegisterCoalescing() : MachineFunctionPass(&ID) {}
 
     struct InstrSlots {
       enum {
@@ -223,6 +227,13 @@ namespace llvm {
     bool isProfitableToCoalesceToSubRC(unsigned SrcReg, unsigned DstReg,
                                        MachineBasicBlock *MBB);
 
+    /// HasIncompatibleSubRegDefUse - If we are trying to coalesce a virtual
+    /// register with a physical register, check if any of the virtual register
+    /// operand is a sub-register use or def. If so, make sure it won't result
+    /// in an illegal extract_subreg or insert_subreg instruction.
+    bool HasIncompatibleSubRegDefUse(MachineInstr *CopyMI,
+                                     unsigned VirtReg, unsigned PhysReg);
+
     /// RangeIsDefinedByCopyFromReg - Return true if the specified live range of
     /// the specified live interval is defined by a copy from the specified
     /// register.