diff options
| author | Jeremy Morse <jeremy.morse@sony.com> | 2020-02-05 17:27:44 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@chromium.org> | 2020-02-12 14:06:29 +0100 |
| commit | 4eb45a05a78f7c80bbec0453bc225deebec06209 (patch) | |
| tree | e2c7b05810593dc7534c6a27d8a6331960186e75 /llvm/test/DebugInfo/X86 | |
| parent | 04d7337d69fa38f00179811419207a9ef5eef83e (diff) | |
| download | bcm5719-llvm-4eb45a05a78f7c80bbec0453bc225deebec06209.tar.gz bcm5719-llvm-4eb45a05a78f7c80bbec0453bc225deebec06209.zip | |
Revert "[DebugInfo] Remove some users of DBG_VALUEs IsIndirect field"
This reverts commit ed29dbaafa49bb8c9039a35f768244c394411fea.
I'm backing out D68945, which as the discussion for D73526 shows, doesn't
seem to handle the -O0 path through the codegen backend correctly. I'll
reland the patch when a fix is worked out, apologies for all the churn.
The two parent commits are part of this revert too.
Conflicts:
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/test/DebugInfo/X86/dbg-addr-dse.ll
SelectionDAGBuilder conflict is due to a nearby change in e39e2b4a79c6
that's technically unrelated. dbg-addr-dse.ll conflicted because
41206b61e30c (legitimately) changes the order of two lines.
There are further modifications to dbg-value-func-arg.ll: it landed after
the patch being reverted, and I've converted indirection to be represented
by the isIndirect field rather than DW_OP_deref.
(cherry picked from commit 6531a78ac4b5b229bce272706593a0bc873877d7)
Diffstat (limited to 'llvm/test/DebugInfo/X86')
| -rw-r--r-- | llvm/test/DebugInfo/X86/dbg-addr-dse.ll | 8 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/X86/dbg-addr.ll | 2 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/X86/live-debug-vars-dse.mir | 16 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/X86/op_deref.ll | 14 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/X86/parameters.ll | 10 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/X86/safestack-byval.ll | 4 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/X86/spill-indirect-nrvo.ll | 2 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/X86/spill-nontrivial-param.ll | 2 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/X86/vla.ll | 18 |
9 files changed, 25 insertions, 51 deletions
diff --git a/llvm/test/DebugInfo/X86/dbg-addr-dse.ll b/llvm/test/DebugInfo/X86/dbg-addr-dse.ll index f6f653a1d98..a817474c16c 100644 --- a/llvm/test/DebugInfo/X86/dbg-addr-dse.ll +++ b/llvm/test/DebugInfo/X86/dbg-addr-dse.ll @@ -3,10 +3,6 @@ ; RUN: FileCheck %s < %t.s --check-prefix=ASM ; RUN: llvm-dwarfdump %t.o | FileCheck %s --check-prefix=DWARF -; XFAIL: * -; See PR41992, the third and final dbg.value disappears after -; LiveDebugVariables. - ; In this example, the variable lives mostly in memory, but at the point of the ; assignment to global, it lives nowhere, and is described as the constant ; value 1. @@ -51,11 +47,11 @@ entry: ; ASM-LABEL: f: # @f ; ASM: movl %ecx, [[OFF_X:[0-9]+]](%rsp) -; ASM: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]], DW_OP_deref] $rsp +; ASM: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]]] [$rsp+0] ; ASM: callq escape ; ASM: #DEBUG_VALUE: f:x <- 1 ; ASM: movl $1, global(%rip) -; ASM: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]], DW_OP_deref] $rsp +; ASM: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]]] [$rsp+0] ; ASM: movl $2, [[OFF_X]](%rsp) ; ASM: callq escape ; ASM: retq diff --git a/llvm/test/DebugInfo/X86/dbg-addr.ll b/llvm/test/DebugInfo/X86/dbg-addr.ll index 48cb739be45..4e27cf5754c 100644 --- a/llvm/test/DebugInfo/X86/dbg-addr.ll +++ b/llvm/test/DebugInfo/X86/dbg-addr.ll @@ -7,7 +7,7 @@ ; is control-dependent. ; CHECK-LABEL: use_dbg_addr: -; CHECK: #DEBUG_VALUE: use_dbg_addr:o <- [DW_OP_deref] $rsp +; CHECK: #DEBUG_VALUE: use_dbg_addr:o <- [$rsp+0] ; DWARF: DW_TAG_variable ; DWARF-NEXT: DW_AT_location (DW_OP_fbreg +0) diff --git a/llvm/test/DebugInfo/X86/live-debug-vars-dse.mir b/llvm/test/DebugInfo/X86/live-debug-vars-dse.mir index bc20ebf5d4e..9d6ec9f4eca 100644 --- a/llvm/test/DebugInfo/X86/live-debug-vars-dse.mir +++ b/llvm/test/DebugInfo/X86/live-debug-vars-dse.mir @@ -1,9 +1,5 @@ # RUN: llc -start-after=machine-scheduler %s -o - | FileCheck %s -# XFAIL: * -# See PR41992, the third and final dbg.value disappears after -# LiveDebugVariables. - # C source: # void escape(int *); # extern int global; @@ -17,12 +13,12 @@ # CHECK-LABEL: f: # @f # CHECK: movl %ecx, [[OFF_X:[0-9]+]](%rsp) -# CHECK: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]], DW_OP_deref] $rsp +# CHECK: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]]] [$rsp+0] # CHECK: leaq [[OFF_X]](%rsp), %rsi # CHECK: callq escape # CHECK: #DEBUG_VALUE: f:x <- 1 # CHECK: movl $1, global(%rip) -# CHECK: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]], DW_OP_deref] $rsp +# CHECK: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]]] [$rsp+0] # CHECK: movl $2, [[OFF_X]](%rsp) # CHECK: callq escape # CHECK: retq @@ -46,11 +42,11 @@ entry: %x.addr = alloca i32, align 4 store i32 %x, i32* %x.addr, align 4 - call void @llvm.dbg.value(metadata i32* %x.addr, metadata !13, metadata !DIExpression(DW_OP_deref)), !dbg !14 + call void @llvm.dbg.value(metadata i32* %x.addr, metadata !13, metadata !DIExpression()), !dbg !14 call void @escape(i32* %x.addr), !dbg !15 call void @llvm.dbg.value(metadata i32 1, metadata !13, metadata !DIExpression()), !dbg !16 store i32 1, i32* @global, align 4, !dbg !17 - call void @llvm.dbg.value(metadata i32* %x.addr, metadata !13, metadata !DIExpression(DW_OP_deref)), !dbg !18 + call void @llvm.dbg.value(metadata i32* %x.addr, metadata !13, metadata !DIExpression()), !dbg !18 store i32 2, i32* %x.addr, align 4, !dbg !18 call void @escape(i32* %x.addr), !dbg !19 ret void, !dbg !20 @@ -132,7 +128,7 @@ body: | %0 = COPY $ecx MOV32mr %stack.0.x.addr, 1, _, 0, _, %0 :: (store 4 into %ir.x.addr) - DBG_VALUE %stack.0.x.addr, $noreg, !13, !DIExpression(DW_OP_deref), debug-location !14 + DBG_VALUE %stack.0.x.addr, 0, !13, !DIExpression(), debug-location !14 ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp, debug-location !15 %1 = LEA64r %stack.0.x.addr, 1, _, 0, _ $rcx = COPY %1, debug-location !15 @@ -140,7 +136,7 @@ body: | ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp, debug-location !15 DBG_VALUE 1, _, !13, !DIExpression(), debug-location !16 MOV32mi $rip, 1, _, @global, _, 1, debug-location !17 :: (store 4 into @global) - DBG_VALUE %stack.0.x.addr, $noreg, !13, !DIExpression(DW_OP_deref), debug-location !18 + DBG_VALUE %stack.0.x.addr, 0, !13, !DIExpression(), debug-location !18 MOV32mi %stack.0.x.addr, 1, _, 0, _, 2, debug-location !18 :: (store 4 into %ir.x.addr) ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp, debug-location !19 $rcx = COPY %1, debug-location !19 diff --git a/llvm/test/DebugInfo/X86/op_deref.ll b/llvm/test/DebugInfo/X86/op_deref.ll index a1af8fac780..5de9976d6de 100644 --- a/llvm/test/DebugInfo/X86/op_deref.ll +++ b/llvm/test/DebugInfo/X86/op_deref.ll @@ -6,12 +6,10 @@ ; RUN: | FileCheck %s -check-prefix=CHECK -check-prefix=DWARF3 ; DWARF4: DW_AT_location [DW_FORM_sec_offset] (0x00000000 -; DWARF4-NEXT: {{.*}}: DW_OP_breg1 RDX+0{{$}} -; DWARF4-NEXT: {{.*}}: DW_OP_breg6 RBP-{{[0-9]+}}, DW_OP_deref) +; DWARF4-NEXT: {{.*}}: DW_OP_breg1 RDX+0, DW_OP_deref ; DWARF3: DW_AT_location [DW_FORM_data4] (0x00000000 -; DWARF3-NEXT: {{.*}}: DW_OP_breg1 RDX+0{{$}} -; DWARF3-NEXT: {{.*}}: DW_OP_breg6 RBP-{{[0-9]+}}, DW_OP_deref) +; DWARF3-NEXT: {{.*}}: DW_OP_breg1 RDX+0, DW_OP_deref ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000067] = "vla") @@ -19,13 +17,11 @@ ; Check the DEBUG_VALUE comments for good measure. ; RUN: llc -O0 -mtriple=x86_64-apple-darwin %s -o - -filetype=asm | FileCheck %s -check-prefix=ASM-CHECK ; vla should have a register-indirect address at one point. -; ASM-CHECK: DEBUG_VALUE: vla <- [DW_OP_deref] $rdx -; vla ptr is spilt too, it should have a stack location, -; ASM-CHECK: DEBUG_VALUE: vla <- [DW_OP_constu {{[0-9]+}}, DW_OP_minus, DW_OP_deref] [$rbp+0] +; ASM-CHECK: DEBUG_VALUE: vla <- [DW_OP_deref] [$rdx+0] ; ASM-CHECK: DW_OP_breg1 ; RUN: llvm-as %s -o - | llvm-dis - | FileCheck %s --check-prefix=PRETTY-PRINT -; PRETTY-PRINT: DIExpression() +; PRETTY-PRINT: DIExpression(DW_OP_deref) define void @testVLAwithSize(i32 %s) nounwind uwtable ssp !dbg !5 { entry: @@ -108,4 +104,4 @@ declare void @llvm.stackrestore(i8*) nounwind !27 = !DILocation(line: 8, column: 1, scope: !13) !28 = !DIFile(filename: "bar.c", directory: "/Users/echristo/tmp") !29 = !{i32 1, !"Debug Info Version", i32 3} -!30 = !DIExpression() +!30 = !DIExpression(DW_OP_deref) diff --git a/llvm/test/DebugInfo/X86/parameters.ll b/llvm/test/DebugInfo/X86/parameters.ll index 3330e968aa1..ed0048cc15e 100644 --- a/llvm/test/DebugInfo/X86/parameters.ll +++ b/llvm/test/DebugInfo/X86/parameters.ll @@ -28,7 +28,7 @@ ; CHECK: DW_AT_name{{.*}} = "func" ; CHECK: DW_TAG_formal_parameter ; CHECK: DW_AT_location {{.*}} -; CHECK-NEXT: DW_OP_breg4 RSI+0) +; CHECK-NEXT: DW_OP_breg4 RSI+0, DW_OP_deref ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name{{.*}} = "f" @@ -38,8 +38,8 @@ ; CHECK: DW_AT_location{{.*}}(DW_OP_fbreg +23) ; CHECK: DW_TAG_formal_parameter ; CHECK: DW_AT_location{{.*}}( -; CHECK-NEXT: {{.*}}: DW_OP_breg4 RSI+0{{$}} -; CHECK-NEXT: {{.*}}: DW_OP_breg7 RSP+8, DW_OP_deref) +; CHECK-NEXT: {{.*}}: DW_OP_breg4 RSI+0, DW_OP_deref +; CHECK-NEXT: {{.*}}: DW_OP_breg7 RSP+8, DW_OP_deref, DW_OP_deref) ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name{{.*}} = "g" @@ -48,7 +48,7 @@ ; Function Attrs: uwtable define void @_ZN7pr147634funcENS_3fooE(%"struct.pr14763::foo"* noalias sret %agg.result, %"struct.pr14763::foo"* %f) #0 !dbg !4 { entry: - call void @llvm.dbg.declare(metadata %"struct.pr14763::foo"* %f, metadata !22, metadata !DIExpression()), !dbg !24 + call void @llvm.dbg.declare(metadata %"struct.pr14763::foo"* %f, metadata !22, metadata !DIExpression(DW_OP_deref)), !dbg !24 call void @_ZN7pr147633fooC1ERKS0_(%"struct.pr14763::foo"* %agg.result, %"struct.pr14763::foo"* %f), !dbg !25 ret void, !dbg !25 } @@ -65,7 +65,7 @@ entry: %frombool = zext i1 %b to i8 store i8 %frombool, i8* %b.addr, align 1 call void @llvm.dbg.declare(metadata i8* %b.addr, metadata !26, metadata !DIExpression()), !dbg !27 - call void @llvm.dbg.declare(metadata %"struct.pr14763::foo"* %g, metadata !28, metadata !DIExpression()), !dbg !27 + call void @llvm.dbg.declare(metadata %"struct.pr14763::foo"* %g, metadata !28, metadata !DIExpression(DW_OP_deref)), !dbg !27 %0 = load i8, i8* %b.addr, align 1, !dbg !29 %tobool = trunc i8 %0 to i1, !dbg !29 br i1 %tobool, label %if.then, label %if.end, !dbg !29 diff --git a/llvm/test/DebugInfo/X86/safestack-byval.ll b/llvm/test/DebugInfo/X86/safestack-byval.ll index 1d53908b497..a653cd78b91 100644 --- a/llvm/test/DebugInfo/X86/safestack-byval.ll +++ b/llvm/test/DebugInfo/X86/safestack-byval.ll @@ -14,7 +14,7 @@ ; } ; CHECK: ![[ZZZ:.*]] = !DILocalVariable(name: "zzz", -; CHECK: DBG_VALUE {{.*}} ![[ZZZ]], !DIExpression(DW_OP_constu, 400, DW_OP_minus, DW_OP_deref) +; CHECK: DBG_VALUE {{.*}} ![[ZZZ]], !DIExpression(DW_OP_deref, DW_OP_constu, 400, DW_OP_minus) %struct.S = type { [100 x i32] } @@ -78,7 +78,7 @@ attributes #2 = { argmemonly nounwind } !20 = !{i32 2, !"Debug Info Version", i32 3} !21 = !{!"clang version 3.8.0 (trunk 254107) (llvm/trunk 254109)"} !22 = !DILocation(line: 8, column: 9, scope: !12) -!23 = !DIExpression(DW_OP_constu, 400, DW_OP_minus) +!23 = !DIExpression(DW_OP_deref, DW_OP_constu, 400, DW_OP_minus) !24 = !DILocation(line: 8, column: 28, scope: !12) !25 = !DIExpression() !26 = !DILocation(line: 9, column: 10, scope: !12) diff --git a/llvm/test/DebugInfo/X86/spill-indirect-nrvo.ll b/llvm/test/DebugInfo/X86/spill-indirect-nrvo.ll index 1ac90ead110..82c852034ae 100644 --- a/llvm/test/DebugInfo/X86/spill-indirect-nrvo.ll +++ b/llvm/test/DebugInfo/X86/spill-indirect-nrvo.ll @@ -21,7 +21,7 @@ ; } ; CHECK-LABEL: _Z10get_stringv: -; CHECK: #DEBUG_VALUE: get_string:result <- [DW_OP_deref] $rdi +; CHECK: #DEBUG_VALUE: get_string:result <- [$rdi+0] ; CHECK: movq %rdi, [[OFFS:[0-9]+]](%rsp) # 8-byte Spill ; CHECK: #DEBUG_VALUE: get_string:result <- [DW_OP_plus_uconst [[OFFS]], DW_OP_deref] [$rsp+0] ; CHECK: callq _ZN6stringC1Ei diff --git a/llvm/test/DebugInfo/X86/spill-nontrivial-param.ll b/llvm/test/DebugInfo/X86/spill-nontrivial-param.ll index 9712f4f48f0..08793c13f56 100644 --- a/llvm/test/DebugInfo/X86/spill-nontrivial-param.ll +++ b/llvm/test/DebugInfo/X86/spill-nontrivial-param.ll @@ -20,7 +20,7 @@ ; } ; CHECK-LABEL: _Z3foo10NonTrivial: -; CHECK: #DEBUG_VALUE: foo:nt <- [DW_OP_deref] $rdi +; CHECK: #DEBUG_VALUE: foo:nt <- [$rdi+0] ; CHECK: movq %rdi, -8(%rsp) # 8-byte Spill ; CHECK: #DEBUG_VALUE: foo:nt <- [DW_OP_constu 8, DW_OP_minus, DW_OP_deref] [$rsp+0] ; CHECK: #APP diff --git a/llvm/test/DebugInfo/X86/vla.ll b/llvm/test/DebugInfo/X86/vla.ll index 4e4f7fbb36b..7d4aff8470d 100644 --- a/llvm/test/DebugInfo/X86/vla.ll +++ b/llvm/test/DebugInfo/X86/vla.ll @@ -1,21 +1,7 @@ ; RUN: llc -O0 -mtriple=x86_64-apple-darwin -filetype=asm %s -o - | FileCheck %s -; RUN: llc -O0 -mtriple=x86_64-apple-darwin -filetype=obj %s -o - | llvm-dwarfdump - --name=a | FileCheck --check-prefix=OBJFILE %s -; REQUIRES: object-emission -; ; Ensure that we generate an indirect location for the variable length array a. -; -; CHECK: ##DEBUG_VALUE: vla:a <- [DW_OP_deref] {{\$r[a-z]+}} +; CHECK: ##DEBUG_VALUE: vla:a <- [DW_OP_deref] [{{\$r[a-z]+}}+0] ; CHECK: DW_OP_breg{{[0-9]}} -; -; Ensure there's only one level of indirection in the vla location -- it should -; be a memory location. Base register can be any allocatable one; variables are -; filtered by --name arg to llvm-dwarfdump. -; -; OBJFILE: DW_TAG_variable -; OBJFILE: DW_AT_location -; OBJFILE-NEXT: ): DW_OP_breg{{[0-9]+}} R{{[0-9A-Z]+}}+0) -; OBJFILE: DW_AT_name ("a") -; ; rdar://problem/13658587 ; ; generated from: @@ -47,7 +33,7 @@ entry: %2 = call i8* @llvm.stacksave(), !dbg !17 store i8* %2, i8** %saved_stack, !dbg !17 %vla = alloca i32, i64 %1, align 16, !dbg !17 - call void @llvm.dbg.declare(metadata i32* %vla, metadata !18, metadata !DIExpression()), !dbg !17 + call void @llvm.dbg.declare(metadata i32* %vla, metadata !18, metadata !DIExpression(DW_OP_deref)), !dbg !17 %arrayidx = getelementptr inbounds i32, i32* %vla, i64 0, !dbg !22 store i32 42, i32* %arrayidx, align 4, !dbg !22 %3 = load i32, i32* %n.addr, align 4, !dbg !23 |

