[llvm-commits] CVS: llvm/lib/VMCore/AsmWriter.cpp

Reid Spencer reid at x10sys.com
Sun Dec 3 21:19:32 PST 2006



Changes in directory llvm/lib/VMCore:

AsmWriter.cpp updated: 1.216 -> 1.217
---
Log message:

For PR950: http://llvm.org/PR950 : Implement ICmp/FCmp predicate printing for constant expressions

---
Diffs of the changes:  (+39 -35)

 AsmWriter.cpp |   74 ++++++++++++++++++++++++++++++----------------------------
 1 files changed, 39 insertions(+), 35 deletions(-)


Index: llvm/lib/VMCore/AsmWriter.cpp
diff -u llvm/lib/VMCore/AsmWriter.cpp:1.216 llvm/lib/VMCore/AsmWriter.cpp:1.217
--- llvm/lib/VMCore/AsmWriter.cpp:1.216	Sun Dec  3 00:35:48 2006
+++ llvm/lib/VMCore/AsmWriter.cpp	Sun Dec  3 23:19:18 2006
@@ -414,6 +414,39 @@
   }
 }
 
+static const char * getPredicateText(unsigned predicate) {
+  const char * pred = "unknown";
+  switch (predicate) {
+    case FCmpInst::FCMP_FALSE: pred = "false"; break;
+    case FCmpInst::FCMP_OEQ:   pred = "oeq"; break;
+    case FCmpInst::FCMP_OGT:   pred = "ogt"; break;
+    case FCmpInst::FCMP_OGE:   pred = "oge"; break;
+    case FCmpInst::FCMP_OLT:   pred = "olt"; break;
+    case FCmpInst::FCMP_OLE:   pred = "ole"; break;
+    case FCmpInst::FCMP_ONE:   pred = "one"; break;
+    case FCmpInst::FCMP_ORD:   pred = "ord"; break;
+    case FCmpInst::FCMP_UNO:   pred = "uno"; break;
+    case FCmpInst::FCMP_UEQ:   pred = "ueq"; break;
+    case FCmpInst::FCMP_UGT:   pred = "ugt"; break;
+    case FCmpInst::FCMP_UGE:   pred = "uge"; break;
+    case FCmpInst::FCMP_ULT:   pred = "ult"; break;
+    case FCmpInst::FCMP_ULE:   pred = "ule"; break;
+    case FCmpInst::FCMP_UNE:   pred = "une"; break;
+    case FCmpInst::FCMP_TRUE:  pred = "true"; break;
+    case ICmpInst::ICMP_EQ:    pred = "eq"; break;
+    case ICmpInst::ICMP_NE:    pred = "ne"; break;
+    case ICmpInst::ICMP_SGT:   pred = "sgt"; break;
+    case ICmpInst::ICMP_SGE:   pred = "sge"; break;
+    case ICmpInst::ICMP_SLT:   pred = "slt"; break;
+    case ICmpInst::ICMP_SLE:   pred = "sle"; break;
+    case ICmpInst::ICMP_UGT:   pred = "ugt"; break;
+    case ICmpInst::ICMP_UGE:   pred = "uge"; break;
+    case ICmpInst::ICMP_ULT:   pred = "ult"; break;
+    case ICmpInst::ICMP_ULE:   pred = "ule"; break;
+  }
+  return pred;
+}
+
 /// @brief Internal constant writer.
 static void WriteConstantInt(std::ostream &Out, const Constant *CV,
                              bool PrintName,
@@ -533,7 +566,10 @@
     Out << "undef";
 
   } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) {
-    Out << CE->getOpcodeName() << " (";
+    Out << CE->getOpcodeName();
+    if (CE->isCompare())
+      Out << " " << getPredicateText(CE->getPredicate());
+    Out << " (";
 
     for (User::const_op_iterator OI=CE->op_begin(); OI != CE->op_end(); ++OI) {
       printTypeInt(Out, (*OI)->getType(), TypeTable);
@@ -1127,41 +1163,9 @@
 
   // 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 = "oeq";
-      case FCmpInst::FCMP_OGT:   pred = "ogt";
-      case FCmpInst::FCMP_OGE:   pred = "oge";
-      case FCmpInst::FCMP_OLT:   pred = "olt";
-      case FCmpInst::FCMP_OLE:   pred = "ole";
-      case FCmpInst::FCMP_ONE:   pred = "one";
-      case FCmpInst::FCMP_ORD:   pred = "ord";
-      case FCmpInst::FCMP_UNO:   pred = "uno";
-      case FCmpInst::FCMP_UEQ:   pred = "ueq";
-      case FCmpInst::FCMP_UGT:   pred = "ugt";
-      case FCmpInst::FCMP_UGE:   pred = "uge";
-      case FCmpInst::FCMP_ULT:   pred = "ult";
-      case FCmpInst::FCMP_ULE:   pred = "ule";
-      case FCmpInst::FCMP_UNE:   pred = "une";
-      case FCmpInst::FCMP_TRUE:  pred = "true";
-    }
-    Out << " " << pred;
+    Out << " " << getPredicateText(FCI->getPredicate());
   } 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;
+    Out << " " << getPredicateText(ICI->getPredicate());
   }
 
   // Print out the type of the operands...






More information about the llvm-commits mailing list