<div dir="ltr">(from IRC discussion)<br><br>Looks like this might've caused the GDB buildbot regression seen here: <a href="http://lab.llvm.org:8011/builders/clang-x86_64-ubuntu-gdb-75/builds/21390">http://lab.llvm.org:8011/builders/clang-x86_64-ubuntu-gdb-75/builds/21390</a><br><br>Specifically, in the below program<br><br><div>int *g;</div><div><br></div><div>static __attribute__((always_inline)) int f(int a) {</div><div>  int l;</div><div>  g = &l;</div><div>  return a;</div><div>}</div><div><br></div><div>int main(void) {</div><div>  f(0);</div><div>  f(0);</div><div>  return 0;</div><div>}<br><br>The inlined_subroutine for 'f' in 'main' has no DW_TAG_formal_parameter (for 'a')<br><br>(though this patch didn't regress the behavior, it's interesting to note that there's only one inlined_subroutine in main, even though there are two calls to 'f'... )</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 15, 2015 at 3:29 PM, Duncan P. N. Exon Smith <span dir="ltr"><<a href="mailto:dexonsmith@apple.com" target="_blank">dexonsmith@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: dexonsmith<br>
Date: Wed Apr 15 17:29:27 2015<br>
New Revision: 235050<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=235050&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=235050&view=rev</a><br>
Log:<br>
DebugInfo: Remove 'inlinedAt:' field from MDLocalVariable<br>
<br>
Remove 'inlinedAt:' from MDLocalVariable.  Besides saving some memory<br>
(variables with it seem to be single largest `Metadata` contributer to<br>
memory usage right now in -g -flto builds), this stops optimization and<br>
backend passes from having to change local variables.<br>
<br>
The 'inlinedAt:' field was used by the backend in two ways:<br>
<br>
 1. To tell the backend whether and into what a variable was inlined.<br>
 2. To create a unique id for each inlined variable.<br>
<br>
Instead, rely on the 'inlinedAt:' field of the intrinsic's `!dbg`<br>
attachment, and change the DWARF backend to use a typedef called<br>
`InlinedVariable` which is `std::pair<MDLocalVariable*, MDLocation*>`.<br>
This `DebugLoc` is already passed reliably through the backend (as<br>
verified by r234021).<br>
<br>
This commit removes the check from r234021, but I added a new check<br>
(that will survive) in r235048, and changed the `DIBuilder` API in<br>
r235041 to require a `!dbg` attachment whose 'scope:` is in the same<br>
`MDSubprogram` as the variable's.<br>
<br>
If this breaks your out-of-tree testcases, perhaps the script I used<br>
(mdlocalvariable-drop-inlinedat.sh) will help; I'll attach it to PR22778<br>
in a moment.<br>
<br>
Modified:<br>
    llvm/trunk/docs/LangRef.rst<br>
    llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h<br>
    llvm/trunk/include/llvm/IR/DebugInfo.h<br>
    llvm/trunk/include/llvm/IR/DebugInfoMetadata.h<br>
    llvm/trunk/lib/AsmParser/LLParser.cpp<br>
    llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp<br>
    llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h<br>
    llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp<br>
    llvm/trunk/lib/CodeGen/MachineInstr.cpp<br>
    llvm/trunk/lib/IR/AsmWriter.cpp<br>
    llvm/trunk/lib/IR/DebugInfo.cpp<br>
    llvm/trunk/lib/IR/DebugInfoMetadata.cpp<br>
    llvm/trunk/lib/IR/LLVMContextImpl.h<br>
    llvm/trunk/lib/IR/Verifier.cpp<br>
    llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp<br>
    llvm/trunk/test/Assembler/mdlocalvariable.ll<br>
    llvm/trunk/test/CodeGen/ARM/debug-info-d16-reg.ll<br>
    llvm/trunk/test/CodeGen/ARM/debug-info-s16-reg.ll<br>
    llvm/trunk/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll<br>
    llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll<br>
    llvm/trunk/test/DebugInfo/2010-05-03-OriginDIE.ll<br>
    llvm/trunk/test/DebugInfo/2010-06-29-InlinedFnLocalVar.ll<br>
    llvm/trunk/test/DebugInfo/AArch64/cfi-eof-prologue.ll<br>
    llvm/trunk/test/DebugInfo/AArch64/frameindices.ll<br>
    llvm/trunk/test/DebugInfo/ARM/cfi-eof-prologue.ll<br>
    llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll<br>
    llvm/trunk/test/DebugInfo/PR20038.ll<br>
    llvm/trunk/test/DebugInfo/X86/InlinedFnLocalVar.ll<br>
    llvm/trunk/test/DebugInfo/X86/dbg-value-inlined-parameter.ll<br>
    llvm/trunk/test/DebugInfo/X86/debug-ranges-offset.ll<br>
    llvm/trunk/test/DebugInfo/X86/inline-member-function.ll<br>
    llvm/trunk/test/DebugInfo/X86/inline-seldag-test.ll<br>
    llvm/trunk/test/DebugInfo/X86/mi-print.ll<br>
    llvm/trunk/test/DebugInfo/X86/nodebug_with_debug_loc.ll<br>
    llvm/trunk/test/DebugInfo/X86/nophysreg.ll<br>
    llvm/trunk/test/DebugInfo/X86/recursive_inlining.ll<br>
    llvm/trunk/test/DebugInfo/cross-cu-inlining.ll<br>
    llvm/trunk/test/DebugInfo/inline-scopes.ll<br>
    llvm/trunk/test/DebugInfo/inlined-arguments.ll<br>
    llvm/trunk/test/DebugInfo/inlined-vars.ll<br>
    llvm/trunk/test/DebugInfo/missing-abstract-variable.ll<br>
    llvm/trunk/test/DebugInfo/namespace_inline_function_definition.ll<br>
    llvm/trunk/test/Transforms/Inline/alloca-dbgdeclare.ll<br>
    llvm/trunk/test/Transforms/Inline/inline_dbg_declare.ll<br>
    llvm/trunk/test/Transforms/Mem2Reg/ConvertDebugInfo2.ll<br>
    llvm/trunk/unittests/IR/MetadataTest.cpp<br>
<br>
Modified: llvm/trunk/docs/LangRef.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.rst?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.rst?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/docs/LangRef.rst (original)<br>
+++ llvm/trunk/docs/LangRef.rst Wed Apr 15 17:29:27 2015<br>
@@ -3235,21 +3235,15 @@ arguments (``DW_TAG_arg_variable``).  In<br>
 specifies the argument position, and this variable will be included in the<br>
 ``variables:`` field of its :ref:`MDSubprogram`.<br>
<br>
-If set, the ``inlinedAt:`` field points at an :ref:`MDLocation`, and the<br>
-variable represents an inlined version of a variable (with all other fields<br>
-duplicated from the non-inlined version).<br>
-<br>
 .. code-block:: llvm<br>
<br>
     !0 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 0,<br>
                           scope: !3, file: !2, line: 7, type: !3,<br>
-                          flags: DIFlagArtificial, inlinedAt: !4)<br>
+                          flags: DIFlagArtificial)<br>
     !1 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", arg: 1,<br>
-                          scope: !4, file: !2, line: 7, type: !3,<br>
-                          inlinedAt: !6)<br>
+                          scope: !4, file: !2, line: 7, type: !3)<br>
     !1 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "y",<br>
-                          scope: !5, file: !2, line: 7, type: !3,<br>
-                          inlinedAt: !6)<br>
+                          scope: !5, file: !2, line: 7, type: !3)<br>
<br>
 MDExpression<br>
 """"""""""""<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h Wed Apr 15 17:29:27 2015<br>
@@ -184,12 +184,13 @@ public:<br>
   static char ID; // Pass identification, replacement for typeid<br>
<br>
   struct VariableDbgInfo {<br>
-    TrackingMDNodeRef Var;<br>
-    TrackingMDNodeRef Expr;<br>
+    const MDLocalVariable *Var;<br>
+    const MDExpression *Expr;<br>
     unsigned Slot;<br>
-    DebugLoc Loc;<br>
+    const MDLocation *Loc;<br>
<br>
-    VariableDbgInfo(MDNode *Var, MDNode *Expr, unsigned Slot, DebugLoc Loc)<br>
+    VariableDbgInfo(const MDLocalVariable *Var, const MDExpression *Expr,<br>
+                    unsigned Slot, const MDLocation *Loc)<br>
         : Var(Var), Expr(Expr), Slot(Slot), Loc(Loc) {}<br>
   };<br>
   typedef SmallVector<VariableDbgInfo, 4> VariableDbgInfoMapTy;<br>
@@ -437,8 +438,8 @@ public:<br>
<br>
   /// setVariableDbgInfo - Collect information used to emit debugging<br>
   /// information of a variable.<br>
-  void setVariableDbgInfo(MDNode *Var, MDNode *Expr, unsigned Slot,<br>
-                          DebugLoc Loc) {<br>
+  void setVariableDbgInfo(const MDLocalVariable *Var, const MDExpression *Expr,<br>
+                          unsigned Slot, const MDLocation *Loc) {<br>
     VariableDbgInfos.emplace_back(Var, Expr, Slot, Loc);<br>
   }<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/IR/DebugInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfo.h?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfo.h?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/IR/DebugInfo.h (original)<br>
+++ llvm/trunk/include/llvm/IR/DebugInfo.h Wed Apr 15 17:29:27 2015<br>
@@ -622,16 +622,6 @@ DISubprogram getDISubprogram(const Funct<br>
 /// \brief Find underlying composite type.<br>
 DICompositeType getDICompositeType(DIType T);<br>
<br>
-/// \brief Create a new inlined variable based on current variable.<br>
-///<br>
-/// @param DV            Current Variable.<br>
-/// @param InlinedScope  Location at current variable is inlined.<br>
-DIVariable createInlinedVariable(MDNode *DV, MDNode *InlinedScope,<br>
-                                 LLVMContext &VMContext);<br>
-<br>
-/// \brief Remove inlined scope from the variable.<br>
-DIVariable cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext);<br>
-<br>
 /// \brief Generate map by visiting all retained types.<br>
 DITypeIdentifierMap generateDITypeIdentifierMap(const NamedMDNode *CU_Nodes);<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/IR/DebugInfoMetadata.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfoMetadata.h?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DebugInfoMetadata.h?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/IR/DebugInfoMetadata.h (original)<br>
+++ llvm/trunk/include/llvm/IR/DebugInfoMetadata.h Wed Apr 15 17:29:27 2015<br>
@@ -1877,38 +1877,32 @@ class MDLocalVariable : public MDVariabl<br>
   static MDLocalVariable *getImpl(LLVMContext &Context, unsigned Tag,<br>
                                   MDScope *Scope, StringRef Name, MDFile *File,<br>
                                   unsigned Line, MDTypeRef Type, unsigned Arg,<br>
-                                  unsigned Flags, MDLocation *InlinedAt,<br>
-                                  StorageType Storage,<br>
+                                  unsigned Flags, StorageType Storage,<br>
                                   bool ShouldCreate = true) {<br>
     return getImpl(Context, Tag, Scope, getCanonicalMDString(Context, Name),<br>
-                   File, Line, Type, Arg, Flags, InlinedAt, Storage,<br>
-                   ShouldCreate);<br>
+                   File, Line, Type, Arg, Flags, Storage, ShouldCreate);<br>
   }<br>
-  static MDLocalVariable *getImpl(LLVMContext &Context, unsigned Tag,<br>
-                                  Metadata *Scope, MDString *Name,<br>
-                                  Metadata *File, unsigned Line, Metadata *Type,<br>
-                                  unsigned Arg, unsigned Flags,<br>
-                                  Metadata *InlinedAt, StorageType Storage,<br>
-                                  bool ShouldCreate = true);<br>
+  static MDLocalVariable *<br>
+  getImpl(LLVMContext &Context, unsigned Tag, Metadata *Scope, MDString *Name,<br>
+          Metadata *File, unsigned Line, Metadata *Type, unsigned Arg,<br>
+          unsigned Flags, StorageType Storage, bool ShouldCreate = true);<br>
<br>
   TempMDLocalVariable cloneImpl() const {<br>
     return getTemporary(getContext(), getTag(), getScope(), getName(),<br>
-                        getFile(), getLine(), getType(), getArg(), getFlags(),<br>
-                        getInlinedAt());<br>
+                        getFile(), getLine(), getType(), getArg(), getFlags());<br>
   }<br>
