Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ jobs:
- ["19.1", "19-1", "191", "19"]
- ["20.1", "20-1", "201", "20"]
- ["21.1", "21-1", "211", "21"]
- ["22.1", "22-1", "221", "22"]
toolchain:
- stable
os:
Expand Down Expand Up @@ -190,7 +191,7 @@ jobs:
LLVM_CMAKE_DIR="$LLVM_PREFIX/lib/cmake/llvm"
if [ -d "$LLVM_CMAKE_DIR" ]; then
grep -rl 'libcurses\.tbd' "$LLVM_CMAKE_DIR" 2>/dev/null | while IFS= read -r f; do
sed -i '' 's|/usr/lib/libcurses\.tbd|/usr/lib/libncurses.tbd|g' "$f"
sed -i '' 's|libcurses\.tbd|libncurses.tbd|g' "$f"
done
fi
# 2. Provide a symlink via CMAKE_PREFIX_PATH so find_library(curses)
Expand Down
6 changes: 5 additions & 1 deletion diffsl-backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ llvm15-0 = ["diffsl/llvm15-0"]
llvm16-0 = ["diffsl/llvm16-0"]
llvm17-0 = ["diffsl/llvm17-0"]
llvm18-1 = ["diffsl/llvm18-1"]
llvm19-1 = ["diffsl/llvm19-1"]
llvm20-1 = ["diffsl/llvm20-1"]
llvm21-1 = ["diffsl/llvm21-1"]
llvm22-1 = ["diffsl/llvm22-1"]

[dependencies]
axum = "0.8.6"
axum = "0.8.9"
diffsl = { path = "../diffsl", features = [] }
36 changes: 20 additions & 16 deletions diffsl/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ llvm18-1 = ["inkwell-181", "llvm-sys-181", "llvm", "enzyme"]
llvm19-1 = ["inkwell-191", "llvm-sys-191", "llvm", "enzyme"]
llvm20-1 = ["inkwell-201", "llvm-sys-201", "llvm", "enzyme"]
llvm21-1 = ["inkwell-211", "llvm-sys-211", "llvm", "enzyme"]
llvm22-1 = ["inkwell-221", "llvm-sys-221", "llvm", "enzyme"]
enzyme = ["bindgen", "cmake"]
llvm = []
external_f64 = ["external"]
Expand All @@ -36,53 +37,56 @@ test_compile = []
rayon = ["dep:rayon"]

