llvm-project/llvm/test/tools/llvm-reduce/reduce-bb-unreachable-does-not-dominate-error1.ll
Matt Arsenault f02bc70c7d llvm-reduce: Fix producing invalid reductions with landingpads
It's not valid to simply branch to a landingpad block, so it
needs to be removed.

Also stop trying to scan forward to find a block that can be merged.
The predecessor merge rules are more complex than this. This also
would need to have considered landingpads. Just do the minimum
to delete the block, and let the simplify-cfg reduction handle
the branch chain cleanups.
2022-10-28 17:07:26 -07:00

62 lines
1.9 KiB
LLVM

; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=unreachable-basic-blocks,basic-blocks --test FileCheck --test-arg --check-prefixes=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
; RUN: FileCheck %s < %t
; CHECK-INTERESTINGNESS: @func(
; CHECK-INTERESTINGNESS: store
; CHECK-INTERESTINGNESS: store
; CHECK-INTERESTINGNESS: store
; CHECK: bb:
; CHECK-NEXT: br i1 %arg1, label %bb3, label %bb7
; CHECK: bb3: ; preds = %bb
; CHECK-NEXT: br i1 %arg2, label %bb4, label %bb7
; CHECK: bb4: ; preds = %bb3
; CHECK-NEXT: store i32 0, ptr addrspace(1) null, align 4
; CHECK-NEXT: ret void
; CHECK: bb7: ; preds = %bb3, %bb
; CHECK-NEXT: %i = phi i1 [ false, %bb ], [ true, %bb3 ]
; CHECK-NEXT: store i32 1, ptr addrspace(1) null, align 4
; CHECK-NEXT: br label %bb10
; CHECK: bb10: ; preds = %bb7
; CHECK-NEXT: store i32 2, ptr addrspace(1) null, align 4
; CHECK-NEXT: unreachable
define amdgpu_kernel void @func(i1 %arg, i1 %arg1, i1 %arg2) {
bb:
br i1 %arg1, label %bb3, label %bb7
bb3: ; preds = %bb
br i1 %arg2, label %bb4, label %bb7
bb4: ; preds = %bb3
store i32 0, ptr addrspace(1) null
br label %bb5
bb5: ; preds = %bb4
unreachable
bb6: ; No predecessors!
unreachable
bb7: ; preds = %bb3, %bb
%i = phi i1 [ false, %bb ], [ true, %bb3 ]
store i32 1, ptr addrspace(1) null
br i1 %arg, label %bb10, label %bb8
bb8: ; preds = %bb7
br i1 %i, label %bb9, label %bb9
bb9: ; preds = %bb8, %bb8
unreachable
bb10: ; preds = %bb7
store i32 2, ptr addrspace(1) null
unreachable
}