diff options
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64Subtarget.cpp')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64Subtarget.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp index 029535cb98b5..71b2bb196486 100644 --- a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp +++ b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp @@ -67,7 +67,7 @@ AArch64Subtarget::initializeSubtargetDependencies(StringRef FS, if (CPUString.empty()) CPUString = "generic"; - ParseSubtargetFeatures(CPUString, FS); + ParseSubtargetFeatures(CPUString, /*TuneCPU*/ CPUString, FS); initializeProperties(); return *this; @@ -103,19 +103,26 @@ void AArch64Subtarget::initializeProperties() { case CortexA76: case CortexA77: case CortexA78: + case CortexA78C: + case CortexR82: case CortexX1: PrefFunctionLogAlignment = 4; break; case A64FX: CacheLineSize = 256; - PrefFunctionLogAlignment = 5; - PrefLoopLogAlignment = 5; + PrefFunctionLogAlignment = 3; + PrefLoopLogAlignment = 2; + MaxInterleaveFactor = 4; + PrefetchDistance = 128; + MinPrefetchStride = 1024; + MaxPrefetchIterationsAhead = 4; break; case AppleA7: case AppleA10: case AppleA11: case AppleA12: case AppleA13: + case AppleA14: CacheLineSize = 64; PrefetchDistance = 280; MinPrefetchStride = 2048; @@ -150,6 +157,8 @@ void AArch64Subtarget::initializeProperties() { PrefFunctionLogAlignment = 3; break; case NeoverseN1: + case NeoverseN2: + case NeoverseV1: PrefFunctionLogAlignment = 4; break; case Saphira: @@ -200,7 +209,7 @@ void AArch64Subtarget::initializeProperties() { AArch64Subtarget::AArch64Subtarget(const Triple &TT, const std::string &CPU, const std::string &FS, const TargetMachine &TM, bool LittleEndian) - : AArch64GenSubtargetInfo(TT, CPU, FS), + : AArch64GenSubtargetInfo(TT, CPU, /*TuneCPU*/ CPU, FS), ReserveXRegister(AArch64::GPR64commonRegClass.getNumRegs()), CustomCallSavedXRegs(AArch64::GPR64commonRegClass.getNumRegs()), IsLittle(LittleEndian), @@ -366,3 +375,8 @@ unsigned AArch64Subtarget::getMinSVEVectorSizeInBits() const { return (SVEVectorBitsMin / 128) * 128; return (std::min(SVEVectorBitsMin, SVEVectorBitsMax) / 128) * 128; } + +bool AArch64Subtarget::useSVEForFixedLengthVectors() const { + // Prefer NEON unless larger SVE registers are available. + return hasSVE() && getMinSVEVectorSizeInBits() >= 256; +} |
