xref: /llvm-project/llvm/test/tools/llvm-reduce/reduce-operands-skip-repeated-phi-input.ll (revision 7721cba2eeb41a45f002ee923cb7acef89fa7483)
1*7721cba2SMatt Arsenault; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=operands-skip --test FileCheck --test-arg --check-prefixes=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t
2*7721cba2SMatt Arsenault; RUN: FileCheck --check-prefixes=CHECK %s < %t
3*7721cba2SMatt Arsenault
4*7721cba2SMatt Arsenault; Make sure if we're replacing the value in a phi, it's replaced for
5*7721cba2SMatt Arsenault; all repeats of the same incoming block.
6*7721cba2SMatt Arsenault
7*7721cba2SMatt Arsenault; CHECK-INTERESTINGNESS: switch
8*7721cba2SMatt Arsenault; CHECK-INTERESTINGNESS: phi
9*7721cba2SMatt Arsenault; CHECK-INTERESTINGNESS-SAME: [ %gep1, %bb1 ]
10*7721cba2SMatt Arsenault
11*7721cba2SMatt Arsenault; CHECK: %phi.ptr = phi ptr [ %arg1, %entry ], [ %arg1, %entry ], [ %gep1, %bb1 ]
12*7721cba2SMatt Arsenaultdefine void @foo(i32 %arg0, ptr %arg1, ptr %arg2) {
13*7721cba2SMatt Arsenaultentry:
14*7721cba2SMatt Arsenault  %gep0 = getelementptr i32, ptr %arg1, i32 10
15*7721cba2SMatt Arsenault  %gep1 = getelementptr i32, ptr %arg2, i32 12
16*7721cba2SMatt Arsenault  switch i32 %arg0, label %ret [
17*7721cba2SMatt Arsenault    i32 3, label %bb1
18*7721cba2SMatt Arsenault    i32 4, label %bb2
19*7721cba2SMatt Arsenault    i32 12, label %bb2
20*7721cba2SMatt Arsenault  ]
21*7721cba2SMatt Arsenault
22*7721cba2SMatt Arsenaultbb1:
23*7721cba2SMatt Arsenault  br label %bb2
24*7721cba2SMatt Arsenault
25*7721cba2SMatt Arsenaultbb2:
26*7721cba2SMatt Arsenault  %phi.ptr = phi ptr [ %gep0, %entry ], [ %gep0, %entry ], [ %gep1, %bb1 ]
27*7721cba2SMatt Arsenault  store volatile i32 0, ptr %phi.ptr
28*7721cba2SMatt Arsenault  br label %ret
29*7721cba2SMatt Arsenault
30*7721cba2SMatt Arsenaultret:
31*7721cba2SMatt Arsenault  ret void
32*7721cba2SMatt Arsenault}
33