<br>
 public:<br>
   DEFINE_MDNODE_GET(MDLocalVariable,<br>
                     (unsigned Tag, MDLocalScope *Scope, StringRef Name,<br>
                      MDFile *File, unsigned Line, MDTypeRef Type, unsigned Arg,<br>
-                     unsigned Flags, MDLocation *InlinedAt = nullptr),<br>
-                    (Tag, Scope, Name, File, Line, Type, Arg, Flags, InlinedAt))<br>
+                     unsigned Flags),<br>
+                    (Tag, Scope, Name, File, Line, Type, Arg, Flags))<br>
   DEFINE_MDNODE_GET(MDLocalVariable,<br>
                     (unsigned Tag, Metadata *Scope, MDString *Name,<br>
                      Metadata *File, unsigned Line, Metadata *Type,<br>
-                     unsigned Arg, unsigned Flags,<br>
-                     Metadata *InlinedAt = nullptr),<br>
-                    (Tag, Scope, Name, File, Line, Type, Arg, Flags, InlinedAt))<br>
+                     unsigned Arg, unsigned Flags),<br>
+                    (Tag, Scope, Name, File, Line, Type, Arg, Flags))<br>
<br>
   TempMDLocalVariable clone() const { return cloneImpl(); }<br>
<br>
@@ -1921,11 +1915,6 @@ public:<br>
<br>
   unsigned getArg() const { return Arg; }<br>
   unsigned getFlags() const { return Flags; }<br>
-  MDLocation *getInlinedAt() const {<br>
-    return cast_or_null<MDLocation>(getRawInlinedAt());<br>
-  }<br>
-<br>
-  Metadata *getRawInlinedAt() const { return getOperand(4); }<br>
<br>
   bool isArtificial() const { return getFlags() & FlagArtificial; }<br>
   bool isObjectPointer() const { return getFlags() & FlagObjectPointer; }<br>
@@ -1936,21 +1925,8 @@ public:<br>
   /// inlined-at location as \c this.  (Otherwise, it's not a valid attachemnt<br>
   /// to a \a DbgInfoIntrinsic.)<br>
   bool isValidLocationForIntrinsic(const MDLocation *DL) const {<br>
-    return DL && getInlinedAt() == DL->getInlinedAt() &&<br>
-           getScope()->getSubprogram() == DL->getScope()->getSubprogram();<br>
-  }<br>
-<br>
-  /// \brief Get an inlined version of this variable.<br>
-  ///<br>
-  /// Returns a version of this with \a getAlinedAt() set to \c InlinedAt.<br>
-  MDLocalVariable *withInline(MDLocation *InlinedAt) const {<br>
-    if (InlinedAt == getInlinedAt())<br>
-      return const_cast<MDLocalVariable *>(this);<br>
-    auto Temp = clone();<br>
-    Temp->replaceOperandWith(4, InlinedAt);<br>
-    return replaceWithUniqued(std::move(Temp));<br>
+    return DL && getScope()->getSubprogram() == DL->getScope()->getSubprogram();<br>
   }<br>
-  MDLocalVariable *withoutInline() const { return withInline(nullptr); }<br>
<br>
   static bool classof(const Metadata *MD) {<br>
     return MD->getMetadataID() == MDLocalVariableKind;<br>
<br>
Modified: llvm/trunk/lib/AsmParser/LLParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)<br>
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Wed Apr 15 17:29:27 2015<br>
@@ -3680,8 +3680,7 @@ bool LLParser::ParseMDGlobalVariable(MDN<br>
<br>
 /// ParseMDLocalVariable:<br>
 ///   ::= !MDLocalVariable(tag: DW_TAG_arg_variable, scope: !0, name: "foo",<br>
-///                        file: !1, line: 7, type: !2, arg: 2, flags: 7,<br>
-///                        inlinedAt: !3)<br>
+///                        file: !1, line: 7, type: !2, arg: 2, flags: 7)<br>
 bool LLParser::ParseMDLocalVariable(MDNode *&Result, bool IsDistinct) {<br>
 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED)                                    \<br>
   REQUIRED(tag, DwarfTagField, );                                              \<br>
@@ -3691,14 +3690,13 @@ bool LLParser::ParseMDLocalVariable(MDNo<br>
   OPTIONAL(line, LineField, );                                                 \<br>
   OPTIONAL(type, MDField, );                                                   \<br>
   OPTIONAL(arg, MDUnsignedField, (0, UINT8_MAX));                              \<br>
-  OPTIONAL(flags, DIFlagField, );                                              \<br>
-  OPTIONAL(inlinedAt, MDField, );<br>
+  OPTIONAL(flags, DIFlagField, );<br>
   PARSE_MD_FIELDS();<br>
 #undef VISIT_MD_FIELDS<br>
<br>
-  Result = GET_OR_DISTINCT(<br>
-      MDLocalVariable, (Context, tag.Val, scope.Val, name.Val, file.Val,<br>
-                        line.Val, type.Val, arg.Val, flags.Val, inlinedAt.Val));<br>
+  Result = GET_OR_DISTINCT(MDLocalVariable,<br>
+                           (Context, tag.Val, scope.Val, name.Val, file.Val,<br>
+                            line.Val, type.Val, arg.Val, flags.Val));<br>
   return false;<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)<br>
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Wed Apr 15 17:29:27 2015<br>
@@ -1911,7 +1911,8 @@ std::error_code BitcodeReader::ParseMeta<br>
       break;<br>
     }<br>
     case bitc::METADATA_LOCAL_VAR: {<br>
-      if (Record.size() != 10)<br>
+      // 10th field is for the obseleted 'inlinedAt:' field.<br>
+      if (Record.size() != 9 && Record.size() != 10)<br>
         return Error("Invalid record");<br>
<br>
       MDValueList.AssignValue(<br>
@@ -1919,7 +1920,7 @@ std::error_code BitcodeReader::ParseMeta<br>
                           (Context, Record[1], getMDOrNull(Record[2]),<br>
                            getMDString(Record[3]), getMDOrNull(Record[4]),<br>
                            Record[5], getMDOrNull(Record[6]), Record[7],<br>
-                           Record[8], getMDOrNull(Record[9]))),<br>
+                           Record[8])),<br>
           NextMDValueNo++);<br>
       break;<br>
     }<br>
