diff --git a/include/xo/jit/IrPipeline.hpp b/include/xo/jit/IrPipeline.hpp index 7efd5b4f..60473bc5 100644 --- a/include/xo/jit/IrPipeline.hpp +++ b/include/xo/jit/IrPipeline.hpp @@ -28,6 +28,7 @@ #include "llvm/Transforms/InstCombine/InstCombine.h" #include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Scalar/GVN.h" +#include "llvm/Transforms/Utils/Mem2Reg.h" #include "llvm/Transforms/Scalar/Reassociate.h" #include "llvm/Transforms/Scalar/SimplifyCFG.h" diff --git a/src/jit/IrPipeline.cpp b/src/jit/IrPipeline.cpp index d08d9639..285edbe3 100644 --- a/src/jit/IrPipeline.cpp +++ b/src/jit/IrPipeline.cpp @@ -24,6 +24,13 @@ namespace xo { /** transform passes **/ this->llvm_fpmgr_->addPass(llvm::InstCombinePass()); + + /* NOTE: llvm 19 adds mem2reg transform here. + * speculating that PromotePass() does same/goodenough thing in llvm 18. + * This pays off, works first try! + */ + this->llvm_fpmgr_->addPass(llvm::PromotePass()); + this->llvm_fpmgr_->addPass(llvm::ReassociatePass()); this->llvm_fpmgr_->addPass(llvm::GVNPass()); this->llvm_fpmgr_->addPass(llvm::SimplifyCFGPass());