[PATCH] D155708: [AArch64][NFC] Call the API getVScaleRange directly
Allen zhong via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 26 00:54:38 PDT 2023
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG67005c8e6fa9: [AArch64][NFC] Call the API getVScaleRange directly (authored by Allen).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D155708/new/
https://reviews.llvm.org/D155708
Files:
llvm/lib/Analysis/InstructionSimplify.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
Index: llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+++ llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
@@ -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 @@
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;
@@ -417,12 +417,10 @@
// Sanitize user input in case of no asserts
if (MaxSVEVectorSize == 0)
- MinSVEVectorSize = (MinSVEVectorSize / 128) * 128;
+ MinSVEVectorSize = MinSVEVectorSize;
else {
- MinSVEVectorSize =
- (std::min(MinSVEVectorSize, MaxSVEVectorSize) / 128) * 128;
- MaxSVEVectorSize =
- (std::max(MinSVEVectorSize, MaxSVEVectorSize) / 128) * 128;
+ MinSVEVectorSize = std::min(MinSVEVectorSize, MaxSVEVectorSize);
+ MaxSVEVectorSize = std::max(MinSVEVectorSize, MaxSVEVectorSize);
}
SmallString<512> Key;
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -1947,13 +1947,10 @@
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));
Index: llvm/lib/Analysis/InstructionSimplify.cpp
===================================================================
--- llvm/lib/Analysis/InstructionSimplify.cpp
+++ llvm/lib/Analysis/InstructionSimplify.cpp
@@ -6539,13 +6539,10 @@
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:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D155708.544245.patch
Type: text/x-patch
Size: 3720 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230726/0505c568/attachment.bin>
More information about the llvm-commits
mailing list