This revision was automatically updated to reflect the committed changes. Closed by commit rG756dd707668c: [NewPM] Run ObjC ARC passes (authored by aeubanks).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D93743/new/ https://reviews.llvm.org/D93743 Files: clang/lib/CodeGen/BackendUtil.cpp llvm/include/llvm/Transforms/ObjCARC.h llvm/lib/Passes/PassRegistry.def llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
Index: llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp =================================================================== --- llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp +++ llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp @@ -2462,17 +2462,12 @@ /// @} /// -PreservedAnalyses ObjCARCOptPass::run(Module &M, ModuleAnalysisManager &AM) { +PreservedAnalyses ObjCARCOptPass::run(Function &F, + FunctionAnalysisManager &AM) { ObjCARCOpt OCAO; - OCAO.init(M); + OCAO.init(*F.getParent()); - auto &FAM = AM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager(); - bool Changed = false; - for (Function &F : M) { - if (F.isDeclaration()) - continue; - Changed |= OCAO.run(F, FAM.getResult<AAManager>(F)); - } + bool Changed = OCAO.run(F, AM.getResult<AAManager>(F)); if (Changed) { PreservedAnalyses PA; PA.preserveSet<CFGAnalyses>(); Index: llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp =================================================================== --- llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp +++ llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp @@ -750,19 +750,13 @@ return OCARCC.run(F, AA, DT); } -PreservedAnalyses ObjCARCContractPass::run(Module &M, - ModuleAnalysisManager &AM) { +PreservedAnalyses ObjCARCContractPass::run(Function &F, + FunctionAnalysisManager &AM) { ObjCARCContract OCAC; - OCAC.init(M); + OCAC.init(*F.getParent()); - auto &FAM = AM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager(); - bool Changed = false; - for (Function &F : M) { - if (F.isDeclaration()) - continue; - Changed |= OCAC.run(F, &FAM.getResult<AAManager>(F), - &FAM.getResult<DominatorTreeAnalysis>(F)); - } + bool Changed = OCAC.run(F, &AM.getResult<AAManager>(F), + &AM.getResult<DominatorTreeAnalysis>(F)); if (Changed) { PreservedAnalyses PA; PA.preserveSet<CFGAnalyses>(); Index: llvm/lib/Passes/PassRegistry.def =================================================================== --- llvm/lib/Passes/PassRegistry.def +++ llvm/lib/Passes/PassRegistry.def @@ -80,9 +80,7 @@ MODULE_PASS("mergefunc", MergeFunctionsPass()) MODULE_PASS("name-anon-globals", NameAnonGlobalPass()) MODULE_PASS("no-op-module", NoOpModulePass()) -MODULE_PASS("objc-arc", ObjCARCOptPass()) MODULE_PASS("objc-arc-apelim", ObjCARCAPElimPass()) -MODULE_PASS("objc-arc-contract", ObjCARCContractPass()) MODULE_PASS("partial-inliner", PartialInlinerPass()) MODULE_PASS("pgo-icall-prom", PGOIndirectCallPromotion()) MODULE_PASS("pgo-instr-gen", PGOInstrumentationGen()) @@ -268,6 +266,8 @@ FUNCTION_PASS("loop-fusion", LoopFusePass()) FUNCTION_PASS("loop-distribute", LoopDistributePass()) FUNCTION_PASS("loop-versioning", LoopVersioningPass()) +FUNCTION_PASS("objc-arc", ObjCARCOptPass()) +FUNCTION_PASS("objc-arc-contract", ObjCARCContractPass()) FUNCTION_PASS("objc-arc-expand", ObjCARCExpandPass()) FUNCTION_PASS("pgo-memop-opt", PGOMemOPSizeOpt()) FUNCTION_PASS("print", PrintFunctionPass(dbgs())) Index: llvm/include/llvm/Transforms/ObjCARC.h =================================================================== --- llvm/include/llvm/Transforms/ObjCARC.h +++ llvm/include/llvm/Transforms/ObjCARC.h @@ -45,11 +45,11 @@ Pass *createObjCARCOptPass(); struct ObjCARCOptPass : public PassInfoMixin<ObjCARCOptPass> { - PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); + PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); }; struct ObjCARCContractPass : public PassInfoMixin<ObjCARCContractPass> { - PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); + PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); }; struct ObjCARCAPElimPass : public PassInfoMixin<ObjCARCAPElimPass> { Index: clang/lib/CodeGen/BackendUtil.cpp =================================================================== --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -1199,6 +1199,25 @@ bool IsThinLTO = CodeGenOpts.PrepareForThinLTO; bool IsLTO = CodeGenOpts.PrepareForLTO; + if (LangOpts.ObjCAutoRefCount) { + PB.registerPipelineStartEPCallback( + [](ModulePassManager &MPM, PassBuilder::OptimizationLevel Level) { + if (Level != PassBuilder::OptimizationLevel::O0) + MPM.addPass( + createModuleToFunctionPassAdaptor(ObjCARCExpandPass())); + }); + PB.registerPipelineEarlySimplificationEPCallback( + [](ModulePassManager &MPM, PassBuilder::OptimizationLevel Level) { + if (Level != PassBuilder::OptimizationLevel::O0) + MPM.addPass(ObjCARCAPElimPass()); + }); + PB.registerScalarOptimizerLateEPCallback( + [](FunctionPassManager &FPM, PassBuilder::OptimizationLevel Level) { + if (Level != PassBuilder::OptimizationLevel::O0) + FPM.addPass(ObjCARCOptPass()); + }); + } + // If we reached here with a non-empty index file name, then the index // file was empty and we are not performing ThinLTO backend compilation // (used in testing in a distributed build environment). Drop any the type
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits