Skip to content

Commit 662bede

Browse files
committed
[LV] Handle known-false mem runtime checks in GeneratedRTChecks.
Handle mem checks known to be false in getMemRuntimeChecks the same way as SCEV checks known to be false in getSCEVChecks. This ensures such redundant check blocks are not added in the first place.
1 parent 0c80427 commit 662bede

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,6 +2021,9 @@ class GeneratedRTChecks {
20212021
/// Retrieves the MemCheckCond and MemCheckBlock that were generated as IR
20222022
/// outside VPlan.
20232023
std::pair<Value *, BasicBlock *> getMemRuntimeChecks() {
2024+
using namespace llvm::PatternMatch;
2025+
if (MemRuntimeCheckCond && match(MemRuntimeCheckCond, m_ZeroInt()))
2026+
return {nullptr, nullptr};
20242027
return {MemRuntimeCheckCond, MemCheckBlock};
20252028
}
20262029

llvm/test/Transforms/LoopVectorize/runtime-check-known-true.ll

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ define void @test_runtime_check_known_false_after_construction(ptr %start.1, ptr
2424
; CHECK-NEXT: [[TMP7:%.*]] = sub i3 [[TMP5]], [[TMP6]]
2525
; CHECK-NEXT: [[TMP8:%.*]] = zext i3 [[TMP7]] to i64
2626
; CHECK-NEXT: [[IDENT_CHECK:%.*]] = icmp ne i64 [[TMP8]], 0
27-
; CHECK-NEXT: br i1 [[IDENT_CHECK]], label %[[SCALAR_PH]], label %[[VECTOR_MEMCHECK:.*]]
28-
; CHECK: [[VECTOR_MEMCHECK]]:
29-
; CHECK-NEXT: br i1 false, label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]]
27+
; CHECK-NEXT: br i1 [[IDENT_CHECK]], label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]]
3028
; CHECK: [[VECTOR_PH]]:
3129
; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[TMP4]], 4
3230
; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[TMP4]], [[N_MOD_VF]]
@@ -56,8 +54,8 @@ define void @test_runtime_check_known_false_after_construction(ptr %start.1, ptr
5654
; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[TMP4]], [[N_VEC]]
5755
; CHECK-NEXT: br i1 [[CMP_N]], label %[[EXIT:.*]], label %[[SCALAR_PH]]
5856
; CHECK: [[SCALAR_PH]]:
59-
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi ptr [ [[TMP10]], %[[MIDDLE_BLOCK]] ], [ [[START_1]], %[[ENTRY]] ], [ [[START_1]], %[[VECTOR_SCEVCHECK]] ], [ [[START_1]], %[[VECTOR_MEMCHECK]] ]
60-
; CHECK-NEXT: [[BC_RESUME_VAL5:%.*]] = phi ptr [ [[TMP12]], %[[MIDDLE_BLOCK]] ], [ [[START_2_DIFF]], %[[ENTRY]] ], [ [[START_2_DIFF]], %[[VECTOR_SCEVCHECK]] ], [ [[START_2_DIFF]], %[[VECTOR_MEMCHECK]] ]
57+
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi ptr [ [[TMP10]], %[[MIDDLE_BLOCK]] ], [ [[START_1]], %[[ENTRY]] ], [ [[START_1]], %[[VECTOR_SCEVCHECK]] ]
58+
; CHECK-NEXT: [[BC_RESUME_VAL5:%.*]] = phi ptr [ [[TMP12]], %[[MIDDLE_BLOCK]] ], [ [[START_2_DIFF]], %[[ENTRY]] ], [ [[START_2_DIFF]], %[[VECTOR_SCEVCHECK]] ]
6159
; CHECK-NEXT: br label %[[LOOP:.*]]
6260
; CHECK: [[LOOP]]:
6361
; CHECK-NEXT: [[PTR_IV_1:%.*]] = phi ptr [ [[PTR_IV_1_NEXT:%.*]], %[[LOOP]] ], [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ]

0 commit comments

Comments
 (0)