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