[llvm] [NFC] Move RemoveRedundantDbgInstrs outside of inner loop in JumpThreading (PR #123008)

William Huang via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 15 20:09:03 PST 2025


huangjd wrote:

There's also a test having issue so I need clarification.

In `Transforms/JumpThreading/thread-debug-info.ll`

```
; Test for the cloning of dbg.values on elided instructions -- down one path
; being threaded, the `and` in the function below is optimised away, but its
; debug-info should still be preserved.
; Similarly, the call to f1 gets cloned, its dbg.value should be cloned too.
define void @test16(i1 %c, i1 %c2, i1 %c3, i1 %c4) nounwind ssp !dbg !30 {
; CHECK-LABEL: define void @test16(i1
entry:
  %cmp = icmp sgt i32 undef, 1, !dbg !33
  br i1 %c, label %land.end, label %land.rhs, !dbg !33

land.rhs:
  br i1 %c2, label %lor.lhs.false.i, label %land.end, !dbg !33

lor.lhs.false.i:
  br i1 %c3, label %land.end, label %land.end, !dbg !33

; CHECK-LABEL: land.end.thr_comm:
; CHECK-NEXT:  #dbg_value(i32 0,
; CHECK-NEXT:  #dbg_value(i32 1,
; CHECK-NEXT:  call void @f1()
; CHECK-NEXT:  br i1 %c4,

; CHECK-LABEL: land.end:
; CHECK-NEXT:  %0 = phi i1
; CHECK-NEXT:  #dbg_value(i32 0,
land.end:
  %0 = phi i1 [ true, %entry ], [ false, %land.rhs ], [false, %lor.lhs.false.i], [false, %lor.lhs.false.i]
  call void @llvm.dbg.value(metadata i32 0, metadata !32, metadata !DIExpression()), !dbg !33
  %cmp12 = and i1 %cmp, %0, !dbg !33
  %xor1 = xor i1 %cmp12, %c4, !dbg !33
  call void @llvm.dbg.value(metadata i32 1, metadata !32, metadata !DIExpression()), !dbg !33
  call void @f1()
  br i1 %xor1, label %if.then, label %if.end, !dbg !33

if.then:
  ret void, !dbg !33

if.end:
  ret void, !dbg !33
}
```

Why should duplicated debug value be preserved for the first case (before first call to f1)? 


https://github.com/llvm/llvm-project/pull/123008


More information about the llvm-commits mailing list