From 74f1642bc1c2981e4573c9f0690d91b6a9bbc68c Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Sun, 3 Dec 2006 06:27:29 +0000 Subject: [PATCH] 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 --- lib/VMCore/AsmWriter.cpp | 39 ++++++++++++++++++++++++++++++++++++++ lib/VMCore/Instruction.cpp | 2 ++ 2 files changed, 41 insertions(+) diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index 50526c39594..37821d9fb69 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -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(&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(&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 5c741f7b874..d3d2f342ca6 100644 --- a/lib/VMCore/Instruction.cpp +++ b/lib/VMCore/Instruction.cpp @@ -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";