@@ -55,6 +55,12 @@ static llvm::cl::opt<bool> SILViewSILGenCFG(
55
55
" sil-view-silgen-cfg" , llvm::cl::init(false ),
56
56
llvm::cl::desc(" Enable the sil cfg viewer pass before diagnostics" ));
57
57
58
+
59
+ llvm::cl::opt<bool > SILDisableLateOMEByDefault (
60
+ " sil-disable-late-ome-by-default" , llvm::cl::init(false ),
61
+ llvm::cl::desc(
62
+ " Disable late OME for non-transparent functions by default" ));
63
+
58
64
// ===----------------------------------------------------------------------===//
59
65
// Diagnostic Pass Pipeline
60
66
// ===----------------------------------------------------------------------===//
@@ -518,6 +524,13 @@ static void addPerfEarlyModulePassPipeline(SILPassPipelinePlan &P) {
518
524
// not blocked by any other passes' optimizations, so do it early.
519
525
P.addDifferentiabilityWitnessDevirtualizer ();
520
526
527
+ if (!P.getOptions ().EnableOSSAModules && SILDisableLateOMEByDefault) {
528
+ if (P.getOptions ().StopOptimizationBeforeLoweringOwnership )
529
+ return ;
530
+
531
+ P.addNonTransparentFunctionOwnershipModelEliminator ();
532
+ }
533
+
521
534
// Start by linking in referenced functions from other modules.
522
535
P.addPerformanceSILLinker ();
523
536
@@ -530,18 +543,12 @@ static void addPerfEarlyModulePassPipeline(SILPassPipelinePlan &P) {
530
543
// optimization.
531
544
P.addGlobalOpt ();
532
545
533
- // Strip ownership from non-transparent functions when we are not compiling
534
- // the stdlib module. When compiling the stdlib, we eliminate ownership on
535
- // these functions later with a nromal call to
536
- // P.addNonTransparentFunctionOwnershipModelEliminator().
537
- //
538
- // This is done so we can push ownership through the pass pipeline first for
539
- // the stdlib and then everything else.
540
- if (P.getOptions ().StopOptimizationBeforeLoweringOwnership )
541
- return ;
546
+ if (!P.getOptions ().EnableOSSAModules && !SILDisableLateOMEByDefault) {
547
+ if (P.getOptions ().StopOptimizationBeforeLoweringOwnership )
548
+ return ;
542
549
543
- if (!P.getOptions ().EnableOSSAModules )
544
550
P.addNonTransparentFunctionOwnershipModelEliminator ();
551
+ }
545
552
546
553
// Add the outliner pass (Osize).
547
554
P.addOutliner ();
0 commit comments