mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-03-06 09:28:50 +00:00
Reland [AArch64][NFC] Call the API getVScaleRange directly
Use the maximum 64 for BitWidth of getVScaleRange to avoid returning an empty range. the previous changes bring in a Buildbot failure because MinSVEVectorSize = MinSVEVectorSize. error: explicitly assigning value of variable of type 'unsigned int' to itself [-Werror,-Wself-assign] Reviewed By: sdesmalen, nikic, dmgreen Differential Revision: https://reviews.llvm.org/D155708
This commit is contained in:
parent
970569b6cc
commit
05aae0839f
@ -6539,13 +6539,10 @@ static Value *simplifyIntrinsic(CallBase *Call, Value *Callee,
|
||||
if (!NumOperands) {
|
||||
switch (IID) {
|
||||
case Intrinsic::vscale: {
|
||||
auto Attr = Call->getFunction()->getFnAttribute(Attribute::VScaleRange);
|
||||
if (!Attr.isValid())
|
||||
return nullptr;
|
||||
unsigned VScaleMin = Attr.getVScaleRangeMin();
|
||||
std::optional<unsigned> VScaleMax = Attr.getVScaleRangeMax();
|
||||
if (VScaleMax && VScaleMin == VScaleMax)
|
||||
return ConstantInt::get(F->getReturnType(), VScaleMin);
|
||||
Type *RetTy = F->getReturnType();
|
||||
ConstantRange CR = getVScaleRange(Call->getFunction(), 64);
|
||||
if (const APInt *C = CR.getSingleElement())
|
||||
return ConstantInt::get(RetTy, C->getZExtValue());
|
||||
return nullptr;
|
||||
}
|
||||
default:
|
||||
|
@ -1947,13 +1947,10 @@ SDValue SelectionDAG::getVScale(const SDLoc &DL, EVT VT, APInt MulImm,
|
||||
|
||||
if (ConstantFold) {
|
||||
const MachineFunction &MF = getMachineFunction();
|
||||
auto Attr = MF.getFunction().getFnAttribute(Attribute::VScaleRange);
|
||||
if (Attr.isValid()) {
|
||||
unsigned VScaleMin = Attr.getVScaleRangeMin();
|
||||
if (std::optional<unsigned> VScaleMax = Attr.getVScaleRangeMax())
|
||||
if (*VScaleMax == VScaleMin)
|
||||
return getConstant(MulImm * VScaleMin, DL, VT);
|
||||
}
|
||||
const Function &F = MF.getFunction();
|
||||
ConstantRange CR = getVScaleRange(&F, 64);
|
||||
if (const APInt *C = CR.getSingleElement())
|
||||
return getConstant(MulImm * C->getZExtValue(), DL, VT);
|
||||
}
|
||||
|
||||
return getNode(ISD::VSCALE, DL, VT, getConstant(MulImm, DL, VT));
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "TargetInfo/AArch64TargetInfo.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/Analysis/TargetTransformInfo.h"
|
||||
#include "llvm/Analysis/ValueTracking.h"
|
||||
#include "llvm/CodeGen/CFIFixup.h"
|
||||
#include "llvm/CodeGen/CSEConfigBase.h"
|
||||
#include "llvm/CodeGen/GlobalISel/CSEInfo.h"
|
||||
@ -398,11 +399,10 @@ AArch64TargetMachine::getSubtargetImpl(const Function &F) const {
|
||||
|
||||
unsigned MinSVEVectorSize = 0;
|
||||
unsigned MaxSVEVectorSize = 0;
|
||||
Attribute VScaleRangeAttr = F.getFnAttribute(Attribute::VScaleRange);
|
||||
if (VScaleRangeAttr.isValid()) {
|
||||
std::optional<unsigned> VScaleMax = VScaleRangeAttr.getVScaleRangeMax();
|
||||
MinSVEVectorSize = VScaleRangeAttr.getVScaleRangeMin() * 128;
|
||||
MaxSVEVectorSize = VScaleMax ? *VScaleMax * 128 : 0;
|
||||
if (F.hasFnAttribute(Attribute::VScaleRange)) {
|
||||
ConstantRange CR = getVScaleRange(&F, 64);
|
||||
MinSVEVectorSize = CR.getUnsignedMin().getZExtValue() * 128;
|
||||
MaxSVEVectorSize = CR.getUnsignedMax().getZExtValue() * 128;
|
||||
} else {
|
||||
MinSVEVectorSize = SVEVectorBitsMinOpt;
|
||||
MaxSVEVectorSize = SVEVectorBitsMaxOpt;
|
||||
@ -416,13 +416,9 @@ AArch64TargetMachine::getSubtargetImpl(const Function &F) const {
|
||||
"Minimum SVE vector size should not be larger than its maximum!");
|
||||
|
||||
// Sanitize user input in case of no asserts
|
||||
if (MaxSVEVectorSize == 0)
|
||||
MinSVEVectorSize = (MinSVEVectorSize / 128) * 128;
|
||||
else {
|
||||
MinSVEVectorSize =
|
||||
(std::min(MinSVEVectorSize, MaxSVEVectorSize) / 128) * 128;
|
||||
MaxSVEVectorSize =
|
||||
(std::max(MinSVEVectorSize, MaxSVEVectorSize) / 128) * 128;
|
||||
if (MaxSVEVectorSize != 0) {
|
||||
MinSVEVectorSize = std::min(MinSVEVectorSize, MaxSVEVectorSize);
|
||||
MaxSVEVectorSize = std::max(MinSVEVectorSize, MaxSVEVectorSize);
|
||||
}
|
||||
|
||||
SmallString<512> Key;
|
||||
|
Loading…
x
Reference in New Issue
Block a user