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