mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Fix for a regression caused by the LoopVectorizer when
vectorizing loops with memory accesses to non-zero address spaces. It simply dropped the AS info. Fixes PR16306. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184103 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1178,7 +1178,7 @@ void InnerLoopVectorizer::vectorizeMemoryInstruction(Instruction *Instr,
|
||||
Type *DataTy = VectorType::get(ScalarDataTy, VF);
|
||||
Value *Ptr = LI ? LI->getPointerOperand() : SI->getPointerOperand();
|
||||
unsigned Alignment = LI ? LI->getAlignment() : SI->getAlignment();
|
||||
|
||||
unsigned AddressSpace = Ptr->getType()->getPointerAddressSpace();
|
||||
unsigned ScalarAllocatedSize = DL->getTypeAllocSize(ScalarDataTy);
|
||||
unsigned VectorElementSize = DL->getTypeStoreSize(DataTy)/VF;
|
||||
|
||||
@@ -1253,7 +1253,7 @@ void InnerLoopVectorizer::vectorizeMemoryInstruction(Instruction *Instr,
|
||||
PartPtr = Builder.CreateGEP(PartPtr, Builder.getInt32(1 - VF));
|
||||
}
|
||||
|
||||
Value *VecPtr = Builder.CreateBitCast(PartPtr, DataTy->getPointerTo());
|
||||
Value *VecPtr = Builder.CreateBitCast(PartPtr, DataTy->getPointerTo(AddressSpace));
|
||||
Builder.CreateStore(StoredVal[Part], VecPtr)->setAlignment(Alignment);
|
||||
}
|
||||
}
|
||||
@@ -1269,7 +1269,7 @@ void InnerLoopVectorizer::vectorizeMemoryInstruction(Instruction *Instr,
|
||||
PartPtr = Builder.CreateGEP(PartPtr, Builder.getInt32(1 - VF));
|
||||
}
|
||||
|
||||
Value *VecPtr = Builder.CreateBitCast(PartPtr, DataTy->getPointerTo());
|
||||
Value *VecPtr = Builder.CreateBitCast(PartPtr, DataTy->getPointerTo(AddressSpace));
|
||||
Value *LI = Builder.CreateLoad(VecPtr, "wide.load");
|
||||
cast<LoadInst>(LI)->setAlignment(Alignment);
|
||||
Entry[Part] = Reverse ? reverseVector(LI) : LI;
|
||||
|
Reference in New Issue
Block a user