[llvm] SCEV/test: re-org after tracing codepaths (PR #124261)

via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 24 04:07:14 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-analysis

Author: Ramkumar Ramachandra (artagnon)

<details>
<summary>Changes</summary>

Follow up on e069518f (SCEV: cover a codepath in isImpliedCondBalancedTypes) to discover that, due to changing a call to llvm.experimental.guard to llvm.assume as requested in the review, the codepath that it promised to cover is no longer covered, as SCEV takes an alternate codepath. Hence, change it back to llvm.experimental.guard, and move the existing test to known-constrange.ll, as it actually covers isKnownPredicateViaConstantRanges. While at it, also notice that 0ab368c (SCEV/test: cover implied-via-addition) does not actually cover any implication-codepaths, and that the tests should be moved to the new known-constrange.ll.

-- 8< --
Sorry for the confusion and mess.

---
Full diff: https://github.com/llvm/llvm-project/pull/124261.diff


2 Files Affected:

- (modified) llvm/test/Analysis/ScalarEvolution/implied-via-division.ll (+4-4) 
- (renamed) llvm/test/Analysis/ScalarEvolution/known-constrange.ll (+63-16) 


``````````diff
diff --git a/llvm/test/Analysis/ScalarEvolution/implied-via-division.ll b/llvm/test/Analysis/ScalarEvolution/implied-via-division.ll
index a1d30406095ec5..ff701a1fdbe651 100644
--- a/llvm/test/Analysis/ScalarEvolution/implied-via-division.ll
+++ b/llvm/test/Analysis/ScalarEvolution/implied-via-division.ll
@@ -416,15 +416,15 @@ define void @swapped_predicate(i32 %n) {
 ; Prove that (n s>= 1) ===> (0 s>= -n / 2).
 ; CHECK-LABEL: 'swapped_predicate'
 ; CHECK-NEXT:  Determining loop execution counts for: @swapped_predicate
-; CHECK-NEXT:  Loop %header: backedge-taken count is (1 + %n.div.2)<nuw><nsw>
+; CHECK-NEXT:  Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>
 ; CHECK-NEXT:  Loop %header: constant max backedge-taken count is i32 1073741824
-; CHECK-NEXT:  Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nuw><nsw>
+; CHECK-NEXT:  Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>
 ; CHECK-NEXT:  Loop %header: Trip multiple is 1
 ;
 entry:
   %cmp1 = icmp sge i32 %n, 1
   %n.div.2 = sdiv i32 %n, 2
-  call void @llvm.assume(i1 %cmp1)
+  call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]
   br label %header
 
 header:
@@ -450,7 +450,7 @@ define void @swapped_predicate_neg(i32 %n) {
 entry:
   %cmp1 = icmp sge i32 %n, 1
   %n.div.2 = sdiv i32 %n, 2
-  call void @llvm.assume(i1 %cmp1)
+  call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ]
   br label %header
 
 header:
diff --git a/llvm/test/Analysis/ScalarEvolution/implied-via-addition.ll b/llvm/test/Analysis/ScalarEvolution/known-constrange.ll
similarity index 60%
rename from llvm/test/Analysis/ScalarEvolution/implied-via-addition.ll
rename to llvm/test/Analysis/ScalarEvolution/known-constrange.ll
index 7ab6221d0da53a..7d6f6ee2a4e92f 100644
--- a/llvm/test/Analysis/ScalarEvolution/implied-via-addition.ll
+++ b/llvm/test/Analysis/ScalarEvolution/known-constrange.ll
@@ -2,10 +2,9 @@
 ; RUN: opt < %s -disable-output -passes="print<scalar-evolution>" \
 ; RUN:   -scalar-evolution-classify-expressions=0 2>&1 | FileCheck %s
 
-define void @implied1(i32 %n) {
-; Prove that (n s> 1) ===> (n - 1 s> 0).
-; CHECK-LABEL: 'implied1'
-; CHECK-NEXT:  Determining loop execution counts for: @implied1
+define void @add(i32 %n) {
+; CHECK-LABEL: 'add'
+; CHECK-NEXT:  Determining loop execution counts for: @add
 ; CHECK-NEXT:  Loop %header: backedge-taken count is (-2 + %n)
 ; CHECK-NEXT:  Loop %header: constant max backedge-taken count is i32 2147483645
 ; CHECK-NEXT:  Loop %header: symbolic max backedge-taken count is (-2 + %n)
@@ -27,10 +26,9 @@ exit:
   ret void
 }
 
-define void @implied1_neg(i32 %n) {
-; Prove that (n s> 0) =\=> (n - 1 s> 0).
-; CHECK-LABEL: 'implied1_neg'
-; CHECK-NEXT:  Determining loop execution counts for: @implied1_neg
+define void @add_neg(i32 %n) {
+; CHECK-LABEL: 'add_neg'
+; CHECK-NEXT:  Determining loop execution counts for: @add_neg
 ; CHECK-NEXT:  Loop %header: backedge-taken count is (-1 + (1 smax (-1 + %n)<nsw>))<nsw>
 ; CHECK-NEXT:  Loop %header: constant max backedge-taken count is i32 2147483645
 ; CHECK-NEXT:  Loop %header: symbolic max backedge-taken count is (-1 + (1 smax (-1 + %n)<nsw>))<nsw>
@@ -52,10 +50,9 @@ exit:
   ret void
 }
 
-define void @implied2(i32 %n) {
-; Prove that (n u>= -1) ===> (n + 1 u>= 0).
-; CHECK-LABEL: 'implied2'
-; CHECK-NEXT:  Determining loop execution counts for: @implied2
+define void @predicated_add(i32 %n) {
+; CHECK-LABEL: 'predicated_add'
+; CHECK-NEXT:  Determining loop execution counts for: @predicated_add
 ; CHECK-NEXT:  Loop %header: Unpredictable backedge-taken count.
 ; CHECK-NEXT:  Loop %header: Unpredictable constant max backedge-taken count.
 ; CHECK-NEXT:  Loop %header: Unpredictable symbolic max backedge-taken count.
@@ -85,10 +82,9 @@ exit:
   ret void
 }
 
-define void @implied2_neg(i32 %n) {
-; Prove that (n u>= -1) =\=> (n - 1 s>= 0).
-; CHECK-LABEL: 'implied2_neg'
-; CHECK-NEXT:  Determining loop execution counts for: @implied2_neg
+define void @predicated_add_neg(i32 %n) {
+; CHECK-LABEL: 'predicated_add_neg'
+; CHECK-NEXT:  Determining loop execution counts for: @predicated_add_neg
 ; CHECK-NEXT:  Loop %header: backedge-taken count is (-1 + (1 smax %n))<nsw>
 ; CHECK-NEXT:  Loop %header: constant max backedge-taken count is i32 2147483646
 ; CHECK-NEXT:  Loop %header: symbolic max backedge-taken count is (-1 + (1 smax %n))<nsw>
@@ -109,3 +105,54 @@ header:
 exit:
   ret void
 }
+
+define void @div(i32 %n) {
+; CHECK-LABEL: 'div'
+; CHECK-NEXT:  Determining loop execution counts for: @div
+; CHECK-NEXT:  Loop %header: backedge-taken count is (1 + %n.div.2)<nuw><nsw>
+; CHECK-NEXT:  Loop %header: constant max backedge-taken count is i32 1073741824
+; CHECK-NEXT:  Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nuw><nsw>
+; CHECK-NEXT:  Loop %header: Trip multiple is 1
+;
+entry:
+  %cmp1 = icmp sge i32 %n, 1
+  %n.div.2 = sdiv i32 %n, 2
+  call void @llvm.assume(i1 %cmp1)
+  br label %header
+
+header:
+  %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]
+  %indvar.next = add i32 %indvar, 1
+  %minus.indvar = sub nsw i32 0, %indvar
+  %minus.n.div.2 = sub nsw i32 0, %n.div.2
+  %exitcond = icmp sge i32 %minus.indvar, %minus.n.div.2
+  br i1 %exitcond, label %header, label %exit
+
+exit:
+  ret void
+}
+
+define void @div_neg(i32 %n) {
+; CHECK-LABEL: 'div_neg'
+; CHECK-NEXT:  Determining loop execution counts for: @div_neg
+; CHECK-NEXT:  Loop %header: Unpredictable backedge-taken count.
+; CHECK-NEXT:  Loop %header: Unpredictable constant max backedge-taken count.
+; CHECK-NEXT:  Loop %header: Unpredictable symbolic max backedge-taken count.
+;
+entry:
+  %cmp1 = icmp sge i32 %n, 1
+  %n.div.2 = sdiv i32 %n, 2
+  call void @llvm.assume(i1 %cmp1)
+  br label %header
+
+header:
+  %indvar = phi i32 [ %indvar.next, %header ], [ 0, %entry ]
+  %indvar.next = add i32 %indvar, 1
+  %minus.indvar = sub nsw i32 0, %indvar
+  %minus.n.div.2 = sub nsw i32 0, %n.div.2
+  %exitcond = icmp sge i32 %minus.n.div.2, %minus.indvar
+  br i1 %exitcond, label %header, label %exit
+
+exit:
+  ret void
+}

``````````

</details>


https://github.com/llvm/llvm-project/pull/124261


More information about the llvm-commits mailing list