diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAnnotateKernelFeatures.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAnnotateKernelFeatures.cpp deleted file mode 100644 index 9c9fa5c6e2f0f..0000000000000 --- a/llvm/lib/Target/AMDGPU/AMDGPUAnnotateKernelFeatures.cpp +++ /dev/null @@ -1,128 +0,0 @@ -//===- AMDGPUAnnotateKernelFeaturesPass.cpp -------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -/// \file This pass propagates the uniform-work-group-size attribute from -/// kernels to leaf functions when possible. It also adds additional attributes -/// to hint ABI lowering optimizations later. -// -//===----------------------------------------------------------------------===// - -#include "AMDGPU.h" -#include "GCNSubtarget.h" -#include "llvm/Analysis/CallGraph.h" -#include "llvm/Analysis/CallGraphSCCPass.h" -#include "llvm/CodeGen/TargetPassConfig.h" -#include "llvm/Target/TargetMachine.h" - -#define DEBUG_TYPE "amdgpu-annotate-kernel-features" - -using namespace llvm; - -namespace { -class AMDGPUAnnotateKernelFeatures : public CallGraphSCCPass { -private: - const TargetMachine *TM = nullptr; - - bool addFeatureAttributes(Function &F); - -public: - static char ID; - - AMDGPUAnnotateKernelFeatures() : CallGraphSCCPass(ID) {} - - bool doInitialization(CallGraph &CG) override; - bool runOnSCC(CallGraphSCC &SCC) override; - - StringRef getPassName() const override { - return "AMDGPU Annotate Kernel Features"; - } - - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.setPreservesAll(); - CallGraphSCCPass::getAnalysisUsage(AU); - } -}; - -} // end anonymous namespace - -char AMDGPUAnnotateKernelFeatures::ID = 0; - -bool AMDGPUAnnotateKernelFeatures::addFeatureAttributes(Function &F) { - bool HaveStackObjects = false; - bool Changed = false; - bool HaveCall = false; - bool IsFunc = !AMDGPU::isEntryFunctionCC(F.getCallingConv()); - - for (BasicBlock &BB : F) { - for (Instruction &I : BB) { - if (isa(I)) { - HaveStackObjects = true; - continue; - } - - if (auto *CB = dyn_cast(&I)) { - const Function *Callee = - dyn_cast(CB->getCalledOperand()->stripPointerCasts()); - - // Note the occurrence of indirect call. - if (!Callee) { - if (!CB->isInlineAsm()) - HaveCall = true; - - continue; - } - - Intrinsic::ID IID = Callee->getIntrinsicID(); - if (IID == Intrinsic::not_intrinsic) { - HaveCall = true; - Changed = true; - } - } - } - } - - // TODO: We could refine this to captured pointers that could possibly be - // accessed by flat instructions. For now this is mostly a poor way of - // estimating whether there are calls before argument lowering. - if (!IsFunc && HaveCall) { - F.addFnAttr("amdgpu-calls"); - Changed = true; - } - - if (HaveStackObjects) { - F.addFnAttr("amdgpu-stack-objects"); - Changed = true; - } - - return Changed; -} - -bool AMDGPUAnnotateKernelFeatures::runOnSCC(CallGraphSCC &SCC) { - bool Changed = false; - - for (CallGraphNode *I : SCC) { - Function *F = I->getFunction(); - // Ignore functions with graphics calling conventions, these are currently - // not allowed to have kernel arguments. - if (!F || F->isDeclaration() || AMDGPU::isGraphics(F->getCallingConv())) - continue; - // Add feature attributes - Changed |= addFeatureAttributes(*F); - } - - return Changed; -} - -bool AMDGPUAnnotateKernelFeatures::doInitialization(CallGraph &CG) { - auto *TPC = getAnalysisIfAvailable(); - if (!TPC) - report_fatal_error("TargetMachine is required"); - - TM = &TPC->getTM(); - return false; -} diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index 1ea7dd01d15c0..c28f407391c11 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -2073,9 +2073,6 @@ void AMDGPUCodeGenPassBuilder::addIRPasses(AddIRPass &addPass) const { } void AMDGPUCodeGenPassBuilder::addCodeGenPrepare(AddIRPass &addPass) const { - // AMDGPUAnnotateKernelFeaturesPass is missing here, but it will hopefully be - // deleted soon. - if (TM.getOptLevel() > CodeGenOptLevel::None) addPass(AMDGPUPreloadKernelArgumentsPass(TM)); diff --git a/llvm/lib/Target/AMDGPU/CMakeLists.txt b/llvm/lib/Target/AMDGPU/CMakeLists.txt index c6d70ee39202e..928a5001e0c98 100644 --- a/llvm/lib/Target/AMDGPU/CMakeLists.txt +++ b/llvm/lib/Target/AMDGPU/CMakeLists.txt @@ -43,7 +43,6 @@ add_public_tablegen_target(InstCombineTableGen) add_llvm_target(AMDGPUCodeGen AMDGPUAliasAnalysis.cpp AMDGPUAlwaysInlinePass.cpp - AMDGPUAnnotateKernelFeatures.cpp AMDGPUAnnotateUniformValues.cpp AMDGPUArgumentUsageInfo.cpp AMDGPUAsanInstrumentation.cpp diff --git a/llvm/utils/gn/secondary/llvm/lib/Target/AMDGPU/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Target/AMDGPU/BUILD.gn index facdde20454de..628e544a687e5 100644 --- a/llvm/utils/gn/secondary/llvm/lib/Target/AMDGPU/BUILD.gn +++ b/llvm/utils/gn/secondary/llvm/lib/Target/AMDGPU/BUILD.gn @@ -131,7 +131,6 @@ static_library("LLVMAMDGPUCodeGen") { sources = [ "AMDGPUAliasAnalysis.cpp", "AMDGPUAlwaysInlinePass.cpp", - "AMDGPUAnnotateKernelFeatures.cpp", "AMDGPUAnnotateUniformValues.cpp", "AMDGPUArgumentUsageInfo.cpp", "AMDGPUAsanInstrumentation.cpp",