From 30b1056d8fd772597e39655a959e477e38f0948d Mon Sep 17 00:00:00 2001 From: Stanislav Mekhanoshin Date: Fri, 24 Mar 2017 18:01:14 +0000 Subject: [PATCH] [AMDGPU] Add AMDGPUAliasAnalysis to opt pipeline Previously it was added only to the BE. Differential Revision: https://reviews.llvm.org/D31323 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298721 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 25 +++++++++++++++++++- test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll | 8 +++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll diff --git a/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index 9cc27b98d85..93c28149621 100644 --- a/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -253,15 +253,29 @@ StringRef AMDGPUTargetMachine::getFeatureString(const Function &F) const { FSAttr.getValueAsString(); } +static ImmutablePass *createAMDGPUExternalAAWrapperPass() { + return createExternalAAWrapperPass([](Pass &P, Function &, AAResults &AAR) { + if (auto *WrapperPass = P.getAnalysisIfAvailable()) + AAR.addAAResult(WrapperPass->getResult()); + }); +} + void AMDGPUTargetMachine::adjustPassManager(PassManagerBuilder &Builder) { Builder.DivergentTarget = true; bool Internalize = InternalizeSymbols && (getOptLevel() > CodeGenOpt::None) && (getTargetTriple().getArch() == Triple::amdgcn); + bool AMDGPUAA = EnableAMDGPUAliasAnalysis && getOptLevel() > CodeGenOpt::None; + Builder.addExtension( PassManagerBuilder::EP_ModuleOptimizerEarly, - [Internalize](const PassManagerBuilder &, legacy::PassManagerBase &PM) { + [Internalize, AMDGPUAA](const PassManagerBuilder &, + legacy::PassManagerBase &PM) { + if (AMDGPUAA) { + PM.add(createAMDGPUAAWrapperPass()); + PM.add(createAMDGPUExternalAAWrapperPass()); + } PM.add(createAMDGPUUnifyMetadataPass()); if (Internalize) { PM.add(createInternalizePass([=](const GlobalValue &GV) -> bool { @@ -286,6 +300,15 @@ void AMDGPUTargetMachine::adjustPassManager(PassManagerBuilder &Builder) { PM.add(createAMDGPUAlwaysInlinePass()); } }); + + Builder.addExtension( + PassManagerBuilder::EP_EarlyAsPossible, + [AMDGPUAA](const PassManagerBuilder &, legacy::PassManagerBase &PM) { + if (AMDGPUAA) { + PM.add(createAMDGPUAAWrapperPass()); + PM.add(createAMDGPUExternalAAWrapperPass()); + } + }); } //===----------------------------------------------------------------------===// diff --git a/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll b/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll new file mode 100644 index 00000000000..977803b5151 --- /dev/null +++ b/test/CodeGen/AMDGPU/amdgpu-alias-analysis.ll @@ -0,0 +1,8 @@ +; RUN: opt -mtriple=amdgcn-- -O3 -aa-eval -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s + +; CHECK: NoAlias: i8 addrspace(1)* %p1, i8* %p + +define void @test(i8* %p, i8 addrspace(1)* %p1) { + ret void +} + -- 2.50.1