diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2006-11-27 01:05:10 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2006-11-27 01:05:10 +0000 |
commit | 3da59db637a887474c1b1346c1f3ccf53b6c4663 (patch) | |
tree | b061e2133efdb9ea9bb334c1b15ceea881bb88f8 /tools/llvm2cpp/CppWriter.cpp | |
parent | 5fed9b90447a9a95a1f670ccd9c23aea8c937451 (diff) |
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
Diffstat (limited to 'tools/llvm2cpp/CppWriter.cpp')
-rw-r--r-- | tools/llvm2cpp/CppWriter.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
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<CastInst>(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 << ");"; |