1*50043205SJoshua Cao; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*50043205SJoshua Cao; RUN: opt -S -passes=loop-fusion < %s 2>&1 | FileCheck %s 3*50043205SJoshua Cao 4*50043205SJoshua Cao; Tests when the second loop preheader has a phi coming from the first loop 5*50043205SJoshua Cao; exit. If the phi is not used in the second loop, the loops can be fused and 6*50043205SJoshua Cao; the phi is sunk to the fused loop exit. If the phi is used in the second loop, 7*50043205SJoshua Cao; the loops cannot be fused. 8*50043205SJoshua Cao 9*50043205SJoshua Caodefine void @test1() { 10*50043205SJoshua Cao; CHECK-LABEL: @test1( 11*50043205SJoshua Cao; CHECK-NEXT: entry: 12*50043205SJoshua Cao; CHECK-NEXT: br label [[VECTOR_PH:%.*]] 13*50043205SJoshua Cao; CHECK: vector.ph: 14*50043205SJoshua Cao; CHECK-NEXT: br label [[MIDDLE_BLOCK:%.*]] 15*50043205SJoshua Cao; CHECK: middle.block: 16*50043205SJoshua Cao; CHECK-NEXT: br i1 true, label [[FOR_END41:%.*]], label [[VECTOR_PH]] 17*50043205SJoshua Cao; CHECK: for.end41: 18*50043205SJoshua Cao; CHECK-NEXT: [[DOTLCSSA92:%.*]] = phi i16 [ 1, [[MIDDLE_BLOCK]] ] 19*50043205SJoshua Cao; CHECK-NEXT: ret void 20*50043205SJoshua Cao; 21*50043205SJoshua Caoentry: 22*50043205SJoshua Cao br label %vector.ph 23*50043205SJoshua Cao 24*50043205SJoshua Caovector.ph: ; preds = %middle.block, %entry 25*50043205SJoshua Cao br label %middle.block 26*50043205SJoshua Cao 27*50043205SJoshua Caomiddle.block: ; preds = %vector.ph 28*50043205SJoshua Cao br i1 true, label %for.cond17.preheader, label %vector.ph 29*50043205SJoshua Cao 30*50043205SJoshua Caofor.cond17.preheader: ; preds = %middle.block 31*50043205SJoshua Cao %.lcssa92 = phi i16 [ 1, %middle.block ] 32*50043205SJoshua Cao br label %vector.ph61 33*50043205SJoshua Cao 34*50043205SJoshua Caovector.ph61: ; preds = %middle.block59, %for.cond17.preheader 35*50043205SJoshua Cao br i1 true, label %for.end41, label %vector.ph61 36*50043205SJoshua Cao 37*50043205SJoshua Caofor.end41: ; preds = %middle.block59 38*50043205SJoshua Cao ret void 39*50043205SJoshua Cao} 40*50043205SJoshua Cao 41*50043205SJoshua Caodefine void @test2() { 42*50043205SJoshua Cao; CHECK-LABEL: @test2( 43*50043205SJoshua Cao; CHECK-NEXT: entry: 44*50043205SJoshua Cao; CHECK-NEXT: br label [[VECTOR_PH:%.*]] 45*50043205SJoshua Cao; CHECK: vector.ph: 46*50043205SJoshua Cao; CHECK-NEXT: br label [[MIDDLE_BLOCK:%.*]] 47*50043205SJoshua Cao; CHECK: middle.block: 48*50043205SJoshua Cao; CHECK-NEXT: br i1 true, label [[FOR_COND17_PREHEADER:%.*]], label [[VECTOR_PH]] 49*50043205SJoshua Cao; CHECK: for.cond17.preheader: 50*50043205SJoshua Cao; CHECK-NEXT: [[DOTLCSSA92:%.*]] = phi i16 [ 1, [[MIDDLE_BLOCK]] ] 51*50043205SJoshua Cao; CHECK-NEXT: br label [[VECTOR_PH61:%.*]] 52*50043205SJoshua Cao; CHECK: vector.ph61: 53*50043205SJoshua Cao; CHECK-NEXT: call void @a(i16 [[DOTLCSSA92]]) 54*50043205SJoshua Cao; CHECK-NEXT: br i1 true, label [[FOR_END41:%.*]], label [[VECTOR_PH61]] 55*50043205SJoshua Cao; CHECK: for.end41: 56*50043205SJoshua Cao; CHECK-NEXT: ret void 57*50043205SJoshua Cao; 58*50043205SJoshua Caoentry: 59*50043205SJoshua Cao br label %vector.ph 60*50043205SJoshua Cao 61*50043205SJoshua Caovector.ph: ; preds = %middle.block, %entry 62*50043205SJoshua Cao br label %middle.block 63*50043205SJoshua Cao 64*50043205SJoshua Caomiddle.block: ; preds = %vector.ph 65*50043205SJoshua Cao br i1 true, label %for.cond17.preheader, label %vector.ph 66*50043205SJoshua Cao 67*50043205SJoshua Caofor.cond17.preheader: ; preds = %middle.block 68*50043205SJoshua Cao %.lcssa92 = phi i16 [ 1, %middle.block ] 69*50043205SJoshua Cao br label %vector.ph61 70*50043205SJoshua Cao 71*50043205SJoshua Caovector.ph61: ; preds = %middle.block59, %for.cond17.preheader 72*50043205SJoshua Cao call void @a(i16 %.lcssa92) 73*50043205SJoshua Cao br i1 true, label %for.end41, label %vector.ph61 74*50043205SJoshua Cao 75*50043205SJoshua Caofor.end41: ; preds = %middle.block59 76*50043205SJoshua Cao ret void 77*50043205SJoshua Cao} 78*50043205SJoshua Cao 79*50043205SJoshua Caodeclare void @a(i16); 80