xref: /llvm-project/llvm/test/Transforms/EarlyCSE/phi.ll (revision ac696ac4530fb3df626195e94e83649bf7114754)
194d3dd8bSRoman Lebedev; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*ac696ac4SBjorn Pettersson; RUN: opt -passes=early-cse -earlycse-debug-hash -S < %s | FileCheck %s
3c384b20bSArthur Eubanks; RUN: opt -passes='early-cse<memssa>' -S < %s | FileCheck %s
494d3dd8bSRoman Lebedev
594d3dd8bSRoman Lebedev; Most basic case, fully identical PHI nodes
63c514d31SNikita Popovdefine void @test0(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
794d3dd8bSRoman Lebedev; CHECK-LABEL: @test0(
894d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
994d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
1094d3dd8bSRoman Lebedev; CHECK:       b0:
1194d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
1294d3dd8bSRoman Lebedev; CHECK:       b1:
1394d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
1494d3dd8bSRoman Lebedev; CHECK:       end:
1594d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
16ed90f15eSOwen Anderson; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V1]], [[B1]] ]
173c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
183c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
1994d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
2094d3dd8bSRoman Lebedev;
2194d3dd8bSRoman Lebedeventry:
2294d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
2394d3dd8bSRoman Lebedev
2494d3dd8bSRoman Lebedevb0:
2594d3dd8bSRoman Lebedev  br label %end
2694d3dd8bSRoman Lebedev
2794d3dd8bSRoman Lebedevb1:
2894d3dd8bSRoman Lebedev  br label %end
2994d3dd8bSRoman Lebedev
3094d3dd8bSRoman Lebedevend:
3194d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
3294d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
333c514d31SNikita Popov  store i32 %i0, ptr %d0
343c514d31SNikita Popov  store i32 %i1, ptr %d1
3594d3dd8bSRoman Lebedev  ret void
3694d3dd8bSRoman Lebedev}
3794d3dd8bSRoman Lebedev
3894d3dd8bSRoman Lebedev; Fully identical PHI nodes, but order of operands differs
393c514d31SNikita Popovdefine void @test1(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
4094d3dd8bSRoman Lebedev; CHECK-LABEL: @test1(
4194d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
4294d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
4394d3dd8bSRoman Lebedev; CHECK:       b0:
4494d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
4594d3dd8bSRoman Lebedev; CHECK:       b1:
4694d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
4794d3dd8bSRoman Lebedev; CHECK:       end:
4894d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
49ed90f15eSOwen Anderson; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V1]], [[B1]] ], [ [[V0]], [[B0]] ]
503c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
513c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
5294d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
5394d3dd8bSRoman Lebedev;
5494d3dd8bSRoman Lebedeventry:
5594d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
5694d3dd8bSRoman Lebedev
5794d3dd8bSRoman Lebedevb0:
5894d3dd8bSRoman Lebedev  br label %end
5994d3dd8bSRoman Lebedev
6094d3dd8bSRoman Lebedevb1:
6194d3dd8bSRoman Lebedev  br label %end
6294d3dd8bSRoman Lebedev
6394d3dd8bSRoman Lebedevend:
6494d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
6594d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v1, %b1 ], [ %v0, %b0 ]
663c514d31SNikita Popov  store i32 %i0, ptr %d0
673c514d31SNikita Popov  store i32 %i1, ptr %d1
6894d3dd8bSRoman Lebedev  ret void
6994d3dd8bSRoman Lebedev}
7094d3dd8bSRoman Lebedev
7194d3dd8bSRoman Lebedev; Different incoming values in second PHI
723c514d31SNikita Popovdefine void @negative_test2(i32 %v0, i32 %v1, i32 %v2, i1 %c, ptr %d0, ptr %d1) {
7394d3dd8bSRoman Lebedev; CHECK-LABEL: @negative_test2(
7494d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
7594d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
7694d3dd8bSRoman Lebedev; CHECK:       b0:
7794d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
7894d3dd8bSRoman Lebedev; CHECK:       b1:
7994d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
8094d3dd8bSRoman Lebedev; CHECK:       end:
8194d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
8294d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V2:%.*]], [[B1]] ]
833c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
843c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
8594d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
8694d3dd8bSRoman Lebedev;
8794d3dd8bSRoman Lebedeventry:
8894d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
8994d3dd8bSRoman Lebedev
9094d3dd8bSRoman Lebedevb0:
9194d3dd8bSRoman Lebedev  br label %end
9294d3dd8bSRoman Lebedev
9394d3dd8bSRoman Lebedevb1:
9494d3dd8bSRoman Lebedev  br label %end
9594d3dd8bSRoman Lebedev
9694d3dd8bSRoman Lebedevend:
9794d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
9894d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v0, %b0 ], [ %v2, %b1 ] ; from %b0 takes %v2 instead of %v1
993c514d31SNikita Popov  store i32 %i0, ptr %d0
1003c514d31SNikita Popov  store i32 %i1, ptr %d1
10194d3dd8bSRoman Lebedev  ret void
10294d3dd8bSRoman Lebedev}
1033c514d31SNikita Popovdefine void @negative_test3(i32 %v0, i32 %v1, i32 %v2, i1 %c, ptr %d0, ptr %d1) {
10494d3dd8bSRoman Lebedev; CHECK-LABEL: @negative_test3(
10594d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
10694d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
10794d3dd8bSRoman Lebedev; CHECK:       b0:
10894d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
10994d3dd8bSRoman Lebedev; CHECK:       b1:
11094d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
11194d3dd8bSRoman Lebedev; CHECK:       end:
11294d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
11394d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V2:%.*]], [[B1]] ], [ [[V0]], [[B0]] ]
1143c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
1153c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
11694d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
11794d3dd8bSRoman Lebedev;
11894d3dd8bSRoman Lebedeventry:
11994d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
12094d3dd8bSRoman Lebedev
12194d3dd8bSRoman Lebedevb0:
12294d3dd8bSRoman Lebedev  br label %end
12394d3dd8bSRoman Lebedev
12494d3dd8bSRoman Lebedevb1:
12594d3dd8bSRoman Lebedev  br label %end
12694d3dd8bSRoman Lebedev
12794d3dd8bSRoman Lebedevend:
12894d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
12994d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v2, %b1 ], [ %v0, %b0 ] ; from %b0 takes %v2 instead of %v1
1303c514d31SNikita Popov  store i32 %i0, ptr %d0
1313c514d31SNikita Popov  store i32 %i1, ptr %d1
13294d3dd8bSRoman Lebedev  ret void
13394d3dd8bSRoman Lebedev}
1343c514d31SNikita Popovdefine void @negative_test4(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
13594d3dd8bSRoman Lebedev; CHECK-LABEL: @negative_test4(
13694d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
13794d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
13894d3dd8bSRoman Lebedev; CHECK:       b0:
13994d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
14094d3dd8bSRoman Lebedev; CHECK:       b1:
14194d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
14294d3dd8bSRoman Lebedev; CHECK:       end:
14394d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
144ed90f15eSOwen Anderson; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V1]], [[B1]] ], [ [[V0]], [[B0]] ]
1453c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
1463c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
14794d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
14894d3dd8bSRoman Lebedev;
14994d3dd8bSRoman Lebedeventry:
15094d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
15194d3dd8bSRoman Lebedev
15294d3dd8bSRoman Lebedevb0:
15394d3dd8bSRoman Lebedev  br label %end
15494d3dd8bSRoman Lebedev
15594d3dd8bSRoman Lebedevb1:
15694d3dd8bSRoman Lebedev  br label %end
15794d3dd8bSRoman Lebedev
15894d3dd8bSRoman Lebedevend:
15994d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
16094d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v1, %b1 ], [ %v0, %b0 ] ; incoming values are swapped
1613c514d31SNikita Popov  store i32 %i0, ptr %d0
1623c514d31SNikita Popov  store i32 %i1, ptr %d1
16394d3dd8bSRoman Lebedev  ret void
16494d3dd8bSRoman Lebedev}
16594d3dd8bSRoman Lebedev
16694d3dd8bSRoman Lebedev; Both PHI's are identical, but the first one has no uses, so ignore it.
1673c514d31SNikita Popovdefine void @test5(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
16894d3dd8bSRoman Lebedev; CHECK-LABEL: @test5(
16994d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
17094d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
17194d3dd8bSRoman Lebedev; CHECK:       b0:
17294d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
17394d3dd8bSRoman Lebedev; CHECK:       b1:
17494d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
17594d3dd8bSRoman Lebedev; CHECK:       end:
17694d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
1773c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
17894d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
17994d3dd8bSRoman Lebedev;
18094d3dd8bSRoman Lebedeventry:
18194d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
18294d3dd8bSRoman Lebedev
18394d3dd8bSRoman Lebedevb0:
18494d3dd8bSRoman Lebedev  br label %end
18594d3dd8bSRoman Lebedev
18694d3dd8bSRoman Lebedevb1:
18794d3dd8bSRoman Lebedev  br label %end
18894d3dd8bSRoman Lebedev
18994d3dd8bSRoman Lebedevend:
19094d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] ; unused
19194d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
1923c514d31SNikita Popov  store i32 %i1, ptr %d1
19394d3dd8bSRoman Lebedev  ret void
19494d3dd8bSRoman Lebedev}
19594d3dd8bSRoman Lebedev; Second PHI has no uses
1963c514d31SNikita Popovdefine void @test6(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
19794d3dd8bSRoman Lebedev; CHECK-LABEL: @test6(
19894d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
19994d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
20094d3dd8bSRoman Lebedev; CHECK:       b0:
20194d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
20294d3dd8bSRoman Lebedev; CHECK:       b1:
20394d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
20494d3dd8bSRoman Lebedev; CHECK:       end:
20594d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
2063c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
20794d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
20894d3dd8bSRoman Lebedev;
20994d3dd8bSRoman Lebedeventry:
21094d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
21194d3dd8bSRoman Lebedev
21294d3dd8bSRoman Lebedevb0:
21394d3dd8bSRoman Lebedev  br label %end
21494d3dd8bSRoman Lebedev
21594d3dd8bSRoman Lebedevb1:
21694d3dd8bSRoman Lebedev  br label %end
21794d3dd8bSRoman Lebedev
21894d3dd8bSRoman Lebedevend:
21994d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
22094d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] ; unused
2213c514d31SNikita Popov  store i32 %i0, ptr %d0
22294d3dd8bSRoman Lebedev  ret void
22394d3dd8bSRoman Lebedev}
22494d3dd8bSRoman Lebedev
22594d3dd8bSRoman Lebedev; Non-matching PHI node should be ignored without terminating CSE.
2263c514d31SNikita Popovdefine void @test7(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, ptr %d0, ptr %d1, ptr %d2) {
22794d3dd8bSRoman Lebedev; CHECK-LABEL: @test7(
22894d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
22994d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
23094d3dd8bSRoman Lebedev; CHECK:       b0:
23194d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
23294d3dd8bSRoman Lebedev; CHECK:       b1:
23394d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
23494d3dd8bSRoman Lebedev; CHECK:       end:
23594d3dd8bSRoman Lebedev; CHECK-NEXT:    [[IBAD:%.*]] = phi i16 [ [[V2:%.*]], [[B0]] ], [ [[V3:%.*]], [[B1]] ]
23694d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
237ed90f15eSOwen Anderson; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V1]], [[B1]] ]
2383c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
2393c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
2403c514d31SNikita Popov; CHECK-NEXT:    store i16 [[IBAD]], ptr [[D2:%.*]], align 2
24194d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
24294d3dd8bSRoman Lebedev;
24394d3dd8bSRoman Lebedeventry:
24494d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
24594d3dd8bSRoman Lebedev
24694d3dd8bSRoman Lebedevb0:
24794d3dd8bSRoman Lebedev  br label %end
24894d3dd8bSRoman Lebedev
24994d3dd8bSRoman Lebedevb1:
25094d3dd8bSRoman Lebedev  br label %end
25194d3dd8bSRoman Lebedev
25294d3dd8bSRoman Lebedevend:
25394d3dd8bSRoman Lebedev  %iBAD = phi i16 [ %v2, %b0 ], [ %v3, %b1 ]
25494d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
25594d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
2563c514d31SNikita Popov  store i32 %i0, ptr %d0
2573c514d31SNikita Popov  store i32 %i1, ptr %d1
2583c514d31SNikita Popov  store i16 %iBAD, ptr %d2
25994d3dd8bSRoman Lebedev  ret void
26094d3dd8bSRoman Lebedev}
2613c514d31SNikita Popovdefine void @test8(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, ptr %d0, ptr %d1, ptr %d2) {
26294d3dd8bSRoman Lebedev; CHECK-LABEL: @test8(
26394d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
26494d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
26594d3dd8bSRoman Lebedev; CHECK:       b0:
26694d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
26794d3dd8bSRoman Lebedev; CHECK:       b1:
26894d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
26994d3dd8bSRoman Lebedev; CHECK:       end:
27094d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
27194d3dd8bSRoman Lebedev; CHECK-NEXT:    [[IBAD:%.*]] = phi i16 [ [[V2:%.*]], [[B0]] ], [ [[V3:%.*]], [[B1]] ]
272ed90f15eSOwen Anderson; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V1]], [[B1]] ]
2733c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
2743c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
2753c514d31SNikita Popov; CHECK-NEXT:    store i16 [[IBAD]], ptr [[D2:%.*]], align 2
27694d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
27794d3dd8bSRoman Lebedev;
27894d3dd8bSRoman Lebedeventry:
27994d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
28094d3dd8bSRoman Lebedev
28194d3dd8bSRoman Lebedevb0:
28294d3dd8bSRoman Lebedev  br label %end
28394d3dd8bSRoman Lebedev
28494d3dd8bSRoman Lebedevb1:
28594d3dd8bSRoman Lebedev  br label %end
28694d3dd8bSRoman Lebedev
28794d3dd8bSRoman Lebedevend:
28894d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
28994d3dd8bSRoman Lebedev  %iBAD = phi i16 [ %v2, %b0 ], [ %v3, %b1 ]
29094d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
2913c514d31SNikita Popov  store i32 %i0, ptr %d0
2923c514d31SNikita Popov  store i32 %i1, ptr %d1
2933c514d31SNikita Popov  store i16 %iBAD, ptr %d2
29494d3dd8bSRoman Lebedev  ret void
29594d3dd8bSRoman Lebedev}
2963c514d31SNikita Popovdefine void @test9(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, ptr %d0, ptr %d1, ptr %d2) {
29794d3dd8bSRoman Lebedev; CHECK-LABEL: @test9(
29894d3dd8bSRoman Lebedev; CHECK-NEXT:  entry:
29994d3dd8bSRoman Lebedev; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
30094d3dd8bSRoman Lebedev; CHECK:       b0:
30194d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END:%.*]]
30294d3dd8bSRoman Lebedev; CHECK:       b1:
30394d3dd8bSRoman Lebedev; CHECK-NEXT:    br label [[END]]
30494d3dd8bSRoman Lebedev; CHECK:       end:
30594d3dd8bSRoman Lebedev; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
306ed90f15eSOwen Anderson; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V1]], [[B1]] ]
30794d3dd8bSRoman Lebedev; CHECK-NEXT:    [[IBAD:%.*]] = phi i16 [ [[V2:%.*]], [[B0]] ], [ [[V3:%.*]], [[B1]] ]
3083c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
3093c514d31SNikita Popov; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
3103c514d31SNikita Popov; CHECK-NEXT:    store i16 [[IBAD]], ptr [[D2:%.*]], align 2
31194d3dd8bSRoman Lebedev; CHECK-NEXT:    ret void
31294d3dd8bSRoman Lebedev;
31394d3dd8bSRoman Lebedeventry:
31494d3dd8bSRoman Lebedev  br i1 %c, label %b0, label %b1
31594d3dd8bSRoman Lebedev
31694d3dd8bSRoman Lebedevb0:
31794d3dd8bSRoman Lebedev  br label %end
31894d3dd8bSRoman Lebedev
31994d3dd8bSRoman Lebedevb1:
32094d3dd8bSRoman Lebedev  br label %end
32194d3dd8bSRoman Lebedev
32294d3dd8bSRoman Lebedevend:
32394d3dd8bSRoman Lebedev  %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
32494d3dd8bSRoman Lebedev  %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
32594d3dd8bSRoman Lebedev  %iBAD = phi i16 [ %v2, %b0 ], [ %v3, %b1 ]
3263c514d31SNikita Popov  store i32 %i0, ptr %d0
3273c514d31SNikita Popov  store i32 %i1, ptr %d1
3283c514d31SNikita Popov  store i16 %iBAD, ptr %d2
32994d3dd8bSRoman Lebedev  ret void
33094d3dd8bSRoman Lebedev}
331