From 5dfb2db0ab0b8a88285bfa530ae444cfd690aa22 Mon Sep 17 00:00:00 2001 From: Sjoerd Meijer Date: Wed, 12 Nov 2025 11:27:15 -0800 Subject: [PATCH] [LoopInterchange] Fix tests with loops that have BTC=0. NFC. Precommit test fixups for #167113 --- .../interchanged-loop-nest-4.ll | 3 +- .../LoopInterchange/lcssa-phi-outer-latch.ll | 7 +- .../pr43176-move-to-new-latch.ll | 70 ++++++++++--------- .../Transforms/LoopInterchange/pr43326.ll | 52 +++++++------- .../Transforms/LoopInterchange/pr57148.ll | 6 +- .../reductions-across-inner-and-outer-loop.ll | 6 +- 6 files changed, 76 insertions(+), 68 deletions(-) diff --git a/llvm/test/Transforms/LoopInterchange/interchanged-loop-nest-4.ll b/llvm/test/Transforms/LoopInterchange/interchanged-loop-nest-4.ll index 70fff161154d8..f61054409937c 100644 --- a/llvm/test/Transforms/LoopInterchange/interchanged-loop-nest-4.ll +++ b/llvm/test/Transforms/LoopInterchange/interchanged-loop-nest-4.ll @@ -36,7 +36,8 @@ for.body10.i.i.i: ; preds = %for.body10.i.i.i, % %arrayidx.i.i.i = getelementptr [6 x ptr], ptr @g_78, i16 0, i16 %storemerge56.i.i.i store ptr @g_75, ptr %arrayidx.i.i.i, align 1 %sub.i.i.i = add nsw i16 %storemerge56.i.i.i, -1 - br i1 true, label %for.inc14.i.i.i, label %for.body10.i.i.i + %cmp = icmp sgt i16 %sub.i.i.i, 0 + br i1 %cmp, label %for.body10.i.i.i, label %for.inc14.i.i.i for.inc14.i.i.i: ; preds = %for.body10.i.i.i %add15.i.i.i = add nuw nsw i16 %l_105.18.i.i.i, 1 diff --git a/llvm/test/Transforms/LoopInterchange/lcssa-phi-outer-latch.ll b/llvm/test/Transforms/LoopInterchange/lcssa-phi-outer-latch.ll index a5e3accaf8e10..92ce3288b4529 100644 --- a/llvm/test/Transforms/LoopInterchange/lcssa-phi-outer-latch.ll +++ b/llvm/test/Transforms/LoopInterchange/lcssa-phi-outer-latch.ll @@ -31,11 +31,13 @@ define i16 @main(ptr %a) { ; CHECK-NEXT: br label %[[INNER_LATCH:.*]] ; CHECK: [[INNER_LATCH]]: ; CHECK-NEXT: [[J_NEXT:%.*]] = add i16 [[J]], 1 +; CHECK-NEXT: [[CMP:%.*]] = icmp slt i16 [[J]], 42 ; CHECK-NEXT: br label %[[OUTER_BODY:.*]] ; CHECK: [[INNER_LATCH_SPLIT]]: ; CHECK-NEXT: [[NEW_COND_LCSSA:%.*]] = phi i16 [ [[COND]], %[[OUTER_LATCH]] ] ; CHECK-NEXT: [[TMP1]] = add i16 [[J]], 1 -; CHECK-NEXT: br i1 true, label %[[EXIT:.*]], label %[[INNER_HEADER]] +; CHECK-NEXT: [[TMP2:%.*]] = icmp slt i16 [[J]], 42 +; CHECK-NEXT: br i1 [[TMP2]], label %[[INNER_HEADER]], label %[[EXIT:.*]] ; CHECK: [[OUTER_BODY]]: ; CHECK-NEXT: br label %[[OUTER_LATCH]] ; CHECK: [[OUTER_LATCH]]: @@ -62,7 +64,8 @@ inner.header: inner.latch: %j.next = add i16 %j, 1 - br i1 true, label %outer.body, label %inner.header + %cmp = icmp slt i16 %j, 42 + br i1 %cmp, label %inner.header, label %outer.body outer.body: %new.cond.lcssa = phi i16 [ %cond, %inner.latch ] diff --git a/llvm/test/Transforms/LoopInterchange/pr43176-move-to-new-latch.ll b/llvm/test/Transforms/LoopInterchange/pr43176-move-to-new-latch.ll index 6b25c3bc9a4ba..f02ee1a0ced19 100644 --- a/llvm/test/Transforms/LoopInterchange/pr43176-move-to-new-latch.ll +++ b/llvm/test/Transforms/LoopInterchange/pr43176-move-to-new-latch.ll @@ -21,33 +21,34 @@ define void @test1() { entry: - br label %for.body + br label %outer.header -for.body: ; preds = %for.inc3, %entry - %inc41 = phi i32 [ %inc4, %for.inc3 ], [ undef, %entry ] - br label %for.body2 +outer.header: + %i = phi i32 [ %i.next, %outer.latch ], [ 0, %entry ] + br label %inner.header -for.body2: ; preds = %for.inc, %for.body - %lsr.iv = phi i32 [ %lsr.iv.next, %for.inc ], [ 1, %for.body ] - br label %for.inc +inner.header: + %j = phi i32 [ %j.next, %inner.latch ], [ 1, %outer.header ] + br label %inner.latch -for.inc: ; preds = %for.body2 - %idxprom = sext i32 %inc41 to i64 +inner.latch: + %idxprom = sext i32 %i to i64 %arrayidx = getelementptr inbounds [5 x i32], ptr @b, i64 0, i64 %idxprom %0 = load i32, ptr %arrayidx, align 4 store i32 undef, ptr %arrayidx, align 4 - %cmp = icmp slt i32 %lsr.iv, 4 - %lsr.iv.next = add nuw nsw i32 %lsr.iv, 1 - br i1 %cmp, label %for.body2, label %for.cond1.for.end_crit_edge + %cmp = icmp slt i32 %j, 4 + %j.next = add nuw nsw i32 %j, 1 + br i1 %cmp, label %inner.header, label %outer.body -for.cond1.for.end_crit_edge: ; preds = %for.inc - br label %for.inc3 +outer.body: + br label %outer.latch -for.inc3: ; preds = %for.cond1.for.end_crit_edge - %inc4 = add nsw i32 %inc41, 1 - br i1 false, label %for.body, label %for.cond.for.end5_crit_edge +outer.latch: + %i.next = add nsw i32 %i, 1 + %cmp2 = icmp slt i32 %i, 4 + br i1 %cmp2, label %outer.header, label %exit -for.cond.for.end5_crit_edge: ; preds = %for.inc3 +exit: ret void } @@ -61,33 +62,34 @@ for.cond.for.end5_crit_edge: ; preds = %for.inc3 define void @test2() { entry: - br label %for.body + br label %outer.header -for.body: ; preds = %for.inc3, %entry - %inc41 = phi i32 [ %inc4, %for.inc3 ], [ undef, %entry ] - br label %for.body2 +outer.header: + %i = phi i32 [ %i.next, %outer.latch ], [ 0, %entry ] + br label %inner.header -for.body2: ; preds = %for.inc, %for.body - %lsr.iv = phi i32 [ %lsr.iv.next, %for.inc ], [ 1, %for.body ] - br label %for.inc +inner.header: + %lsr.iv = phi i32 [ %lsr.iv.next, %inner.latch ], [ 1, %outer.header ] + br label %inner.latch -for.inc: ; preds = %for.body2 - %idxprom = sext i32 %inc41 to i64 +inner.latch: + %idxprom = sext i32 %i to i64 %arrayidx = getelementptr inbounds [5 x i32], ptr @b, i64 0, i64 %idxprom %0 = load i32, ptr %arrayidx, align 4 %cmp = icmp slt i32 %lsr.iv, 4 %cmp.zext = zext i1 %cmp to i32 store i32 %cmp.zext, ptr %arrayidx, align 4 %lsr.iv.next = add nuw nsw i32 %lsr.iv, 1 - br i1 %cmp, label %for.body2, label %for.cond1.for.end_crit_edge + br i1 %cmp, label %inner.header, label %outer.body -for.cond1.for.end_crit_edge: ; preds = %for.inc - br label %for.inc3 +outer.body: + br label %outer.latch -for.inc3: ; preds = %for.cond1.for.end_crit_edge - %inc4 = add nsw i32 %inc41, 1 - br i1 false, label %for.body, label %for.cond.for.end5_crit_edge +outer.latch: + %i.next = add nsw i32 %i, 1 + %cmp2 = icmp slt i32 %i, 4 + br i1 %cmp2, label %outer.header, label %exit -for.cond.for.end5_crit_edge: ; preds = %for.inc3 +exit: ret void } diff --git a/llvm/test/Transforms/LoopInterchange/pr43326.ll b/llvm/test/Transforms/LoopInterchange/pr43326.ll index c25c4fadd3042..cc4f07c722dd9 100644 --- a/llvm/test/Transforms/LoopInterchange/pr43326.ll +++ b/llvm/test/Transforms/LoopInterchange/pr43326.ll @@ -25,58 +25,58 @@ define void @pr43326() { entry: %0 = load i32, ptr @a %tobool.not2 = icmp eq i32 %0, 0 - br i1 %tobool.not2, label %for.end14, label %for.body.lr.ph + br i1 %tobool.not2, label %for.end14, label %outer.preheader -for.body.lr.ph: ; preds = %entry +outer.preheader: ; preds = %entry %d.promoted = load i32, ptr @d %a.promoted = load i32, ptr @a - br label %for.body + br label %outer.header -for.body: ; preds = %for.body.lr.ph, %for.inc12 - %inc1312 = phi i32 [ %a.promoted, %for.body.lr.ph ], [ %inc13, %for.inc12 ] - %xor.lcssa.lcssa11 = phi i32 [ %d.promoted, %for.body.lr.ph ], [ %xor.lcssa.lcssa, %for.inc12 ] - br label %for.body3 +outer.header: ; preds = %outer.preheader, %for.inc12 + %inc1312 = phi i32 [ %a.promoted, %outer.preheader ], [ %inc13, %for.inc12 ] + %xor.lcssa.lcssa11 = phi i32 [ %d.promoted, %outer.preheader ], [ %xor.lcssa.lcssa, %for.inc12 ] + br label %inner1.header -for.body3: ; preds = %for.body, %for.inc10 - %xor.lcssa9 = phi i32 [ %xor.lcssa.lcssa11, %for.body ], [ %xor.lcssa, %for.inc10 ] - %dec7 = phi i8 [ 0, %for.body ], [ %dec, %for.inc10 ] - %idxprom8 = sext i8 %dec7 to i64 - br label %for.body7 +inner1.header: ; preds = %outer.header, %for.inc10 + %xor.lcssa9 = phi i32 [ %xor.lcssa.lcssa11, %outer.header ], [ %xor.lcssa, %for.inc10 ] + %j = phi i8 [ 0, %outer.header ], [ %j.next, %for.inc10 ] + %idxprom8 = sext i8 %j to i64 + br label %inner2.header -for.body7: ; preds = %for.body3, %for.inc - %xor5 = phi i32 [ %xor.lcssa9, %for.body3 ], [ %xor, %for.inc ] - %inc4 = phi i32 [ 0, %for.body3 ], [ %inc, %for.inc ] - %idxprom = sext i32 %inc4 to i64 +inner2.header: ; preds = %inner1.header, %for.inc + %xor5 = phi i32 [ %xor.lcssa9, %inner1.header ], [ %xor, %for.inc ] + %k = phi i32 [ 0, %inner1.header ], [ %k.next, %for.inc ] + %idxprom = sext i32 %k to i64 %arrayidx9 = getelementptr inbounds [1 x [1 x i32]], ptr @e, i64 0, i64 %idxprom, i64 %idxprom8 %1 = load i32, ptr %arrayidx9 %xor = xor i32 %xor5, %1 br label %for.inc -for.inc: ; preds = %for.body7 - %inc = add nsw i32 %inc4, 1 - %cmp5 = icmp slt i32 %inc, 1 - br i1 %cmp5, label %for.body7, label %for.end +for.inc: ; preds = %inner2.header + %k.next = add nsw i32 %k, 1 + %cmp5 = icmp slt i32 %k.next, 42 + br i1 %cmp5, label %inner2.header, label %for.end for.end: ; preds = %for.inc %xor.lcssa = phi i32 [ %xor, %for.inc ] - %inc.lcssa = phi i32 [ %inc, %for.inc ] + %inc.lcssa = phi i32 [ %k.next, %for.inc ] br label %for.inc10 for.inc10: ; preds = %for.end - %dec = add i8 %dec7, -1 - %cmp = icmp sgt i8 %dec, -1 - br i1 %cmp, label %for.body3, label %for.end11 + %j.next = add i8 %j, -1 + %cmp = icmp sgt i8 %j.next, -1 + br i1 %cmp, label %inner1.header, label %for.end11 for.end11: ; preds = %for.inc10 %xor.lcssa.lcssa = phi i32 [ %xor.lcssa, %for.inc10 ] - %dec.lcssa = phi i8 [ %dec, %for.inc10 ] + %dec.lcssa = phi i8 [ %j.next, %for.inc10 ] %inc.lcssa.lcssa = phi i32 [ %inc.lcssa, %for.inc10 ] br label %for.inc12 for.inc12: ; preds = %for.end11 %inc13 = add nsw i32 %inc1312, 1 %tobool.not = icmp eq i32 %inc13, 0 - br i1 %tobool.not, label %for.cond.for.end14_crit_edge, label %for.body + br i1 %tobool.not, label %for.cond.for.end14_crit_edge, label %outer.header for.cond.for.end14_crit_edge: ; preds = %for.inc12 %inc13.lcssa = phi i32 [ %inc13, %for.inc12 ] diff --git a/llvm/test/Transforms/LoopInterchange/pr57148.ll b/llvm/test/Transforms/LoopInterchange/pr57148.ll index 0d4194762a692..747dbbcb4a44e 100644 --- a/llvm/test/Transforms/LoopInterchange/pr57148.ll +++ b/llvm/test/Transforms/LoopInterchange/pr57148.ll @@ -126,7 +126,8 @@ define void @test2() { ; CHECK-NEXT: br i1 true, label [[MIDDLE_BLOCK80]], label [[VECTOR_BODY85]] ; CHECK: middle.block80: ; CHECK-NEXT: [[INC66]] = add nuw nsw i16 [[J_165]], 1 -; CHECK-NEXT: br i1 true, label [[FOR_COND75_PREHEADER:%.*]], label [[FOR_COND37_PREHEADER]] +; CHECK-NEXT: [[CMP:%.*]] = icmp slt i16 [[INC66]], 42 +; CHECK-NEXT: br i1 [[CMP]], label [[FOR_COND75_PREHEADER:%.*]], label [[FOR_COND37_PREHEADER]] ; CHECK: for.inc68: ; CHECK-NEXT: [[INC69]] = add nuw nsw i16 [[I_166]], 1 ; CHECK-NEXT: [[EXITCOND77_NOT:%.*]] = icmp eq i16 [[INC69]], 2 @@ -156,7 +157,8 @@ vector.body85: ; preds = %vector.body85, %for middle.block80: ; preds = %vector.body85 %inc66 = add nuw nsw i16 %j.165, 1 - br i1 true, label %for.inc68, label %for.cond37.preheader + %cmp = icmp slt i16 %inc66, 42 + br i1 %cmp, label %for.inc68, label %for.cond37.preheader for.inc68: ; preds = %middle.block80 %inc69 = add nuw nsw i16 %i.166, 1 diff --git a/llvm/test/Transforms/LoopInterchange/reductions-across-inner-and-outer-loop.ll b/llvm/test/Transforms/LoopInterchange/reductions-across-inner-and-outer-loop.ll index 27d99e05e84ee..51fda4cf1ebe1 100644 --- a/llvm/test/Transforms/LoopInterchange/reductions-across-inner-and-outer-loop.ll +++ b/llvm/test/Transforms/LoopInterchange/reductions-across-inner-and-outer-loop.ll @@ -301,13 +301,13 @@ for.body3: ; preds = %for.body3, %outer.h %vB = load float, ptr %arrayidx6 %float.inner.inc.inc = fadd fast float %float.inner.inc, %vB %iv.inner.next = add nuw nsw i64 %iv.inner, 1 - %exitcond = icmp eq i64 %iv.inner.next, 100 - br i1 %exitcond, label %outer.inc, label %for.body3 + %exitcond = icmp slt i64 %iv.inner.next, 100 + br i1 %exitcond, label %for.body3, label %outer.inc outer.inc: ; preds = %for.body3 %float.inner.lcssa = phi float [ %float.inner.inc.inc, %for.body3 ] %iv.outer.next = add nsw i64 %iv.outer, 1 - %cmp = icmp eq i64 %iv.outer.next, 100 + %cmp = icmp slt i64 %iv.outer.next, 100 br i1 %cmp, label %outer.header, label %for.exit for.exit: ; preds = %outer.inc