<br>
Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)<br>
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Wed Apr 15 17:29:27 2015<br>
@@ -1085,7 +1085,6 @@ static void WriteMDLocalVariable(const M<br>
   Record.push_back(VE.getMetadataOrNullID(N->getType()));<br>
   Record.push_back(N->getArg());<br>
   Record.push_back(N->getFlags());<br>
-  Record.push_back(VE.getMetadataOrNullID(N->getInlinedAt()));<br>
<br>
   Stream.EmitRecord(bitc::METADATA_LOCAL_VAR, Record, Abbrev);<br>
   Record.clear();<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.cpp Wed Apr 15 17:29:27 2015<br>
@@ -33,7 +33,7 @@ static unsigned isDescribedByReg(const M<br>
   return MI.getOperand(0).isReg() ? MI.getOperand(0).getReg() : 0;<br>
 }<br>
<br>
-void DbgValueHistoryMap::startInstrRange(const MDNode *Var,<br>
+void DbgValueHistoryMap::startInstrRange(InlinedVariable Var,<br>
                                          const MachineInstr &MI) {<br>
   // Instruction range should start with a DBG_VALUE instruction for the<br>
   // variable.<br>
@@ -48,7 +48,7 @@ void DbgValueHistoryMap::startInstrRange<br>
   Ranges.push_back(std::make_pair(&MI, nullptr));<br>
 }<br>
<br>
-void DbgValueHistoryMap::endInstrRange(const MDNode *Var,<br>
+void DbgValueHistoryMap::endInstrRange(InlinedVariable Var,<br>
                                        const MachineInstr &MI) {<br>
   auto &Ranges = VarInstrRanges[Var];<br>
   // Verify that the current instruction range is not yet closed.<br>
@@ -59,7 +59,7 @@ void DbgValueHistoryMap::endInstrRange(c<br>
   Ranges.back().second = &MI;<br>
 }<br>
<br>
-unsigned DbgValueHistoryMap::getRegisterForVar(const MDNode *Var) const {<br>
+unsigned DbgValueHistoryMap::getRegisterForVar(InlinedVariable Var) const {<br>
   const auto &I = VarInstrRanges.find(Var);<br>
   if (I == VarInstrRanges.end())<br>
     return 0;<br>
@@ -71,12 +71,13 @@ unsigned DbgValueHistoryMap::getRegister<br>
<br>
 namespace {<br>
 // Maps physreg numbers to the variables they describe.<br>
-typedef std::map<unsigned, SmallVector<const MDNode *, 1>> RegDescribedVarsMap;<br>
+typedef DbgValueHistoryMap::InlinedVariable InlinedVariable;<br>
+typedef std::map<unsigned, SmallVector<InlinedVariable, 1>> RegDescribedVarsMap;<br>
 }<br>
<br>
 // \brief Claim that @Var is not described by @RegNo anymore.<br>
-static void dropRegDescribedVar(RegDescribedVarsMap &RegVars,<br>
-                                unsigned RegNo, const MDNode *Var) {<br>
+static void dropRegDescribedVar(RegDescribedVarsMap &RegVars, unsigned RegNo,<br>
+                                InlinedVariable Var) {<br>
   const auto &I = RegVars.find(RegNo);<br>
   assert(RegNo != 0U && I != RegVars.end());<br>
   auto &VarSet = I->second;<br>
@@ -89,8 +90,8 @@ static void dropRegDescribedVar(RegDescr<br>
 }<br>
<br>
 // \brief Claim that @Var is now described by @RegNo.<br>
-static void addRegDescribedVar(RegDescribedVarsMap &RegVars,<br>
-                               unsigned RegNo, const MDNode *Var) {<br>
+static void addRegDescribedVar(RegDescribedVarsMap &RegVars, unsigned RegNo,<br>
+                               InlinedVariable Var) {<br>
   assert(RegNo != 0U);<br>
   auto &VarSet = RegVars[RegNo];<br>
   assert(std::find(VarSet.begin(), VarSet.end(), Var) == VarSet.end());<br>
@@ -203,9 +204,13 @@ void llvm::calculateDbgValueHistory(cons<br>
       // Use the base variable (without any DW_OP_piece expressions)<br>
       // as index into History. The full variables including the<br>
       // piece expressions are attached to the MI.<br>
-      DIVariable Var = MI.getDebugVariable();<br>
-      assert(Var->isValidLocationForIntrinsic(MI.getDebugLoc()) &&<br>
+      MDLocalVariable *RawVar = MI.getDebugVariable();<br>
+      assert(RawVar->isValidLocationForIntrinsic(MI.getDebugLoc()) &&<br>
              "Expected inlined-at fields to agree");<br>
+      MDLocation *IA = nullptr;<br>
+      if (MDLocation *Loc = MI.getDebugLoc())<br>
+        IA = Loc->getInlinedAt();<br>
+      InlinedVariable Var(RawVar, IA);<br>
<br>
       if (unsigned PrevReg = Result.getRegisterForVar(Var))<br>
         dropRegDescribedVar(RegVars, PrevReg, Var);<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DbgValueHistoryCalculator.h Wed Apr 15 17:29:27 2015<br>
@@ -17,7 +17,8 @@ namespace llvm {<br>
<br>
 class MachineFunction;<br>
 class MachineInstr;<br>
-class MDNode;<br>
+class MDLocalVariable;<br>
+class MDLocation;<br>
 class TargetRegisterInfo;<br>
<br>
 // For each user variable, keep a list of instruction ranges where this variable<br>
@@ -31,16 +32,19 @@ class DbgValueHistoryMap {<br>
 public:<br>
   typedef std::pair<const MachineInstr *, const MachineInstr *> InstrRange;<br>
   typedef SmallVector<InstrRange, 4> InstrRanges;<br>
-  typedef MapVector<const MDNode *, InstrRanges> InstrRangesMap;<br>
+  typedef std::pair<const MDLocalVariable *, const MDLocation *><br>
+      InlinedVariable;<br>
+  typedef MapVector<InlinedVariable, InstrRanges> InstrRangesMap;<br>
+<br>
 private:<br>
   InstrRangesMap VarInstrRanges;<br>
<br>
 public:<br>
-  void startInstrRange(const MDNode *Var, const MachineInstr &MI);<br>
-  void endInstrRange(const MDNode *Var, const MachineInstr &MI);<br>
+  void startInstrRange(InlinedVariable Var, const MachineInstr &MI);<br>
+  void endInstrRange(InlinedVariable Var, const MachineInstr &MI);<br>
   // Returns register currently describing @Var. If @Var is currently<br>
   // unaccessible or is not described by a register, returns 0.<br>
-  unsigned getRegisterForVar(const MDNode *Var) const;<br>
+  unsigned getRegisterForVar(InlinedVariable Var) const;<br>
<br>
   bool empty() const { return VarInstrRanges.empty(); }<br>
   void clear() { VarInstrRanges.clear(); }<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Wed Apr 15 17:29:27 2015<br>
@@ -689,7 +689,7 @@ void DwarfCompileUnit::collectDeadVariab<br>
     SPDIE = getDIE(SP);<br>
   assert(SPDIE);<br>
   for (DIVariable DV : Variables) {<br>
-    DbgVariable NewVar(DV, DIExpression(), DD);<br>
+    DbgVariable NewVar(DV, nullptr, DIExpression(), DD);<br>
     auto VariableDie = constructVariableDIE(NewVar);<br>
     applyVariableAttributes(NewVar, *VariableDie);<br>
     SPDIE->addChild(std::move(VariableDie));<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Apr 15 17:29:27 2015<br>
@@ -489,7 +489,8 @@ void DwarfDebug::finishVariableDefinitio<br>
     // DIE::getUnit isn't simple - it walks parent pointers, etc.<br>
     DwarfCompileUnit *Unit = lookupUnit(VariableDie->getUnit());<br>
     assert(Unit);<br>
-    DbgVariable *AbsVar = getExistingAbstractVariable(Var->getVariable());<br>
+    DbgVariable *AbsVar = getExistingAbstractVariable(<br>
+        InlinedVariable(Var->getVariable(), Var->getInlinedAt()));<br>
     if (AbsVar && AbsVar->getDIE()) {<br>
       Unit->addDIEEntry(*VariableDie, dwarf::DW_AT_abstract_origin,<br>
                         *AbsVar->getDIE());<br>
@@ -660,48 +661,43 @@ void DwarfDebug::endModule() {<br>
 }<br>
<br>
 // Find abstract variable, if any, associated with Var.<br>
-DbgVariable *DwarfDebug::getExistingAbstractVariable(const DIVariable &DV,<br>
+DbgVariable *DwarfDebug::getExistingAbstractVariable(InlinedVariable IV,<br>
                                                      DIVariable &Cleansed) {<br>
-  LLVMContext &Ctx = DV->getContext();<br>
   // More then one inlined variable corresponds to one abstract variable.<br>
-  // FIXME: This duplication of variables when inlining should probably be<br>
-  // removed. It's done to allow each DIVariable to describe its location<br>
-  // because the DebugLoc on the dbg.value/declare isn't accurate. We should<br>
-  // make it accurate then remove this duplication/cleansing stuff.<br>
-  Cleansed = cleanseInlinedVariable(DV, Ctx);<br>
+  Cleansed = IV.first;<br>
   auto I = AbstractVariables.find(Cleansed);<br>
   if (I != AbstractVariables.end())<br>
     return I->second.get();<br>
   return nullptr;<br>
 }<br>
<br>
-DbgVariable *DwarfDebug::getExistingAbstractVariable(const DIVariable &DV) {<br>
+DbgVariable *DwarfDebug::getExistingAbstractVariable(InlinedVariable IV) {<br>
   DIVariable Cleansed;<br>
-  return getExistingAbstractVariable(DV, Cleansed);<br>
+  return getExistingAbstractVariable(IV, Cleansed);<br>
 }<br>
<br>
 void DwarfDebug::createAbstractVariable(const DIVariable &Var,<br>
                                         LexicalScope *Scope) {<br>
-  auto AbsDbgVariable = make_unique<DbgVariable>(Var, DIExpression(), this);<br>
+  auto AbsDbgVariable =<br>
+      make_unique<DbgVariable>(Var, nullptr, DIExpression(), this);<br>
   InfoHolder.addScopeVariable(Scope, AbsDbgVariable.get());<br>
   AbstractVariables[Var] = std::move(AbsDbgVariable);<br>
 }<br>
<br>
-void DwarfDebug::ensureAbstractVariableIsCreated(const DIVariable &DV,<br>
+void DwarfDebug::ensureAbstractVariableIsCreated(InlinedVariable IV,<br>
                                                  const MDNode *ScopeNode) {<br>
-  DIVariable Cleansed = DV;<br>
-  if (getExistingAbstractVariable(DV, Cleansed))<br>
+  DIVariable Cleansed;<br>
+  if (getExistingAbstractVariable(IV, Cleansed))<br>
     return;<br>
<br>
   createAbstractVariable(Cleansed, LScopes.getOrCreateAbstractScope(<br>
                                        cast<MDLocalScope>(ScopeNode)));<br>
 }<br>
<br>
-void<br>
-DwarfDebug::ensureAbstractVariableIsCreatedIfScoped(const DIVariable &DV,<br>
-                                                    const MDNode *ScopeNode) {<br>
-  DIVariable Cleansed = DV;<br>
-  if (getExistingAbstractVariable(DV, Cleansed))<br>
+void DwarfDebug::ensureAbstractVariableIsCreatedIfScoped(<br>
+    InlinedVariable IV, const MDNode *ScopeNode) {<br>
+  DIVariable Cleansed;<br>
+  if (getExistingAbstractVariable(IV, Cleansed))<br>
     return;<br>
<br>
   if (LexicalScope *Scope =<br>
@@ -711,11 +707,12 @@ DwarfDebug::ensureAbstractVariableIsCrea<br>
<br>
 // Collect variable information from side table maintained by MMI.<br>
 void DwarfDebug::collectVariableInfoFromMMITable(<br>
-    SmallPtrSetImpl<const MDNode *> &Processed) {<br>
+    DenseSet<InlinedVariable> &Processed) {<br>
   for (const auto &VI : MMI->getVariableDbgInfo()) {<br>
     if (!VI.Var)<br>
       continue;<br>
-    Processed.insert(VI.Var);<br>
+    InlinedVariable Var(VI.Var, VI.Loc ? VI.Loc->getInlinedAt() : nullptr);<br>
+    Processed.insert(Var);<br>
     LexicalScope *Scope = LScopes.findLexicalScope(VI.Loc);<br>
<br>
     // If variable scope is not found then skip this variable.<br>
@@ -726,8 +723,9 @@ void DwarfDebug::collectVariableInfoFrom<br>
     assert(DV->isValidLocationForIntrinsic(VI.Loc) &&<br>
            "Expected inlined-at fields to agree");<br>
     DIExpression Expr = cast_or_null<MDExpression>(VI.Expr);<br>
-    ensureAbstractVariableIsCreatedIfScoped(DV, Scope->getScopeNode());<br>
-    auto RegVar = make_unique<DbgVariable>(DV, Expr, this, VI.Slot);<br>
+    ensureAbstractVariableIsCreatedIfScoped(Var, Scope->getScopeNode());<br>
+    auto RegVar =<br>
+        make_unique<DbgVariable>(Var.first, Var.second, Expr, this, VI.Slot);<br>
     if (InfoHolder.addScopeVariable(Scope, RegVar.get()))<br>
       ConcreteVariables.push_back(std::move(RegVar));<br>
   }<br>
@@ -877,35 +875,34 @@ DwarfDebug::buildLocationList(SmallVecto<br>
<br>
<br>
 // Find variables for each lexical scope.<br>
-void<br>
-DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU, DISubprogram SP,<br>
-                                SmallPtrSetImpl<const MDNode *> &Processed) {<br>
+void DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU, DISubprogram SP,<br>
+                                     DenseSet<InlinedVariable> &Processed) {<br>
   // Grab the variable info that was squirreled away in the MMI side-table.<br>
   collectVariableInfoFromMMITable(Processed);<br>
<br>
   for (const auto &I : DbgValues) {<br>
-    DIVariable DV = cast<MDLocalVariable>(I.first);<br>
-    if (Processed.count(DV))<br>
+    InlinedVariable IV = I.first;<br>
+    if (Processed.count(IV))<br>
       continue;<br>
<br>
-    // Instruction ranges, specifying where DV is accessible.<br>
+    // Instruction ranges, specifying where IV is accessible.<br>
     const auto &Ranges = I.second;<br>
     if (Ranges.empty())<br>
       continue;<br>
<br>
     LexicalScope *Scope = nullptr;<br>
-    if (MDLocation *IA = DV->getInlinedAt())<br>
-      Scope = LScopes.findInlinedScope(DV->getScope(), IA);<br>
+    if (const MDLocation *IA = IV.second)<br>
+      Scope = LScopes.findInlinedScope(IV.first->getScope(), IA);<br>
     else<br>
-      Scope = LScopes.findLexicalScope(DV->getScope());<br>
+      Scope = LScopes.findLexicalScope(IV.first->getScope());<br>
     // If variable scope is not found then skip this variable.<br>
     if (!Scope)<br>
       continue;<br>
<br>
-    Processed.insert(DV);<br>
+    Processed.insert(IV);<br>
     const MachineInstr *MInsn = Ranges.front().first;<br>
     assert(MInsn->isDebugValue() && "History must begin with debug value");<br>
-    ensureAbstractVariableIsCreatedIfScoped(DV, Scope->getScopeNode());<br>
+    ensureAbstractVariableIsCreatedIfScoped(IV, Scope->getScopeNode());<br>
     ConcreteVariables.push_back(make_unique<DbgVariable>(MInsn, this));<br>
     DbgVariable *RegVar = ConcreteVariables.back().get();<br>
     InfoHolder.addScopeVariable(Scope, RegVar);<br>
@@ -931,12 +928,14 @@ DwarfDebug::collectVariableInfo(DwarfCom<br>
<br>
   // Collect info for variables that were optimized out.<br>
   for (DIVariable DV : SP->getVariables()) {<br>
-    if (!Processed.insert(DV).second)<br>
+    if (!Processed.insert(InlinedVariable(DV, nullptr)).second)<br>
       continue;<br>
     if (LexicalScope *Scope = LScopes.findLexicalScope(DV->getScope())) {<br>
-      ensureAbstractVariableIsCreatedIfScoped(DV, Scope->getScopeNode());<br>
+      ensureAbstractVariableIsCreatedIfScoped(InlinedVariable(DV, nullptr),<br>
+                                              Scope->getScopeNode());<br>
       DIExpression NoExpr;<br>
-      ConcreteVariables.push_back(make_unique<DbgVariable>(DV, NoExpr, this));<br>
+      ConcreteVariables.push_back(<br>
+          make_unique<DbgVariable>(DV, nullptr, NoExpr, this));<br>
       InfoHolder.addScopeVariable(Scope, ConcreteVariables.back().get());<br>
     }<br>
   }<br>
@@ -1188,7 +1187,7 @@ void DwarfDebug::endFunction(const Machi<br>
   DISubprogram SP = cast<MDSubprogram>(FnScope->getScopeNode());<br>
   DwarfCompileUnit &TheCU = *SPMap.lookup(SP);<br>
<br>
-  SmallPtrSet<const MDNode *, 16> ProcessedVars;<br>
+  DenseSet<InlinedVariable> ProcessedVars;<br>
   collectVariableInfo(TheCU, SP, ProcessedVars);<br>
<br>
   // Add the range of this function to the list of ranges for the CU.<br>
@@ -1218,9 +1217,10 @@ void DwarfDebug::endFunction(const Machi<br>
     DISubprogram SP = cast<MDSubprogram>(AScope->getScopeNode());<br>
     // Collect info for variables that were optimized out.<br>
     for (DIVariable DV : SP->getVariables()) {<br>
-      if (!ProcessedVars.insert(DV).second)<br>
+      if (!ProcessedVars.insert(InlinedVariable(DV, nullptr)).second)<br>
         continue;<br>
-      ensureAbstractVariableIsCreated(DV, DV->getScope());<br>
+      ensureAbstractVariableIsCreated(InlinedVariable(DV, nullptr),<br>
+                                      DV->getScope());<br>
       assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes<br>
              && "ensureAbstractVariableIsCreated inserted abstract scopes");<br>
     }<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Wed Apr 15 17:29:27 2015<br>
@@ -21,6 +21,7 @@<br>
 #include "DwarfAccelTable.h"<br>
 #include "DwarfFile.h"<br>
 #include "llvm/ADT/DenseMap.h"<br>
+#include "llvm/ADT/DenseSet.h"<br>
 #include "llvm/ADT/FoldingSet.h"<br>
 #include "llvm/ADT/MapVector.h"<br>
 #include "llvm/ADT/SmallPtrSet.h"<br>
@@ -74,7 +75,8 @@ public:<br>
 /// - Variables that are described by multiple MMI table entries have multiple<br>
 ///   expressions and frame indices.<br>
 class DbgVariable {<br>
-  DIVariable Var;             /// Variable Descriptor.<br>
+  DIVariable Var;                    /// Variable Descriptor.<br>
+  DILocation IA;                     /// Inlined at location.<br>
   SmallVector<DIExpression, 1> Expr; /// Complex address location expression.<br>
   DIE *TheDIE;                /// Variable DIE.<br>
   unsigned DotDebugLocOffset; /// Offset in DotDebugLocEntries.<br>
@@ -84,9 +86,10 @@ class DbgVariable {<br>
<br>
 public:<br>
   /// Construct a DbgVariable from a DIVariable.<br>
-    DbgVariable(DIVariable V, DIExpression E, DwarfDebug *DD, int FI = ~0)<br>
-    : Var(V), Expr(1, E), TheDIE(nullptr), DotDebugLocOffset(~0U),<br>
-      MInsn(nullptr), DD(DD) {<br>
+  DbgVariable(DIVariable V, DILocation IA, DIExpression E, DwarfDebug *DD,<br>
+              int FI = ~0)<br>
+      : Var(V), IA(IA), Expr(1, E), TheDIE(nullptr), DotDebugLocOffset(~0U),<br>
+        MInsn(nullptr), DD(DD) {<br>
     FrameIndex.push_back(FI);<br>
     assert(!E || E->isValid());<br>
   }<br>
@@ -95,13 +98,18 @@ public:<br>
   /// AbstractVar may be NULL.<br>
   DbgVariable(const MachineInstr *DbgValue, DwarfDebug *DD)<br>
       : Var(DbgValue->getDebugVariable()),<br>
+        IA(DbgValue->getDebugLoc() ? DbgValue->getDebugLoc()->getInlinedAt()<br>
+                                   : nullptr),<br>
         Expr(1, DbgValue->getDebugExpression()), TheDIE(nullptr),<br>
         DotDebugLocOffset(~0U), MInsn(DbgValue), DD(DD) {<br>
     FrameIndex.push_back(~0);<br>
+    if (MDLocation *Loc = DbgValue->getDebugLoc())<br>
+      IA = Loc->getInlinedAt();<br>
   }<br>
<br>
   // Accessors.<br>
   DIVariable getVariable() const { return Var; }<br>
+  DILocation getInlinedAt() const { return IA; }<br>
   const ArrayRef<DIExpression> getExpression() const { return Expr; }<br>
   void setDIE(DIE &D) { TheDIE = &D; }<br>
   DIE *getDIE() const { return TheDIE; }<br>
@@ -115,6 +123,7 @@ public:<br>
     assert(  DotDebugLocOffset == ~0U &&   !MInsn && "not an MMI entry");<br>
     assert(V.DotDebugLocOffset == ~0U && !V.MInsn && "not an MMI entry");<br>
     assert(V.Var == Var && "conflicting DIVariable");<br>
+    assert(V.IA == IA && "conflicting inlined-at location");<br>
<br>
     if (V.getFrameIndex().back() != ~0) {<br>
       auto E = V.getExpression();<br>
@@ -323,14 +332,16 @@ class DwarfDebug : public AsmPrinterHand<br>
     return InfoHolder.getUnits();<br>
   }<br>
<br>
+  typedef DbgValueHistoryMap::InlinedVariable InlinedVariable;<br>
+<br>
   /// \brief Find abstract variable associated with Var.<br>
-  DbgVariable *getExistingAbstractVariable(const DIVariable &DV,<br>
+  DbgVariable *getExistingAbstractVariable(InlinedVariable IV,<br>
                                            DIVariable &Cleansed);<br>
-  DbgVariable *getExistingAbstractVariable(const DIVariable &DV);<br>
+  DbgVariable *getExistingAbstractVariable(InlinedVariable IV);<br>
   void createAbstractVariable(const DIVariable &DV, LexicalScope *Scope);<br>
-  void ensureAbstractVariableIsCreated(const DIVariable &Var,<br>
+  void ensureAbstractVariableIsCreated(InlinedVariable Var,<br>
                                        const MDNode *Scope);<br>
-  void ensureAbstractVariableIsCreatedIfScoped(const DIVariable &Var,<br>
+  void ensureAbstractVariableIsCreatedIfScoped(InlinedVariable Var,<br>
                                                const MDNode *Scope);<br>
<br>
   /// \brief Construct a DIE for this abstract scope.<br>
@@ -460,7 +471,7 @@ class DwarfDebug : public AsmPrinterHand<br>
<br>
   /// \brief Populate LexicalScope entries with variables' info.<br>
   void collectVariableInfo(DwarfCompileUnit &TheCU, DISubprogram SP,<br>
-                           SmallPtrSetImpl<const MDNode *> &ProcessedVars);<br>
+                           DenseSet<InlinedVariable> &ProcessedVars);<br>
<br>
   /// \brief Build the location list for all DBG_VALUEs in the<br>
   /// function that describe the same variable.<br>
@@ -469,7 +480,7 @@ class DwarfDebug : public AsmPrinterHand<br>
<br>
   /// \brief Collect variable information from the side table maintained<br>
   /// by MMI.<br>
-  void collectVariableInfoFromMMITable(SmallPtrSetImpl<const MDNode *> &P);<br>
+  void collectVariableInfoFromMMITable(DenseSet<InlinedVariable> &P);<br>
<br>
   /// \brief Ensure that a label will be emitted before MI.<br>
   void requestLabelBeforeInsn(const MachineInstr *MI) {<br>
<br>
Modified: llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/LiveDebugVariables.cpp Wed Apr 15 17:29:27 2015<br>
@@ -378,12 +378,13 @@ static void printDebugLoc(DebugLoc DL, r<br>
   CommentOS << " ]";<br>
 }<br>
<br>
-static void printExtendedName(raw_ostream &OS, const MDLocalVariable *V) {<br>
+static void printExtendedName(raw_ostream &OS, const MDLocalVariable *V,<br>
+                              const MDLocation *DL) {<br>
   const LLVMContext &Ctx = V->getContext();<br>
   StringRef Res = V->getName();<br>
   if (!Res.empty())<br>
     OS << Res << "," << V->getLine();<br>
-  if (auto *InlinedAt = V->getInlinedAt()) {<br>
+  if (auto *InlinedAt = DL->getInlinedAt()) {<br>
     if (DebugLoc InlinedAtDL = InlinedAt) {<br>
       OS << " @[";<br>
       printDebugLoc(InlinedAtDL, OS, Ctx);<br>
@@ -395,7 +396,7 @@ static void printExtendedName(raw_ostrea<br>
 void UserValue::print(raw_ostream &OS, const TargetRegisterInfo *TRI) {<br>
   DIVariable DV = cast<MDLocalVariable>(Variable);<br>
   OS << "!\"";<br>
-  printExtendedName(OS, DV);<br>
+  printExtendedName(OS, DV, dl);<br>
<br>
   OS << "\"\t";<br>
   if (offset)<br>
<br>
Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Wed Apr 15 17:29:27 2015<br>
@@ -1712,7 +1712,7 @@ void MachineInstr::print(raw_ostream &OS<br>
     if (!HaveSemi) OS << ";";<br>
     DIVariable DV = cast<MDLocalVariable>(getOperand(e - 2).getMetadata());<br>
     OS << " line no:" <<  DV->getLine();<br>
-    if (auto *InlinedAt = DV->getInlinedAt()) {<br>
+    if (auto *InlinedAt = debugLoc->getInlinedAt()) {<br>
       DebugLoc InlinedAtDL(InlinedAt);<br>
       if (InlinedAtDL && MF) {<br>
         OS << " inlined @[ ";<br>
<br>
Modified: llvm/trunk/lib/IR/AsmWriter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWriter.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWriter.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/AsmWriter.cpp (original)<br>
+++ llvm/trunk/lib/IR/AsmWriter.cpp Wed Apr 15 17:29:27 2015<br>
@@ -1745,7 +1745,6 @@ static void writeMDLocalVariable(raw_ost<br>
   Printer.printInt("line", N->getLine());<br>
   Printer.printMetadata("type", N->getRawType());<br>
   Printer.printDIFlags("flags", N->getFlags());<br>
-  Printer.printMetadata("inlinedAt", N->getRawInlinedAt());<br>
   Out << ")";<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/lib/IR/DebugInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/DebugInfo.cpp (original)<br>
+++ llvm/trunk/lib/IR/DebugInfo.cpp Wed Apr 15 17:29:27 2015<br>
@@ -35,16 +35,6 @@ using namespace llvm::dwarf;<br>
<br>
 DIScopeRef DIScope::getRef() const { return MDScopeRef::get(get()); }<br>
<br>
-DIVariable llvm::createInlinedVariable(MDNode *DV, MDNode *InlinedScope,<br>
-                                       LLVMContext &VMContext) {<br>
-  return cast<MDLocalVariable>(DV)<br>
-      ->withInline(cast_or_null<MDLocation>(InlinedScope));<br>
-}<br>
-<br>
-DIVariable llvm::cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext) {<br>
-  return cast<MDLocalVariable>(DV)->withoutInline();<br>
-}<br>
-<br>
 DISubprogram llvm::getDISubprogram(const MDNode *Scope) {<br>
   if (auto *LocalScope = dyn_cast_or_null<MDLocalScope>(Scope))<br>
     return LocalScope->getSubprogram();<br>
<br>
Modified: llvm/trunk/lib/IR/DebugInfoMetadata.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfoMetadata.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfoMetadata.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/DebugInfoMetadata.cpp (original)<br>
+++ llvm/trunk/lib/IR/DebugInfoMetadata.cpp Wed Apr 15 17:29:27 2015<br>
@@ -450,10 +450,12 @@ MDGlobalVariable::getImpl(LLVMContext &C<br>
                        Ops);<br>
 }<br>
<br>
-MDLocalVariable *MDLocalVariable::getImpl(<br>
-    LLVMContext &Context, unsigned Tag, Metadata *Scope, MDString *Name,<br>
-    Metadata *File, unsigned Line, Metadata *Type, unsigned Arg, unsigned Flags,<br>
-    Metadata *InlinedAt, StorageType Storage, bool ShouldCreate) {<br>
+MDLocalVariable *MDLocalVariable::getImpl(LLVMContext &Context, unsigned Tag,<br>
+                                          Metadata *Scope, MDString *Name,<br>
+                                          Metadata *File, unsigned Line,<br>
+                                          Metadata *Type, unsigned Arg,<br>
+                                          unsigned Flags, StorageType Storage,<br>
+                                          bool ShouldCreate) {<br>
   // Truncate Arg to 8 bits.<br>
   //<br>
   // FIXME: This is gross (and should be changed to an assert or removed), but<br>
@@ -463,8 +465,8 @@ MDLocalVariable *MDLocalVariable::getImp<br>
   assert(Scope && "Expected scope");<br>
   assert(isCanonical(Name) && "Expected canonical MDString");<br>
   DEFINE_GETIMPL_LOOKUP(MDLocalVariable, (Tag, Scope, getString(Name), File,<br>
-                                          Line, Type, Arg, Flags, InlinedAt));<br>
-  Metadata *Ops[] = {Scope, Name, File, Type, InlinedAt};<br>
+                                          Line, Type, Arg, Flags));<br>
+  Metadata *Ops[] = {Scope, Name, File, Type};<br>
   DEFINE_GETIMPL_STORE(MDLocalVariable, (Tag, Line, Arg, Flags), Ops);<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/lib/IR/LLVMContextImpl.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMContextImpl.h?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMContextImpl.h?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/LLVMContextImpl.h (original)<br>
+++ llvm/trunk/lib/IR/LLVMContextImpl.h Wed Apr 15 17:29:27 2015<br>
@@ -736,29 +736,24 @@ template <> struct MDNodeKeyImpl<MDLocal<br>
   Metadata *Type;<br>
   unsigned Arg;<br>
   unsigned Flags;<br>
-  Metadata *InlinedAt;<br>
<br>
   MDNodeKeyImpl(unsigned Tag, Metadata *Scope, StringRef Name, Metadata *File,<br>
-                unsigned Line, Metadata *Type, unsigned Arg, unsigned Flags,<br>
-                Metadata *InlinedAt)<br>
+                unsigned Line, Metadata *Type, unsigned Arg, unsigned Flags)<br>
       : Tag(Tag), Scope(Scope), Name(Name), File(File), Line(Line), Type(Type),<br>
-        Arg(Arg), Flags(Flags), InlinedAt(InlinedAt) {}<br>
+        Arg(Arg), Flags(Flags) {}<br>
   MDNodeKeyImpl(const MDLocalVariable *N)<br>
       : Tag(N->getTag()), Scope(N->getRawScope()), Name(N->getName()),<br>
         File(N->getRawFile()), Line(N->getLine()), Type(N->getRawType()),<br>
-        Arg(N->getArg()), Flags(N->getFlags()),<br>
-        InlinedAt(N->getRawInlinedAt()) {}<br>
+        Arg(N->getArg()), Flags(N->getFlags()) {}<br>
<br>
   bool isKeyOf(const MDLocalVariable *RHS) const {<br>
     return Tag == RHS->getTag() && Scope == RHS->getRawScope() &&<br>
            Name == RHS->getName() && File == RHS->getRawFile() &&<br>
            Line == RHS->getLine() && Type == RHS->getRawType() &&<br>
-           Arg == RHS->getArg() && Flags == RHS->getFlags() &&<br>
-           InlinedAt == RHS->getRawInlinedAt();<br>
+           Arg == RHS->getArg() && Flags == RHS->getFlags();<br>
   }<br>
   unsigned getHashValue() const {<br>
-    return hash_combine(Tag, Scope, Name, File, Line, Type, Arg, Flags,<br>
-                        InlinedAt);<br>
+    return hash_combine(Tag, Scope, Name, File, Line, Type, Arg, Flags);<br>
   }<br>
 };<br>
<br>
<br>
Modified: llvm/trunk/lib/IR/Verifier.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/Verifier.cpp (original)<br>
+++ llvm/trunk/lib/IR/Verifier.cpp Wed Apr 15 17:29:27 2015<br>
@@ -1075,9 +1075,6 @@ void Verifier::visitMDLocalVariable(cons<br>
          "invalid tag", &N);<br>
   Assert(N.getRawScope() && isa<MDLocalScope>(N.getRawScope()),<br>
          "local variable requires a valid scope", &N, N.getRawScope());<br>
-  if (auto *IA = N.getRawInlinedAt())<br>
-    Assert(isa<MDLocation>(IA), "local variable requires a valid scope", &N,<br>
-           IA);<br>
 }<br>
<br>
 void Verifier::visitMDExpression(const MDExpression &N) {<br>
@@ -3401,17 +3398,12 @@ void Verifier::visitDbgIntrinsic(StringR<br>
   BasicBlock *BB = DII.getParent();<br>
   Function *F = BB ? BB->getParent() : nullptr;<br>
<br>
-  // The inlined-at attachments for variables and !dbg attachments must agree.<br>
+  // The scopes for variables and !dbg attachments must agree.<br>
   MDLocalVariable *Var = DII.getVariable();<br>
-  MDLocation *VarIA = Var->getInlinedAt();<br>
   MDLocation *Loc = DII.getDebugLoc();<br>
   Assert(Loc, "llvm.dbg." + Kind + " intrinsic requires a !dbg attachment",<br>
          &DII, BB, F);<br>
<br>
-  MDLocation *LocIA = Loc->getInlinedAt();<br>
-  Assert(VarIA == LocIA, "mismatched variable and !dbg inlined-at", &DII, BB, F,<br>
-         Var, VarIA, Loc, LocIA);<br>
-<br>
   MDSubprogram *VarSP = getSubprogram(Var->getRawScope());<br>
   MDSubprogram *LocSP = getSubprogram(Loc->getRawScope());<br>
   if (!VarSP || !LocSP)<br>
<br>
Modified: llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp Wed Apr 15 17:29:27 2015<br>
@@ -904,19 +904,6 @@ static void fixupLineNumbers(Function *F<br>
         BI->setDebugLoc(TheCallDL);<br>
       } else {<br>
         BI->setDebugLoc(updateInlinedAtInfo(DL, InlinedAtNode, BI->getContext(), IANodes));<br>
-        if (DbgValueInst *DVI = dyn_cast<DbgValueInst>(BI)) {<br>
-          LLVMContext &Ctx = BI->getContext();<br>
-          MDNode *InlinedAt = BI->getDebugLoc().getInlinedAt();<br>
-          DVI->setOperand(2, MetadataAsValue::get(<br>
-                                 Ctx, createInlinedVariable(DVI->getVariable(),<br>
-                                                            InlinedAt, Ctx)));<br>
-        } else if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(BI)) {<br>
-          LLVMContext &Ctx = BI->getContext();<br>
-          MDNode *InlinedAt = BI->getDebugLoc().getInlinedAt();<br>
-          DDI->setOperand(1, MetadataAsValue::get(<br>
-                                 Ctx, createInlinedVariable(DDI->getVariable(),<br>
-                                                            InlinedAt, Ctx)));<br>
-        }<br>
       }<br>
     }<br>
   }<br>
<br>
Modified: llvm/trunk/test/Assembler/mdlocalvariable.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdlocalvariable.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/mdlocalvariable.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Assembler/mdlocalvariable.ll (original)<br>
+++ llvm/trunk/test/Assembler/mdlocalvariable.ll Wed Apr 15 17:29:27 2015<br>
@@ -12,13 +12,13 @@<br>
 !3 = !MDBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)<br>
 !4 = !MDLocation(scope: !0)<br>
<br>
-; CHECK: !5 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "foo", arg: 3, scope: !0, file: !2, line: 7, type: !3, flags: DIFlagArtificial, inlinedAt: !4)<br>
-; CHECK: !6 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "foo", scope: !0, file: !2, line: 7, type: !3, flags: DIFlagArtificial, inlinedAt: !4)<br>
+; CHECK: !5 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "foo", arg: 3, scope: !0, file: !2, line: 7, type: !3, flags: DIFlagArtificial)<br>
+; CHECK: !6 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "foo", scope: !0, file: !2, line: 7, type: !3, flags: DIFlagArtificial)<br>
 !5 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "foo", arg: 3,<br>
                       scope: !0, file: !2, line: 7, type: !3,<br>
-                      flags: DIFlagArtificial, inlinedAt: !4)<br>
+                      flags: DIFlagArtificial)<br>
 !6 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "foo", scope: !0,<br>
-                      file: !2, line: 7, type: !3, flags: DIFlagArtificial, inlinedAt: !4)<br>
+                      file: !2, line: 7, type: !3, flags: DIFlagArtificial)<br>
<br>
 ; CHECK: !7 = !MDLocalVariable(tag: DW_TAG_arg_variable, arg: 0, scope: !0)<br>
 ; CHECK: !8 = !MDLocalVariable(tag: DW_TAG_auto_variable, scope: !0)<br>
<br>
Modified: llvm/trunk/test/CodeGen/ARM/debug-info-d16-reg.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/debug-info-d16-reg.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/debug-info-d16-reg.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/ARM/debug-info-d16-reg.ll (original)<br>
+++ llvm/trunk/test/CodeGen/ARM/debug-info-d16-reg.ll Wed Apr 15 17:29:27 2015<br>
@@ -82,9 +82,9 @@ declare i32 @puts(i8* nocapture) nounwin<br>
 !20 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "val", line: 4, arg: 2, scope: !9, file: !1, type: !7)<br>
 !21 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "c", line: 4, arg: 3, scope: !9, file: !1, type: !8)<br>
<br>
-!49 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "ptr", line: 4, arg: 1, scope: !9, file: !1, type: !6, inlinedAt: !37)<br>
-!50 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "val", line: 4, arg: 2, scope: !9, file: !1, type: !7, inlinedAt: !37)<br>
-!51 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "c", line: 4, arg: 2, scope: !9, file: !1, type: !8, inlinedAt: !37)<br>
+!49 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "ptr", line: 4, arg: 1, scope: !9, file: !1, type: !6)<br>
+!50 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "val", line: 4, arg: 2, scope: !9, file: !1, type: !7)<br>
+!51 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "c", line: 4, arg: 2, scope: !9, file: !1, type: !8)<br>
<br>
 !22 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "argc", line: 17, arg: 0, scope: !10, file: !1, type: !5)<br>
 !23 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "argv", line: 17, arg: 0, scope: !10, file: !1, type: !13)<br>
<br>
Modified: llvm/trunk/test/CodeGen/ARM/debug-info-s16-reg.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/debug-info-s16-reg.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/debug-info-s16-reg.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/ARM/debug-info-s16-reg.ll (original)<br>
+++ llvm/trunk/test/CodeGen/ARM/debug-info-s16-reg.ll Wed Apr 15 17:29:27 2015<br>
@@ -80,9 +80,9 @@ declare void @llvm.dbg.value(metadata, i<br>
 !12 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "c", line: 4, arg: 3, scope: !0, file: !1, type: !13)<br>
 !13 = !MDBasicType(tag: DW_TAG_base_type, name: "unsigned char", size: 8, align: 8, encoding: DW_ATE_unsigned_char)<br>
<br>
-!58 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "ptr", line: 4, arg: 1, scope: !0, file: !1, type: !9, inlinedAt: !40)<br>
-!60 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "val", line: 4, arg: 2, scope: !0, file: !1, type: !11, inlinedAt: !40)<br>
-!62 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "c", line: 4, arg: 3, scope: !0, file: !1, type: !13, inlinedAt: !40)<br>
+!58 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "ptr", line: 4, arg: 1, scope: !0, file: !1, type: !9)<br>
+!60 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "val", line: 4, arg: 2, scope: !0, file: !1, type: !11)<br>
+!62 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "c", line: 4, arg: 3, scope: !0, file: !1, type: !13)<br>
<br>
 !14 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "ptr", line: 11, arg: 1, scope: !6, file: !1, type: !9)<br>
 !15 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "val", line: 11, arg: 2, scope: !6, file: !1, type: !11)<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/dbg-changes-codegen-branch-folding.ll Wed Apr 15 17:29:27 2015<br>
@@ -169,36 +169,36 @@ attributes #2 = { nounwind readnone }<br>
 !53 = distinct !MDLexicalBlock(line: 14, column: 0, file: !1, scope: !51)<br>
 !54 = !MDLocation(line: 16, scope: !53)<br>
 !55 = !MDLocation(line: 17, scope: !24)<br>
-!56 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !40, type: !38, inlinedAt: !55)<br>
+!56 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !40, type: !38)<br>
 !57 = !MDLocation(line: 0, scope: !40, inlinedAt: !55)<br>
 !58 = !{i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0)}<br>
-!59 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 5, arg: 2, scope: !40, file: !25, type: !15, inlinedAt: !55)<br>
+!59 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 5, arg: 2, scope: !40, file: !25, type: !15)<br>
 !60 = !MDLocation(line: 5, scope: !40, inlinedAt: !55)<br>
 !61 = !MDLocation(line: 5, scope: !62, inlinedAt: !55)<br>
 !62 = distinct !MDLexicalBlock(line: 5, column: 0, file: !1, scope: !40)<br>
 !63 = !MDLocation(line: 18, scope: !24)<br>
-!64 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !40, type: !38, inlinedAt: !63)<br>
+!64 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !40, type: !38)<br>
 !65 = !MDLocation(line: 0, scope: !40, inlinedAt: !63)<br>
-!66 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 5, arg: 2, scope: !40, file: !25, type: !15, inlinedAt: !63)<br>
+!66 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 5, arg: 2, scope: !40, file: !25, type: !15)<br>
 !67 = !MDLocation(line: 5, scope: !40, inlinedAt: !63)<br>
 !68 = !MDLocation(line: 5, scope: !62, inlinedAt: !63)<br>
 !69 = !MDLocation(line: 20, scope: !70)<br>
 !70 = distinct !MDLexicalBlock(line: 20, column: 0, file: !1, scope: !24)<br>
-!71 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38, inlinedAt: !72)<br>
+!71 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38)<br>
 !72 = !MDLocation(line: 21, scope: !70)<br>
 !73 = !MDLocation(line: 0, scope: !35, inlinedAt: !72)<br>
 !74 = !{i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str1, i64 0, i64 0)}<br>
-!75 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15, inlinedAt: !72)<br>
+!75 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15)<br>
 !76 = !MDLocation(line: 6, scope: !35, inlinedAt: !72)<br>
