Allow the ICmp and FCmp instructions to be written by the AsmWriter
authorReid Spencer <rspencer@reidspencer.com>
Sun, 3 Dec 2006 06:27:29 +0000 (06:27 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Sun, 3 Dec 2006 06:27:29 +0000 (06:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32148 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/AsmWriter.cpp
lib/VMCore/Instruction.cpp

index 50526c395941feb17bec0c2a38f122db7dc3bd21..37821d9fb694407ada2a98ae4b04e3c54fe0a062 100644 (file)
@@ -1125,6 +1125,45 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
   // Print out the opcode...
   Out << I.getOpcodeName();
 
+  // Print out the compare instruction predicates
+  if (const FCmpInst *FCI = dyn_cast<FCmpInst>(&I)) {
+    const char *pred = 0;
+    switch (FCI->getPredicate()) {
+      case FCmpInst::FCMP_FALSE: pred = "false";
+      case FCmpInst::FCMP_OEQ:   pred = "ordeq";
+      case FCmpInst::FCMP_OGT:   pred = "ordgt";
+      case FCmpInst::FCMP_OGE:   pred = "ordge";
+      case FCmpInst::FCMP_OLT:   pred = "ordlt";
+      case FCmpInst::FCMP_OLE:   pred = "ordle";
+      case FCmpInst::FCMP_ONE:   pred = "ordne";
+      case FCmpInst::FCMP_ORD:   pred = "ord";
+      case FCmpInst::FCMP_UNO:   pred = "uno";
+      case FCmpInst::FCMP_UEQ:   pred = "unoeq";
+      case FCmpInst::FCMP_UGT:   pred = "unogt";
+      case FCmpInst::FCMP_UGE:   pred = "unoge";
+      case FCmpInst::FCMP_ULT:   pred = "unolt";
+      case FCmpInst::FCMP_ULE:   pred = "unole";
+      case FCmpInst::FCMP_UNE:   pred = "unone";
+      case FCmpInst::FCMP_TRUE:  pred = "true";
+    }
+    Out << " " << pred;
+  } else if (const ICmpInst *ICI = dyn_cast<ICmpInst>(&I)) {
+    const char *pred = 0;
+    switch (ICI->getPredicate()) {
+      case ICmpInst::ICMP_EQ:    pred = "eq";
+      case ICmpInst::ICMP_NE:    pred = "ne";
+      case ICmpInst::ICMP_SGT:   pred = "sgt";
+      case ICmpInst::ICMP_SGE:   pred = "sge";
+      case ICmpInst::ICMP_SLT:   pred = "slt";
+      case ICmpInst::ICMP_SLE:   pred = "sle";
+      case ICmpInst::ICMP_UGT:   pred = "ugt";
+      case ICmpInst::ICMP_UGE:   pred = "uge";
+      case ICmpInst::ICMP_ULT:   pred = "ult";
+      case ICmpInst::ICMP_ULE:   pred = "ule";
+    }
+    Out << " " << pred;
+  }
+
   // Print out the type of the operands...
   const Value *Operand = I.getNumOperands() ? I.getOperand(0) : 0;
 
index 5c741f7b8744f52ea98057b55a925f143e016ab5..d3d2f342ca63ae09d40f4fb0401cf6059b8c7aec 100644 (file)
@@ -137,6 +137,8 @@ const char *Instruction::getOpcodeName(unsigned OpCode) {
   case BitCast:   return "bitcast";
 
   // Other instructions...
+  case ICmp:           return "icmp";
+  case FCmp:           return "fcmp";
   case PHI:            return "phi";
   case Select:         return "select";
   case Call:           return "call";