]> granicus.if.org Git - llvm/commitdiff
[CodeGen] Move printing MO_IntrinsicID operands to MachineOperand::print
authorFrancis Visoiu Mistrih <francisvm@yahoo.com>
Tue, 19 Dec 2017 21:47:10 +0000 (21:47 +0000)
committerFrancis Visoiu Mistrih <francisvm@yahoo.com>
Tue, 19 Dec 2017 21:47:10 +0000 (21:47 +0000)
Work towards the unification of MIR and debug output by refactoring the
interfaces.

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

docs/MIRLangRef.rst
lib/CodeGen/MIRPrinter.cpp
lib/CodeGen/MachineOperand.cpp
unittests/CodeGen/MachineOperandTest.cpp

index 150e4e21375495dfb21b9aa19c8fa0f7e10811a7..1176435c87618ca136f3f5fd48fe84f0fb12f59c 100644 (file)
@@ -724,6 +724,18 @@ The syntax for the ``returnaddress`` intrinsic is:
 
    %x0 = COPY intrinsic(@llvm.returnaddress)
 
+Predicate Operands
+^^^^^^^^^^^^^^^^^^
+
+A Predicate operand contains an IR predicate from ``CmpInst::Predicate``, like
+``ICMP_EQ``, etc.
+
+For an int eq predicate ``ICMP_EQ``, the syntax is:
+
+.. code-block:: text
+
+   %2:gpr(s32) = G_ICMP intpred(eq), %0, %1
+
 .. TODO: Describe the parsers default behaviour when optional YAML attributes
    are missing.
 .. TODO: Describe the syntax for the bundled instructions.
index 9b38b893973e8afb1a30a7814b0f656227bcd8d6..6b9da344166793f36182d362ef75207767155456 100644 (file)
@@ -785,7 +785,8 @@ void MIPrinter::print(const MachineInstr &MI, unsigned OpIdx,
   case MachineOperand::MO_Metadata:
   case MachineOperand::MO_MCSymbol:
   case MachineOperand::MO_CFIIndex:
-  case MachineOperand::MO_IntrinsicID: {
+  case MachineOperand::MO_IntrinsicID:
+  case MachineOperand::MO_Predicate: {
     unsigned TiedOperandIdx = 0;
     if (ShouldPrintRegisterTies && Op.isReg() && Op.isTied() && !Op.isDef())
       TiedOperandIdx = Op.getParent()->findTiedOperandIdx(OpIdx);
@@ -814,12 +815,6 @@ void MIPrinter::print(const MachineInstr &MI, unsigned OpIdx,
       printCustomRegMask(Op.getRegMask(), OS, TRI);
     break;
   }
-  case MachineOperand::MO_Predicate: {
-    auto Pred = static_cast<CmpInst::Predicate>(Op.getPredicate());
-    OS << (CmpInst::isIntPredicate(Pred) ? "int" : "float") << "pred("
-       << CmpInst::getPredicateName(Pred) << ')';
-    break;
-  }
   }
 }
 
index 586e826be58922734e5d0f3b77fdd68e627d9214..fee99c91bbe54c193f46e26f40265a611f3d0dee 100644 (file)
@@ -807,8 +807,8 @@ void MachineOperand::print(raw_ostream &OS, ModuleSlotTracker &MST,
   }
   case MachineOperand::MO_Predicate: {
     auto Pred = static_cast<CmpInst::Predicate>(getPredicate());
-    OS << '<' << (CmpInst::isIntPredicate(Pred) ? "intpred" : "floatpred")
-       << CmpInst::getPredicateName(Pred) << '>';
+    OS << (CmpInst::isIntPredicate(Pred) ? "int" : "float") << "pred("
+       << CmpInst::getPredicateName(Pred) << ')';
     break;
   }
   }
index cce85cafb2ad4121f91a651267364521a6d4cf32..78a20b836486dbe1de5891bd62522bd8db7c1ff2 100644 (file)
@@ -10,6 +10,7 @@
 #include "llvm/CodeGen/MachineOperand.h"
 #include "llvm/ADT/ilist_node.h"
 #include "llvm/IR/Constants.h"
+#include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/LLVMContext.h"
 #include "llvm/IR/Module.h"
 #include "llvm/IR/ModuleSlotTracker.h"
@@ -382,4 +383,20 @@ TEST(MachineOperandTest, PrintIntrinsicID) {
   }
 }
 
+TEST(MachineOperandTest, PrintPredicate) {
+  // Create a MachineOperand with a generic intrinsic ID.
+  MachineOperand MO = MachineOperand::CreatePredicate(CmpInst::ICMP_EQ);
+
+  // Checking some preconditions on the newly created
+  // MachineOperand.
+  ASSERT_TRUE(MO.isPredicate());
+  ASSERT_TRUE(MO.getPredicate() == CmpInst::ICMP_EQ);
+
+  std::string str;
+  // Print a MachineOperand containing a int predicate ICMP_EQ.
+  raw_string_ostream OS(str);
+  MO.print(OS, /*TRI=*/nullptr, /*IntrinsicInfo=*/nullptr);
+  ASSERT_TRUE(OS.str() == "intpred(eq)");
+}
+
 } // end namespace