diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp | 30 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h | 16 |
2 files changed, 12 insertions, 34 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp index 77e39c20044..81df0c628a2 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp @@ -46,12 +46,8 @@ void AMDGPUAAWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); } -// Must match the table in getAliasResult. -AMDGPUAAResult::ASAliasRulesTy::ASAliasRulesTy(Triple::ArchType Arch_) - : Arch(Arch_) { - // These arrarys are indexed by address space value - // enum elements 0 ... to 6 - static const AliasResult ASAliasRulesGenIsZero[7][7] = { +// These arrays are indexed by address space value enum elements 0 ... to 6 +static const AliasResult ASAliasRules[7][7] = { /* Flat Global Region Group Constant Private Constant 32-bit */ /* Flat */ {MayAlias, MayAlias, MayAlias, MayAlias, MayAlias, MayAlias, MayAlias}, /* Global */ {MayAlias, MayAlias, NoAlias , NoAlias , MayAlias, NoAlias , MayAlias}, @@ -60,22 +56,15 @@ AMDGPUAAResult::ASAliasRulesTy::ASAliasRulesTy(Triple::ArchType Arch_) /* Constant */ {MayAlias, MayAlias, MayAlias, NoAlias , NoAlias, NoAlias , MayAlias}, /* Private */ {MayAlias, NoAlias , NoAlias , NoAlias , NoAlias , MayAlias, NoAlias}, /* Constant 32-bit */ {MayAlias, MayAlias, MayAlias, NoAlias , MayAlias, NoAlias , NoAlias} - }; +}; +static AliasResult getAliasResult(unsigned AS1, unsigned AS2) { static_assert(AMDGPUAS::MAX_AMDGPU_ADDRESS <= 6, "Addr space out of range"); - ASAliasRules = &ASAliasRulesGenIsZero; -} - -AliasResult AMDGPUAAResult::ASAliasRulesTy::getAliasResult(unsigned AS1, - unsigned AS2) const { - if (AS1 > AMDGPUAS::MAX_AMDGPU_ADDRESS || AS2 > AMDGPUAS::MAX_AMDGPU_ADDRESS) { - if (Arch == Triple::amdgcn) - report_fatal_error("Pointer address space out of range"); - return AS1 == AS2 ? MayAlias : NoAlias; - } + if (AS1 > AMDGPUAS::MAX_AMDGPU_ADDRESS || AS2 > AMDGPUAS::MAX_AMDGPU_ADDRESS) + return MayAlias; - return (*ASAliasRules)[AS1][AS2]; + return ASAliasRules[AS1][AS2]; } AliasResult AMDGPUAAResult::alias(const MemoryLocation &LocA, @@ -83,8 +72,9 @@ AliasResult AMDGPUAAResult::alias(const MemoryLocation &LocA, unsigned asA = LocA.Ptr->getType()->getPointerAddressSpace(); unsigned asB = LocB.Ptr->getType()->getPointerAddressSpace(); - AliasResult Result = ASAliasRules.getAliasResult(asA, asB); - if (Result == NoAlias) return Result; + AliasResult Result = getAliasResult(asA, asB); + if (Result == NoAlias) + return Result; // Forward the query to the next alias analysis. return AAResultBase::alias(LocA, LocB); diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h index 659a9f38454..9a507d004d0 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h @@ -36,10 +36,9 @@ class AMDGPUAAResult : public AAResultBase<AMDGPUAAResult> { public: explicit AMDGPUAAResult(const DataLayout &DL, Triple T) : AAResultBase(), - DL(DL), ASAliasRules(T.getArch()) {} + DL(DL) {} AMDGPUAAResult(AMDGPUAAResult &&Arg) - : AAResultBase(std::move(Arg)), DL(Arg.DL), - ASAliasRules(Arg.ASAliasRules){} + : AAResultBase(std::move(Arg)), DL(Arg.DL) {} /// Handle invalidation events from the new pass manager. /// @@ -52,17 +51,6 @@ public: private: bool Aliases(const MDNode *A, const MDNode *B) const; bool PathAliases(const MDNode *A, const MDNode *B) const; - - class ASAliasRulesTy { - public: - ASAliasRulesTy(Triple::ArchType Arch_); - - AliasResult getAliasResult(unsigned AS1, unsigned AS2) const; - - private: - Triple::ArchType Arch; - const AliasResult (*ASAliasRules)[7][7]; - } ASAliasRules; }; /// Analysis pass providing a never-invalidated alias analysis result. |

