194d3dd8bSRoman Lebedev; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2b280ee1dSBjorn Pettersson; RUN: opt -passes=instsimplify -S < %s | FileCheck %s 394d3dd8bSRoman Lebedev 4aea042e9SRoman Lebedev; All these are negative cases, we are not allowed to perform this 5aea042e9SRoman Lebedev; simplification in InstSimplify, because the PHI's aren't def-reachable 6aea042e9SRoman Lebedev; from one another. 7aea042e9SRoman Lebedev 894d3dd8bSRoman Lebedev; Most basic case, fully identical PHI nodes 9*04b944e2SNikita Popovdefine void @test0(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) { 1094d3dd8bSRoman Lebedev; CHECK-LABEL: @test0( 1194d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 1294d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 1394d3dd8bSRoman Lebedev; CHECK: b0: 1494d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 1594d3dd8bSRoman Lebedev; CHECK: b1: 1694d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 1794d3dd8bSRoman Lebedev; CHECK: end: 1894d3dd8bSRoman Lebedev; CHECK-NEXT: [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 19ed90f15eSOwen Anderson; CHECK-NEXT: [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V1]], [[B1]] ] 20*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I0]], ptr [[D0:%.*]], align 4 21*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I1]], ptr [[D1:%.*]], align 4 2294d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 2394d3dd8bSRoman Lebedev; 2494d3dd8bSRoman Lebedeventry: 2594d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 2694d3dd8bSRoman Lebedev 2794d3dd8bSRoman Lebedevb0: 2894d3dd8bSRoman Lebedev br label %end 2994d3dd8bSRoman Lebedev 3094d3dd8bSRoman Lebedevb1: 3194d3dd8bSRoman Lebedev br label %end 3294d3dd8bSRoman Lebedev 3394d3dd8bSRoman Lebedevend: 3494d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 3594d3dd8bSRoman Lebedev %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 36*04b944e2SNikita Popov store i32 %i0, ptr %d0 37*04b944e2SNikita Popov store i32 %i1, ptr %d1 3894d3dd8bSRoman Lebedev ret void 3994d3dd8bSRoman Lebedev} 4094d3dd8bSRoman Lebedev 4194d3dd8bSRoman Lebedev; Fully identical PHI nodes, but order of operands differs 42*04b944e2SNikita Popovdefine void @test1(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) { 4394d3dd8bSRoman Lebedev; CHECK-LABEL: @test1( 4494d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 4594d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 4694d3dd8bSRoman Lebedev; CHECK: b0: 4794d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 4894d3dd8bSRoman Lebedev; CHECK: b1: 4994d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 5094d3dd8bSRoman Lebedev; CHECK: end: 5194d3dd8bSRoman Lebedev; CHECK-NEXT: [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 52ed90f15eSOwen Anderson; CHECK-NEXT: [[I1:%.*]] = phi i32 [ [[V1]], [[B1]] ], [ [[V0]], [[B0]] ] 53*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I0]], ptr [[D0:%.*]], align 4 54*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I1]], ptr [[D1:%.*]], align 4 5594d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 5694d3dd8bSRoman Lebedev; 5794d3dd8bSRoman Lebedeventry: 5894d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 5994d3dd8bSRoman Lebedev 6094d3dd8bSRoman Lebedevb0: 6194d3dd8bSRoman Lebedev br label %end 6294d3dd8bSRoman Lebedev 6394d3dd8bSRoman Lebedevb1: 6494d3dd8bSRoman Lebedev br label %end 6594d3dd8bSRoman Lebedev 6694d3dd8bSRoman Lebedevend: 6794d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 6894d3dd8bSRoman Lebedev %i1 = phi i32 [ %v1, %b1 ], [ %v0, %b0 ] 69*04b944e2SNikita Popov store i32 %i0, ptr %d0 70*04b944e2SNikita Popov store i32 %i1, ptr %d1 7194d3dd8bSRoman Lebedev ret void 7294d3dd8bSRoman Lebedev} 7394d3dd8bSRoman Lebedev 7494d3dd8bSRoman Lebedev; Different incoming values in second PHI 75*04b944e2SNikita Popovdefine void @negative_test2(i32 %v0, i32 %v1, i32 %v2, i1 %c, ptr %d0, ptr %d1) { 7694d3dd8bSRoman Lebedev; CHECK-LABEL: @negative_test2( 7794d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 7894d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 7994d3dd8bSRoman Lebedev; CHECK: b0: 8094d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 8194d3dd8bSRoman Lebedev; CHECK: b1: 8294d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 8394d3dd8bSRoman Lebedev; CHECK: end: 8494d3dd8bSRoman Lebedev; CHECK-NEXT: [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 8594d3dd8bSRoman Lebedev; CHECK-NEXT: [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V2:%.*]], [[B1]] ] 86*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I0]], ptr [[D0:%.*]], align 4 87*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I1]], ptr [[D1:%.*]], align 4 8894d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 8994d3dd8bSRoman Lebedev; 9094d3dd8bSRoman Lebedeventry: 9194d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 9294d3dd8bSRoman Lebedev 9394d3dd8bSRoman Lebedevb0: 9494d3dd8bSRoman Lebedev br label %end 9594d3dd8bSRoman Lebedev 9694d3dd8bSRoman Lebedevb1: 9794d3dd8bSRoman Lebedev br label %end 9894d3dd8bSRoman Lebedev 9994d3dd8bSRoman Lebedevend: 10094d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 10194d3dd8bSRoman Lebedev %i1 = phi i32 [ %v0, %b0 ], [ %v2, %b1 ] ; from %b0 takes %v2 instead of %v1 102*04b944e2SNikita Popov store i32 %i0, ptr %d0 103*04b944e2SNikita Popov store i32 %i1, ptr %d1 10494d3dd8bSRoman Lebedev ret void 10594d3dd8bSRoman Lebedev} 106*04b944e2SNikita Popovdefine void @negative_test3(i32 %v0, i32 %v1, i32 %v2, i1 %c, ptr %d0, ptr %d1) { 10794d3dd8bSRoman Lebedev; CHECK-LABEL: @negative_test3( 10894d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 10994d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 11094d3dd8bSRoman Lebedev; CHECK: b0: 11194d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 11294d3dd8bSRoman Lebedev; CHECK: b1: 11394d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 11494d3dd8bSRoman Lebedev; CHECK: end: 11594d3dd8bSRoman Lebedev; CHECK-NEXT: [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 11694d3dd8bSRoman Lebedev; CHECK-NEXT: [[I1:%.*]] = phi i32 [ [[V2:%.*]], [[B1]] ], [ [[V0]], [[B0]] ] 117*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I0]], ptr [[D0:%.*]], align 4 118*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I1]], ptr [[D1:%.*]], align 4 11994d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 12094d3dd8bSRoman Lebedev; 12194d3dd8bSRoman Lebedeventry: 12294d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 12394d3dd8bSRoman Lebedev 12494d3dd8bSRoman Lebedevb0: 12594d3dd8bSRoman Lebedev br label %end 12694d3dd8bSRoman Lebedev 12794d3dd8bSRoman Lebedevb1: 12894d3dd8bSRoman Lebedev br label %end 12994d3dd8bSRoman Lebedev 13094d3dd8bSRoman Lebedevend: 13194d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 13294d3dd8bSRoman Lebedev %i1 = phi i32 [ %v2, %b1 ], [ %v0, %b0 ] ; from %b0 takes %v2 instead of %v1 133*04b944e2SNikita Popov store i32 %i0, ptr %d0 134*04b944e2SNikita Popov store i32 %i1, ptr %d1 13594d3dd8bSRoman Lebedev ret void 13694d3dd8bSRoman Lebedev} 137*04b944e2SNikita Popovdefine void @negative_test4(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) { 13894d3dd8bSRoman Lebedev; CHECK-LABEL: @negative_test4( 13994d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 14094d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 14194d3dd8bSRoman Lebedev; CHECK: b0: 14294d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 14394d3dd8bSRoman Lebedev; CHECK: b1: 14494d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 14594d3dd8bSRoman Lebedev; CHECK: end: 14694d3dd8bSRoman Lebedev; CHECK-NEXT: [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 147ed90f15eSOwen Anderson; CHECK-NEXT: [[I1:%.*]] = phi i32 [ [[V1]], [[B1]] ], [ [[V0]], [[B0]] ] 148*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I0]], ptr [[D0:%.*]], align 4 149*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I1]], ptr [[D1:%.*]], align 4 15094d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 15194d3dd8bSRoman Lebedev; 15294d3dd8bSRoman Lebedeventry: 15394d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 15494d3dd8bSRoman Lebedev 15594d3dd8bSRoman Lebedevb0: 15694d3dd8bSRoman Lebedev br label %end 15794d3dd8bSRoman Lebedev 15894d3dd8bSRoman Lebedevb1: 15994d3dd8bSRoman Lebedev br label %end 16094d3dd8bSRoman Lebedev 16194d3dd8bSRoman Lebedevend: 16294d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 16394d3dd8bSRoman Lebedev %i1 = phi i32 [ %v1, %b1 ], [ %v0, %b0 ] ; incoming values are swapped 164*04b944e2SNikita Popov store i32 %i0, ptr %d0 165*04b944e2SNikita Popov store i32 %i1, ptr %d1 16694d3dd8bSRoman Lebedev ret void 16794d3dd8bSRoman Lebedev} 16894d3dd8bSRoman Lebedev 16994d3dd8bSRoman Lebedev; Both PHI's are identical, but the first one has no uses, so ignore it. 170*04b944e2SNikita Popovdefine void @test5(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) { 17194d3dd8bSRoman Lebedev; CHECK-LABEL: @test5( 17294d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 17394d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 17494d3dd8bSRoman Lebedev; CHECK: b0: 17594d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 17694d3dd8bSRoman Lebedev; CHECK: b1: 17794d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 17894d3dd8bSRoman Lebedev; CHECK: end: 17994d3dd8bSRoman Lebedev; CHECK-NEXT: [[I1:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 180*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I1]], ptr [[D1:%.*]], align 4 18194d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 18294d3dd8bSRoman Lebedev; 18394d3dd8bSRoman Lebedeventry: 18494d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 18594d3dd8bSRoman Lebedev 18694d3dd8bSRoman Lebedevb0: 18794d3dd8bSRoman Lebedev br label %end 18894d3dd8bSRoman Lebedev 18994d3dd8bSRoman Lebedevb1: 19094d3dd8bSRoman Lebedev br label %end 19194d3dd8bSRoman Lebedev 19294d3dd8bSRoman Lebedevend: 19394d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] ; unused 19494d3dd8bSRoman Lebedev %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 195*04b944e2SNikita Popov store i32 %i1, ptr %d1 19694d3dd8bSRoman Lebedev ret void 19794d3dd8bSRoman Lebedev} 19894d3dd8bSRoman Lebedev; Second PHI has no uses 199*04b944e2SNikita Popovdefine void @test6(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) { 20094d3dd8bSRoman Lebedev; CHECK-LABEL: @test6( 20194d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 20294d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 20394d3dd8bSRoman Lebedev; CHECK: b0: 20494d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 20594d3dd8bSRoman Lebedev; CHECK: b1: 20694d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 20794d3dd8bSRoman Lebedev; CHECK: end: 20894d3dd8bSRoman Lebedev; CHECK-NEXT: [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 209*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I0]], ptr [[D0:%.*]], align 4 21094d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 21194d3dd8bSRoman Lebedev; 21294d3dd8bSRoman Lebedeventry: 21394d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 21494d3dd8bSRoman Lebedev 21594d3dd8bSRoman Lebedevb0: 21694d3dd8bSRoman Lebedev br label %end 21794d3dd8bSRoman Lebedev 21894d3dd8bSRoman Lebedevb1: 21994d3dd8bSRoman Lebedev br label %end 22094d3dd8bSRoman Lebedev 22194d3dd8bSRoman Lebedevend: 22294d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 22394d3dd8bSRoman Lebedev %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] ; unused 224*04b944e2SNikita Popov store i32 %i0, ptr %d0 22594d3dd8bSRoman Lebedev ret void 22694d3dd8bSRoman Lebedev} 22794d3dd8bSRoman Lebedev 22894d3dd8bSRoman Lebedev; Non-matching PHI node should be ignored without terminating CSE. 229*04b944e2SNikita Popovdefine void @test7(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, ptr %d0, ptr %d1, ptr %d2) { 23094d3dd8bSRoman Lebedev; CHECK-LABEL: @test7( 23194d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 23294d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 23394d3dd8bSRoman Lebedev; CHECK: b0: 23494d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 23594d3dd8bSRoman Lebedev; CHECK: b1: 23694d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 23794d3dd8bSRoman Lebedev; CHECK: end: 23894d3dd8bSRoman Lebedev; CHECK-NEXT: [[IBAD:%.*]] = phi i16 [ [[V2:%.*]], [[B0]] ], [ [[V3:%.*]], [[B1]] ] 23994d3dd8bSRoman Lebedev; CHECK-NEXT: [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 240ed90f15eSOwen Anderson; CHECK-NEXT: [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V1]], [[B1]] ] 241*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I0]], ptr [[D0:%.*]], align 4 242*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I1]], ptr [[D1:%.*]], align 4 243*04b944e2SNikita Popov; CHECK-NEXT: store i16 [[IBAD]], ptr [[D2:%.*]], align 2 24494d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 24594d3dd8bSRoman Lebedev; 24694d3dd8bSRoman Lebedeventry: 24794d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 24894d3dd8bSRoman Lebedev 24994d3dd8bSRoman Lebedevb0: 25094d3dd8bSRoman Lebedev br label %end 25194d3dd8bSRoman Lebedev 25294d3dd8bSRoman Lebedevb1: 25394d3dd8bSRoman Lebedev br label %end 25494d3dd8bSRoman Lebedev 25594d3dd8bSRoman Lebedevend: 25694d3dd8bSRoman Lebedev %iBAD = phi i16 [ %v2, %b0 ], [ %v3, %b1 ] 25794d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 25894d3dd8bSRoman Lebedev %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 259*04b944e2SNikita Popov store i32 %i0, ptr %d0 260*04b944e2SNikita Popov store i32 %i1, ptr %d1 261*04b944e2SNikita Popov store i16 %iBAD, ptr %d2 26294d3dd8bSRoman Lebedev ret void 26394d3dd8bSRoman Lebedev} 264*04b944e2SNikita Popovdefine void @test8(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, ptr %d0, ptr %d1, ptr %d2) { 26594d3dd8bSRoman Lebedev; CHECK-LABEL: @test8( 26694d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 26794d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 26894d3dd8bSRoman Lebedev; CHECK: b0: 26994d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 27094d3dd8bSRoman Lebedev; CHECK: b1: 27194d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 27294d3dd8bSRoman Lebedev; CHECK: end: 27394d3dd8bSRoman Lebedev; CHECK-NEXT: [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 27494d3dd8bSRoman Lebedev; CHECK-NEXT: [[IBAD:%.*]] = phi i16 [ [[V2:%.*]], [[B0]] ], [ [[V3:%.*]], [[B1]] ] 275ed90f15eSOwen Anderson; CHECK-NEXT: [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V1]], [[B1]] ] 276*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I0]], ptr [[D0:%.*]], align 4 277*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I1]], ptr [[D1:%.*]], align 4 278*04b944e2SNikita Popov; CHECK-NEXT: store i16 [[IBAD]], ptr [[D2:%.*]], align 2 27994d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 28094d3dd8bSRoman Lebedev; 28194d3dd8bSRoman Lebedeventry: 28294d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 28394d3dd8bSRoman Lebedev 28494d3dd8bSRoman Lebedevb0: 28594d3dd8bSRoman Lebedev br label %end 28694d3dd8bSRoman Lebedev 28794d3dd8bSRoman Lebedevb1: 28894d3dd8bSRoman Lebedev br label %end 28994d3dd8bSRoman Lebedev 29094d3dd8bSRoman Lebedevend: 29194d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 29294d3dd8bSRoman Lebedev %iBAD = phi i16 [ %v2, %b0 ], [ %v3, %b1 ] 29394d3dd8bSRoman Lebedev %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 294*04b944e2SNikita Popov store i32 %i0, ptr %d0 295*04b944e2SNikita Popov store i32 %i1, ptr %d1 296*04b944e2SNikita Popov store i16 %iBAD, ptr %d2 29794d3dd8bSRoman Lebedev ret void 29894d3dd8bSRoman Lebedev} 299*04b944e2SNikita Popovdefine void @test9(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, ptr %d0, ptr %d1, ptr %d2) { 30094d3dd8bSRoman Lebedev; CHECK-LABEL: @test9( 30194d3dd8bSRoman Lebedev; CHECK-NEXT: entry: 30294d3dd8bSRoman Lebedev; CHECK-NEXT: br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]] 30394d3dd8bSRoman Lebedev; CHECK: b0: 30494d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END:%.*]] 30594d3dd8bSRoman Lebedev; CHECK: b1: 30694d3dd8bSRoman Lebedev; CHECK-NEXT: br label [[END]] 30794d3dd8bSRoman Lebedev; CHECK: end: 30894d3dd8bSRoman Lebedev; CHECK-NEXT: [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ] 309ed90f15eSOwen Anderson; CHECK-NEXT: [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V1]], [[B1]] ] 31094d3dd8bSRoman Lebedev; CHECK-NEXT: [[IBAD:%.*]] = phi i16 [ [[V2:%.*]], [[B0]] ], [ [[V3:%.*]], [[B1]] ] 311*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I0]], ptr [[D0:%.*]], align 4 312*04b944e2SNikita Popov; CHECK-NEXT: store i32 [[I1]], ptr [[D1:%.*]], align 4 313*04b944e2SNikita Popov; CHECK-NEXT: store i16 [[IBAD]], ptr [[D2:%.*]], align 2 31494d3dd8bSRoman Lebedev; CHECK-NEXT: ret void 31594d3dd8bSRoman Lebedev; 31694d3dd8bSRoman Lebedeventry: 31794d3dd8bSRoman Lebedev br i1 %c, label %b0, label %b1 31894d3dd8bSRoman Lebedev 31994d3dd8bSRoman Lebedevb0: 32094d3dd8bSRoman Lebedev br label %end 32194d3dd8bSRoman Lebedev 32294d3dd8bSRoman Lebedevb1: 32394d3dd8bSRoman Lebedev br label %end 32494d3dd8bSRoman Lebedev 32594d3dd8bSRoman Lebedevend: 32694d3dd8bSRoman Lebedev %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 32794d3dd8bSRoman Lebedev %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] 32894d3dd8bSRoman Lebedev %iBAD = phi i16 [ %v2, %b0 ], [ %v3, %b1 ] 329*04b944e2SNikita Popov store i32 %i0, ptr %d0 330*04b944e2SNikita Popov store i32 %i1, ptr %d1 331*04b944e2SNikita Popov store i16 %iBAD, ptr %d2 33294d3dd8bSRoman Lebedev ret void 33394d3dd8bSRoman Lebedev} 334