[dependencies]
ndarray = { version = "=0.17" }
ndarray = { version = "0.17" }
anyhow = "1.0"
approx = "0.5"
pest = "2.8"
pest_derive = "2.8"
itertools = "0.14.0"
itertools = "0.15"
uid = "0.1.8"
inkwell-150 = { package = "inkwell", version = "0.7.1", features = [
inkwell-150 = { package = "inkwell", version = "0.9.0", features = [
"llvm15-0",
], optional = true }
inkwell-160 = { package = "inkwell", version = "0.7.1", features = [
inkwell-160 = { package = "inkwell", version = "0.9.0", features = [
"llvm16-0",
], optional = true }
inkwell-170 = { package = "inkwell", version = "0.7.1", features = [
inkwell-170 = { package = "inkwell", version = "0.9.0", features = [
"llvm17-0",
], optional = true }
inkwell-181 = { package = "inkwell", version = "0.7.1", features = [
inkwell-181 = { package = "inkwell", version = "0.9.0", features = [
"llvm18-1",
], optional = true }
inkwell-191 = { package = "inkwell", version = "0.7.1", features = [
inkwell-191 = { package = "inkwell", version = "0.9.0", features = [
"llvm19-1",
], optional = true }
inkwell-201 = { package = "inkwell", version = "0.7.1", features = [
inkwell-201 = { package = "inkwell", version = "0.9.0", features = [
"llvm20-1",
], optional = true }
inkwell-211 = { package = "inkwell", version = "0.7.1", features = [
inkwell-211 = { package = "inkwell", version = "0.9.0", features = [
"llvm21-1",
], optional = true }
inkwell-221 = { package = "inkwell", version = "0.9.0", features = [
"llvm22-1",
], optional = true }
llvm-sys-150 = { package = "llvm-sys", version = "150.2.1", optional = true }
llvm-sys-160 = { package = "llvm-sys", version = "160.2.1", optional = true }
llvm-sys-170 = { package = "llvm-sys", version = "170.4.0", optional = true }
llvm-sys-181 = { package = "llvm-sys", version = "181.3.0", optional = true }
llvm-sys-191 = { package = "llvm-sys", version = "191.1.0", optional = true }
llvm-sys-201 = { package = "llvm-sys", version = "201.0.0", optional = true }
llvm-sys-211 = { package = "llvm-sys", version = "211.0.0", optional = true }
inkwell_internals = { version = "0.11.0", optional = true }
cranelift = { version = "0.125", optional = true }
cranelift-module = { version = "0.125", optional = true }
cranelift-object = { version = "0.125", optional = true }
cranelift-jit = { version = "0.125", optional = true }
cranelift-native = { version = "0.125", optional = true }
llvm-sys-221 = { package = "llvm-sys", version = "221.0.0", optional = true }
cranelift = { version = "0.133", optional = true }
cranelift-module = { version = "0.133", optional = true }
cranelift-object = { version = "0.133", optional = true }
cranelift-jit = { version = "0.133", optional = true }
cranelift-native = { version = "0.133", optional = true }
target-lexicon = "0.13"
aliasable = "0.1.3"
rayon = { version = "1.10.0", optional = true }
lazy_static = "1.5.0"
serde = "1.0"
object = "0.37"
object = "0.39"
libc = "0.2"
num-traits = "0.2"
log = "0.4.29"
Expand Down
10 changes: 5 additions & 5 deletions diffsl/src/execution/cranelift/codegen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ impl<M: Module> CraneliftModule<M> {
let zero = builder.ins().iconst(self.int_type, 0);
builder
.ins()
.store(MemFlags::new(), zero, thread_counter, 0);
.store(MemFlagsData::new(), zero, thread_counter, 0);

builder.ins().return_(&[]);
builder.finalize();
Expand Down Expand Up @@ -157,7 +157,7 @@ impl<M: Module> CraneliftModule<M> {
let one = builder.ins().iconst(self.int_type, 1);
builder.ins().atomic_rmw(
self.int_type,
MemFlags::new(),
MemFlagsData::new(),
AtomicRmwOp::Add,
thread_counter,
one,
Expand All @@ -170,7 +170,7 @@ impl<M: Module> CraneliftModule<M> {
let current_value =
builder
.ins()
.atomic_load(self.int_type, MemFlags::new(), thread_counter);
.atomic_load(self.int_type, MemFlagsData::new(), thread_counter);

let all_threads_done = builder.ins().icmp(
IntCC::UnsignedGreaterThanOrEqual,
Expand Down Expand Up @@ -1304,7 +1304,7 @@ struct CraneliftCodeGen<'a, M: Module> {
module: MutexGuard<'a, M>,
tensor_ptr: Option<Value>,
variables: HashMap<String, Variable>,
mem_flags: MemFlags,
mem_flags: MemFlagsData,
functions: HashMap<String, FuncRef>,
layout: &'a DataLayout,
indices: GlobalValue,
Expand Down Expand Up @@ -2805,7 +2805,7 @@ impl<'ctx, M: Module> CraneliftCodeGen<'ctx, M> {
indices,
constants,
variables: HashMap::new(),
mem_flags: MemFlags::new(),
mem_flags: MemFlagsData::new(),
functions: HashMap::new(),
layout: &module.layout,
threaded: module.threaded,
Expand Down
9 changes: 7 additions & 2 deletions diffsl/src/execution/llvm/codegen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -191,11 +191,16 @@ impl LlvmModule {
// .map_err(|e| anyhow!("Failed to print module to file: {:?}", e))?;

//let passes = "default<O2>";
let passes = "annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(lower-expect,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function(mem2reg),function<eager-inv>(instcombine,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>),require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline<only-mandatory>,inline,function-attrs,openmp-opt-cgscc,function<eager-inv>(early-cse<memssa>,speculative-execution,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,instcombine,libcalls-shrinkwrap,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,reassociate,require<opt-remark-emit>,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,instcombine,loop(loop-idiom,indvars,loop-deletion),vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine,jump-threading,correlated-propagation,adce,memcpyopt,dse,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts>,instcombine),coro-split)),deadargelim,coro-cleanup,globalopt,globaldce,elim-avail-extern,rpo-function-attrs,recompute-globalsaa,function<eager-inv>(float2int,lower-constant-intrinsics,loop(loop-rotate,loop-deletion),loop-distribute,inject-tli-mappings,loop-load-elim,instcombine,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;sink-common-insts>,vector-combine,instcombine,transform-warning,instcombine,require<opt-remark-emit>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify";
let passes_base = "annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(lower-expect,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function(mem2reg),function<eager-inv>(instcombine,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>),require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline<only-mandatory>,inline,function-attrs,openmp-opt-cgscc,function<eager-inv>(early-cse<memssa>,speculative-execution,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,instcombine,libcalls-shrinkwrap,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,reassociate,require<opt-remark-emit>,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,instcombine,loop(loop-idiom,indvars,loop-deletion),vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine,jump-threading,correlated-propagation,adce,memcpyopt,dse,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts>,instcombine),coro-split)),deadargelim,coro-cleanup,globalopt,globaldce,elim-avail-extern,rpo-function-attrs,recompute-globalsaa,function<eager-inv>(float2int,lower-constant-intrinsics,loop(loop-rotate,loop-deletion),loop-distribute,inject-tli-mappings,loop-load-elim,instcombine,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;sink-common-insts>,vector-combine,instcombine,transform-warning,instcombine,require<opt-remark-emit>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify";
let passes = if cfg!(feature = "inkwell-221") {
passes_base.replace("instcombine", "instcombine<no-verify-fixpoint>")
} else {
passes_base.to_string()
};
let (codegen, machine) = self.codegen_and_machine_mut();
codegen
.module()
.run_passes(passes, machine, pass_options)
.run_passes(&passes, machine, pass_options)
.map_err(|e| anyhow!("Failed to run passes: {:?}", e))

//let path = "jit_module_after_pre_autodiff_opt.ll";
Expand Down
4 changes: 4 additions & 0 deletions diffsl/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ extern crate inkwell_191 as inkwell;
extern crate inkwell_201 as inkwell;
#[cfg(feature = "inkwell-211")]
extern crate inkwell_211 as inkwell;
#[cfg(feature = "inkwell-221")]
extern crate inkwell_221 as inkwell;

#[cfg(feature = "inkwell-150")]
extern crate llvm_sys_150 as llvm_sys;
Expand All @@ -54,3 +56,5 @@ extern crate llvm_sys_191 as llvm_sys;
extern crate llvm_sys_201 as llvm_sys;
#[cfg(feature = "inkwell-211")]
extern crate llvm_sys_211 as llvm_sys;
#[cfg(feature = "inkwell-221")]
extern crate llvm_sys_221 as llvm_sys;
Loading