@@ -210,6 +210,18 @@ struct CMImpParam : public ModulePass {
210210 bool HasPayloadInMemory = false ;
211211 const DataLayout *DL = nullptr ;
212212
213+ #if LLVM_VERSION_MAJOR >= 16
214+ CallGraph &CG;
215+ CMImpParam (CallGraph &CG, bool HasPayloadInMemoryIn)
216+ : ModulePass{ID}, HasPayloadInMemory{HasPayloadInMemoryIn}, CG(CG) {
217+ initializeCMImpParamPass (*PassRegistry::getPassRegistry ());
218+ }
219+
220+ CMImpParam (CallGraph &CG)
221+ : ModulePass{ID}, HasPayloadInMemory{PayloadInMemoryOpt}, CG(CG) {
222+ initializeCMImpParamPass (*PassRegistry::getPassRegistry ());
223+ }
224+ #else // LLVM_VERSION_MAJOR
213225 CMImpParam (bool HasPayloadInMemoryIn)
214226 : ModulePass{ID}, HasPayloadInMemory{HasPayloadInMemoryIn} {
215227 initializeCMImpParamPass (*PassRegistry::getPassRegistry ());
@@ -218,6 +230,7 @@ struct CMImpParam : public ModulePass {
218230 CMImpParam () : ModulePass{ID}, HasPayloadInMemory{PayloadInMemoryOpt} {
219231 initializeCMImpParamPass (*PassRegistry::getPassRegistry ());
220232 }
233+ #endif // LLVM_VERSION_MAJOR
221234
222235 void getAnalysisUsage (AnalysisUsage &AU) const override {
223236 AU.addRequired <CallGraphWrapperPass>();
@@ -556,7 +569,9 @@ bool CMImpParam::runOnModule(Module &M) {
556569void CMImpParam::processKernels (
557570 const std::vector<FunctionRef> &Kernels, const IntrIDMap &UsedIntrInfo,
558571 const std::unordered_set<Function *> &RequireImplArgsBuffer) {
572+ #if LLVM_VERSION_MAJOR < 16
559573 CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph ();
574+ #endif
560575
561576 for (Function &Kernel : Kernels) {
562577 // Traverse the call graph to determine what the total implicit uses are for
@@ -610,14 +625,16 @@ CMImpParam::analyzeFixedSignatureFunctions(Module &M,
610625 const IntrIDMap &UsedIntrInfo) {
611626 IntrIDMap FixedSignFuncInfo;
612627 std::unordered_set<Function *> RequireImplArgsBuffer;
628+ #if LLVM_VERSION_MAJOR < 16
613629 CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph ();
614-
630+ # endif
615631 auto FixedSignatureDefinitions = make_filter_range (
616632 M, [](const Function &F) { return vc::isFixedSignatureDefinition (F); });
617633
618634 for (Function &F : FixedSignatureDefinitions) {
619635 auto [RequiredImplArgs, CalledFixedSignFuncs] =
620636 CallGraphTraverser{CG, UsedIntrInfo}.collectIndirectlyUsedImplArgs (F);
637+
621638 // Function should be marked if it uses implicit args or it calls some
622639 // function that may use it via implicit args buffer.
623640 if (!RequiredImplArgs.empty () || !CalledFixedSignFuncs.has_value () ||
@@ -1013,6 +1030,9 @@ template <bool IsEntry> void CallGraphTraverser::visitFunction(Function &F) {
10131030 // Skipping inline asm.
10141031 if (isa<CallInst>(CI) && cast<CallInst>(CI)->isInlineAsm ())
10151032 continue ;
1033+ if (!isa<CallInst>(CI) || (GenXIntrinsic::getAnyIntrinsicID (CI) !=
1034+ GenXIntrinsic::not_any_intrinsic))
1035+ continue ;
10161036 // Returns nullptr in case of indirect call or inline asm which was already
10171037 // considered.
10181038 auto *Child = CallEdge.second ->getFunction ();
@@ -1160,7 +1180,9 @@ CMImpParam::processKernelParameters(Function *F,
11601180 }
11611181 }
11621182
1183+ #if LLVM_VERSION_MAJOR < 16
11631184 CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph ();
1185+ #endif
11641186 CallGraphNode *NF_CGN = CG.getOrInsertFunction (NF);
11651187
11661188 if (F->hasDLLExportStorageClass ())
@@ -1206,20 +1228,22 @@ INITIALIZE_PASS_END(CMImpParam, "CMImpParam",
12061228 " Transformations required to support implicit arguments" ,
12071229 false , false )
12081230
1231+ #if LLVM_VERSION_MAJOR < 16
12091232namespace llvm {
12101233Pass *createCMImpParamPass (bool HasPayloadInMemory) {
12111234 return new CMImpParam{HasPayloadInMemory};
12121235}
12131236} // namespace llvm
12141237
1215- #if LLVM_VERSION_MAJOR >= 16
1238+ #else // LLVM_VERSION_MAJOR < 16
12161239PreservedAnalyses CMImpParamPass::run (llvm::Module &M,
1217- llvm::AnalysisManager<llvm::Module> &) {
1218- CMImpParam cmip;
1240+ llvm::AnalysisManager<llvm::Module> &AM) {
1241+ auto &CG = AM.getResult <CallGraphAnalysis>(M);
1242+ CMImpParam cmip (CG);
12191243 if (cmip.runOnModule (M)) {
12201244 return PreservedAnalyses::all ();
12211245 }
12221246 return PreservedAnalyses::none ();
12231247}
1224- // TODO: No lit-tests
1225- #endif
1248+ CMImpParamPass::CMImpParamPass () : HasPayloadInMemory{PayloadInMemoryOpt} {};
1249+ #endif // LLVM_VERSION_MAJOR < 16
0 commit comments