xref: /llvm-project/llvm/test/tools/llvm-reduce/reduce-operands-repeated-phi-input.ll (revision 0a159427adf1dbc6e9ddab57fe352074b6d4a501)
1*0a159427SMatt Arsenault; 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
2*0a159427SMatt Arsenault; RUN: FileCheck --check-prefixes=CHECK %s < %t
3*0a159427SMatt Arsenault
4*0a159427SMatt Arsenault; Make sure if we're replacing the value in a phi, it's replaced for
5*0a159427SMatt Arsenault; all repeats of the same incoming block.
6*0a159427SMatt Arsenault
7*0a159427SMatt Arsenault; CHECK-INTERESTINGNESS: switch
8*0a159427SMatt Arsenault; CHECK-INTERESTINGNESS: phi
9*0a159427SMatt Arsenault; CHECK-INTERESTINGNESS-SAME: [ %arg1, %bb1 ]
10*0a159427SMatt Arsenault; CHECK-INTERESTINGNESS: phi
11*0a159427SMatt Arsenault; CHECK-INTERESTINGNESS-SAME: [ %arg3, %bb1 ]
12*0a159427SMatt Arsenault; CHECK-INTERESTINGNESS: store volatile i32 %
13*0a159427SMatt Arsenault; CHECK-INTERESTINGNESS: store volatile float %
14*0a159427SMatt Arsenault
15*0a159427SMatt Arsenault; CHECK: %phi.i32 = phi i32 [ 0, %entry ], [ 0, %entry ], [ %arg1, %bb1 ]
16*0a159427SMatt Arsenault; CHECK: %phi.f32 = phi float [ 0.000000e+00, %entry ], [ 0.000000e+00, %entry ], [ %arg3, %bb1 ]
17*0a159427SMatt Arsenaultdefine void @foo(i32 %arg0, i32 %arg1, float %arg2, float %arg3) {
18*0a159427SMatt Arsenaultentry:
19*0a159427SMatt Arsenault  switch i32 %arg0, label %ret [
20*0a159427SMatt Arsenault    i32 3, label %bb1
21*0a159427SMatt Arsenault    i32 4, label %bb2
22*0a159427SMatt Arsenault    i32 12, label %bb2
23*0a159427SMatt Arsenault  ]
24*0a159427SMatt Arsenault
25*0a159427SMatt Arsenaultbb1:
26*0a159427SMatt Arsenault  br label %bb2
27*0a159427SMatt Arsenault
28*0a159427SMatt Arsenaultbb2:
29*0a159427SMatt Arsenault  %phi.i32 = phi i32 [ %arg0, %entry ], [ %arg0, %entry ], [ %arg1, %bb1 ]
30*0a159427SMatt Arsenault  %phi.f32 = phi float [ %arg2, %entry ], [ %arg2, %entry ], [ %arg3, %bb1 ]
31*0a159427SMatt Arsenault  store volatile i32 %phi.i32, ptr undef
32*0a159427SMatt Arsenault  store volatile float %phi.f32, ptr undef
33*0a159427SMatt Arsenault  br label %ret
34*0a159427SMatt Arsenault
35*0a159427SMatt Arsenaultret:
36*0a159427SMatt Arsenault  ret void
37*0a159427SMatt Arsenault}
38