Skip to content

Commit ca647a5

Browse files
committed
Fix overeager alignment upgrading when vectorizer tries to upgrade allocas
1 parent 80b68fd commit ca647a5

File tree

4 files changed

+6
-12
lines changed

4 files changed

+6
-12
lines changed

llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,8 @@ std::vector<Chain> Vectorizer::splitChainByAlignment(Chain &C) {
934934
isa<AllocaInst>(PtrOperand->stripPointerCasts());
935935
Align Alignment = getLoadStoreAlignment(C[CBegin].Inst);
936936
Align PrefAlign = Align(StackAdjustedAlignment);
937-
if (IsAllocaAccess && Alignment.value() % SizeBytes != 0) {
937+
if (IsAllocaAccess && Alignment.value() % SizeBytes != 0 &&
938+
accessIsAllowedAndFast(SizeBytes, AS, PrefAlign, VecElemBits)) {
938939
Align NewAlign = getOrEnforceKnownAlignment(
939940
PtrOperand, PrefAlign, DL, C[CBegin].Inst, nullptr, &DT);
940941
if (NewAlign >= Alignment) {
@@ -943,6 +944,7 @@ std::vector<Chain> Vectorizer::splitChainByAlignment(Chain &C) {
943944
<< Alignment.value() << " to " << NewAlign.value()
944945
<< "\n");
945946
Alignment = NewAlign;
947+
setLoadStoreAlignment(C[CBegin].Inst, Alignment);
946948
}
947949
}
948950

@@ -1117,14 +1119,6 @@ bool Vectorizer::vectorizeChain(Chain &C) {
11171119
Type *VecTy = FixedVectorType::get(VecElemTy, NumElem);
11181120

11191121
Align Alignment = getLoadStoreAlignment(C[0].Inst);
1120-
// If this is a load/store of an alloca, we might have upgraded the alloca's
1121-
// alignment earlier. Get the new alignment.
1122-
if (AS == DL.getAllocaAddrSpace()) {
1123-
Alignment = std::max(
1124-
Alignment,
1125-
getOrEnforceKnownAlignment(getLoadStorePointerOperand(C[0].Inst),
1126-
MaybeAlign(), DL, C[0].Inst, nullptr, &DT));
1127-
}
11281122

11291123
// All elements of the chain must have the same scalar-type size.
11301124
#ifndef NDEBUG

llvm/test/CodeGen/NVPTX/variadics-backend.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ define dso_local i32 @foo() {
110110
; CHECK-PTX-NEXT: // %bb.0: // %entry
111111
; CHECK-PTX-NEXT: mov.b64 %SPL, __local_depot1;
112112
; CHECK-PTX-NEXT: cvta.local.u64 %SP, %SPL;
113-
; CHECK-PTX-NEXT: st.v2.b32 [%SP], {1, 1};
113+
; CHECK-PTX-NEXT: st.b64 [%SP], 4294967297;
114114
; CHECK-PTX-NEXT: st.b32 [%SP+8], 1;
115115
; CHECK-PTX-NEXT: st.b64 [%SP+16], 1;
116116
; CHECK-PTX-NEXT: st.b64 [%SP+24], 4607182418800017408;

llvm/test/Transforms/LoadStoreVectorizer/NVPTX/vectorize_i8.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ define void @int8x3a4(ptr nocapture align 4 %ptr) {
5858
%l1 = load i8, ptr %ptr1, align 1
5959
%l2 = load i8, ptr %ptr2, align 2
6060

61-
store i8 %l2, ptr %ptr0, align 2
61+
store i8 %l2, ptr %ptr0, align 4
6262
store i8 %l1, ptr %ptr1, align 1
6363
store i8 %l0, ptr %ptr2, align 4
6464

llvm/test/Transforms/LoadStoreVectorizer/X86/massive_indirection.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ define void @variadics1(ptr %vlist) {
155155
; CHECK-NEXT: [[ARGP_NEXT12:%.*]] = getelementptr i8, ptr [[ARGP_CUR11_ALIGNED]], i64 8
156156
; CHECK-NEXT: [[X2:%.*]] = getelementptr i8, ptr [[ARGP_NEXT12]], i32 7
157157
; CHECK-NEXT: [[ARGP_CUR16_ALIGNED:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[X2]], i64 0)
158-
; CHECK-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr [[ARGP_CUR16_ALIGNED]], align 4294967296
158+
; CHECK-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr [[ARGP_CUR16_ALIGNED]], align 8
159159
; CHECK-NEXT: [[X31:%.*]] = extractelement <2 x double> [[TMP1]], i32 0
160160
; CHECK-NEXT: [[X42:%.*]] = extractelement <2 x double> [[TMP1]], i32 1
161161
; CHECK-NEXT: [[X5:%.*]] = fadd double [[X42]], [[X31]]

0 commit comments

Comments
 (0)