-!77 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38, inlinedAt: !78)<br>
+!77 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38)<br>
 !78 = !MDLocation(line: 23, scope: !70)<br>
 !79 = !MDLocation(line: 0, scope: !35, inlinedAt: !78)<br>
 !80 = !{i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str2, i64 0, i64 0)}<br>
-!81 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15, inlinedAt: !78)<br>
+!81 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15)<br>
 !82 = !MDLocation(line: 6, scope: !35, inlinedAt: !78)<br>
-!83 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38, inlinedAt: !84)<br>
+!83 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !35, type: !38)<br>
 !84 = !MDLocation(line: 24, scope: !24)<br>
 !85 = !MDLocation(line: 0, scope: !35, inlinedAt: !84)<br>
-!86 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15, inlinedAt: !84)<br>
+!86 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "value", line: 6, arg: 2, scope: !35, file: !25, type: !15)<br>
 !87 = !MDLocation(line: 6, scope: !35, inlinedAt: !84)<br>
 !88 = !MDLocation(line: 25, scope: !24)<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll Wed Apr 15 17:29:27 2015<br>
@@ -48,7 +48,7 @@ attributes #0 = { sspreq }<br>
 !20 = !{}<br>
 !21 = !{i32 2, !"Dwarf Version", i32 2}<br>
 !22 = !{i64* getelementptr inbounds ({ i64, [56 x i8] }, { i64, [56 x i8] }* @a, i32 0, i32 0)}<br>
