brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.6 KiB · 0b32185 Raw
623 lines · plain
1; RUN: opt < %s -passes=callsite-splitting -S | FileCheck %s2; RUN: opt < %s -passes='function(callsite-splitting)' -S | FileCheck %s3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5target triple = "aarch64"6 7;CHECK-LABEL: @test_eq_eq8 9;CHECK-LABEL: Header:10;CHECK: br i1 %tobool1, label %Header.split, label %TBB11;CHECK-LABEL: Header.split:12;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr null, i32 %v, i32 1)13;CHECK-LABEL: TBB:14;CHECK: br i1 %cmp, label %TBB.split, label %End15;CHECK-LABEL: TBB.split:16;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr nonnull %a, i32 1, i32 2)17;CHECK-LABEL: Tail18;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]19;CHECK: ret i32 %[[MERGED]]20define i32 @test_eq_eq(ptr %a, i32 %v) {21Header:22  %tobool1 = icmp eq ptr %a, null23  br i1 %tobool1, label %Tail, label %TBB24 25TBB:26  %cmp = icmp eq i32 %v, 127  br i1 %cmp, label %Tail, label %End28 29Tail:30  %p = phi i32[1,%Header], [2, %TBB]31  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)32  ret i32 %r33 34End:35  ret i32 %v36}37 38;CHECK-LABEL: @test_eq_eq_eq39;CHECK-LABEL: Header2.split:40;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr %a, i32 %v, i32 10)41;CHECK-LABEL: TBB.split:42;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 1, i32 %p)43;CHECK-LABEL: Tail44;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]45;CHECK: ret i32 %[[MERGED]]46define i32 @test_eq_eq_eq(ptr %a, i32 %v, i32 %p) {47Header:48  %tobool1 = icmp eq ptr %a, null49  br i1 %tobool1, label %Header2, label %End50 51Header2:52  %tobool2 = icmp eq i32 %p, 1053  br i1 %tobool2, label %Tail, label %TBB54 55TBB:56  %cmp = icmp eq i32 %v, 157  br i1 %cmp, label %Tail, label %End58 59Tail:60  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)61  ret i32 %r62 63End:64  ret i32 %v65}66 67;CHECK-LABEL: @test_eq_eq_eq_constrain_same_i32_arg68;CHECK-LABEL: Header2.split:69;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr %a, i32 222, i32 %p)70;CHECK-LABEL: TBB.split:71;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 333, i32 %p)72;CHECK-LABEL: Tail73;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]74;CHECK: ret i32 %[[MERGED]]75define i32 @test_eq_eq_eq_constrain_same_i32_arg(ptr %a, i32 %v, i32 %p) {76Header:77  %tobool1 = icmp eq i32 %v, 11178  br i1 %tobool1, label %Header2, label %End79 80Header2:81  %tobool2 = icmp eq i32 %v, 22282  br i1 %tobool2, label %Tail, label %TBB83 84TBB:85  %cmp = icmp eq i32 %v, 33386  br i1 %cmp, label %Tail, label %End87 88Tail:89  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)90  ret i32 %r91 92End:93  ret i32 %v94}95 96;CHECK-LABEL: @test_ne_eq97;CHECK-LABEL: Header.split:98;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr nonnull %a, i32 %v, i32 1)99;CHECK-LABEL: TBB.split:100;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr null, i32 1, i32 2)101;CHECK-LABEL: Tail102;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]103;CHECK: ret i32 %[[MERGED]]104define i32 @test_ne_eq(ptr %a, i32 %v) {105Header:106  %tobool1 = icmp ne ptr %a, null107  br i1 %tobool1, label %Tail, label %TBB108 109TBB:110  %cmp = icmp eq i32 %v, 1111  br i1 %cmp, label %Tail, label %End112 113Tail:114  %p = phi i32[1,%Header], [2, %TBB]115  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)116  ret i32 %r117 118End:119  ret i32 %v120}121 122;CHECK-LABEL: @test_ne_eq_ne123;CHECK-LABEL: Header2.split:124;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr nonnull %a, i32 %v, i32 10)125;CHECK-LABEL: TBB.split:126;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 %v, i32 %p)127;CHECK-LABEL: Tail128;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]129;CHECK: ret i32 %[[MERGED]]130define i32 @test_ne_eq_ne(ptr %a, i32 %v, i32 %p) {131Header:132  %tobool1 = icmp ne ptr %a, null133  br i1 %tobool1, label %Header2, label %TBB134 135Header2:136  %tobool2 = icmp eq i32 %p, 10137  br i1 %tobool2, label %Tail, label %TBB138 139TBB:140  %cmp = icmp ne i32 %v, 1141  br i1 %cmp, label %Tail, label %End142 143Tail:144  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)145  ret i32 %r146 147End:148  ret i32 %v149}150 151;CHECK-LABEL: @test_ne_ne152;CHECK-LABEL: Header.split:153;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr nonnull %a, i32 %v, i32 1)154;CHECK-LABEL: TBB.split:155;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr null, i32 %v, i32 2)156;CHECK-LABEL: Tail157;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]158;CHECK: ret i32 %[[MERGED]]159define i32 @test_ne_ne(ptr %a, i32 %v) {160Header:161  %tobool1 = icmp ne ptr %a, null162  br i1 %tobool1, label %Tail, label %TBB163 164TBB:165  %cmp = icmp ne i32 %v, 1166  br i1 %cmp, label %Tail, label %End167 168Tail:169  %p = phi i32[1,%Header], [2, %TBB]170  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)171  ret i32 %r172 173End:174  ret i32 %v175}176 177;CHECK-LABEL: @test_ne_ne_ne_constrain_same_pointer_arg178;CHECK-LABEL: Header2.split:179;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr nonnull %a, i32 %v, i32 %p)180;CHECK-LABEL: TBB.split:181;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 %v, i32 %p)182;CHECK-LABEL: Tail183;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]184;CHECK: ret i32 %[[MERGED]]185define i32 @test_ne_ne_ne_constrain_same_pointer_arg(ptr %a, i32 %v, i32 %p, ptr %a2, ptr %a3) {186Header:187  %tobool1 = icmp ne ptr %a, null188  br i1 %tobool1, label %Header2, label %TBB189 190Header2:191  %tobool2 = icmp ne ptr %a, %a2192  br i1 %tobool2, label %Tail, label %TBB193 194TBB:195  %cmp = icmp ne ptr %a, %a3196  br i1 %cmp, label %Tail, label %End197 198Tail:199  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)200  ret i32 %r201 202End:203  ret i32 %v204}205 206 207 208;CHECK-LABEL: @test_eq_eq_untaken209;CHECK-LABEL: Header.split:210;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr nonnull %a, i32 %v, i32 1)211;CHECK-LABEL: TBB.split:212;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr null, i32 1, i32 2)213;CHECK-LABEL: Tail214;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]215;CHECK: ret i32 %[[MERGED]]216define i32 @test_eq_eq_untaken(ptr %a, i32 %v) {217Header:218  %tobool1 = icmp eq ptr %a, null219  br i1 %tobool1, label %TBB, label %Tail220 221TBB:222  %cmp = icmp eq i32 %v, 1223  br i1 %cmp, label %Tail, label %End224 225Tail:226  %p = phi i32[1,%Header], [2, %TBB]227  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)228  ret i32 %r229 230End:231  ret i32 %v232}233 234;CHECK-LABEL: @test_eq_eq_eq_untaken235;CHECK-LABEL: Header2.split:236;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr nonnull %a, i32 %v, i32 10)237;CHECK-LABEL: TBB.split:238;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 1, i32 %p)239;CHECK-LABEL: Tail240;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]241;CHECK: ret i32 %[[MERGED]]242define i32 @test_eq_eq_eq_untaken(ptr %a, i32 %v, i32 %p) {243Header:244  %tobool1 = icmp eq ptr %a, null245  br i1 %tobool1, label %TBB, label %Header2246 247Header2:248  %tobool2 = icmp eq i32 %p, 10249  br i1 %tobool2, label %Tail, label %TBB250 251TBB:252  %cmp = icmp eq i32 %v, 1253  br i1 %cmp, label %Tail, label %End254 255Tail:256  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)257  ret i32 %r258 259End:260  ret i32 %v261}262 263;CHECK-LABEL: @test_ne_eq_untaken264;CHECK-LABEL: Header.split:265;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr null, i32 %v, i32 1)266;CHECK-LABEL: TBB.split:267;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr nonnull %a, i32 1, i32 2)268;CHECK-LABEL: Tail269;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]270;CHECK: ret i32 %[[MERGED]]271define i32 @test_ne_eq_untaken(ptr %a, i32 %v) {272Header:273  %tobool1 = icmp ne ptr %a, null274  br i1 %tobool1, label %TBB, label %Tail275 276TBB:277  %cmp = icmp eq i32 %v, 1278  br i1 %cmp, label %Tail, label %End279 280Tail:281  %p = phi i32[1,%Header], [2, %TBB]282  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)283  ret i32 %r284 285End:286  ret i32 %v287}288 289;CHECK-LABEL: @test_ne_eq_ne_untaken290;CHECK-LABEL: Header2.split:291;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr null, i32 %v, i32 10)292;CHECK-LABEL: TBB.split:293;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 %v, i32 %p)294;CHECK-LABEL: Tail295;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header2.split ], [ %[[CALL2]], %TBB.split ]296;CHECK: ret i32 %[[MERGED]]297define i32 @test_ne_eq_ne_untaken(ptr %a, i32 %v, i32 %p) {298Header:299  %tobool1 = icmp ne ptr %a, null300  br i1 %tobool1, label %TBB, label %Header2301 302Header2:303  %tobool2 = icmp eq i32 %p, 10304  br i1 %tobool2, label %Tail, label %TBB305 306TBB:307  %cmp = icmp ne i32 %v, 1308  br i1 %cmp, label %Tail, label %End309 310Tail:311  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)312  ret i32 %r313 314End:315  ret i32 %v316}317 318;CHECK-LABEL: @test_ne_ne_untaken319;CHECK-LABEL: Header.split:320;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr null, i32 %v, i32 1)321;CHECK-LABEL: TBB.split:322;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr nonnull %a, i32 1, i32 2)323;CHECK-LABEL: Tail324;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]325;CHECK: ret i32 %[[MERGED]]326define i32 @test_ne_ne_untaken(ptr %a, i32 %v) {327Header:328  %tobool1 = icmp ne ptr %a, null329  br i1 %tobool1, label %TBB, label %Tail330 331TBB:332  %cmp = icmp ne i32 %v, 1333  br i1 %cmp, label %End, label %Tail334 335Tail:336  %p = phi i32[1,%Header], [2, %TBB]337  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)338  ret i32 %r339 340End:341  ret i32 %v342}343 344;CHECK-LABEL: @test_nonconst_const_phi345;CHECK-LABEL: Header.split:346;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr %a, i32 %v, i32 1)347;CHECK-LABEL: TBB.split:348;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 1, i32 2)349;CHECK-LABEL: Tail350;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]351;CHECK: ret i32 %[[MERGED]]352define i32 @test_nonconst_const_phi(ptr %a, ptr %b, i32 %v) {353Header:354  %tobool1 = icmp eq ptr %a, %b355  br i1 %tobool1, label %Tail, label %TBB356 357TBB:358  %cmp = icmp eq i32 %v, 1359  br i1 %cmp, label %Tail, label %End360 361Tail:362  %p = phi i32[1,%Header], [2, %TBB]363  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)364  ret i32 %r365 366End:367  ret i32 %v368}369 370;CHECK-LABEL: @test_nonconst_nonconst_phi371;CHECK-LABEL: Header.split:372;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr %a, i32 %v, i32 1)373;CHECK-LABEL: TBB.split:374;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 %v, i32 2)375;CHECK-LABEL: Tail376;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL2]], %TBB.split ], [ %[[CALL1]], %Header.split ]377;CHECK: ret i32 %[[MERGED]]378define i32 @test_nonconst_nonconst_phi(ptr %a, ptr %b, i32 %v, i32 %v2) {379Header:380  %tobool1 = icmp eq ptr %a, %b381  br i1 %tobool1, label %Tail, label %TBB382 383TBB:384  %cmp = icmp eq i32 %v, %v2385  br i1 %cmp, label %Tail, label %End386 387Tail:388  %p = phi i32[1,%Header], [2, %TBB]389  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)390  ret i32 %r391 392End:393  ret i32 %v394}395 396;CHECK-LABEL: @test_cfg_no_or_phi397;CHECK-LABEL: TBB0.split398;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr %a, i32 %v, i32 1)399;CHECK-LABEL: TBB1.split:400;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 %v, i32 2)401;CHECK-LABEL: Tail402;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL2]], %TBB1.split ], [ %[[CALL1]], %TBB0.split ]403;CHECK: ret i32 %[[MERGED]]404define i32 @test_cfg_no_or_phi(ptr %a,  i32 %v, i1 %arg) {405entry:406  br i1 %arg, label %TBB0, label %TBB1407TBB0:408  br i1 %arg, label %Tail, label %End409TBB1:410  br i1 %arg, label %Tail, label %End411Tail:412  %p = phi i32[1,%TBB0], [2, %TBB1]413  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)414  ret i32 %r415End:416  ret i32 %v417}418 419;CHECK-LABEL: @test_nonconst_nonconst_phi_noncost420;CHECK-NOT: Header.split:421;CHECK-NOT: TBB.split:422;CHECK-LABEL: Tail:423;CHECK: %r = call i32 @callee(ptr %a, i32 %v, i32 %p)424;CHECK: ret i32 %r425define i32 @test_nonconst_nonconst_phi_noncost(ptr %a, ptr %b, i32 %v, i32 %v2) {426Header:427  %tobool1 = icmp eq ptr %a, %b428  br i1 %tobool1, label %Tail, label %TBB429 430TBB:431  %cmp = icmp eq i32 %v, %v2432  br i1 %cmp, label %Tail, label %End433 434Tail:435  %p = phi i32[%v,%Header], [%v2, %TBB]436  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)437  ret i32 %r438 439End:440  ret i32 %v441}442 443;CHECK-LABEL: @test_3preds_constphi444;CHECK-NOT: Header.split:445;CHECK-NOT: TBB.split:446;CHECK-LABEL: Tail:447;CHECK: %r = call i32 @callee(ptr %a, i32 %v, i32 %p)448;CHECK: ret i32 %r449define i32 @test_3preds_constphi(ptr %a, i32 %v, i1 %c1, i1 %c2, i1 %c3) {450Header:451  br i1 %c1, label %Tail, label %TBB1452 453TBB1:454  br i1 %c2, label %Tail, label %TBB2455 456TBB2:457  br i1 %c3, label %Tail, label %End458 459Tail:460  %p = phi i32[1,%Header], [2, %TBB1], [3, %TBB2]461  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)462  ret i32 %r463 464End:465  ret i32 %v466}467 468;CHECK-LABEL: @test_indirectbr_phi469;CHECK-NOT: Header.split:470;CHECK-NOT: TBB.split:471;CHECK-LABEL: Tail:472;CHECK: %r = call i32 @callee(ptr %a, i32 %v, i32 %p)473;CHECK: ret i32 %r474define i32 @test_indirectbr_phi(ptr %address, ptr %a, ptr %b, i32 %v) {475Header:476   %indirect.goto.dest = select i1 undef, ptr blockaddress(@test_indirectbr_phi, %End), ptr %address477   indirectbr ptr %indirect.goto.dest, [label %TBB, label %Tail]478 479TBB:480  %indirect.goto.dest2 = select i1 undef, ptr blockaddress(@test_indirectbr_phi, %End), ptr %address481  indirectbr ptr %indirect.goto.dest2, [label %Tail, label %End]482 483Tail:484  %p = phi i32[1,%Header], [2, %TBB]485  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)486  ret i32 %r487 488End:489  ret i32 %v490}491 492;CHECK-LABEL: @test_cond_no_effect493;CHECK-NOT: Header.split:494;CHECK-NOT: TBB.split:495;CHECK-LABEL: Tail:496;CHECK: %r = call i32 @callee(ptr %a, i32 %v, i32 0)497;CHECK: ret i32 %r498define i32 @test_cond_no_effect(ptr %a, i32 %v, i1 %arg) {499Entry:500  %tobool1 = icmp eq ptr %a, null501  br i1 %tobool1, label %Header, label %End502 503Header:504  br i1 %arg, label %Tail, label %TBB505 506TBB:507  br i1 %arg, label %Tail, label %End508 509Tail:510  %r = call i32 @callee(ptr %a, i32 %v, i32 0)511  ret i32 %r512 513End:514  ret i32 %v515}516 517;CHECK-LABEL: @test_unreachable518;CHECK-LABEL: Header.split:519;CHECK: %[[CALL1:.*]] = call i32 @callee(ptr %a, i32 %v, i32 10)520;CHECK-LABEL: TBB.split:521;CHECK: %[[CALL2:.*]] = call i32 @callee(ptr %a, i32 1, i32 %p)522;CHECK-LABEL: Tail523;CHECK: %[[MERGED:.*]] = phi i32 [ %[[CALL1]], %Header.split ], [ %[[CALL2]], %TBB.split ]524;CHECK: ret i32 %[[MERGED]]525define i32 @test_unreachable(ptr %a, i32 %v, i32 %p) {526Entry:527  br label %End528Header:529  %tobool2 = icmp eq i32 %p, 10530  br i1 %tobool2, label %Tail, label %TBB531TBB:532  %cmp = icmp eq i32 %v, 1533  br i1 %cmp, label %Tail, label %Header534Tail:535  %r = call i32 @callee(ptr %a, i32 %v, i32 %p)536  ret i32 %r537End:538  ret i32 %v539}540 541define i32 @callee(ptr %a, i32 %v, i32 %p) {542entry:543  %c = icmp ne ptr %a, null544  br i1 %c, label %BB1, label %BB2545 546BB1:547  call void @dummy(ptr %a, i32 %p)548  br label %End549 550BB2:551  call void @dummy2(i32 %v, i32 %p)552  br label %End553 554End:555  ret i32 %p556}557 558declare void @dummy(ptr, i32)559declare void @dummy2(i32, i32)560 561; Make sure we remove the non-nullness on constant paramater.562;563;CHECK-LABEL: @caller2564;CHECK-LABEL: Top1.split:565;CHECK: call i32 @callee(ptr inttoptr (i64 4643 to ptr)566define void @caller2(i32 %c, ptr %a_elt, ptr %b_elt) {567entry:568  br label %Top0569 570Top0:571  %tobool1 = icmp eq ptr %a_elt, inttoptr (i64 4643 to  ptr)572  br i1 %tobool1, label %Top1, label %NextCond573 574Top1:575  %tobool2 = icmp ne ptr %a_elt, null576  br i1 %tobool2, label %CallSiteBB, label %NextCond577 578NextCond:579  %cmp = icmp ne ptr %b_elt, null580  br i1 %cmp, label %CallSiteBB, label %End581 582CallSiteBB:583  call i32 @callee(ptr %a_elt, i32 %c, i32 %c)584  br label %End585 586End:587  ret void588}589 590; CHECK-LABEL: i32 @test_multiple_phis(591; CHECK:      Header.split:592; CHECK-NEXT:   %r2 = call i32 @callee(ptr null, i32 1, i32 5)593; CHECK-NEXT:   br label %Tail594 595; CHECK:      TBB.split:596; CHECK-NEXT:   %r1 = call i32 @callee(ptr null, i32 2, i32 10)597; CHECK-NEXT:   br label %Tail598 599; CHECK:        Tail:600; CHECK-NEXT:   %phi.call = phi i32 [ %r1, %TBB.split ], [ %r2, %Header.split ]601; CHECK-NEXT:   %p.0 = phi i32 [ 0, %Header.split ], [ 99, %TBB.split ]602; CHECK-NEXT:   %res = add i32 %phi.call, %p.0603; CHECK-NEXT:   ret i32 %phi.call604;605define i32 @test_multiple_phis(i1 %c.1) {606Header:607  br i1 %c.1, label %Tail, label %TBB608 609TBB:610  br label %Tail611 612Tail:613  %p.0 = phi i32 [0, %Header], [99, %TBB]614  %p.1 = phi i32[1, %Header], [2, %TBB]615  %p.2 = phi i32 [5, %Header], [10, %TBB]616  %r = call i32 @callee(ptr null, i32 %p.1, i32 %p.2)617  %res = add i32 %r, %p.0618  ret i32 %r619 620End:621  ret i32 10622}623