Allow the ICmp and FCmp instructions to be written by the AsmWriter


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32148 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp
index 50526c3..37821d9 100644
--- a/lib/VMCore/AsmWriter.cpp
+++ b/lib/VMCore/AsmWriter.cpp
@@ -1125,6 +1125,45 @@
   // 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;
 
diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp
index 5c741f7..d3d2f34 100644
--- a/lib/VMCore/Instruction.cpp
+++ b/lib/VMCore/Instruction.cpp
@@ -137,6 +137,8 @@
   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";