@@ -597,6 +597,16 @@ struct SILOptOptions {
597
597
" enable-address-dependencies" ,
598
598
llvm::cl::desc (" Enable enforcement of lifetime dependencies on addressable values." ));
599
599
600
+ llvm::cl::opt<bool > EnableCalleeAllocatedCoroAbi = llvm::cl::opt<bool >(
601
+ " enable-callee-allocated-coro-abi" ,
602
+ llvm::cl::desc (" Override per-platform settings and use yield_once_2." ),
603
+ llvm::cl::init(false ));
604
+ llvm::cl::opt<bool > DisableCalleeAllocatedCoroAbi = llvm::cl::opt<bool >(
605
+ " disable-callee-allocated-coro-abi" ,
606
+ llvm::cl::desc (
607
+ " Override per-platform settings and don't use yield_once_2." ),
608
+ llvm::cl::init(false ));
609
+
600
610
llvm::cl::opt<bool > MergeableTraps = llvm::cl::opt<bool >(
601
611
" mergeable-traps" ,
602
612
llvm::cl::desc (" Enable cond_fail merging." ));
@@ -918,6 +928,10 @@ int sil_opt_main(ArrayRef<const char *> argv, void *MainAddr) {
918
928
options.EnablePackMetadataStackPromotion ;
919
929
920
930
SILOpts.EnableAddressDependencies = options.EnableAddressDependencies ;
931
+ if (options.EnableCalleeAllocatedCoroAbi )
932
+ SILOpts.CoroutineAccessorsUseYieldOnce2 = true ;
933
+ if (options.DisableCalleeAllocatedCoroAbi )
934
+ SILOpts.CoroutineAccessorsUseYieldOnce2 = false ;
921
935
SILOpts.MergeableTraps = options.MergeableTraps ;
922
936
923
937
if (options.OptModeFlag == OptimizationMode::NotSet) {
0 commit comments