[llvm] SCEV: re-org a test, regen via UTC (PR #126237)

via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 7 04:04:39 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-transforms

Author: Ramkumar Ramachandra (artagnon)

<details>
<summary>Changes</summary>



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


2 Files Affected:

- (modified) llvm/test/Analysis/ScalarEvolution/infer-via-ranges.ll (+14-5) 
- (added) llvm/test/Transforms/IndVarSimplify/infer-via-ranges.ll (+51) 


``````````diff
diff --git a/llvm/test/Analysis/ScalarEvolution/infer-via-ranges.ll b/llvm/test/Analysis/ScalarEvolution/infer-via-ranges.ll
index 9aa096b952be5d6..9cf3e06d58a88db 100644
--- a/llvm/test/Analysis/ScalarEvolution/infer-via-ranges.ll
+++ b/llvm/test/Analysis/ScalarEvolution/infer-via-ranges.ll
@@ -1,22 +1,31 @@
-; RUN: opt -passes=indvars -S < %s | FileCheck %s
+; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -passes='print<scalar-evolution>' \
+; RUN:  -scalar-evolution-classify-expressions=0 -disable-output %s 2>&1 | FileCheck %s
 
 define void @infer_via_ranges(ptr %arr, i32 %n) {
-; CHECK-LABEL: @infer_via_ranges
+; CHECK-LABEL: 'infer_via_ranges'
+; CHECK-NEXT:  Determining loop execution counts for: @infer_via_ranges
+; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is ((-1 + %n) umin %n)
+; CHECK-NEXT:    exit count for loop: %n
+; CHECK-NEXT:    exit count for in.bounds: (-1 + %n)
+; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -2147483648
+; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is ((-1 + %n) umin %n)
+; CHECK-NEXT:    symbolic max exit count for loop: %n
+; CHECK-NEXT:    symbolic max exit count for in.bounds: (-1 + %n)
+; CHECK-NEXT:  Loop %loop: Trip multiple is 1
+;
  entry:
   %first.itr.check = icmp sgt i32 %n, 0
   %start = sub i32 %n, 1
   br i1 %first.itr.check, label %loop, label %exit
 
  loop:
-; CHECK-LABEL: loop:
   %idx = phi i32 [ %start, %entry ] , [ %idx.dec, %in.bounds ]
   %idx.dec = sub i32 %idx, 1
   %abc = icmp sge i32 %idx, 0
-; CHECK: br i1 true, label %in.bounds, label %out.of.bounds
   br i1 %abc, label %in.bounds, label %out.of.bounds
 
  in.bounds:
-; CHECK-LABEL: in.bounds:
   %addr = getelementptr i32, ptr %arr, i32 %idx
   store i32 0, ptr %addr
   %next = icmp sgt i32 %idx.dec, -1
diff --git a/llvm/test/Transforms/IndVarSimplify/infer-via-ranges.ll b/llvm/test/Transforms/IndVarSimplify/infer-via-ranges.ll
new file mode 100644
index 000000000000000..effae2322dba39a
--- /dev/null
+++ b/llvm/test/Transforms/IndVarSimplify/infer-via-ranges.ll
@@ -0,0 +1,51 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -passes=indvars -S < %s | FileCheck %s
+
+define void @infer_via_ranges(ptr %arr, i32 %n) {
+; CHECK-LABEL: define void @infer_via_ranges(
+; CHECK-SAME: ptr [[ARR:%.*]], i32 [[N:%.*]]) {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[FIRST_ITR_CHECK:%.*]] = icmp sgt i32 [[N]], 0
+; CHECK-NEXT:    [[START:%.*]] = sub i32 [[N]], 1
+; CHECK-NEXT:    br i1 [[FIRST_ITR_CHECK]], label %[[LOOP_PREHEADER:.*]], label %[[EXIT:.*]]
+; CHECK:       [[LOOP_PREHEADER]]:
+; CHECK-NEXT:    br label %[[LOOP:.*]]
+; CHECK:       [[LOOP]]:
+; CHECK-NEXT:    [[IDX:%.*]] = phi i32 [ [[IDX_DEC:%.*]], %[[IN_BOUNDS:.*]] ], [ [[START]], %[[LOOP_PREHEADER]] ]
+; CHECK-NEXT:    [[IDX_DEC]] = sub nsw i32 [[IDX]], 1
+; CHECK-NEXT:    br i1 true, label %[[IN_BOUNDS]], label %[[OUT_OF_BOUNDS:.*]]
+; CHECK:       [[IN_BOUNDS]]:
+; CHECK-NEXT:    [[ADDR:%.*]] = getelementptr i32, ptr [[ARR]], i32 [[IDX]]
+; CHECK-NEXT:    store i32 0, ptr [[ADDR]], align 4
+; CHECK-NEXT:    [[NEXT:%.*]] = icmp sgt i32 [[IDX_DEC]], -1
+; CHECK-NEXT:    br i1 [[NEXT]], label %[[LOOP]], label %[[EXIT_LOOPEXIT:.*]]
+; CHECK:       [[OUT_OF_BOUNDS]]:
+; CHECK-NEXT:    ret void
+; CHECK:       [[EXIT_LOOPEXIT]]:
+; CHECK-NEXT:    br label %[[EXIT]]
+; CHECK:       [[EXIT]]:
+; CHECK-NEXT:    ret void
+;
+  entry:
+  %first.itr.check = icmp sgt i32 %n, 0
+  %start = sub i32 %n, 1
+  br i1 %first.itr.check, label %loop, label %exit
+
+  loop:
+  %idx = phi i32 [ %start, %entry ] , [ %idx.dec, %in.bounds ]
+  %idx.dec = sub i32 %idx, 1
+  %abc = icmp sge i32 %idx, 0
+  br i1 %abc, label %in.bounds, label %out.of.bounds
+
+  in.bounds:
+  %addr = getelementptr i32, ptr %arr, i32 %idx
+  store i32 0, ptr %addr
+  %next = icmp sgt i32 %idx.dec, -1
+  br i1 %next, label %loop, label %exit
+
+  out.of.bounds:
+  ret void
+
+  exit:
+  ret void
+}

``````````

</details>


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


More information about the llvm-commits mailing list