diff --git a/src/Reactor/LLVMJIT.cpp b/src/Reactor/LLVMJIT.cpp
index a217b92..9590820 100644
--- a/src/Reactor/LLVMJIT.cpp
+++ b/src/Reactor/LLVMJIT.cpp
@@ -31,6 +31,7 @@
 #include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"
 #include "llvm/ExecutionEngine/SectionMemoryManager.h"
 #include "llvm/IR/DiagnosticInfo.h"
+#include "llvm/IR/Verifier.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Host.h"
 #include "llvm/Support/TargetSelect.h"
@@ -52,7 +53,9 @@
 #	include "llvm/Transforms/Scalar/SimplifyCFG.h"
 #else  // Legacy pass manager
 #	include "llvm/IR/LegacyPassManager.h"
-#	include "llvm/Transforms/Scalar.h"
+#	include "llvm/Pass.h"
+#	include "llvm/Transforms/Coroutines.h"
+#	include "llvm/Transforms/IPO.h"
 #endif
 
 #ifdef _MSC_VER
@@ -854,8 +857,46 @@
 	}
 }
 
-void JITBuilder::optimize(const rr::Config &cfg)
+void JITBuilder::runPasses(const rr::Config &cfg)
 {
+	if(coroutine.id)  // Run manadory coroutine transforms.
+	{
+#if LLVM_VERSION_MAJOR >= 13  // New pass manager
+		llvm::PassBuilder pb;
+		llvm::LoopAnalysisManager lam;
+		llvm::FunctionAnalysisManager fam;
+		llvm::CGSCCAnalysisManager cgam;
+		llvm::ModuleAnalysisManager mam;
+
+		pb.registerModuleAnalyses(mam);
+		pb.registerCGSCCAnalyses(cgam);
+		pb.registerFunctionAnalyses(fam);
+		pb.registerLoopAnalyses(lam);
+		pb.crossRegisterProxies(lam, fam, cgam, mam);
+
+		llvm::ModulePassManager mpm =
+		    pb.buildO0DefaultPipeline(llvm::OptimizationLevel::O0);
+		mpm.run(*module, mam);
+#else  // Legacy pass manager
+		llvm::legacy::PassManager pm;
+
+		pm.add(llvm::createCoroEarlyLegacyPass());
+		pm.add(llvm::createCoroSplitLegacyPass());
+		pm.add(llvm::createCoroElideLegacyPass());
+		pm.add(llvm::createBarrierNoopPass());
+		pm.add(llvm::createCoroCleanupLegacyPass());
+
+		pm.run(*module);
+#endif
+	}
+
+#if defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
+	if(llvm::verifyModule(*module, &llvm::errs()))
+	{
+		llvm::report_fatal_error("Invalid LLVM module");
+	}
+#endif
+
 #ifdef ENABLE_RR_DEBUG_INFO
 	if(debugInfo != nullptr)
 	{
@@ -892,8 +933,9 @@
 		{
 		case rr::Optimization::Pass::Disabled: break;
 		case rr::Optimization::Pass::CFGSimplification: fpm.addPass(llvm::SimplifyCFGPass()); break;
-		case rr::Optimization::Pass::LICM: fpm.addPass(llvm::createFunctionToLoopPassAdaptor(
-			llvm::LICMPass(llvm::SetLicmMssaOptCap, llvm::SetLicmMssaNoAccForPromotionCap, true)));
+		case rr::Optimization::Pass::LICM:
+			fpm.addPass(llvm::createFunctionToLoopPassAdaptor(
+			    llvm::LICMPass(llvm::SetLicmMssaOptCap, llvm::SetLicmMssaNoAccForPromotionCap, true)));
 			break;
 		case rr::Optimization::Pass::AggressiveDCE: fpm.addPass(llvm::ADCEPass()); break;
 		case rr::Optimization::Pass::GVN: fpm.addPass(llvm::GVNPass()); break;
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 33904af..c958c8b 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -23,23 +23,9 @@
 
 #include "llvm/IR/Intrinsics.h"
 #include "llvm/IR/IntrinsicsX86.h"
-#include "llvm/IR/Verifier.h"
-#include "llvm/Pass.h"
 #include "llvm/Support/Alignment.h"
+#include "llvm/Support/Error.h"
 #include "llvm/Support/ManagedStatic.h"
-#include "llvm/Transforms/Coroutines.h"
-#include "llvm/Transforms/IPO.h"
-#include "llvm/Transforms/Scalar.h"
-
-#if LLVM_VERSION_MAJOR >= 13  // New pass manager
-#	include "llvm/Passes/PassBuilder.h"
-#else  // Legacy pass manager
-#	include "llvm/IR/LegacyPassManager.h"
-#	include "llvm/Pass.h"
-#	include "llvm/Transforms/Coroutines.h"
-#	include "llvm/Transforms/IPO.h"
-#	include "llvm/Transforms/Scalar.h"
-#endif
 
 #include <fstream>
 #include <iostream>
@@ -622,14 +608,7 @@
 			jit->module->print(file, 0);
 		}
 
-#if defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
-		if(llvm::verifyModule(*jit->module, &llvm::errs()))
-		{
-			llvm::report_fatal_error("Invalid LLVM module");
-		}
-#endif  // defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
-
-		jit->optimize(cfg);
+		jit->runPasses(cfg);
 
 		if(false)
 		{
@@ -4364,8 +4343,7 @@
 
 std::shared_ptr<Routine> Nucleus::acquireCoroutine(const char *name, const Config::Edit *cfgEdit /* = nullptr */)
 {
-	bool isCoroutine = jit->coroutine.id != nullptr;
-	if(isCoroutine)
+	if(jit->coroutine.id)
 	{
 		jit->builder->CreateBr(jit->coroutine.endBlock);
 	}
@@ -4397,51 +4375,12 @@
 		jit->module->print(file, 0);
 	}
 
-	if(isCoroutine)
-	{
-#if LLVM_VERSION_MAJOR >= 13  // New pass manager
-		llvm::PassBuilder pb;
-		llvm::LoopAnalysisManager lam;
-		llvm::FunctionAnalysisManager fam;
-		llvm::CGSCCAnalysisManager cgam;
-		llvm::ModuleAnalysisManager mam;
-
-		pb.registerModuleAnalyses(mam);
-		pb.registerCGSCCAnalyses(cgam);
-		pb.registerFunctionAnalyses(fam);
-		pb.registerLoopAnalyses(lam);
-		pb.crossRegisterProxies(lam, fam, cgam, mam);
-
-		llvm::ModulePassManager mpm =
-		    pb.buildO0DefaultPipeline(llvm::OptimizationLevel::O0);
-		mpm.run(*jit->module, mam);
-#else
-		// Run manadory coroutine transforms.
-		llvm::legacy::PassManager pm;
-
-		pm.add(llvm::createCoroEarlyLegacyPass());
-		pm.add(llvm::createCoroSplitLegacyPass());
-		pm.add(llvm::createCoroElideLegacyPass());
-		pm.add(llvm::createBarrierNoopPass());
-		pm.add(llvm::createCoroCleanupLegacyPass());
-
-		pm.run(*jit->module);
-#endif
-	}
-
-#if defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
-	if(llvm::verifyModule(*jit->module, &llvm::errs()))
-	{
-		llvm::report_fatal_error("Invalid LLVM module");
-	}
-#endif  // defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG)
-
 	Config cfg = jit->config;
 	if(cfgEdit)
 	{
 		cfg = cfgEdit->apply(jit->config);
 	}
-	jit->optimize(cfg);
+	jit->runPasses(cfg);
 
 	if(false)
 	{
diff --git a/src/Reactor/LLVMReactor.hpp b/src/Reactor/LLVMReactor.hpp
index 54a44c3..dad54a7 100644
--- a/src/Reactor/LLVMReactor.hpp
+++ b/src/Reactor/LLVMReactor.hpp
@@ -90,7 +90,7 @@
 public:
 	JITBuilder(const rr::Config &config);
 
-	void optimize(const rr::Config &cfg);
+	void runPasses(const rr::Config &cfg);
 
 	std::shared_ptr<rr::Routine> acquireRoutine(const char *name, llvm::Function **funcs, size_t count, const rr::Config &cfg);
 
