[llvm] 00000dc - [LoopInterchange] Fix tests with loops that have BTC=0. NFC. (#167748)

via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 14 03:13:24 PST 2025


Author: Sjoerd Meijer
Date: 2025-11-14T11:13:19Z
New Revision: 00000dcf2c7452d13940568f62d8887c95c78054

URL: https://github.com/llvm/llvm-project/commit/00000dcf2c7452d13940568f62d8887c95c78054
DIFF: https://github.com/llvm/llvm-project/commit/00000dcf2c7452d13940568f62d8887c95c78054.diff

LOG: [LoopInterchange] Fix tests with loops that have BTC=0. NFC. (#167748)

Precommit test fixups for #167113

Added: 
    

Modified: 
    llvm/test/Transforms/LoopInterchange/interchanged-loop-nest-4.ll
    llvm/test/Transforms/LoopInterchange/lcssa-phi-outer-latch.ll
    llvm/test/Transforms/LoopInterchange/pr43176-move-to-new-latch.ll
    llvm/test/Transforms/LoopInterchange/pr43326.ll
    llvm/test/Transforms/LoopInterchange/pr57148.ll
    llvm/test/Transforms/LoopInterchange/reductions-across-inner-and-outer-loop.ll

Removed: 
    


################################################################################
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


        


More information about the llvm-commits mailing list