Author: Arthur Eubanks Date: 2021-01-04T12:36:27-08:00 New Revision: 191552344bba04c428de4a34b83d6f7537a4a596
URL: https://github.com/llvm/llvm-project/commit/191552344bba04c428de4a34b83d6f7537a4a596 DIFF: https://github.com/llvm/llvm-project/commit/191552344bba04c428de4a34b83d6f7537a4a596.diff LOG: [NewPM][AMDGPU] Make amdgpu-aa work with NewPM An AMDGPUAA class already existed that was supposed to work with the new PM, but it wasn't tested and was a bit broken. Fix up the existing classes to have the right keys/parameters. Wire up AMDGPUAA inside AMDGPUTargetMachine. Add it to the list of alias analyses for the "default" AAManager since in adjustPassManager() amdgpu-aa is added into the pipeline at the beginning. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D93914 Added: Modified: llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll Removed: ################################################################################ diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp index 9059f2886ea2f..d4f97b2ed22dd 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.cpp @@ -32,6 +32,8 @@ using namespace llvm; #define DEBUG_TYPE "amdgpu-aa" +AnalysisKey AMDGPUAA::Key; + // Register this pass... char AMDGPUAAWrapperPass::ID = 0; char AMDGPUExternalAAWrapper::ID = 0; diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h index fd8889ea5c0dd..f3e64d8b9d9a8 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUAliasAnalysis.h @@ -42,7 +42,10 @@ class AMDGPUAAResult : public AAResultBase<AMDGPUAAResult> { /// Handle invalidation events from the new pass manager. /// /// By definition, this result is stateless and so remains valid. - bool invalidate(Function &, const PreservedAnalyses &) { return false; } + bool invalidate(Function &, const PreservedAnalyses &, + FunctionAnalysisManager::Invalidator &Inv) { + return false; + } AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB, AAQueryInfo &AAQI); @@ -54,7 +57,7 @@ class AMDGPUAAResult : public AAResultBase<AMDGPUAAResult> { class AMDGPUAA : public AnalysisInfoMixin<AMDGPUAA> { friend AnalysisInfoMixin<AMDGPUAA>; - static char PassID; + static AnalysisKey Key; public: using Result = AMDGPUAAResult; diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index d3bea7f9469ef..7e9a0ddc0fc6b 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -489,6 +489,10 @@ void AMDGPUTargetMachine::adjustPassManager(PassManagerBuilder &Builder) { }); } +void AMDGPUTargetMachine::registerAliasAnalyses(AAManager &AAM) { + AAM.registerFunctionAnalysis<AMDGPUAA>(); +} + void AMDGPUTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB, bool DebugPassManager) { PB.registerPipelineParsingCallback( @@ -543,6 +547,18 @@ void AMDGPUTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB, return false; }); + PB.registerAnalysisRegistrationCallback([](FunctionAnalysisManager &FAM) { + FAM.registerPass([&] { return AMDGPUAA(); }); + }); + + PB.registerParseAACallback([](StringRef AAName, AAManager &AAM) { + if (AAName == "amdgpu-aa") { + AAM.registerFunctionAnalysis<AMDGPUAA>(); + return true; + } + return false; + }); + PB.registerPipelineStartEPCallback([this, DebugPassManager]( ModulePassManager &PM, PassBuilder::OptimizationLevel Level) { diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h index d5fd769912d02..abcc38ff73ba9 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h @@ -58,6 +58,7 @@ class AMDGPUTargetMachine : public LLVMTargetMachine { void registerPassBuilderCallbacks(PassBuilder &PB, bool DebugPassManager) override; + void registerAliasAnalyses(AAManager &) override; /// Get the integer value of a null pointer in the given address space. static int64_t getNullPointerValue(unsigned AddrSpace) { diff --git a/llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll b/llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll index 7302361bfb68e..778e9613136d1 100644 --- a/llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll +++ b/llvm/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll @@ -1,5 +1,7 @@ ; RUN: opt -mtriple=amdgcn-- -data-layout=A5 -aa-eval -amdgpu-aa -amdgpu-aa-wrapper -disable-basic-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s ; RUN: opt -mtriple=r600-- -data-layout=A5 -aa-eval -amdgpu-aa -amdgpu-aa-wrapper -disable-basic-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s +; RUN: opt -mtriple=amdgcn-- -data-layout=A5 -passes=aa-eval -aa-pipeline=amdgpu-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s +; RUN: opt -mtriple=r600-- -data-layout=A5 -passes=aa-eval -aa-pipeline=amdgpu-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s ; CHECK: NoAlias: i8 addrspace(1)* %p1, i8 addrspace(5)* %p _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits