Skip to content

Commit bb8e2a8

Browse files
committed
[SLP]Relax assertion to avoid compiler crash
Need to relax the assertion to fix a compiler crash in case if the reordered compress loads are more profitable than the ordered ones. Fixes #140334
1 parent 9d3ef8a commit bb8e2a8

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13626,11 +13626,10 @@ BoUpSLP::getEntryCost(const TreeEntry *E, ArrayRef<Value *> VectorizedVals,
1362613626
SmallVector<Value *> PointerOps(Scalars.size());
1362713627
for (auto [I, V] : enumerate(Scalars))
1362813628
PointerOps[I] = cast<LoadInst>(V)->getPointerOperand();
13629-
[[maybe_unused]] bool IsVectorized = isMaskedLoadCompress(
13629+
(void)isMaskedLoadCompress(
1363013630
Scalars, PointerOps, E->ReorderIndices, *TTI, *DL, *SE, *AC, *DT,
1363113631
*TLI, [](Value *) { return true; }, IsMasked, InterleaveFactor,
1363213632
CompressMask, LoadVecTy);
13633-
assert(IsVectorized && "Expected to be vectorized");
1363413633
CompressEntryToData.try_emplace(E, CompressMask, LoadVecTy,
1363513634
InterleaveFactor, IsMasked);
1363613635
Align CommonAlignment = LI0->getAlign();
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -mcpu=znver1 < %s | FileCheck %s
3+
4+
@mbc_dbl = common global [16 x i8] zeroinitializer, align 8
5+
@foo_int = common global [16 x i8] zeroinitializer, align 8
6+
@foo_ptr = common local_unnamed_addr global [640 x i8] zeroinitializer, align 8
7+
8+
define void @test() {
9+
; CHECK-LABEL: define void @test(
10+
; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
11+
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 64), align 8
12+
; CHECK-NEXT: [[TMP2:%.*]] = getelementptr i64, ptr @foo_int, i64 [[TMP1]]
13+
; CHECK-NEXT: [[TMP3:%.*]] = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 80), align 8
14+
; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i64, ptr @foo_int, i64 [[TMP3]]
15+
; CHECK-NEXT: [[TMP5:%.*]] = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 192), align 8
16+
; CHECK-NEXT: [[TMP6:%.*]] = getelementptr double, ptr @mbc_dbl, i64 [[TMP5]]
17+
; CHECK-NEXT: [[TMP7:%.*]] = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 128), align 8
18+
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr double, ptr @mbc_dbl, i64 [[TMP7]]
19+
; CHECK-NEXT: [[TMP9:%.*]] = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 144), align 8
20+
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr double, ptr @mbc_dbl, i64 [[TMP9]]
21+
; CHECK-NEXT: [[TMP11:%.*]] = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 208), align 8
22+
; CHECK-NEXT: [[TMP12:%.*]] = getelementptr double, ptr @mbc_dbl, i64 [[TMP11]]
23+
; CHECK-NEXT: ret void
24+
;
25+
%165 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 64), align 8
26+
%166 = getelementptr i64, ptr @foo_int, i64 %165
27+
%168 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 80), align 8
28+
%169 = getelementptr i64, ptr @foo_int, i64 %168
29+
%171 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 192), align 8
30+
%172 = getelementptr double, ptr @mbc_dbl, i64 %171
31+
%174 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 128), align 8
32+
%175 = getelementptr double, ptr @mbc_dbl, i64 %174
33+
%177 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 144), align 8
34+
%178 = getelementptr double, ptr @mbc_dbl, i64 %177
35+
%180 = load i64, ptr getelementptr inbounds nuw (i8, ptr @foo_ptr, i64 208), align 8
36+
%181 = getelementptr double, ptr @mbc_dbl, i64 %180
37+
ret void
38+
}

0 commit comments

Comments
 (0)