Skip to content

Commit d134ca8

Browse files
committed
The order of store chains needs to consider the size of the values
1 parent 834ad10 commit d134ca8

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19123,6 +19123,14 @@ bool SLPVectorizerPass::vectorizeStoreChains(BoUpSLP &R) {
1912319123
if (V->getPointerOperandType()->getTypeID() >
1912419124
V2->getPointerOperandType()->getTypeID())
1912519125
return false;
19126+
if (V->getValueOperand()->getType()->getScalarSizeInBits() <
19127+
V2->getValueOperand()->getType()->getScalarSizeInBits()) {
19128+
return true;
19129+
}
19130+
if (V->getValueOperand()->getType()->getScalarSizeInBits() >
19131+
V2->getValueOperand()->getType()->getScalarSizeInBits()) {
19132+
return false;
19133+
}
1912619134
// UndefValues are compatible with all other values.
1912719135
if (isa<UndefValue>(V->getValueOperand()) ||
1912819136
isa<UndefValue>(V2->getValueOperand()))

llvm/test/Transforms/SLPVectorizer/X86/stores_mix_sizes.ll

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,9 @@ define void @test(ptr %p) {
55
; CHECK-SAME: ptr [[P:%.*]]) {
66
; CHECK-NEXT: [[ENTRY:.*:]]
77
; CHECK-NEXT: [[IDX1:%.*]] = getelementptr i8, ptr [[P]], i64 1
8-
; CHECK-NEXT: store i8 0, ptr [[IDX1]], align 4
98
; CHECK-NEXT: [[IDX_64_9:%.*]] = getelementptr i64, ptr [[P]], i64 9
109
; CHECK-NEXT: store i64 1, ptr [[IDX_64_9]], align 8
11-
; CHECK-NEXT: [[IDX2:%.*]] = getelementptr i8, ptr [[P]], i64 2
12-
; CHECK-NEXT: store <4 x i8> zeroinitializer, ptr [[IDX2]], align 4
13-
; CHECK-NEXT: [[IDX6:%.*]] = getelementptr i8, ptr [[P]], i64 6
14-
; CHECK-NEXT: store i8 0, ptr [[IDX6]], align 4
15-
; CHECK-NEXT: [[IDX7:%.*]] = getelementptr i8, ptr [[P]], i64 7
16-
; CHECK-NEXT: store i8 0, ptr [[IDX7]], align 4
17-
; CHECK-NEXT: [[IDX8:%.*]] = getelementptr i8, ptr [[P]], i64 8
18-
; CHECK-NEXT: store i8 0, ptr [[IDX8]], align 4
10+
; CHECK-NEXT: store <8 x i8> zeroinitializer, ptr [[IDX1]], align 4
1911
; CHECK-NEXT: ret void
2012
;
2113
entry:

0 commit comments

Comments
 (0)