From 7075d6f2f2fe328b93b4c08c5086f02c825accda Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Wed, 8 Mar 2006 19:31:15 +0000 Subject: [PATCH] Add #line support for CBE. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26621 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/CBackend/CBackend.cpp | 17 +++++++++++++++++ lib/Target/CBackend/Writer.cpp | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 4db462dbecf..57723b44ca1 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -1598,6 +1598,7 @@ void CWriter::lowerIntrinsics(Function &F) { case Intrinsic::setjmp: case Intrinsic::longjmp: case Intrinsic::prefetch: + case Intrinsic::dbg_stoppoint: // We directly implement these intrinsics break; default: @@ -1687,6 +1688,22 @@ void CWriter::visitCallInst(CallInst &I) { writeOperand(I.getOperand(3)); Out << ")"; return; + case Intrinsic::dbg_stoppoint: { + // If we use writeOperand directly we get a "u" suffix which is rejected + // by gcc. + ConstantUInt *SI = cast(I.getOperand(2)); + GlobalVariable *GV = cast(I.getOperand(4)); + ConstantStruct *CS = cast(GV->getInitializer()); + std::string FileName = CS->getOperand(4)->getStringValue(); + std::string Directory = CS->getOperand(5)->getStringValue(); + + Out << "\n#line " + << SI->getValue() + << " \"" << Directory << FileName << "\"\n"; + // Need to set result. + Out << "0"; + return; + } } } diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index 4db462dbecf..57723b44ca1 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -1598,6 +1598,7 @@ void CWriter::lowerIntrinsics(Function &F) { case Intrinsic::setjmp: case Intrinsic::longjmp: case Intrinsic::prefetch: + case Intrinsic::dbg_stoppoint: // We directly implement these intrinsics break; default: @@ -1687,6 +1688,22 @@ void CWriter::visitCallInst(CallInst &I) { writeOperand(I.getOperand(3)); Out << ")"; return; + case Intrinsic::dbg_stoppoint: { + // If we use writeOperand directly we get a "u" suffix which is rejected + // by gcc. + ConstantUInt *SI = cast(I.getOperand(2)); + GlobalVariable *GV = cast(I.getOperand(4)); + ConstantStruct *CS = cast(GV->getInitializer()); + std::string FileName = CS->getOperand(4)->getStringValue(); + std::string Directory = CS->getOperand(5)->getStringValue(); + + Out << "\n#line " + << SI->getValue() + << " \"" << Directory << FileName << "\"\n"; + // Need to set result. + Out << "0"; + return; + } } }