[llvm] [LV] Rework collectUnitStridePredicates (PR #216362)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 16 01:36:36 PDT 2026
================
@@ -68,20 +68,57 @@ define i64 @predicated_iv_with_liveout(ptr %dst, i64 %n) {
; THRESHOLD0-LABEL: define i64 @predicated_iv_with_liveout(
; THRESHOLD0-SAME: ptr [[DST:%.*]], i64 [[N:%.*]]) {
; THRESHOLD0-NEXT: [[ENTRY:.*]]:
+; THRESHOLD0-NEXT: [[TMP0:%.*]] = call i64 @llvm.smax.i64(i64 [[N]], i64 1)
+; THRESHOLD0-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP0]], 4
+; THRESHOLD0-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_SCEVCHECK:.*]]
+; THRESHOLD0: [[VECTOR_SCEVCHECK]]:
+; THRESHOLD0-NEXT: [[SMAX:%.*]] = call i64 @llvm.smax.i64(i64 [[N]], i64 1)
----------------
artagnon wrote:
Not sure how -vectorize-scev-check-threshold is supposed to operate, but isn't this the existing behavior in the unchanged tests as well?
```llvm
; THRESHOLD-LABEL: define i64 @for_liveout_blocked_by_ind_predicate(
; THRESHOLD-SAME: ptr [[DST:%.*]], i64 [[N:%.*]]) {
; THRESHOLD-NEXT: [[ENTRY:.*]]:
; THRESHOLD-NEXT: [[TMP0:%.*]] = call i64 @llvm.smax.i64(i64 [[N]], i64 1)
; THRESHOLD-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP0]], 4
; THRESHOLD-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
```
https://github.com/llvm/llvm-project/pull/216362
More information about the llvm-commits
mailing list