-!23 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p2", line: 12, arg: 2, scope: !24, file: !10, type: !32, inlinedAt: !38)<br>
+!23 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p2", line: 12, arg: 2, scope: !24, file: !10, type: !32)<br>
 !24 = !MDSubprogram(name: "min<unsigned long long>", linkageName: "_ZN3__13minIyEERKT_S3_RS1_", line: 12, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 12, file: !1, scope: !25, type: !27, templateParams: !33, variables: !35)<br>
 !25 = !MDNamespace(name: "__1", line: 1, file: !26, scope: null)<br>
 !26 = !MDFile(filename: "main.cpp", directory: "/Users/matt/ryan_bug")<br>
@@ -85,7 +85,7 @@ attributes #0 = { sspreq }<br>
 !58 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p3", line: 8, arg: 3, scope: !41, file: !10, type: !44)<br>
 !59 = !MDLocation(line: 13, scope: !24, inlinedAt: !38)<br>
 !63 = !{i32 undef}<br>
-!64 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p1", line: 1, arg: 2, scope: !65, file: !10, type: !50, inlinedAt: !40)<br>
+!64 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p1", line: 1, arg: 2, scope: !65, file: !10, type: !50)<br>
 !65 = !MDSubprogram(name: "operator()", linkageName: "_ZN3__11AclERKiS2_", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, scopeLine: 2, file: !1, scope: !25, type: !47, declaration: !46, variables: !66)<br>
 !66 = !{!67, !69, !70}<br>
 !67 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !65, type: !68)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/2010-05-03-OriginDIE.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/2010-05-03-OriginDIE.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/2010-05-03-OriginDIE.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/2010-05-03-OriginDIE.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/2010-05-03-OriginDIE.ll Wed Apr 15 17:29:27 2015<br>
