* Do not allow nodes which produce chain results (e.g. loads) to be folded if
[oota-llvm.git] / utils / TableGen / CodeGenInstruction.h
index b140d0021106aa4bf3ea86d60c8f61c15fceed1e..cee55d2856524a17b497674b7a0249b61d2711ec 100644 (file)
@@ -21,6 +21,7 @@
 
 namespace llvm {
   class Record;
+  class DagInit;
 
   struct CodeGenInstruction {
     Record *TheDef;            // The actual record defining this instruction.
@@ -38,10 +39,6 @@ namespace llvm {
       ///
       Record *Rec;
 
-      /// Ty - The MachineValueType of the operand.
-      ///
-      MVT::ValueType Ty;
-
       /// Name - If this operand was assigned a symbolic name, this is it,
       /// otherwise, it's empty.
       std::string Name;
@@ -59,10 +56,14 @@ namespace llvm {
       unsigned MIOperandNo;
       unsigned MINumOperands;   // The number of operands.
 
-      OperandInfo(Record *R, MVT::ValueType T, const std::string &N,
-                  const std::string &PMN, unsigned MION, unsigned MINO)
-        : Rec(R), Ty(T), Name(N), PrinterMethodName(PMN), MIOperandNo(MION),
-          MINumOperands(MINO) {}
+      /// MIOperandInfo - Default MI operand type. Note an operand may be made
+      /// up of multiple MI operands.
+      DagInit *MIOperandInfo;
+
+      OperandInfo(Record *R, const std::string &N, const std::string &PMN, 
+                  unsigned MION, unsigned MINO, DagInit *MIOI)
+        : Rec(R), Name(N), PrinterMethodName(PMN), MIOperandNo(MION),
+          MINumOperands(MINO), MIOperandInfo(MIOI) {}
     };
 
     /// OperandList - The list of declared operands, along with their declared
@@ -81,7 +82,9 @@ namespace llvm {
     bool isCommutable;
     bool isTerminator;
     bool hasDelaySlot;
+    bool usesCustomDAGSchedInserter;
     bool hasVariableNumberOfOperands;
+    bool hasCtrlDep;
 
     CodeGenInstruction(Record *R, const std::string &AsmStr);