[OperandBundles] Allow operand-specific attributes in operand bundles
[oota-llvm.git] / lib / IR / DebugLoc.cpp
index 95f6d67c542e80bb49e323f9cdd4cbe3cabeb156..72d5c0e618833fe2eec34376979408816fe3dfa1 100644 (file)
@@ -16,11 +16,11 @@ using namespace llvm;
 //===----------------------------------------------------------------------===//
 // DebugLoc Implementation
 //===----------------------------------------------------------------------===//
-DebugLoc::DebugLoc(MDLocation *L) : Loc(L) {}
-DebugLoc::DebugLoc(MDNode *L) : Loc(L) {}
+DebugLoc::DebugLoc(const DILocation *L) : Loc(const_cast<DILocation *>(L)) {}
+DebugLoc::DebugLoc(const MDNode *L) : Loc(const_cast<MDNode *>(L)) {}
 
-MDLocation *DebugLoc::get() const {
-  return cast_or_null<MDLocation>(Loc.get());
+DILocation *DebugLoc::get() const {
+  return cast_or_null<DILocation>(Loc.get());
 }
 
 unsigned DebugLoc::getLine() const {
@@ -38,32 +38,33 @@ MDNode *DebugLoc::getScope() const {
   return get()->getScope();
 }
 
-MDLocation *DebugLoc::getInlinedAt() const {
+DILocation *DebugLoc::getInlinedAt() const {
   assert(get() && "Expected valid DebugLoc");
   return get()->getInlinedAt();
 }
 
 MDNode *DebugLoc::getInlinedAtScope() const {
-  return cast<MDLocation>(Loc)->getInlinedAtScope();
+  return cast<DILocation>(Loc)->getInlinedAtScope();
 }
 
 DebugLoc DebugLoc::getFnDebugLoc() const {
-  // FIXME: Add a method on \a MDLocation that does this work.
+  // FIXME: Add a method on \a DILocation that does this work.
   const MDNode *Scope = getInlinedAtScope();
-  DISubprogram SP = getDISubprogram(Scope);
-  if (SP.isSubprogram())
-    return DebugLoc::get(SP.getScopeLineNumber(), 0, SP);
+  if (auto *SP = getDISubprogram(Scope))
+    return DebugLoc::get(SP->getScopeLine(), 0, SP);
 
   return DebugLoc();
 }
 
-DebugLoc DebugLoc::get(unsigned Line, unsigned Col,
-                       MDNode *Scope, MDNode *InlinedAt) {
+DebugLoc DebugLoc::get(unsigned Line, unsigned Col, const MDNode *Scope,
+                       const MDNode *InlinedAt) {
   // If no scope is available, this is an unknown location.
   if (!Scope)
     return DebugLoc();
 
-  return MDLocation::get(Scope->getContext(), Line, Col, Scope, InlinedAt);
+  return DILocation::get(Scope->getContext(), Line, Col,
+                         const_cast<MDNode *>(Scope),
+                         const_cast<MDNode *>(InlinedAt));
 }
 
 void DebugLoc::dump() const {
@@ -87,13 +88,8 @@ void DebugLoc::print(raw_ostream &OS) const {
     return;
 
   // Print source line info.
-  DIScope Scope(getScope());
-  assert((!Scope || Scope.isScope()) &&
-         "Scope of a DebugLoc should be null or a DIScope.");
-  if (Scope)
-    OS << Scope.getFilename();
-  else
-    OS << "<unknown>";
+  auto *Scope = cast<DIScope>(getScope());
+  OS << Scope->getFilename();
   OS << ':' << getLine();
   if (getCol() != 0)
     OS << ':' << getCol();