[llvm] f79a5fb - [Test][SCEV] Add a test where the trip count can't be calculated

Maksim Kazantsev via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 13 00:29:39 PST 2023


Author: Maksim Kazantsev mkazantsev at azul.com
Date: 2023-02-13T08:29:26Z
New Revision: f79a5fb9df42cebb97dfb86e25b4697ad72cc606

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

LOG: [Test][SCEV] Add a test where the trip count can't be calculated

Add a test in which the trip count could have been calculated
correctly thanks to an assume since it is known to divide by the
step of the IV.

Patch by Alon Kom!

Differential Revision: https://reviews.llvm.org/D143644

Added: 
    

Modified: 
    llvm/test/Analysis/ScalarEvolution/trip-multiple-guard-info.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Analysis/ScalarEvolution/trip-multiple-guard-info.ll b/llvm/test/Analysis/ScalarEvolution/trip-multiple-guard-info.ll
index 0a824efcb9a65..cfa91e3cc7473 100644
--- a/llvm/test/Analysis/ScalarEvolution/trip-multiple-guard-info.ll
+++ b/llvm/test/Analysis/ScalarEvolution/trip-multiple-guard-info.ll
@@ -575,5 +575,37 @@ exit:
   ret void
 }
 
+; TODO: Even though %num is known to divide by 4, and the loop's IV advances by 4, SCEV can't compute the trip count.
+define void @test_trip_multiple_4_vectorized_iv(i32 %num) {
+; CHECK-LABEL: 'test_trip_multiple_4_vectorized_iv'
+; CHECK-NEXT:  Classifying expressions for: @test_trip_multiple_4_vectorized_iv
+; CHECK-NEXT:    %u = urem i32 %num, 4
+; CHECK-NEXT:    --> (zext i2 (trunc i32 %num to i2) to i32) U: [0,4) S: [0,4)
+; CHECK-NEXT:    %i.010 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
+; CHECK-NEXT:    --> {0,+,4}<%for.body> U: [0,-3) S: [-2147483648,2147483645) Exits: <<Unknown>> LoopDispositions: { %for.body: Computable }
+; CHECK-NEXT:    %inc = add i32 %i.010, 4
+; CHECK-NEXT:    --> {4,+,4}<%for.body> U: [0,-3) S: [-2147483648,2147483645) Exits: <<Unknown>> LoopDispositions: { %for.body: Computable }
+; CHECK-NEXT:  Determining loop execution counts for: @test_trip_multiple_4_vectorized_iv
+; CHECK-NEXT:  Loop %for.body: Unpredictable backedge-taken count.
+; CHECK-NEXT:  Loop %for.body: Unpredictable constant max backedge-taken count.
+; CHECK-NEXT:  Loop %for.body: Unpredictable symbolic max backedge-taken count.
+; CHECK-NEXT:  Loop %for.body: Unpredictable predicated backedge-taken count.
+;
+entry:
+  %u = urem i32 %num, 4
+  %cmp = icmp eq i32 %u, 0
+  tail call void @llvm.assume(i1 %cmp)
+  br label %for.body
+
+for.body:
+  %i.010 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
+  %inc = add i32 %i.010, 4
+  %cmp2 = icmp ult i32 %inc, %num
+  br i1 %cmp2, label %for.body, label %exit
+
+exit:
+  ret void
+}
+
 declare void @llvm.assume(i1)
 declare void @llvm.experimental.guard(i1, ...)


        


More information about the llvm-commits mailing list