Skip to content

Commit 548a33d

Browse files
committed
updating the enzyme submodule and wrapper, get llvm major version automatically
1 parent f5f7050 commit 548a33d

File tree

4 files changed

+26
-20
lines changed

4 files changed

+26
-20
lines changed

Diff for: compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -692,9 +692,12 @@ struct LLVMRustSanitizerOptions {
692692
bool SanitizeKernelAddressRecover;
693693
};
694694

695-
// This symbol won't be available or used when Enzyme is not enabled
695+
// This symbol won't be available or used when Enzyme is not enabled.
696+
// Always set AugmentPassBuilder to true, since it registers optimizations which
697+
// will improve the performance for Enzyme.
696698
#ifdef ENZYME
697-
extern "C" void registerEnzyme(llvm::PassBuilder &PB);
699+
extern "C" void registerEnzymeAndPassPipeline(llvm::PassBuilder &PB,
700+
/* augmentPassBuilder */ bool);
698701
#endif
699702

700703
extern "C" LLVMRustResult LLVMRustOptimize(
@@ -1023,7 +1026,7 @@ extern "C" LLVMRustResult LLVMRustOptimize(
10231026
// now load "-enzyme" pass:
10241027
#ifdef ENZYME
10251028
if (RunEnzyme) {
1026-
registerEnzyme(PB);
1029+
registerEnzymeAndPassPipeline(PB, true);
10271030
if (auto Err = PB.parsePassPipeline(MPM, "enzyme")) {
10281031
std::string ErrMsg = toString(std::move(Err));
10291032
LLVMRustSetLastError(ErrMsg.c_str());

Diff for: src/bootstrap/src/core/build_steps/compile.rs

+17-11
Original file line numberDiff line numberDiff line change
@@ -2035,17 +2035,23 @@ impl Step for Assemble {
20352035

20362036
// Build enzyme
20372037
if builder.config.llvm_enzyme {
2038-
debug!("`llvm_enzyme` requested");
2039-
let enzyme_install = builder.ensure(llvm::Enzyme { target: build_compiler.host });
2040-
let lib_ext = std::env::consts::DLL_EXTENSION;
2041-
let src_lib = enzyme_install.join("build/Enzyme/libEnzyme-19").with_extension(lib_ext);
2042-
let libdir = builder.sysroot_target_libdir(build_compiler, build_compiler.host);
2043-
let target_libdir =
2044-
builder.sysroot_target_libdir(target_compiler, target_compiler.host);
2045-
let dst_lib = libdir.join("libEnzyme-19").with_extension(lib_ext);
2046-
let target_dst_lib = target_libdir.join("libEnzyme-19").with_extension(lib_ext);
2047-
builder.copy_link(&src_lib, &dst_lib);
2048-
builder.copy_link(&src_lib, &target_dst_lib);
2038+
if !builder.config.dry_run() {
2039+
debug!("`llvm_enzyme` requested");
2040+
let enzyme_install = builder.ensure(llvm::Enzyme { target: build_compiler.host });
2041+
let llvm_config = builder.llvm_config(builder.config.build).unwrap();
2042+
let llvm_version_major = llvm::get_llvm_version_major(builder, &llvm_config);
2043+
let lib_ext = std::env::consts::DLL_EXTENSION;
2044+
let libenzyme = format!("libEnzyme-{llvm_version_major}");
2045+
let src_lib =
2046+
enzyme_install.join("build/Enzyme").join(&libenzyme).with_extension(lib_ext);
2047+
let libdir = builder.sysroot_target_libdir(build_compiler, build_compiler.host);
2048+
let target_libdir =
2049+
builder.sysroot_target_libdir(target_compiler, target_compiler.host);
2050+
let dst_lib = libdir.join(&libenzyme).with_extension(lib_ext);
2051+
let target_dst_lib = target_libdir.join(&libenzyme).with_extension(lib_ext);
2052+
builder.copy_link(&src_lib, &dst_lib);
2053+
builder.copy_link(&src_lib, &target_dst_lib);
2054+
}
20492055
}
20502056

20512057
// Build the libraries for this compiler to link to (i.e., the libraries

Diff for: src/bootstrap/src/core/build_steps/llvm.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -996,13 +996,11 @@ impl Step for Enzyme {
996996
.config
997997
.update_submodule(Path::new("src").join("tools").join("enzyme").to_str().unwrap());
998998
let mut cfg = cmake::Config::new(builder.src.join("src/tools/enzyme/enzyme/"));
999-
// FIXME(ZuseZ4): Find a nicer way to use Enzyme Debug builds
1000-
//cfg.profile("Debug");
1001-
//cfg.define("CMAKE_BUILD_TYPE", "Debug");
1002999
configure_cmake(builder, target, &mut cfg, true, LdFlags::default(), &[]);
10031000

10041001
// Re-use the same flags as llvm to control the level of debug information
1005-
// generated for lld.
1002+
// generated by Enzyme.
1003+
// FIXME(ZuseZ4): Find a nicer way to use Enzyme Debug builds.
10061004
let profile = match (builder.config.llvm_optimize, builder.config.llvm_release_debuginfo) {
10071005
(false, _) => "Debug",
10081006
(true, false) => "Release",
@@ -1015,7 +1013,6 @@ impl Step for Enzyme {
10151013
.env("LLVM_CONFIG_REAL", &llvm_config)
10161014
.define("LLVM_ENABLE_ASSERTIONS", "ON")
10171015
.define("ENZYME_EXTERNAL_SHARED_LIB", "ON")
1018-
.define("ENZYME_RUNPASS", "ON")
10191016
.define("LLVM_DIR", builder.llvm_out(target));
10201017

10211018
cfg.build();

0 commit comments

Comments
 (0)