@@ -58,7 +58,7 @@ declare void @uuid_LtoB(i8*, i8*)<br>
 !5 = !MDSubroutineType(types: !6)<br>
 !6 = !{null}<br>
 !7 = !MDLocation(line: 810, scope: !1)<br>
-!8 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "data", line: 201, arg: 0, scope: !9, file: !10, type: !11, inlinedAt: !7)<br>
+!8 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "data", line: 201, arg: 0, scope: !9, file: !10, type: !11)<br>
 !9 = !MDSubprogram(name: "_OSSwapInt64", linkageName: "_OSSwapInt64", line: 202, isLocal: true, isDefinition: true, virtualIndex: 6, isOptimized: false, file: !10, scope: null, type: !5)<br>
 !10 = !MDFile(filename: "OSByteOrder.h", directory: "/usr/include/libkern/ppc")<br>
 !11 = !MDDerivedType(tag: DW_TAG_typedef, name: "uint64_t", line: 59, file: !36, scope: !3, baseType: !13)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/2010-06-29-InlinedFnLocalVar.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/2010-06-29-InlinedFnLocalVar.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/2010-06-29-InlinedFnLocalVar.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/2010-06-29-InlinedFnLocalVar.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/2010-06-29-InlinedFnLocalVar.ll Wed Apr 15 17:29:27 2015<br>
@@ -37,8 +37,8 @@ entry:<br>
 !9 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "j", line: 9, arg: 0, scope: !0, file: !1, type: !5)<br>
 !10 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "xyz", line: 10, scope: !11, file: !1, type: !12)<br>
<br>
-!59 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "j", line: 9, arg: 0, scope: !0, file: !1, type: !5, inlinedAt: !17)<br>
-!60 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "xyz", line: 10, scope: !11, file: !1, type: !12, inlinedAt: !17)<br>
+!59 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "j", line: 9, arg: 0, scope: !0, file: !1, type: !5)<br>
+!60 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "xyz", line: 10, scope: !11, file: !1, type: !12)<br>
<br>
 !11 = distinct !MDLexicalBlock(line: 9, column: 0, file: !1, scope: !0)<br>
 !12 = !MDCompositeType(tag: DW_TAG_structure_type, name: "X", line: 10, size: 64, align: 32, file: !27, scope: !0, elements: !13)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/AArch64/cfi-eof-prologue.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/AArch64/cfi-eof-prologue.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/AArch64/cfi-eof-prologue.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/AArch64/cfi-eof-prologue.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/AArch64/cfi-eof-prologue.ll Wed Apr 15 17:29:27 2015<br>
@@ -106,7 +106,7 @@ attributes #3 = { nounwind }<br>
 !42 = !{!"vtable pointer", !43, i64 0}<br>
 !43 = !{!"Simple C/C++ TBAA"}<br>
 !44 = !MDLocation(line: 0, scope: !32)<br>
-!45 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !28, type: !31, inlinedAt: !46)<br>
+!45 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !28, type: !31)<br>
 !46 = !MDLocation(line: 9, scope: !32)<br>
 !47 = !MDLocation(line: 0, scope: !28, inlinedAt: !46)<br>
 !48 = !MDLocation(line: 9, scope: !28, inlinedAt: !46)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/AArch64/frameindices.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/AArch64/frameindices.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/AArch64/frameindices.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/AArch64/frameindices.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/AArch64/frameindices.ll Wed Apr 15 17:29:27 2015<br>
@@ -234,7 +234,7 @@ attributes #5 = { builtin }<br>
 !71 = !MDLocation(line: 15, column: 3, scope: !25, inlinedAt: !66)<br>
 !72 = !MDLocation(line: 16, column: 1, scope: !25, inlinedAt: !66)<br>
 !73 = !MDLocation(line: 17, column: 27, scope: !31)<br>
-!74 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p1", line: 17, arg: 1, scope: !31, file: !26, type: !"_ZTS1A", inlinedAt: !75)<br>
+!74 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p1", line: 17, arg: 1, scope: !31, file: !26, type: !"_ZTS1A")<br>
 !75 = distinct !MDLocation(line: 22, column: 3, scope: !34)<br>
 !76 = !MDExpression(DW_OP_bit_piece, 8, 120)<br>
 !77 = !MDLocation(line: 17, column: 12, scope: !31, inlinedAt: !75)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/ARM/cfi-eof-prologue.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/ARM/cfi-eof-prologue.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/ARM/cfi-eof-prologue.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/ARM/cfi-eof-prologue.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/ARM/cfi-eof-prologue.ll Wed Apr 15 17:29:27 2015<br>
@@ -109,7 +109,7 @@ attributes #3 = { nounwind }<br>
 !44 = !{!"vtable pointer", !45, i64 0}<br>
 !45 = !{!"Simple C/C++ TBAA"}<br>
 !46 = !MDLocation(line: 0, scope: !32)<br>
-!47 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !28, type: !31, inlinedAt: !48)<br>
+!47 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !28, type: !31)<br>
 !48 = !MDLocation(line: 9, scope: !32)<br>
 !49 = !MDLocation(line: 0, scope: !28, inlinedAt: !48)<br>
 !50 = !MDLocation(line: 9, scope: !28, inlinedAt: !48)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll Wed Apr 15 17:29:27 2015<br>
@@ -37,8 +37,8 @@ entry:<br>
 !9 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "j", line: 9, arg: 0, scope: !0, file: !1, type: !5)<br>
 !10 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "xyz", line: 10, scope: !11, file: !1, type: !12)<br>
<br>
-!59 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "j", line: 9, arg: 0, scope: !0, file: !1, type: !5, inlinedAt: !17)<br>
-!60 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "xyz", line: 10, scope: !11, file: !1, type: !12, inlinedAt: !17)<br>
+!59 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "j", line: 9, arg: 0, scope: !0, file: !1, type: !5)<br>
+!60 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "xyz", line: 10, scope: !11, file: !1, type: !12)<br>
<br>
 !11 = distinct !MDLexicalBlock(line: 9, column: 0, file: !1, scope: !0)<br>
 !12 = !MDCompositeType(tag: DW_TAG_structure_type, name: "X", line: 10, size: 64, align: 32, file: !27, scope: !0, elements: !13)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/PR20038.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PR20038.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PR20038.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/PR20038.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/PR20038.ll Wed Apr 15 17:29:27 2015<br>
@@ -155,9 +155,9 @@ attributes #2 = { nounwind readnone }<br>
 !32 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !16, type: !30)<br>
 !33 = !MDLocation(line: 0, scope: !16, inlinedAt: !21)<br>
<br>
-!129 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !17, type: !30, inlinedAt: !22)<br>
-!132 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !16, type: !30, inlinedAt: !21)<br>
-!232 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !16, type: !30, inlinedAt: !37)<br>
+!129 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !17, type: !30)<br>
+!132 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !16, type: !30)<br>
+!232 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !16, type: !30)<br>
<br>
 !34 = !MDLocation(line: 5, scope: !35)<br>
 !35 = distinct !MDLexicalBlock(line: 5, column: 0, file: !5, scope: !36)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/InlinedFnLocalVar.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/InlinedFnLocalVar.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/InlinedFnLocalVar.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/InlinedFnLocalVar.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/InlinedFnLocalVar.ll Wed Apr 15 17:29:27 2015<br>
@@ -37,8 +37,8 @@ entry:<br>
 !9 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "j", line: 9, arg: 0, scope: !0, file: !1, type: !5)<br>
 !10 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "xyz", line: 10, scope: !11, file: !1, type: !12)<br>
<br>
-!109 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "j", line: 9, arg: 0, scope: !0, file: !1, type: !5, inlinedAt: !17)<br>
-!110 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "xyz", line: 10, scope: !11, file: !1, type: !12, inlinedAt: !17)<br>
+!109 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "j", line: 9, arg: 0, scope: !0, file: !1, type: !5)<br>
+!110 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "xyz", line: 10, scope: !11, file: !1, type: !12)<br>
<br>
 !11 = distinct !MDLexicalBlock(line: 9, column: 0, file: !1, scope: !0)<br>
 !12 = !MDCompositeType(tag: DW_TAG_structure_type, name: "X", line: 10, size: 64, align: 32, file: !27, scope: !0, elements: !13)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/dbg-value-inlined-parameter.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-value-inlined-parameter.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-value-inlined-parameter.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/dbg-value-inlined-parameter.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/dbg-value-inlined-parameter.ll Wed Apr 15 17:29:27 2015<br>
@@ -61,8 +61,8 @@ declare float* @bar(i32) optsize<br>
<br>
 define void @foobar() nounwind optsize ssp {<br>
 entry:<br>
-  tail call void @llvm.dbg.value(metadata %struct.S1* @p, i64 0, metadata !109, metadata !MDExpression()) nounwind, !dbg !31<br>
-  tail call void @llvm.dbg.value(metadata i32 1, i64 0, metadata !118, metadata !MDExpression()) nounwind, !dbg !35<br>
+  tail call void @llvm.dbg.value(metadata %struct.S1* @p, i64 0, metadata !9, metadata !MDExpression()) nounwind, !dbg !31<br>
+  tail call void @llvm.dbg.value(metadata i32 1, i64 0, metadata !18, metadata !MDExpression()) nounwind, !dbg !35<br>
   store i32 1, i32* getelementptr inbounds (%struct.S1, %struct.S1* @p, i64 0, i32 1), align 8, !dbg !36<br>
   %call.i = tail call float* @bar(i32 1) nounwind optsize, !dbg !37<br>
   store float* %call.i, float** getelementptr inbounds (%struct.S1, %struct.S1* @p, i64 0, i32 0), align 8, !dbg !37<br>
@@ -84,9 +84,6 @@ declare void @llvm.dbg.value(metadata, i<br>
 !7 = !MDSubroutineType(types: !8)<br>
 !8 = !{null}<br>
 !9 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "sp", line: 7, arg: 1, scope: !0, file: !1, type: !10)<br>
-<br>
-!109 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "sp", line: 7, arg: 1, scope: !0, file: !1, type: !10, inlinedAt: !32)<br>
-<br>
 !10 = !MDDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, scope: !2, baseType: !11)<br>
 !11 = !MDDerivedType(tag: DW_TAG_typedef, name: "S1", line: 4, file: !42, scope: !2, baseType: !12)<br>
 !12 = !MDCompositeType(tag: DW_TAG_structure_type, name: "S1", line: 1, size: 128, align: 64, file: !42, scope: !2, elements: !13)<br>
@@ -96,9 +93,6 @@ declare void @llvm.dbg.value(metadata, i<br>
 !16 = !MDBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float)<br>
 !17 = !MDDerivedType(tag: DW_TAG_member, name: "nums", line: 3, size: 32, align: 32, offset: 64, file: !42, scope: !1, baseType: !5)<br>
 !18 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "nums", line: 7, arg: 2, scope: !0, file: !1, type: !5)<br>
-<br>
-!118 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "nums", line: 7, arg: 2, scope: !0, file: !1, type: !5, inlinedAt: !32)<br>
-<br>
 !19 = !MDGlobalVariable(name: "p", line: 14, isLocal: false, isDefinition: true, scope: !2, file: !1, type: !11, variable: %struct.S1* @p)<br>
 !20 = !MDLocation(line: 7, column: 13, scope: !0)<br>
 !21 = !MDLocation(line: 7, column: 21, scope: !0)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/debug-ranges-offset.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/debug-ranges-offset.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/debug-ranges-offset.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/debug-ranges-offset.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/debug-ranges-offset.ll Wed Apr 15 17:29:27 2015<br>
@@ -234,7 +234,7 @@ attributes #4 = { builtin }<br>
 !29 = !MDLocation(line: 7, scope: !4)<br>
 !30 = !MDLocation(line: 4, scope: !4, inlinedAt: !31)<br>
 !31 = !MDLocation(line: 10, scope: !13)<br>
