@@ -933,9 +933,53 @@ static void addPreloadKernArgHint(Function &F, TargetMachine &TM) {
933
933
}
934
934
}
935
935
936
- class AMDGPUAttributor : public ModulePass {
936
+ static bool runImpl (Module &M, AnalysisGetter &AG, TargetMachine &TM) {
937
+ SetVector<Function *> Functions;
938
+ for (Function &F : M) {
939
+ if (!F.isIntrinsic ())
940
+ Functions.insert (&F);
941
+ }
942
+
943
+ CallGraphUpdater CGUpdater;
944
+ BumpPtrAllocator Allocator;
945
+ AMDGPUInformationCache InfoCache (M, AG, Allocator, nullptr , TM);
946
+ DenseSet<const char *> Allowed (
947
+ {&AAAMDAttributes::ID, &AAUniformWorkGroupSize::ID,
948
+ &AAPotentialValues::ID, &AAAMDFlatWorkGroupSize::ID,
949
+ &AAAMDWavesPerEU::ID, &AACallEdges::ID, &AAPointerInfo::ID,
950
+ &AAPotentialConstantValues::ID, &AAUnderlyingObjects::ID});
951
+
952
+ AttributorConfig AC (CGUpdater);
953
+ AC.Allowed = &Allowed;
954
+ AC.IsModulePass = true ;
955
+ AC.DefaultInitializeLiveInternals = false ;
956
+ AC.IPOAmendableCB = [](const Function &F) {
957
+ return F.getCallingConv () == CallingConv::AMDGPU_KERNEL;
958
+ };
959
+
960
+ Attributor A (Functions, InfoCache, AC);
961
+
962
+ for (Function &F : M) {
963
+ if (!F.isIntrinsic ()) {
964
+ A.getOrCreateAAFor <AAAMDAttributes>(IRPosition::function (F));
965
+ A.getOrCreateAAFor <AAUniformWorkGroupSize>(IRPosition::function (F));
966
+ CallingConv::ID CC = F.getCallingConv ();
967
+ if (!AMDGPU::isEntryFunctionCC (CC)) {
968
+ A.getOrCreateAAFor <AAAMDFlatWorkGroupSize>(IRPosition::function (F));
969
+ A.getOrCreateAAFor <AAAMDWavesPerEU>(IRPosition::function (F));
970
+ } else if (CC == CallingConv::AMDGPU_KERNEL) {
971
+ addPreloadKernArgHint (F, TM);
972
+ }
973
+ }
974
+ }
975
+
976
+ ChangeStatus Change = A.run ();
977
+ return Change == ChangeStatus::CHANGED;
978
+ }
979
+
980
+ class AMDGPUAttributorLegacy : public ModulePass {
937
981
public:
938
- AMDGPUAttributor () : ModulePass(ID) {}
982
+ AMDGPUAttributorLegacy () : ModulePass(ID) {}
939
983
940
984
// / doInitialization - Virtual method overridden by subclasses to do
941
985
// / any necessary initialization before any pass is run.
@@ -949,48 +993,8 @@ class AMDGPUAttributor : public ModulePass {
949
993
}
950
994
951
995
bool runOnModule (Module &M) override {
952
- SetVector<Function *> Functions;
953
996
AnalysisGetter AG (this );
954
- for (Function &F : M) {
955
- if (!F.isIntrinsic ())
956
- Functions.insert (&F);
957
- }
958
-
959
- CallGraphUpdater CGUpdater;
960
- BumpPtrAllocator Allocator;
961
- AMDGPUInformationCache InfoCache (M, AG, Allocator, nullptr , *TM);
962
- DenseSet<const char *> Allowed (
963
- {&AAAMDAttributes::ID, &AAUniformWorkGroupSize::ID,
964
- &AAPotentialValues::ID, &AAAMDFlatWorkGroupSize::ID,
965
- &AAAMDWavesPerEU::ID, &AACallEdges::ID, &AAPointerInfo::ID,
966
- &AAPotentialConstantValues::ID, &AAUnderlyingObjects::ID});
967
-
968
- AttributorConfig AC (CGUpdater);
969
- AC.Allowed = &Allowed;
970
- AC.IsModulePass = true ;
971
- AC.DefaultInitializeLiveInternals = false ;
972
- AC.IPOAmendableCB = [](const Function &F) {
973
- return F.getCallingConv () == CallingConv::AMDGPU_KERNEL;
974
- };
975
-
976
- Attributor A (Functions, InfoCache, AC);
977
-
978
- for (Function &F : M) {
979
- if (!F.isIntrinsic ()) {
980
- A.getOrCreateAAFor <AAAMDAttributes>(IRPosition::function (F));
981
- A.getOrCreateAAFor <AAUniformWorkGroupSize>(IRPosition::function (F));
982
- CallingConv::ID CC = F.getCallingConv ();
983
- if (!AMDGPU::isEntryFunctionCC (CC)) {
984
- A.getOrCreateAAFor <AAAMDFlatWorkGroupSize>(IRPosition::function (F));
985
- A.getOrCreateAAFor <AAAMDWavesPerEU>(IRPosition::function (F));
986
- } else if (CC == CallingConv::AMDGPU_KERNEL) {
987
- addPreloadKernArgHint (F, *TM);
988
- }
989
- }
990
- }
991
-
992
- ChangeStatus Change = A.run ();
993
- return Change == ChangeStatus::CHANGED;
997
+ return runImpl (M, AG, *TM);
994
998
}
995
999
996
1000
void getAnalysisUsage (AnalysisUsage &AU) const override {
@@ -1003,11 +1007,25 @@ class AMDGPUAttributor : public ModulePass {
1003
1007
};
1004
1008
} // namespace
1005
1009
1006
- char AMDGPUAttributor::ID = 0 ;
1010
+ PreservedAnalyses llvm::AMDGPUAttributorPass::run (Module &M,
1011
+ ModuleAnalysisManager &AM) {
1007
1012
1008
- Pass *llvm::createAMDGPUAttributorPass () { return new AMDGPUAttributor (); }
1009
- INITIALIZE_PASS_BEGIN (AMDGPUAttributor, DEBUG_TYPE, " AMDGPU Attributor" , false ,
1010
- false )
1013
+ FunctionAnalysisManager &FAM =
1014
+ AM.getResult <FunctionAnalysisManagerModuleProxy>(M).getManager ();
1015
+ AnalysisGetter AG (FAM);
1016
+
1017
+ // TODO: Probably preserves CFG
1018
+ return runImpl (M, AG, TM) ? PreservedAnalyses::none ()
1019
+ : PreservedAnalyses::all ();
1020
+ }
1021
+
1022
+ char AMDGPUAttributorLegacy::ID = 0 ;
1023
+
1024
+ Pass *llvm::createAMDGPUAttributorLegacyPass () {
1025
+ return new AMDGPUAttributorLegacy ();
1026
+ }
1027
+ INITIALIZE_PASS_BEGIN (AMDGPUAttributorLegacy, DEBUG_TYPE, " AMDGPU Attributor" ,
1028
+ false , false )
1011
1029
INITIALIZE_PASS_DEPENDENCY(CycleInfoWrapperPass);
1012
- INITIALIZE_PASS_END (AMDGPUAttributor , DEBUG_TYPE, " AMDGPU Attributor" , false ,
1013
- false )
1030
+ INITIALIZE_PASS_END (AMDGPUAttributorLegacy , DEBUG_TYPE, " AMDGPU Attributor" ,
1031
+ false , false )
0 commit comments