
Debugify is extremely useful as a testing and debugging tool, and a good number of LLVM-IR transform tests use it. We need it to support "new" non-instruction debug-info to get test coverage, but it's not important enough to completely convert right now (and it'd be a large undertaking). Thus: convert to/from dbg.value/DPValue mode on entry and exit of the pass, which gives us the functionality without any further work. The cost is compile-time, but again this is only happening during tests. Tested by: the large set of debugify tests enabled here. Note the InstCombine test (cast-mul-select.ll) that hasn't been fully enabled: this is because there's a debug-info sinking piece of code there that hasn't been instrumented.
43 lines
945 B
LLVM
43 lines
945 B
LLVM
; RUN: opt -S -passes=debugify,jump-threading < %s | FileCheck %s
|
|
; RUN: opt -S -passes=debugify,jump-threading < %s --try-experimental-debuginfo-iterators | FileCheck %s
|
|
; Tests Bug 37966
|
|
|
|
define void @test0(i32 %i) {
|
|
; CHECK-LABEL: @test0(
|
|
; CHECK: left:
|
|
; CHECK: br label %left, !dbg ![[DBG0:[0-9]+]]
|
|
entry:
|
|
%c0 = icmp ult i32 %i, 5
|
|
br i1 %c0, label %left, label %right
|
|
|
|
left:
|
|
br i1 %c0, label %left, label %right ; "line 3" to -debugify
|
|
|
|
right:
|
|
ret void
|
|
}
|
|
|
|
define void @test1(i32 %i, i32 %len) {
|
|
; CHECK-LABEL: @test1(
|
|
; CHECK: left:
|
|
; CHECK: br label %right, !dbg ![[DBG1:[0-9]+]]
|
|
entry:
|
|
%i.inc = add nuw i32 %i, 1
|
|
%c0 = icmp ult i32 %i.inc, %len
|
|
br i1 %c0, label %left, label %right
|
|
|
|
left:
|
|
%c1 = icmp ult i32 %i, %len
|
|
br i1 %c1, label %right, label %left0 ; "line 9" to -debugify
|
|
|
|
left0:
|
|
ret void
|
|
|
|
right:
|
|
ret void
|
|
}
|
|
|
|
; CHECK-DAG: ![[DBG0]] = !DILocation(line: 3,
|
|
; CHECK-DAG: ![[DBG1]] = !DILocation(line: 9,
|
|
|