-!32 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "p", line: 4, scope: !4, file: !5, type: !10, inlinedAt: !31)<br>
+!32 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "p", line: 4, scope: !4, file: !5, type: !10)<br>
 !33 = !MDLocation(line: 5, scope: !21, inlinedAt: !31)<br>
 !34 = !MDLocation(line: 6, scope: !21, inlinedAt: !31)<br>
 !35 = !MDLocation(line: 7, scope: !4, inlinedAt: !31)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/inline-member-function.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/inline-member-function.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/inline-member-function.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/inline-member-function.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/inline-member-function.ll Wed Apr 15 17:29:27 2015<br>
@@ -88,8 +88,8 @@ attributes #1 = { nounwind readnone }<br>
 !21 = !{i32 1, !"Debug Info Version", i32 3}<br>
 !22 = !{!"clang version 3.5.0 "}<br>
 !23 = !MDLocation(line: 8, scope: !13)<br>
-!24 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !17, type: !25, inlinedAt: !23)<br>
+!24 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !17, type: !25)<br>
 !25 = !MDDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !"_ZTS3foo")<br>
 !26 = !MDLocation(line: 0, scope: !17, inlinedAt: !23)<br>
-!27 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 2, arg: 2, scope: !17, file: !14, type: !9, inlinedAt: !23)<br>
+!27 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 2, arg: 2, scope: !17, file: !14, type: !9)<br>
 !28 = !MDLocation(line: 2, scope: !17, inlinedAt: !23)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/inline-seldag-test.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/inline-seldag-test.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/inline-seldag-test.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/inline-seldag-test.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/inline-seldag-test.ll Wed Apr 15 17:29:27 2015<br>
@@ -67,7 +67,7 @@ attributes #1 = { nounwind readnone }<br>
 !16 = !MDDerivedType(tag: DW_TAG_volatile_type, baseType: !11)<br>
 !17 = !MDLocation(line: 5, scope: !4)<br>
 !18 = !MDLocation(line: 6, column: 7, scope: !4)<br>
-!19 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "y", line: 1, arg: 1, scope: !8, file: !5, type: !11, inlinedAt: !18)<br>
+!19 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "y", line: 1, arg: 1, scope: !8, file: !5, type: !11)<br>
 !20 = !MDLocation(line: 1, scope: !8, inlinedAt: !18)<br>
 !21 = !MDLocation(line: 2, scope: !8, inlinedAt: !18)<br>
 !22 = !MDLocation(line: 7, scope: !4)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/mi-print.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/mi-print.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/mi-print.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/mi-print.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/mi-print.ll Wed Apr 15 17:29:27 2015<br>
@@ -50,7 +50,7 @@ attributes #1 = { nounwind readnone }<br>
 !16 = !{!"clang version 3.7.0 (trunk 233919) (llvm/trunk 233920)"}<br>
 !17 = !MDExpression()<br>
 !18 = !MDLocation(line: 2, column: 13, scope: !4)<br>
-!19 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", arg: 1, scope: !10, file: !1, line: 1, type: !7, inlinedAt: !20)<br>
+!19 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", arg: 1, scope: !10, file: !1, line: 1, type: !7)<br>
 !20 = distinct !MDLocation(line: 2, column: 25, scope: !4)<br>
 !21 = !MDLocation(line: 1, column: 20, scope: !10, inlinedAt: !20)<br>
 !22 = !MDLocation(line: 2, column: 18, scope: !4)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/nodebug_with_debug_loc.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/nodebug_with_debug_loc.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/nodebug_with_debug_loc.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/nodebug_with_debug_loc.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/nodebug_with_debug_loc.ll Wed Apr 15 17:29:27 2015<br>
@@ -124,7 +124,7 @@ attributes #3 = { nounwind }<br>
 !24 = !{i32 2, !"Debug Info Version", i32 3}<br>
 !25 = !{!"clang version 3.5.0 "}<br>
 !26 = !MDLocation(line: 15, scope: !11)<br>
-!27 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "lhs", line: 13, arg: 1, scope: !17, file: !12, type: !20, inlinedAt: !28)<br>
+!27 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "lhs", line: 13, arg: 1, scope: !17, file: !12, type: !20)<br>
 !28 = !MDLocation(line: 16, scope: !11)<br>
 !29 = !MDLocation(line: 13, scope: !17, inlinedAt: !28)<br>
 !30 = !MDLocation(line: 17, scope: !11)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/nophysreg.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/nophysreg.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/nophysreg.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/nophysreg.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/nophysreg.ll Wed Apr 15 17:29:27 2015<br>
@@ -196,7 +196,7 @@ attributes #3 = { ssp uwtable }<br>
 !57 = !MDLocation(line: 23, column: 15, scope: !24)<br>
 !58 = !MDLocation(line: 23, column: 7, scope: !24)<br>
 !59 = !MDLocation(line: 24, column: 9, scope: !24)<br>
-!60 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p5", line: 7, arg: 1, scope: !11, file: !12, type: !"_ZTS1A", inlinedAt: !61)<br>
+!60 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p5", line: 7, arg: 1, scope: !11, file: !12, type: !"_ZTS1A")<br>
 !61 = distinct !MDLocation(line: 26, column: 7, scope: !24)<br>
 !62 = !MDLocation(line: 7, column: 42, scope: !11, inlinedAt: !61)<br>
 !63 = !MDLocation(line: 7, column: 48, scope: !11, inlinedAt: !61)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/recursive_inlining.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/recursive_inlining.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/recursive_inlining.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/recursive_inlining.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/recursive_inlining.ll Wed Apr 15 17:29:27 2015<br>
@@ -236,7 +236,7 @@ attributes #3 = { nounwind }<br>
 !34 = !{!"any pointer", !35, i64 0}<br>
 !35 = !{!"omnipotent char", !36, i64 0}<br>
 !36 = !{!"Simple C/C++ TBAA"}<br>
-!37 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25, inlinedAt: !32)<br>
+!37 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25)<br>
 !38 = !MDLocation(line: 0, scope: !22, inlinedAt: !32)<br>
 !39 = !MDLocation(line: 8, scope: !22, inlinedAt: !32)<br>
 !40 = !MDLocation(line: 9, scope: !41, inlinedAt: !32)<br>
@@ -256,7 +256,7 @@ attributes #3 = { nounwind }<br>
 !54 = !MDLocation(line: 20, scope: !18, inlinedAt: !55)<br>
 !55 = !MDLocation(line: 10, scope: !22)<br>
 !56 = !MDLocation(line: 17, scope: !14, inlinedAt: !54)<br>
-!57 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25, inlinedAt: !56)<br>
+!57 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25)<br>
 !58 = !MDLocation(line: 0, scope: !22, inlinedAt: !56)<br>
 !59 = !MDLocation(line: 8, scope: !22, inlinedAt: !56)<br>
 !60 = !MDLocation(line: 9, scope: !41, inlinedAt: !56)<br>
@@ -266,7 +266,7 @@ attributes #3 = { nounwind }<br>
 !64 = !MDLocation(line: 16, scope: !14, inlinedAt: !65)<br>
 !65 = !MDLocation(line: 20, scope: !18)<br>
 !66 = !MDLocation(line: 17, scope: !14, inlinedAt: !65)<br>
-!67 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25, inlinedAt: !66)<br>
+!67 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !22, type: !25)<br>
 !68 = !MDLocation(line: 0, scope: !22, inlinedAt: !66)<br>
 !69 = !MDLocation(line: 8, scope: !22, inlinedAt: !66)<br>
 !70 = !MDLocation(line: 9, scope: !41, inlinedAt: !66)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/cross-cu-inlining.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/cross-cu-inlining.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/cross-cu-inlining.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/cross-cu-inlining.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/cross-cu-inlining.ll Wed Apr 15 17:29:27 2015<br>
@@ -134,7 +134,7 @@ attributes #3 = { nounwind }<br>
 !19 = !MDLocation(line: 4, scope: !4)<br>
 !20 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 1, arg: 1, scope: !12, file: !13, type: !8)<br>
<br>
-!120 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 1, arg: 1, scope: !12, file: !13, type: !8, inlinedAt: !19)<br>
+!120 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 1, arg: 1, scope: !12, file: !13, type: !8)<br>
<br>
 !21 = !MDLocation(line: 1, scope: !12, inlinedAt: !19)<br>
 !22 = !MDLocation(line: 2, scope: !12, inlinedAt: !19)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/inline-scopes.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/inline-scopes.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/inline-scopes.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/inline-scopes.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/inline-scopes.ll Wed Apr 15 17:29:27 2015<br>
@@ -111,7 +111,7 @@ attributes #2 = { "less-precise-fpmad"="<br>
 !13 = !{i32 2, !"Dwarf Version", i32 4}<br>
 !14 = !{i32 1, !"Debug Info Version", i32 3}<br>
 !15 = !{!"clang version 3.5.0 "}<br>
-!16 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "b", line: 3, scope: !17, file: !11, type: !18, inlinedAt: !20)<br>
+!16 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "b", line: 3, scope: !17, file: !11, type: !18)<br>
 !17 = distinct !MDLexicalBlock(line: 3, column: 0, file: !1, scope: !12)<br>
 !18 = !MDBasicType(tag: DW_TAG_base_type, name: "bool", size: 8, align: 8, encoding: DW_ATE_boolean)<br>
 !19 = !MDLocation(line: 3, scope: !17, inlinedAt: !20)<br>
@@ -119,7 +119,7 @@ attributes #2 = { "less-precise-fpmad"="<br>
 !21 = !MDLocation(line: 4, scope: !17, inlinedAt: !20)<br>
 !22 = !MDLocation(line: 5, scope: !12, inlinedAt: !20)<br>
 !23 = !MDLocation(line: 6, scope: !12, inlinedAt: !20)<br>
-!24 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "b", line: 2, scope: !25, file: !6, type: !18, inlinedAt: !28)<br>
+!24 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "b", line: 2, scope: !25, file: !6, type: !18)<br>
 !25 = distinct !MDLexicalBlock(line: 2, column: 0, file: !5, scope: !26)<br>
 !26 = !MDLexicalBlockFile(discriminator: 0, file: !5, scope: !10)<br>
 !27 = !MDLocation(line: 2, scope: !25, inlinedAt: !28)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/inlined-arguments.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/inlined-arguments.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/inlined-arguments.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/inlined-arguments.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/inlined-arguments.ll Wed Apr 15 17:29:27 2015<br>
@@ -66,11 +66,11 @@ attributes #2 = { nounwind readnone }<br>
 !13 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 6, arg: 1, scope: !8, file: !5, type: !11)<br>
 !14 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "y", line: 6, arg: 2, scope: !8, file: !5, type: !11)<br>
 !15 = !{i32 undef}<br>
-!16 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 6, arg: 1, scope: !8, file: !5, type: !11, inlinedAt: !17)<br>
+!16 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 6, arg: 1, scope: !8, file: !5, type: !11)<br>
 !17 = !MDLocation(line: 4, scope: !4)<br>
 !18 = !MDLocation(line: 6, scope: !8, inlinedAt: !17)<br>
 !19 = !{i32 2}<br>
-!20 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "y", line: 6, arg: 2, scope: !8, file: !5, type: !11, inlinedAt: !17)<br>
+!20 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "y", line: 6, arg: 2, scope: !8, file: !5, type: !11)<br>
 !21 = !MDLocation(line: 7, scope: !8, inlinedAt: !17)<br>
 !22 = !MDLocation(line: 5, scope: !4)<br>
 !23 = !MDLocation(line: 6, scope: !8)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/inlined-vars.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/inlined-vars.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/inlined-vars.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/inlined-vars.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/inlined-vars.ll Wed Apr 15 17:29:27 2015<br>
@@ -45,10 +45,10 @@ declare void @llvm.dbg.value(metadata, i<br>
 ; VARIABLE: {{.*Abbrev.*DW_TAG_variable}}<br>
 ; VARIABLE-NOT: {{.*Abbrev.*DW_TAG_variable}}<br>
<br>
-!18 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "argument", line: 3, arg: 1, scope: !10, file: !6, type: !9, inlinedAt: !19)<br>
+!18 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "argument", line: 3, arg: 1, scope: !10, file: !6, type: !9)<br>
 !19 = !MDLocation(line: 11, column: 10, scope: !5)<br>
 !21 = !MDLocation(line: 3, column: 25, scope: !10, inlinedAt: !19)<br>
-!22 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "local", line: 4, scope: !10, file: !6, type: !9, inlinedAt: !19)<br>
+!22 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "local", line: 4, scope: !10, file: !6, type: !9)<br>
 !23 = !MDLocation(line: 4, column: 16, scope: !10, inlinedAt: !19)<br>
 !24 = !MDLocation(line: 5, column: 3, scope: !10, inlinedAt: !19)<br>
 !25 = !MDLocation(line: 6, column: 3, scope: !10, inlinedAt: !19)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/missing-abstract-variable.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/missing-abstract-variable.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/missing-abstract-variable.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/missing-abstract-variable.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/missing-abstract-variable.ll Wed Apr 15 17:29:27 2015<br>
