From 3da59db637a887474c1b1346c1f3ccf53b6c4663 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Mon, 27 Nov 2006 01:05:10 +0000 Subject: For PR950: The long awaited CAST patch. This introduces 12 new instructions into LLVM to replace the cast instruction. Corresponding changes throughout LLVM are provided. This passes llvm-test, llvm/test, and SPEC CPUINT2000 with the exception of 175.vpr which fails only on a slight floating point output difference. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31931 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm2cpp/CppWriter.cpp | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'tools/llvm2cpp/CppWriter.cpp') diff --git a/tools/llvm2cpp/CppWriter.cpp b/tools/llvm2cpp/CppWriter.cpp index 79c3d9d1c1..b1f717d0bf 100644 --- a/tools/llvm2cpp/CppWriter.cpp +++ b/tools/llvm2cpp/CppWriter.cpp @@ -757,7 +757,7 @@ void CppWriter::printConstant(const Constant *CV) { << " = ConstantExpr::getGetElementPtr(" << getCppName(CE->getOperand(0)) << ", " << constName << "_indices);"; - } else if (CE->getOpcode() == Instruction::Cast) { + } else if (CE->isCast()) { printConstant(CE->getOperand(0)); Out << "Constant* " << constName << " = ConstantExpr::getCast("; Out << getCppName(CE->getOperand(0)) << ", " << getCppName(CE->getType()) @@ -1174,10 +1174,36 @@ CppWriter::printInstruction(const Instruction *I, const std::string& bbname) { } break; } - case Instruction::Cast: { + case Instruction::Trunc: + case Instruction::ZExt: + case Instruction::SExt: + case Instruction::FPTrunc: + case Instruction::FPExt: + case Instruction::FPToUI: + case Instruction::FPToSI: + case Instruction::UIToFP: + case Instruction::SIToFP: + case Instruction::PtrToInt: + case Instruction::IntToPtr: + case Instruction::BitCast: { const CastInst* cst = cast(I); - Out << "CastInst* " << iName << " = new CastInst(" - << opNames[0] << ", " + Out << "CastInst* " << iName << " = new "; + switch (I->getOpcode()) { + case Instruction::Trunc: Out << "TruncInst"; + case Instruction::ZExt: Out << "ZExtInst"; + case Instruction::SExt: Out << "SExtInst"; + case Instruction::FPTrunc: Out << "FPTruncInst"; + case Instruction::FPExt: Out << "FPExtInst"; + case Instruction::FPToUI: Out << "FPToUIInst"; + case Instruction::FPToSI: Out << "FPToSIInst"; + case Instruction::UIToFP: Out << "UIToFPInst"; + case Instruction::SIToFP: Out << "SIToFPInst"; + case Instruction::PtrToInt: Out << "PtrToInst"; + case Instruction::IntToPtr: Out << "IntToPtrInst"; + case Instruction::BitCast: Out << "BitCastInst"; + default: assert(!"Unreachable"); break; + } + Out << "(" << opNames[0] << ", " << getCppName(cst->getType()) << ", \""; printEscapedString(cst->getName()); Out << "\", " << bbname << ");"; -- cgit v1.2.3-18-g5258