Skip to content

Commit 2ad64a5

Browse files
authored
Merge pull request #40 from EnzymeAD/nicer-debug
improve debugging
2 parents 4fd56f1 + 884df95 commit 2ad64a5

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

README.md

+7-3
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,13 @@ cargo +enzyme test --examples
3535
```
3636

3737
## Enzyme Config
38-
Instead of having to re-build LLVM and Enzyme every time, we can adjust the
39-
Enzyme behavior on some higher level inside the following file or using the config parameter
40-
[compiler/rustc_codegen_llvm/src/back/write.rs](https://github.com/EnzymeAD/rust/blob/c7fbb43f83a224cfa290dde2a46a930dce0c5507/compiler/rustc_codegen_llvm/src/back/write.rs#L712)
38+
To help with debugging, Enzyme can be configured using three environment variables.
39+
```bash
40+
export ENZYME_PRINT_TA
41+
export ENZYME_PRINT_AA
42+
export ENZYME_PRINT
43+
```
44+
These will print TypeAnalysis, ActivityAnalysis and the primal + generated function respectively.
4145

4246
We want to make sure that we have EnzymeStrictAliasing=0 all the time to make sure
4347
that Enzyme handles enums correctly. Other flags might be enabled for debug purpose.

compiler/rustc_codegen_llvm/src/back/write.rs

+11-3
Original file line numberDiff line numberDiff line change
@@ -671,9 +671,17 @@ pub(crate) unsafe fn enzyme_ad(
671671
let logic_ref: EnzymeLogicRef = CreateEnzymeLogic(opt as u8);
672672
let type_analysis: EnzymeTypeAnalysisRef =
673673
CreateTypeAnalysis(logic_ref, std::ptr::null_mut(), std::ptr::null_mut(), 0);
674-
674+
675675
llvm::EnzymeSetCLBool(std::ptr::addr_of_mut!(llvm::EnzymeStrictAliasing), 0);
676-
llvm::EnzymeSetCLBool(std::ptr::addr_of_mut!(llvm::EnzymePrintType), 1);
676+
if std::env::var("ENZYME_PRINT_TA").is_ok() {
677+
llvm::EnzymeSetCLBool(std::ptr::addr_of_mut!(llvm::EnzymePrintType), 1);
678+
}
679+
if std::env::var("ENZYME_PRINT_AA").is_ok() {
680+
llvm::EnzymeSetCLBool(std::ptr::addr_of_mut!(llvm::EnzymePrintActivity), 1);
681+
}
682+
if std::env::var("ENZYME_PRINT").is_ok() {
683+
llvm::EnzymeSetCLBool(std::ptr::addr_of_mut!(llvm::EnzymePrint), 1);
684+
}
677685

678686
let mut res: &Value = match item.attrs.mode {
679687
DiffMode::Forward => enzyme_rust_forward_diff(
@@ -742,7 +750,7 @@ pub(crate) unsafe fn differentiate(
742750
let res = enzyme_ad(llmod, llcx, item);
743751
assert!(res.is_ok());
744752
}
745-
753+
746754
let mut f = LLVMGetFirstFunction(llmod);
747755
loop {
748756
if let Some(lf) = f {

0 commit comments

Comments
 (0)