@@ -160,13 +160,13 @@ attributes #2 = { nounwind readnone }<br>
 !22 = !{i32 2, !"Debug Info Version", i32 3}<br>
 !23 = !{!"clang version 3.5.0 "}<br>
 !24 = !{i1 false}<br>
-!25 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "b", line: 5, arg: 1, scope: !14, file: !5, type: !11, inlinedAt: !26)<br>
+!25 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "b", line: 5, arg: 1, scope: !14, file: !5, type: !11)<br>
 !26 = !MDLocation(line: 14, scope: !4)<br>
 !27 = !MDLocation(line: 5, scope: !14, inlinedAt: !26)<br>
 !28 = !MDLocation(line: 10, scope: !14, inlinedAt: !26)<br>
 !29 = !MDLocation(line: 15, scope: !4)<br>
 !30 = !MDLocation(line: 17, scope: !8)<br>
-!31 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "b", line: 5, arg: 1, scope: !14, file: !5, type: !11, inlinedAt: !32)<br>
+!31 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "b", line: 5, arg: 1, scope: !14, file: !5, type: !11)<br>
 !32 = !MDLocation(line: 18, scope: !8)<br>
 !33 = !MDLocation(line: 5, scope: !14, inlinedAt: !32)<br>
 !34 = !MDLocation(line: 6, scope: !19, inlinedAt: !32)<br>
@@ -175,7 +175,7 @@ attributes #2 = { nounwind readnone }<br>
 !37 = !{!"int", !38, i64 0}<br>
 !38 = !{!"omnipotent char", !39, i64 0}<br>
 !39 = !{!"Simple C/C++ TBAA"}<br>
-!40 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "s", line: 7, scope: !18, file: !5, type: !20, inlinedAt: !32)<br>
+!40 = !MDLocalVariable(tag: DW_TAG_auto_variable, name: "s", line: 7, scope: !18, file: !5, type: !20)<br>
 !41 = !MDLocation(line: 8, scope: !18, inlinedAt: !32)<br>
 !42 = !MDLocation(line: 9, scope: !18, inlinedAt: !32)<br>
 !43 = !MDLocation(line: 10, scope: !14, inlinedAt: !32)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/namespace_inline_function_definition.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/namespace_inline_function_definition.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/namespace_inline_function_definition.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/namespace_inline_function_definition.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/namespace_inline_function_definition.ll Wed Apr 15 17:29:27 2015<br>
@@ -89,7 +89,7 @@ attributes #2 = { nounwind readnone }<br>
 !16 = !MDLocation(line: 5, scope: !4)<br>
 !17 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "i", line: 6, arg: 1, scope: !9, file: !5, type: !8)<br>
<br>
-!117 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "i", line: 6, arg: 1, scope: !9, file: !5, type: !8, inlinedAt: !16)<br>
+!117 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "i", line: 6, arg: 1, scope: !9, file: !5, type: !8)<br>
<br>
 !18 = !MDLocation(line: 6, scope: !9, inlinedAt: !16)<br>
 !19 = !MDLocation(line: 6, scope: !9)<br>
<br>
Modified: llvm/trunk/test/Transforms/Inline/alloca-dbgdeclare.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/alloca-dbgdeclare.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/alloca-dbgdeclare.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Transforms/Inline/alloca-dbgdeclare.ll (original)<br>
+++ llvm/trunk/test/Transforms/Inline/alloca-dbgdeclare.ll Wed Apr 15 17:29:27 2015<br>
@@ -128,7 +128,7 @@ attributes #3 = { noreturn nounwind }<br>
 !43 = !{!37, !37, i64 0}<br>
 !44 = !{!38, !38, i64 0}<br>
 !45 = !MDLocation(line: 9, scope: !15)<br>
-!46 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p1", line: 6, arg: 1, scope: !15, file: !16, type: !"_ZTS1A", inlinedAt: !47)<br>
+!46 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "p1", line: 6, arg: 1, scope: !15, file: !16, type: !"_ZTS1A")<br>
 !47 = distinct !MDLocation(line: 11, scope: !21)<br>
 !48 = !MDExpression(DW_OP_bit_piece, 32, 160)<br>
 !49 = !MDLocation(line: 6, scope: !15, inlinedAt: !47)<br>
<br>
Modified: llvm/trunk/test/Transforms/Inline/inline_dbg_declare.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline_dbg_declare.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/inline_dbg_declare.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Transforms/Inline/inline_dbg_declare.ll (original)<br>
+++ llvm/trunk/test/Transforms/Inline/inline_dbg_declare.ll Wed Apr 15 17:29:27 2015<br>
@@ -94,6 +94,6 @@ attributes #1 = { nounwind readnone }<br>
<br>
 ; CHECK: [[FOO:![0-9]+]] = !MDSubprogram(name: "foo",<br>
 ; CHECK: [[BAR:![0-9]+]] = !MDSubprogram(name: "bar",<br>
+; CHECK: [[m23]] = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", arg: 1, scope: [[FOO]]<br>
 ; CHECK: [[CALL_SITE:![0-9]+]] = distinct !MDLocation(line: 8, column: 14, scope: [[BAR]])<br>
-; CHECK: [[m23]] = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", arg: 1, scope: [[FOO]],{{.*}} inlinedAt: [[CALL_SITE]])<br>
 ; CHECK: [[m24]] = !MDLocation(line: 1, column: 17, scope: [[FOO]], inlinedAt: [[CALL_SITE]])<br>
<br>
Modified: llvm/trunk/test/Transforms/Mem2Reg/ConvertDebugInfo2.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Mem2Reg/ConvertDebugInfo2.ll?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Mem2Reg/ConvertDebugInfo2.ll?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Transforms/Mem2Reg/ConvertDebugInfo2.ll (original)<br>
+++ llvm/trunk/test/Transforms/Mem2Reg/ConvertDebugInfo2.ll Wed Apr 15 17:29:27 2015<br>
@@ -41,15 +41,15 @@ return:<br>
 !6 = !MDBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)<br>
 !7 = !MDLocation(line: 8, scope: !1)<br>
 !8 = !MDLocation(line: 9, scope: !1)<br>
-!9 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 4, arg: 0, scope: !10, file: !2, type: !6, inlinedAt: !8)<br>
+!9 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "x", line: 4, arg: 0, scope: !10, file: !2, type: !6)<br>
 !10 = !MDSubprogram(name: "bar", linkageName: "bar", line: 4, isLocal: true, isDefinition: true, virtualIndex: 6, isOptimized: false, scopeLine: 4, file: !20, scope: !2, type: !11)<br>
 !11 = !MDSubroutineType(types: !12)<br>
 !12 = !{null, !6, !13, !14}<br>
 !13 = !MDBasicType(tag: DW_TAG_base_type, name: "long int", size: 64, align: 64, encoding: DW_ATE_signed)<br>
 !14 = !MDDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, file: !20, scope: !2, baseType: null)<br>
 !15 = !MDLocation(line: 4, scope: !10, inlinedAt: !8)<br>
-!16 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "y", line: 4, arg: 0, scope: !10, file: !2, type: !13, inlinedAt: !8)<br>
-!17 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "z", line: 4, arg: 0, scope: !10, file: !2, type: !14, inlinedAt: !8)<br>
+!16 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "y", line: 4, arg: 0, scope: !10, file: !2, type: !13)<br>
+!17 = !MDLocalVariable(tag: DW_TAG_arg_variable, name: "z", line: 4, arg: 0, scope: !10, file: !2, type: !14)<br>
 !18 = !MDLocation(line: 5, scope: !10, inlinedAt: !8)<br>
 !19 = !MDLocation(line: 10, scope: !1)<br>
 !20 = !MDFile(filename: "bar.c", directory: "/tmp/")<br>
<br>
Modified: llvm/trunk/unittests/IR/MetadataTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/MetadataTest.cpp?rev=235050&r1=235049&r2=235050&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/MetadataTest.cpp?rev=235050&r1=235049&r2=235050&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/IR/MetadataTest.cpp (original)<br>
+++ llvm/trunk/unittests/IR/MetadataTest.cpp Wed Apr 15 17:29:27 2015<br>
@@ -1813,11 +1813,9 @@ TEST_F(MDLocalVariableTest, get) {<br>
   MDTypeRef Type = getDerivedType();<br>
   unsigned Arg = 6;<br>
   unsigned Flags = 7;<br>
-  MDLocation *InlinedAt =<br>
-      MDLocation::getDistinct(Context, 10, 20, getSubprogram());<br>
<br>
   auto *N = MDLocalVariable::get(Context, Tag, Scope, Name, File, Line, Type,<br>
-                                 Arg, Flags, InlinedAt);<br>
+                                 Arg, Flags);<br>
   EXPECT_EQ(Tag, N->getTag());<br>
   EXPECT_EQ(Scope, N->getScope());<br>
   EXPECT_EQ(Name, N->getName());<br>
@@ -1826,46 +1824,28 @@ TEST_F(MDLocalVariableTest, get) {<br>
   EXPECT_EQ(Type, N->getType());<br>
   EXPECT_EQ(Arg, N->getArg());<br>
   EXPECT_EQ(Flags, N->getFlags());<br>
-  EXPECT_EQ(InlinedAt, N->getInlinedAt());<br>
   EXPECT_EQ(N, MDLocalVariable::get(Context, Tag, Scope, Name, File, Line, Type,<br>
-                                    Arg, Flags, InlinedAt));<br>
+                                    Arg, Flags));<br>
<br>
   EXPECT_NE(N, MDLocalVariable::get(Context, dwarf::DW_TAG_auto_variable, Scope,<br>
-                                    Name, File, Line, Type, Arg, Flags,<br>
-                                    InlinedAt));<br>
+                                    Name, File, Line, Type, Arg, Flags));<br>
   EXPECT_NE(N, MDLocalVariable::get(Context, Tag, getSubprogram(), Name, File,<br>
-                                    Line, Type, Arg, Flags, InlinedAt));<br>
+                                    Line, Type, Arg, Flags));<br>
   EXPECT_NE(N, MDLocalVariable::get(Context, Tag, Scope, "other", File, Line,<br>
-                                    Type, Arg, Flags, InlinedAt));<br>
+                                    Type, Arg, Flags));<br>
   EXPECT_NE(N, MDLocalVariable::get(Context, Tag, Scope, Name, getFile(), Line,<br>
-                                    Type, Arg, Flags, InlinedAt));<br>
+                                    Type, Arg, Flags));<br>
   EXPECT_NE(N, MDLocalVariable::get(Context, Tag, Scope, Name, File, Line + 1,<br>
-                                    Type, Arg, Flags, InlinedAt));<br>
+                                    Type, Arg, Flags));<br>
   EXPECT_NE(N, MDLocalVariable::get(Context, Tag, Scope, Name, File, Line,<br>
-                                    getDerivedType(), Arg, Flags, InlinedAt));<br>
+                                    getDerivedType(), Arg, Flags));<br>
   EXPECT_NE(N, MDLocalVariable::get(Context, Tag, Scope, Name, File, Line, Type,<br>
-                                    Arg + 1, Flags, InlinedAt));<br>
+                                    Arg + 1, Flags));<br>
   EXPECT_NE(N, MDLocalVariable::get(Context, Tag, Scope, Name, File, Line, Type,<br>
-                                    Arg, ~Flags, InlinedAt));<br>
-  EXPECT_NE(N, MDLocalVariable::get(<br>
-                   Context, Tag, Scope, Name, File, Line, Type, Arg, Flags,<br>
-                   MDLocation::getDistinct(Context, 10, 20, getSubprogram())));<br>
+                                    Arg, ~Flags));<br>
<br>
   TempMDLocalVariable Temp = N->clone();<br>
   EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp)));<br>
-<br>
-  auto *Inlined = N->withoutInline();<br>
-  EXPECT_NE(N, Inlined);<br>
-  EXPECT_EQ(N->getTag(), Inlined->getTag());<br>
-  EXPECT_EQ(N->getScope(), Inlined->getScope());<br>
-  EXPECT_EQ(N->getName(), Inlined->getName());<br>
-  EXPECT_EQ(N->getFile(), Inlined->getFile());<br>
-  EXPECT_EQ(N->getLine(), Inlined->getLine());<br>
-  EXPECT_EQ(N->getType(), Inlined->getType());<br>
-  EXPECT_EQ(N->getArg(), Inlined->getArg());<br>
-  EXPECT_EQ(N->getFlags(), Inlined->getFlags());<br>
-  EXPECT_EQ(nullptr, Inlined->getInlinedAt());<br>
-  EXPECT_EQ(N, Inlined->withInline(cast<MDLocation>(InlinedAt)));<br>
 }<br>
<br>
 typedef MetadataTest MDExpressionTest;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>