mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-26 23:24:34 +00:00
Verifier: Check that inlined-at locations agree
Check that the `MDLocalVariable::getInlinedAt()` in a debug info intrinsic's variable always matches the `MDLocation::getInlinedAt()` of its `!dbg` attachment. The goal here is to get rid of `MDLocalVariable::getInlinedAt()` entirely (PR22778), since it's expensive and unnecessary, but I'll let this verifier check bake for a while (a week maybe?) first. I've updated the testcases that had the wrong value for `inlinedAt:`. This checks that things are sane in the IR, but currently things go out of whack in a few places in the backend. I'll follow shortly with assertions in the backend (with code fixes). If you have out-of-tree testcases that just started failing, here's how I updated these ones: 1. The verifier check gives you the basic block, function, instruction, and relevant metadata arguments (metadata numbering doesn't necessarily match the source file, unfortunately). 2. Look at the `@llvm.dbg.*()` instruction, and compare the `inlinedAt:` fields of the variable argument (second `metadata` argument) and the `!dbg` attachment. 3. Figure out based on the variable `scope:` chain and the functions in the file whether the variable has been inlined (and into what), so you can determine which `inlinedAt:` is actually correct. In all of the in-tree testcases, the `!MDLocation()` was correct and the `!MDLocalVariable()` was wrong, but YMMV. 4. Duplicate the metadata that you're going to change, and add/drop the `inlinedAt:` field from one of them. Be careful that the other references to the same metadata node point at the correct one. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234021 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -42,7 +42,7 @@ entry:
|
||||
store i32 0, i32* %retval
|
||||
%0 = load i32, i32* @x, align 4, !dbg !16
|
||||
store i32 %0, i32* %i.addr.i, align 4
|
||||
call void @llvm.dbg.declare(metadata i32* %i.addr.i, metadata !17, metadata !MDExpression()), !dbg !18
|
||||
call void @llvm.dbg.declare(metadata i32* %i.addr.i, metadata !117, metadata !MDExpression()), !dbg !18
|
||||
%1 = load i32, i32* %i.addr.i, align 4, !dbg !18
|
||||
%mul.i = mul nsw i32 %1, 2, !dbg !18
|
||||
ret i32 %mul.i, !dbg !16
|
||||
@ -88,5 +88,8 @@ attributes #2 = { nounwind readnone }
|
||||
!15 = !{!"clang version 3.5.0 "}
|
||||
!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)
|
||||
|
||||
!18 = !MDLocation(line: 6, scope: !9, inlinedAt: !16)
|
||||
!19 = !MDLocation(line: 6, scope: !9)
|
||||
|
Reference in New Issue
Block a user