@@ -597,6 +597,16 @@ struct SILOptOptions {
597597 " enable-address-dependencies" ,
598598 llvm::cl::desc (" Enable enforcement of lifetime dependencies on addressable values." ));
599599
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+
600610 llvm::cl::opt<bool > MergeableTraps = llvm::cl::opt<bool >(
601611 " mergeable-traps" ,
602612 llvm::cl::desc (" Enable cond_fail merging." ));
@@ -918,6 +928,10 @@ int sil_opt_main(ArrayRef<const char *> argv, void *MainAddr) {
918928 options.EnablePackMetadataStackPromotion ;
919929
920930 SILOpts.EnableAddressDependencies = options.EnableAddressDependencies ;
931+ if (options.EnableCalleeAllocatedCoroAbi )
932+ SILOpts.CoroutineAccessorsUseYieldOnce2 = true ;
933+ if (options.DisableCalleeAllocatedCoroAbi )
934+ SILOpts.CoroutineAccessorsUseYieldOnce2 = false ;
921935 SILOpts.MergeableTraps = options.MergeableTraps ;
922936
923937 if (options.OptModeFlag == OptimizationMode::NotSet) {
0 commit comments