mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +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 DataLayout &DL,
|
||||||
const TargetLibraryInfo *TLI,
|
const TargetLibraryInfo *TLI,
|
||||||
const CallBase *Call) {
|
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
|
// Do not iterate on scalable vector. The number of elements is unknown at
|
||||||
// compile-time.
|
// compile-time.
|
||||||
if (isa<ScalableVectorType>(VTy))
|
if (isa<ScalableVectorType>(VTy))
|
||||||
return nullptr;
|
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) {
|
if (IntrinsicID == Intrinsic::masked_load) {
|
||||||
auto *SrcPtr = Operands[0];
|
auto *SrcPtr = Operands[0];
|
||||||
auto *Mask = Operands[2];
|
auto *Mask = Operands[2];
|
||||||
auto *Passthru = Operands[3];
|
auto *Passthru = Operands[3];
|
||||||
|
|
||||||
Constant *VecData = ConstantFoldLoadFromConstPtr(SrcPtr, VTy, DL);
|
Constant *VecData = ConstantFoldLoadFromConstPtr(SrcPtr, FVTy, DL);
|
||||||
|
|
||||||
SmallVector<Constant *, 32> NewElements;
|
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);
|
auto *MaskElt = Mask->getAggregateElement(I);
|
||||||
if (!MaskElt)
|
if (!MaskElt)
|
||||||
break;
|
break;
|
||||||
@ -2732,12 +2734,12 @@ static Constant *ConstantFoldVectorCall(StringRef Name,
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (NewElements.size() != VTy->getNumElements())
|
if (NewElements.size() != FVTy->getNumElements())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return ConstantVector::get(NewElements);
|
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.
|
// Gather a column of constants.
|
||||||
for (unsigned J = 0, JE = Operands.size(); J != JE; ++J) {
|
for (unsigned J = 0, JE = Operands.size(); J != JE; ++J) {
|
||||||
// Some intrinsics use a scalar type for certain arguments.
|
// Some intrinsics use a scalar type for certain arguments.
|
||||||
|
Loading…
Reference in New Issue
Block a user