Generate the correct cast opcode for constant expressions.
authorReid Spencer <rspencer@reidspencer.com>
Tue, 12 Dec 2006 01:31:37 +0000 (01:31 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Tue, 12 Dec 2006 01:31:37 +0000 (01:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32461 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm2cpp/CppWriter.cpp

index ef07d46137c648208cf1db69e2155fa7ac3f31bb..2d0a3be0df2c32d78015af079a913a0db8a5ba20 100644 (file)
@@ -761,8 +761,23 @@ void CppWriter::printConstant(const Constant *CV) {
     } else if (CE->isCast()) {
       printConstant(CE->getOperand(0));
       Out << "Constant* " << constName << " = ConstantExpr::getCast(";
-      Out << getCppName(CE->getOperand(0)) << ", " << getCppName(CE->getType())
-          << ");";
+      switch (CE->getOpcode()) {
+        default: assert(0 && "Invalid cast opcode");
+        case Instruction::Trunc: Out << "Instruction::Trunc"; break;
+        case Instruction::ZExt:  Out << "Instruction::ZExt"; break;
+        case Instruction::SExt:  Out << "Instruction::SExt"; break;
+        case Instruction::FPTrunc:  Out << "Instruction::FPTrunc"; break;
+        case Instruction::FPExt:  Out << "Instruction::FPExt"; break;
+        case Instruction::FPToUI:  Out << "Instruction::FPToUI"; break;
+        case Instruction::FPToSI:  Out << "Instruction::FPToSI"; break;
+        case Instruction::UIToFP:  Out << "Instruction::UIToFP"; break;
+        case Instruction::SIToFP:  Out << "Instruction::SIToFP"; break;
+        case Instruction::PtrToInt:  Out << "Instruction::PtrToInt"; break;
+        case Instruction::IntToPtr:  Out << "Instruction::IntToPtr"; break;
+        case Instruction::BitCast:  Out << "Instruction::BitCast"; break;
+      }
+      Out << ", " << getCppName(CE->getOperand(0)) << ", " 
+          << getCppName(CE->getType()) << ");";
     } else {
       unsigned N = CE->getNumOperands();
       for (unsigned i = 0; i < N; ++i ) {