Skip to content

Commit 1579e9c

Browse files
committed
Revert "Run ObjCContractPass in Default Codegen Pipeline (#92331)"
This reverts commit 8cc8e5d. This reverts commit dae55c8. Causes major compile-time regressions for unoptimized builds.
1 parent 7c220c4 commit 1579e9c

21 files changed

+37
-119
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,12 @@ bool EmitAssemblyHelper::AddEmitPasses(legacy::PassManager &CodeGenPasses,
587587
// this also adds codegenerator level optimization passes.
588588
CodeGenFileType CGFT = getCodeGenFileType(Action);
589589

590+
// Add ObjC ARC final-cleanup optimizations. This is done as part of the
591+
// "codegen" passes so that it isn't run multiple times when there is
592+
// inlining happening.
593+
if (CodeGenOpts.OptimizationLevel > 0)
594+
CodeGenPasses.add(createObjCARCContractPass());
595+
590596
if (TM->addPassesToEmitFile(CodeGenPasses, OS, DwoOS, CGFT,
591597
/*DisableVerify=*/!CodeGenOpts.VerifyModule)) {
592598
Diags.Report(diag::err_fe_unable_to_interface_with_target);

clang/test/CodeGen/thinlto-distributed-objc-contract-pass.ll

Lines changed: 0 additions & 19 deletions
This file was deleted.

lld/MachO/LTO.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ static lto::Config createConfig() {
4848
c.CPU = getCPUStr();
4949
c.MAttrs = getMAttrs();
5050
c.DiagHandler = diagnosticHandler;
51+
c.PreCodeGenPassesHook = [](legacy::PassManager &pm) {
52+
pm.add(createObjCARCContractPass());
53+
};
5154

5255
c.AlwaysEmitRegularLTOObj = !config->ltoObjPath.empty();
5356

llvm/include/llvm/Analysis/ObjCARCAnalysisUtils.h

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -41,26 +41,26 @@ extern bool EnableARCOpts;
4141
/// Test if the given module looks interesting to run ARC optimization
4242
/// on.
4343
inline bool ModuleHasARC(const Module &M) {
44-
return M.getNamedValue("llvm.objc.retain") ||
45-
M.getNamedValue("llvm.objc.release") ||
46-
M.getNamedValue("llvm.objc.autorelease") ||
47-
M.getNamedValue("llvm.objc.retainAutoreleasedReturnValue") ||
48-
M.getNamedValue("llvm.objc.unsafeClaimAutoreleasedReturnValue") ||
49-
M.getNamedValue("llvm.objc.retainBlock") ||
50-
M.getNamedValue("llvm.objc.autoreleaseReturnValue") ||
51-
M.getNamedValue("llvm.objc.autoreleasePoolPush") ||
52-
M.getNamedValue("llvm.objc.loadWeakRetained") ||
53-
M.getNamedValue("llvm.objc.loadWeak") ||
54-
M.getNamedValue("llvm.objc.destroyWeak") ||
55-
M.getNamedValue("llvm.objc.storeWeak") ||
56-
M.getNamedValue("llvm.objc.initWeak") ||
57-
M.getNamedValue("llvm.objc.moveWeak") ||
58-
M.getNamedValue("llvm.objc.copyWeak") ||
59-
M.getNamedValue("llvm.objc.retainedObject") ||
60-
M.getNamedValue("llvm.objc.unretainedObject") ||
61-
M.getNamedValue("llvm.objc.unretainedPointer") ||
62-
M.getNamedValue("llvm.objc.clang.arc.noop.use") ||
63-
M.getNamedValue("llvm.objc.clang.arc.use");
44+
return
45+
M.getNamedValue("llvm.objc.retain") ||
46+
M.getNamedValue("llvm.objc.release") ||
47+
M.getNamedValue("llvm.objc.autorelease") ||
48+
M.getNamedValue("llvm.objc.retainAutoreleasedReturnValue") ||
49+
M.getNamedValue("llvm.objc.unsafeClaimAutoreleasedReturnValue") ||
50+
M.getNamedValue("llvm.objc.retainBlock") ||
51+
M.getNamedValue("llvm.objc.autoreleaseReturnValue") ||
52+
M.getNamedValue("llvm.objc.autoreleasePoolPush") ||
53+
M.getNamedValue("llvm.objc.loadWeakRetained") ||
54+
M.getNamedValue("llvm.objc.loadWeak") ||
55+
M.getNamedValue("llvm.objc.destroyWeak") ||
56+
M.getNamedValue("llvm.objc.storeWeak") ||
57+
M.getNamedValue("llvm.objc.initWeak") ||
58+
M.getNamedValue("llvm.objc.moveWeak") ||
59+
M.getNamedValue("llvm.objc.copyWeak") ||
60+
M.getNamedValue("llvm.objc.retainedObject") ||
61+
M.getNamedValue("llvm.objc.unretainedObject") ||
62+
M.getNamedValue("llvm.objc.unretainedPointer") ||
63+
M.getNamedValue("llvm.objc.clang.arc.use");
6464
}
6565

6666
/// This is a wrapper around getUnderlyingObject which also knows how to

llvm/lib/CodeGen/TargetPassConfig.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
#include "llvm/Support/WithColor.h"
4747
#include "llvm/Target/CGPassBuilderOption.h"
4848
#include "llvm/Target/TargetMachine.h"
49-
#include "llvm/Transforms/ObjCARC.h"
5049
#include "llvm/Transforms/Scalar.h"
5150
#include "llvm/Transforms/Utils.h"
5251
#include <cassert>
@@ -947,8 +946,6 @@ void TargetPassConfig::addCodeGenPrepare() {
947946
void TargetPassConfig::addISelPrepare() {
948947
addPreISel();
949948

950-
addPass(createObjCARCContractPass());
951-
952949
// Force codegen to run according to the callgraph.
953950
if (requiresCodeGenSCCOrder())
954951
addPass(new DummyCGSCCPass);

llvm/lib/LTO/LTOCodeGenerator.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ LTOCodeGenerator::LTOCodeGenerator(LLVMContext &Context)
137137

138138
Config.CodeModel = std::nullopt;
139139
Config.StatsFile = LTOStatsFile;
140+
Config.PreCodeGenPassesHook = [](legacy::PassManager &PM) {
141+
PM.add(createObjCARCContractPass());
142+
};
143+
140144
Config.RunCSIRInstr = LTORunCSIRInstr;
141145
Config.CSIRProfile = LTOCSIRProfile;
142146
}

llvm/lib/LTO/ThinLTOCodeGenerator.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,10 @@ std::unique_ptr<MemoryBuffer> codegenModule(Module &TheModule,
334334
raw_svector_ostream OS(OutputBuffer);
335335
legacy::PassManager PM;
336336

337+
// If the bitcode files contain ARC code and were compiled with optimization,
338+
// the ObjCARCContractPass must be run, so do it unconditionally here.
339+
PM.add(createObjCARCContractPass());
340+
337341
// Setup the codegen now.
338342
if (TM.addPassesToEmitFile(PM, OS, nullptr, CodeGenFileType::ObjectFile,
339343
/* DisableVerify */ true))

llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,6 @@ class ObjCARCContract {
7171
ARCRuntimeEntryPoints EP;
7272
BundledRetainClaimRVs *BundledInsts = nullptr;
7373

74-
/// A flag indicating whether this optimization pass should run.
75-
bool Run;
76-
7774
/// The inline asm string to insert between calls and RetainRV calls to make
7875
/// the optimization work on targets which need it.
7976
const MDString *RVInstMarker;
@@ -530,10 +527,6 @@ bool ObjCARCContract::tryToPeepholeInstruction(
530527
//===----------------------------------------------------------------------===//
531528

532529
bool ObjCARCContract::init(Module &M) {
533-
Run = ModuleHasARC(M);
534-
if (!Run)
535-
return false;
536-
537530
EP.init(&M);
538531

539532
// Initialize RVInstMarker.
@@ -546,9 +539,6 @@ bool ObjCARCContract::run(Function &F, AAResults *A, DominatorTree *D) {
546539
if (!EnableARCOpts)
547540
return false;
548541

549-
if (!Run)
550-
return false;
551-
552542
Changed = CFGChanged = false;
553543
AA = A;
554544
DT = D;

llvm/test/CodeGen/AArch64/O0-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@
3131
; CHECK-NEXT: AArch64 Stack Tagging
3232
; CHECK-NEXT: SME ABI Pass
3333
; CHECK-NEXT: Exception handling preparation
34-
; CHECK-NEXT: Dominator Tree Construction
35-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
36-
; CHECK-NEXT: Function Alias Analysis Results
37-
; CHECK-NEXT: ObjC ARC contraction
3834
; CHECK-NEXT: Prepare callbr
3935
; CHECK-NEXT: Safe Stack instrumentation pass
4036
; CHECK-NEXT: Insert stack protectors

llvm/test/CodeGen/AArch64/O3-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,6 @@
103103
; CHECK-NEXT: Dominator Tree Construction
104104
; CHECK-NEXT: FunctionPass Manager
105105
; CHECK-NEXT: Merge internal globals
106-
; CHECK-NEXT: Dominator Tree Construction
107-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
108-
; CHECK-NEXT: Function Alias Analysis Results
109-
; CHECK-NEXT: ObjC ARC contraction
110106
; CHECK-NEXT: Prepare callbr
111107
; CHECK-NEXT: Safe Stack instrumentation pass
112108
; CHECK-NEXT: Insert stack protectors

llvm/test/CodeGen/AMDGPU/llc-pipeline.ll

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,6 @@
8787
; GCN-O0-NEXT: AMDGPU Rewrite Undef for PHI
8888
; GCN-O0-NEXT: LCSSA Verifier
8989
; GCN-O0-NEXT: Loop-Closed SSA Form Pass
90-
; GCN-O0-NEXT: Basic Alias Analysis (stateless AA impl)
91-
; GCN-O0-NEXT: Function Alias Analysis Results
92-
; GCN-O0-NEXT: ObjC ARC contraction
9390
; GCN-O0-NEXT: DummyCGSCCPass
9491
; GCN-O0-NEXT: FunctionPass Manager
9592
; GCN-O0-NEXT: Prepare callbr
@@ -285,9 +282,6 @@
285282
; GCN-O1-NEXT: AMDGPU Rewrite Undef for PHI
286283
; GCN-O1-NEXT: LCSSA Verifier
287284
; GCN-O1-NEXT: Loop-Closed SSA Form Pass
288-
; GCN-O1-NEXT: Basic Alias Analysis (stateless AA impl)
289-
; GCN-O1-NEXT: Function Alias Analysis Results
290-
; GCN-O1-NEXT: ObjC ARC contraction
291285
; GCN-O1-NEXT: DummyCGSCCPass
292286
; GCN-O1-NEXT: FunctionPass Manager
293287
; GCN-O1-NEXT: Prepare callbr
@@ -583,9 +577,6 @@
583577
; GCN-O1-OPTS-NEXT: AMDGPU Rewrite Undef for PHI
584578
; GCN-O1-OPTS-NEXT: LCSSA Verifier
585579
; GCN-O1-OPTS-NEXT: Loop-Closed SSA Form Pass
586-
; GCN-O1-OPTS-NEXT: Basic Alias Analysis (stateless AA impl)
587-
; GCN-O1-OPTS-NEXT: Function Alias Analysis Results
588-
; GCN-O1-OPTS-NEXT: ObjC ARC contraction
589580
; GCN-O1-OPTS-NEXT: DummyCGSCCPass
590581
; GCN-O1-OPTS-NEXT: FunctionPass Manager
591582
; GCN-O1-OPTS-NEXT: Prepare callbr
@@ -894,11 +885,6 @@
894885
; GCN-O2-NEXT: LCSSA Verifier
895886
; GCN-O2-NEXT: Loop-Closed SSA Form Pass
896887
; GCN-O2-NEXT: Analysis if a function is memory bound
897-
; GCN-O2-NEXT: FunctionPass Manager
898-
; GCN-O2-NEXT: Dominator Tree Construction
899-
; GCN-O2-NEXT: Basic Alias Analysis (stateless AA impl)
900-
; GCN-O2-NEXT: Function Alias Analysis Results
901-
; GCN-O2-NEXT: ObjC ARC contraction
902888
; GCN-O2-NEXT: DummyCGSCCPass
903889
; GCN-O2-NEXT: FunctionPass Manager
904890
; GCN-O2-NEXT: Prepare callbr
@@ -1220,11 +1206,6 @@
12201206
; GCN-O3-NEXT: LCSSA Verifier
12211207
; GCN-O3-NEXT: Loop-Closed SSA Form Pass
12221208
; GCN-O3-NEXT: Analysis if a function is memory bound
1223-
; GCN-O3-NEXT: FunctionPass Manager
1224-
; GCN-O3-NEXT: Dominator Tree Construction
1225-
; GCN-O3-NEXT: Basic Alias Analysis (stateless AA impl)
1226-
; GCN-O3-NEXT: Function Alias Analysis Results
1227-
; GCN-O3-NEXT: ObjC ARC contraction
12281209
; GCN-O3-NEXT: DummyCGSCCPass
12291210
; GCN-O3-NEXT: FunctionPass Manager
12301211
; GCN-O3-NEXT: Prepare callbr

llvm/test/CodeGen/ARM/O3-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,6 @@
6565
; CHECK-NEXT: Transform predicated vector loops to use MVE tail predication
6666
; CHECK-NEXT: A No-Op Barrier Pass
6767
; CHECK-NEXT: FunctionPass Manager
68-
; CHECK-NEXT: Dominator Tree Construction
69-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
70-
; CHECK-NEXT: Function Alias Analysis Results
71-
; CHECK-NEXT: ObjC ARC contraction
7268
; CHECK-NEXT: Prepare callbr
7369
; CHECK-NEXT: Safe Stack instrumentation pass
7470
; CHECK-NEXT: Insert stack protectors

llvm/test/CodeGen/LoongArch/O0-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@
3131
; CHECK-NEXT: Scalarize Masked Memory Intrinsics
3232
; CHECK-NEXT: Expand reduction intrinsics
3333
; CHECK-NEXT: Exception handling preparation
34-
; CHECK-NEXT: Dominator Tree Construction
35-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
36-
; CHECK-NEXT: Function Alias Analysis Results
37-
; CHECK-NEXT: ObjC ARC contraction
3834
; CHECK-NEXT: Prepare callbr
3935
; CHECK-NEXT: Safe Stack instrumentation pass
4036
; CHECK-NEXT: Insert stack protectors

llvm/test/CodeGen/LoongArch/opt-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,10 @@
7070
; LAXX-NEXT: CodeGen Prepare
7171
; LAXX-NEXT: Dominator Tree Construction
7272
; LAXX-NEXT: Exception handling preparation
73-
; LAXX-NEXT: Basic Alias Analysis (stateless AA impl)
74-
; LAXX-NEXT: Function Alias Analysis Results
75-
; LAXX-NEXT: ObjC ARC contraction
7673
; LAXX-NEXT: Prepare callbr
7774
; LAXX-NEXT: Safe Stack instrumentation pass
7875
; LAXX-NEXT: Insert stack protectors
7976
; LAXX-NEXT: Module Verifier
80-
; LAXX-NEXT: Dominator Tree Construction
8177
; LAXX-NEXT: Basic Alias Analysis (stateless AA impl)
8278
; LAXX-NEXT: Function Alias Analysis Results
8379
; LAXX-NEXT: Natural Loop Information

llvm/test/CodeGen/M68k/pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,10 @@
4141
; CHECK-NEXT: CodeGen Prepare
4242
; CHECK-NEXT: Dominator Tree Construction
4343
; CHECK-NEXT: Exception handling preparation
44-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
45-
; CHECK-NEXT: Function Alias Analysis Results
46-
; CHECK-NEXT: ObjC ARC contraction
4744
; CHECK-NEXT: Prepare callbr
4845
; CHECK-NEXT: Safe Stack instrumentation pass
4946
; CHECK-NEXT: Insert stack protectors
5047
; CHECK-NEXT: Module Verifier
51-
; CHECK-NEXT: Dominator Tree Construction
5248
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
5349
; CHECK-NEXT: Function Alias Analysis Results
5450
; CHECK-NEXT: Natural Loop Information

llvm/test/CodeGen/PowerPC/O0-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@
3030
; CHECK-NEXT: Scalarize Masked Memory Intrinsics
3131
; CHECK-NEXT: Expand reduction intrinsics
3232
; CHECK-NEXT: Exception handling preparation
33-
; CHECK-NEXT: Dominator Tree Construction
34-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
35-
; CHECK-NEXT: Function Alias Analysis Results
36-
; CHECK-NEXT: ObjC ARC contraction
3733
; CHECK-NEXT: Prepare callbr
3834
; CHECK-NEXT: Safe Stack instrumentation pass
3935
; CHECK-NEXT: Insert stack protectors

llvm/test/CodeGen/PowerPC/O3-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,10 @@
8282
; CHECK-NEXT: Lazy Block Frequency Analysis
8383
; CHECK-NEXT: Optimization Remark Emitter
8484
; CHECK-NEXT: Hardware Loop Insertion
85-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
86-
; CHECK-NEXT: Function Alias Analysis Results
87-
; CHECK-NEXT: ObjC ARC contraction
8885
; CHECK-NEXT: Prepare callbr
8986
; CHECK-NEXT: Safe Stack instrumentation pass
9087
; CHECK-NEXT: Insert stack protectors
9188
; CHECK-NEXT: Module Verifier
92-
; CHECK-NEXT: Dominator Tree Construction
9389
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
9490
; CHECK-NEXT: Function Alias Analysis Results
9591
; CHECK-NEXT: Natural Loop Information

llvm/test/CodeGen/RISCV/O0-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@
3131
; CHECK-NEXT: Scalarize Masked Memory Intrinsics
3232
; CHECK-NEXT: Expand reduction intrinsics
3333
; CHECK-NEXT: Exception handling preparation
34-
; CHECK-NEXT: Dominator Tree Construction
35-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
36-
; CHECK-NEXT: Function Alias Analysis Results
37-
; CHECK-NEXT: ObjC ARC contraction
3834
; CHECK-NEXT: Prepare callbr
3935
; CHECK-NEXT: Safe Stack instrumentation pass
4036
; CHECK-NEXT: Insert stack protectors

llvm/test/CodeGen/RISCV/O3-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,6 @@
7474
; CHECK-NEXT: Exception handling preparation
7575
; CHECK-NEXT: A No-Op Barrier Pass
7676
; CHECK-NEXT: FunctionPass Manager
77-
; CHECK-NEXT: Dominator Tree Construction
78-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
79-
; CHECK-NEXT: Function Alias Analysis Results
80-
; CHECK-NEXT: ObjC ARC contraction
8177
; CHECK-NEXT: Prepare callbr
8278
; CHECK-NEXT: Safe Stack instrumentation pass
8379
; CHECK-NEXT: Insert stack protectors

llvm/test/CodeGen/X86/O0-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,6 @@
3232
; CHECK-NEXT: Expand reduction intrinsics
3333
; CHECK-NEXT: Expand indirectbr instructions
3434
; CHECK-NEXT: Exception handling preparation
35-
; CHECK-NEXT: Dominator Tree Construction
36-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
37-
; CHECK-NEXT: Function Alias Analysis Results
38-
; CHECK-NEXT: ObjC ARC contraction
3935
; CHECK-NEXT: Prepare callbr
4036
; CHECK-NEXT: Safe Stack instrumentation pass
4137
; CHECK-NEXT: Insert stack protectors

llvm/test/CodeGen/X86/opt-pipeline.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,10 @@
7272
; CHECK-NEXT: CodeGen Prepare
7373
; CHECK-NEXT: Dominator Tree Construction
7474
; CHECK-NEXT: Exception handling preparation
75-
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
76-
; CHECK-NEXT: Function Alias Analysis Results
77-
; CHECK-NEXT: ObjC ARC contraction
7875
; CHECK-NEXT: Prepare callbr
7976
; CHECK-NEXT: Safe Stack instrumentation pass
8077
; CHECK-NEXT: Insert stack protectors
8178
; CHECK-NEXT: Module Verifier
82-
; CHECK-NEXT: Dominator Tree Construction
8379
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
8480
; CHECK-NEXT: Function Alias Analysis Results
8581
; CHECK-NEXT: Natural Loop Information

0 commit comments

Comments
 (0)