OSDN Git Service

Add #line support for CBE.
authorJim Laskey <jlaskey@mac.com>
Wed, 8 Mar 2006 19:31:15 +0000 (19:31 +0000)
committerJim Laskey <jlaskey@mac.com>
Wed, 8 Mar 2006 19:31:15 +0000 (19:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26621 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/CBackend/CBackend.cpp
lib/Target/CBackend/Writer.cpp

index 4db462d..57723b4 100644 (file)
@@ -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<ConstantUInt>(I.getOperand(2));
+        GlobalVariable *GV = cast<GlobalVariable>(I.getOperand(4));
+        ConstantStruct *CS = cast<ConstantStruct>(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;
+      }
       }
     }
 
index 4db462d..57723b4 100644 (file)
@@ -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<ConstantUInt>(I.getOperand(2));
+        GlobalVariable *GV = cast<GlobalVariable>(I.getOperand(4));
+        ConstantStruct *CS = cast<ConstantStruct>(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;
+      }
       }
     }