mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[SVE] Ignore scalable vectors in InterleavedLoadCombinePass
I have changed the pass so that we ignore shuffle vectors with scalable vector types, and replaced VectorType with FixedVectorType in the rest of the pass. I couldn't think of an easy way to test this change, since for scalable vectors we shouldn't be using shufflevectors for interleaving. This change fixes up some type size assert warnings I found in the following test: CodeGen/AArch64/sve-intrinsics-int-arith-imm.ll Differential Revision: https://reviews.llvm.org/D79700
This commit is contained in:
parent
78c69af86a
commit
6732b9b453
@ -673,9 +673,9 @@ public:
|
||||
ElementInfo *EI;
|
||||
|
||||
/// Vector Type
|
||||
VectorType *const VTy;
|
||||
FixedVectorType *const VTy;
|
||||
|
||||
VectorInfo(VectorType *VTy)
|
||||
VectorInfo(FixedVectorType *VTy)
|
||||
: BB(nullptr), PV(nullptr), LIs(), Is(), SVI(nullptr), VTy(VTy) {
|
||||
EI = new ElementInfo[VTy->getNumElements()];
|
||||
}
|
||||
@ -735,7 +735,7 @@ public:
|
||||
if (!Op)
|
||||
return false;
|
||||
|
||||
VectorType *VTy = dyn_cast<VectorType>(Op->getType());
|
||||
FixedVectorType *VTy = dyn_cast<FixedVectorType>(Op->getType());
|
||||
if (!VTy)
|
||||
return false;
|
||||
|
||||
@ -785,8 +785,8 @@ public:
|
||||
/// \returns false if no sensible information can be gathered.
|
||||
static bool computeFromSVI(ShuffleVectorInst *SVI, VectorInfo &Result,
|
||||
const DataLayout &DL) {
|
||||
VectorType *ArgTy = dyn_cast<VectorType>(SVI->getOperand(0)->getType());
|
||||
assert(ArgTy && "ShuffleVector Operand is not a VectorType");
|
||||
FixedVectorType *ArgTy =
|
||||
cast<FixedVectorType>(SVI->getOperand(0)->getType());
|
||||
|
||||
// Compute the left hand vector information.
|
||||
VectorInfo LHS(ArgTy);
|
||||
@ -1201,7 +1201,7 @@ bool InterleavedLoadCombineImpl::combine(std::list<VectorInfo> &InterleavedLoad,
|
||||
Type *ETy = InterleavedLoad.front().SVI->getType()->getElementType();
|
||||
unsigned ElementsPerSVI =
|
||||
InterleavedLoad.front().SVI->getType()->getNumElements();
|
||||
VectorType *ILTy = VectorType::get(ETy, Factor * ElementsPerSVI);
|
||||
FixedVectorType *ILTy = FixedVectorType::get(ETy, Factor * ElementsPerSVI);
|
||||
|
||||
SmallVector<unsigned, 4> Indices;
|
||||
for (unsigned i = 0; i < Factor; i++)
|
||||
@ -1265,8 +1265,11 @@ bool InterleavedLoadCombineImpl::run() {
|
||||
for (BasicBlock &BB : F) {
|
||||
for (Instruction &I : BB) {
|
||||
if (auto SVI = dyn_cast<ShuffleVectorInst>(&I)) {
|
||||
// We don't support scalable vectors in this pass.
|
||||
if (isa<ScalableVectorType>(SVI->getType()))
|
||||
continue;
|
||||
|
||||
Candidates.emplace_back(SVI->getType());
|
||||
Candidates.emplace_back(cast<FixedVectorType>(SVI->getType()));
|
||||
|
||||
if (!VectorInfo::computeFromSVI(SVI, Candidates.back(), DL)) {
|
||||
Candidates.pop_back();
|
||||
|
Loading…
Reference in New Issue
Block a user