llvm-project/llvm/test/tools/llvm-reduce/reduce-operands-repeated-phi-input.ll
Matt Arsenault 0a159427ad llvm-reduce: Fix invalid reduction for phis with repeat inputs
Phis have a quirk where the same predecessor block may appear multiple times
if the same block branches to it multiple ways. All the values need to match,
but this was replacing each operand independently. If an operand can be simplified,
make sure to replace every instance of the incoming block's value.
2022-10-07 13:15:15 -07:00

38 lines
1.2 KiB
LLVM

; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=operands-zero --test FileCheck --test-arg --check-prefixes=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
; RUN: FileCheck --check-prefixes=CHECK %s < %t
; Make sure if we're replacing the value in a phi, it's replaced for
; all repeats of the same incoming block.
; CHECK-INTERESTINGNESS: switch
; CHECK-INTERESTINGNESS: phi
; CHECK-INTERESTINGNESS-SAME: [ %arg1, %bb1 ]
; CHECK-INTERESTINGNESS: phi
; CHECK-INTERESTINGNESS-SAME: [ %arg3, %bb1 ]
; CHECK-INTERESTINGNESS: store volatile i32 %
; CHECK-INTERESTINGNESS: store volatile float %
; CHECK: %phi.i32 = phi i32 [ 0, %entry ], [ 0, %entry ], [ %arg1, %bb1 ]
; CHECK: %phi.f32 = phi float [ 0.000000e+00, %entry ], [ 0.000000e+00, %entry ], [ %arg3, %bb1 ]
define void @foo(i32 %arg0, i32 %arg1, float %arg2, float %arg3) {
entry:
switch i32 %arg0, label %ret [
i32 3, label %bb1
i32 4, label %bb2
i32 12, label %bb2
]
bb1:
br label %bb2
bb2:
%phi.i32 = phi i32 [ %arg0, %entry ], [ %arg0, %entry ], [ %arg1, %bb1 ]
%phi.f32 = phi float [ %arg2, %entry ], [ %arg2, %entry ], [ %arg3, %bb1 ]
store volatile i32 %phi.i32, ptr undef
store volatile float %phi.f32, ptr undef
br label %ret
ret:
ret void
}