mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[NFC] Bail out for scalable vectors before calling getNumElements
Summary: Move the bail out logic to before constructing the Result and Lane vectors. This is both potentially faster, and avoids calling getNumElements on a potentially scalable vector Reviewers: efriedma, sunfish, chandlerc, c-rhodes, fpetrogalli Reviewed By: fpetrogalli Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D81619
This commit is contained in:
parent
650da30b37
commit
f0aae37e1d
@ -2689,24 +2689,26 @@ static Constant *ConstantFoldVectorCall(StringRef Name,
|
||||
const DataLayout &DL,
|
||||
const TargetLibraryInfo *TLI,
|
||||
const CallBase *Call) {
|
||||
SmallVector<Constant *, 4> Result(VTy->getNumElements());
|
||||
SmallVector<Constant *, 4> Lane(Operands.size());
|
||||
Type *Ty = VTy->getElementType();
|
||||
|
||||
// Do not iterate on scalable vector. The number of elements is unknown at
|
||||
// compile-time.
|
||||
if (isa<ScalableVectorType>(VTy))
|
||||
return nullptr;
|
||||
|
||||
auto *FVTy = cast<FixedVectorType>(VTy);
|
||||
|
||||
SmallVector<Constant *, 4> Result(FVTy->getNumElements());
|
||||
SmallVector<Constant *, 4> Lane(Operands.size());
|
||||
Type *Ty = FVTy->getElementType();
|
||||
|
||||
if (IntrinsicID == Intrinsic::masked_load) {
|
||||
auto *SrcPtr = Operands[0];
|
||||
auto *Mask = Operands[2];
|
||||
auto *Passthru = Operands[3];
|
||||
|
||||
Constant *VecData = ConstantFoldLoadFromConstPtr(SrcPtr, VTy, DL);
|
||||
Constant *VecData = ConstantFoldLoadFromConstPtr(SrcPtr, FVTy, DL);
|
||||
|
||||
SmallVector<Constant *, 32> NewElements;
|
||||
for (unsigned I = 0, E = VTy->getNumElements(); I != E; ++I) {
|
||||
for (unsigned I = 0, E = FVTy->getNumElements(); I != E; ++I) {
|
||||
auto *MaskElt = Mask->getAggregateElement(I);
|
||||
if (!MaskElt)
|
||||
break;
|
||||
@ -2732,12 +2734,12 @@ static Constant *ConstantFoldVectorCall(StringRef Name,
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
if (NewElements.size() != VTy->getNumElements())
|
||||
if (NewElements.size() != FVTy->getNumElements())
|
||||
return nullptr;
|
||||
return ConstantVector::get(NewElements);
|
||||
}
|
||||
|
||||
for (unsigned I = 0, E = VTy->getNumElements(); I != E; ++I) {
|
||||
for (unsigned I = 0, E = FVTy->getNumElements(); I != E; ++I) {
|
||||
// Gather a column of constants.
|
||||
for (unsigned J = 0, JE = Operands.size(); J != JE; ++J) {
|
||||
// Some intrinsics use a scalar type for certain arguments.
|
||||
|
Loading…
Reference in New Issue
Block a user