Skip to content

Commit 054b1b3

Browse files
committed
Revert "[SLP]Fix final analysis for unsigned nodes."
This reverts commit 74e07ab. It might be that Mask.getBitWidth() == Mask.countl_zero() (32 in my case) and zero bitwidth2 causes the crash.
1 parent 2512ce3 commit 054b1b3

File tree

2 files changed

+9
-18
lines changed

2 files changed

+9
-18
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14442,18 +14442,11 @@ bool BoUpSLP::collectValuesToDemote(
1444214442
}
1444314443
auto NumSignBits = ComputeNumSignBits(V, *DL, 0, AC, nullptr, DT);
1444414444
unsigned BitWidth1 = OrigBitWidth - NumSignBits;
14445-
bool IsSigned = !isKnownNonNegative(V, SimplifyQuery(*DL));
14446-
if (IsSigned)
14445+
if (!isKnownNonNegative(V, SimplifyQuery(*DL)))
1444714446
++BitWidth1;
1444814447
if (auto *I = dyn_cast<Instruction>(V)) {
1444914448
APInt Mask = DB->getDemandedBits(I);
1445014449
unsigned BitWidth2 = Mask.getBitWidth() - Mask.countl_zero();
14451-
while (!IsSigned && BitWidth2 < OrigBitWidth) {
14452-
APInt Mask = APInt::getBitsSetFrom(OrigBitWidth, BitWidth2 - 1);
14453-
if (MaskedValueIsZero(V, Mask, SimplifyQuery(*DL)))
14454-
break;
14455-
BitWidth2 *= 2;
14456-
}
1445714450
BitWidth1 = std::min(BitWidth1, BitWidth2);
1445814451
}
1445914452
BitWidth = std::max(BitWidth, BitWidth1);

llvm/test/Transforms/SLPVectorizer/RISCV/unsigned-node-trunc-with-signed-users.ll

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,18 @@ define void @test(ptr %p, i16 %load794) {
88
; CHECK-NEXT: [[GEP799:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 16
99
; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i16>, ptr [[P]], align 2
1010
; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i16>, ptr [[GEP799]], align 2
11-
; CHECK-NEXT: [[TMP3:%.*]] = zext <2 x i16> [[TMP1]] to <2 x i32>
12-
; CHECK-NEXT: [[TMP4:%.*]] = zext <2 x i16> [[TMP2]] to <2 x i32>
13-
; CHECK-NEXT: [[TMP7:%.*]] = sub nsw <2 x i32> [[TMP4]], [[TMP3]]
14-
; CHECK-NEXT: [[TMP8:%.*]] = add nsw <2 x i32> [[TMP7]], <i32 3329, i32 3329>
11+
; CHECK-NEXT: [[TMP3:%.*]] = sub <2 x i16> [[TMP2]], [[TMP1]]
12+
; CHECK-NEXT: [[TMP4:%.*]] = add <2 x i16> [[TMP3]], <i16 3329, i16 3329>
1513
; CHECK-NEXT: [[TMP5:%.*]] = insertelement <2 x i32> poison, i32 [[ZEXT795]], i32 0
1614
; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <2 x i32> [[TMP5]], <2 x i32> poison, <2 x i32> zeroinitializer
17-
; CHECK-NEXT: [[TMP12:%.*]] = mul <2 x i32> [[TMP8]], [[TMP6]]
18-
; CHECK-NEXT: [[TMP9:%.*]] = zext <2 x i32> [[TMP12]] to <2 x i64>
15+
; CHECK-NEXT: [[TMP7:%.*]] = trunc <2 x i32> [[TMP6]] to <2 x i16>
16+
; CHECK-NEXT: [[TMP8:%.*]] = mul <2 x i16> [[TMP4]], [[TMP7]]
17+
; CHECK-NEXT: [[TMP9:%.*]] = zext <2 x i16> [[TMP8]] to <2 x i64>
1918
; CHECK-NEXT: [[TMP10:%.*]] = mul nuw nsw <2 x i64> [[TMP9]], <i64 5039, i64 5039>
2019
; CHECK-NEXT: [[TMP11:%.*]] = lshr <2 x i64> [[TMP10]], <i64 24, i64 24>
21-
; CHECK-NEXT: [[TMP13:%.*]] = trunc <2 x i64> [[TMP11]] to <2 x i32>
22-
; CHECK-NEXT: [[TMP20:%.*]] = mul <2 x i32> [[TMP13]], <i32 62207, i32 62207>
23-
; CHECK-NEXT: [[TMP21:%.*]] = add <2 x i32> [[TMP20]], [[TMP12]]
24-
; CHECK-NEXT: [[TMP14:%.*]] = trunc <2 x i32> [[TMP21]] to <2 x i16>
20+
; CHECK-NEXT: [[TMP12:%.*]] = trunc <2 x i64> [[TMP11]] to <2 x i16>
21+
; CHECK-NEXT: [[TMP13:%.*]] = mul <2 x i16> [[TMP12]], <i16 -3329, i16 -3329>
22+
; CHECK-NEXT: [[TMP14:%.*]] = add <2 x i16> [[TMP13]], [[TMP8]]
2523
; CHECK-NEXT: [[TMP15:%.*]] = add <2 x i16> [[TMP14]], <i16 -3329, i16 -3329>
2624
; CHECK-NEXT: [[TMP16:%.*]] = icmp slt <2 x i16> [[TMP15]], zeroinitializer
2725
; CHECK-NEXT: [[TMP17:%.*]] = select <2 x i1> [[TMP16]], <2 x i16> [[TMP14]], <2 x i16> zeroinitializer

0 commit comments

Comments
 (0)