diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4643b24..a5cd499 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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: @@ -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) diff --git a/diffsl-backend/Cargo.toml b/diffsl-backend/Cargo.toml index 2191a44..24b3a1d 100644 --- a/diffsl-backend/Cargo.toml +++ b/diffsl-backend/Cargo.toml @@ -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 = [] } diff --git a/diffsl/Cargo.toml b/diffsl/Cargo.toml index a80576d..7d95608 100644 --- a/diffsl/Cargo.toml +++ b/diffsl/Cargo.toml @@ -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"] @@ -36,34 +37,37 @@ 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 } @@ -71,18 +75,18 @@ 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" diff --git a/diffsl/src/execution/cranelift/codegen.rs b/diffsl/src/execution/cranelift/codegen.rs index 4a5997b..b92ba00 100644 --- a/diffsl/src/execution/cranelift/codegen.rs +++ b/diffsl/src/execution/cranelift/codegen.rs @@ -104,7 +104,7 @@ impl CraneliftModule { 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(); @@ -157,7 +157,7 @@ impl CraneliftModule { 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, @@ -170,7 +170,7 @@ impl CraneliftModule { 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, @@ -1304,7 +1304,7 @@ struct CraneliftCodeGen<'a, M: Module> { module: MutexGuard<'a, M>, tensor_ptr: Option, variables: HashMap, - mem_flags: MemFlags, + mem_flags: MemFlagsData, functions: HashMap, layout: &'a DataLayout, indices: GlobalValue, @@ -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, diff --git a/diffsl/src/execution/llvm/codegen.rs b/diffsl/src/execution/llvm/codegen.rs index c7dcfa7..ce80a80 100644 --- a/diffsl/src/execution/llvm/codegen.rs +++ b/diffsl/src/execution/llvm/codegen.rs @@ -191,11 +191,16 @@ impl LlvmModule { // .map_err(|e| anyhow!("Failed to print module to file: {:?}", e))?; //let passes = "default"; - let passes = "annotation2metadata,forceattrs,inferattrs,coro-early,function(lower-expect,simplifycfg,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function(mem2reg),function(instcombine,simplifycfg),require,function(invalidate),require,cgscc(devirt<4>(inline,inline,function-attrs,openmp-opt-cgscc,function(early-cse,speculative-execution,jump-threading,correlated-propagation,simplifycfg,instcombine,libcalls-shrinkwrap,tailcallelim,simplifycfg,reassociate,require,loop-mssa(loop-instsimplify,loop-simplifycfg,licm,loop-rotate,licm,simple-loop-unswitch),simplifycfg,instcombine,loop(loop-idiom,indvars,loop-deletion),vector-combine,mldst-motion,gvn<>,sccp,bdce,instcombine,jump-threading,correlated-propagation,adce,memcpyopt,dse,loop-mssa(licm),coro-elide,simplifycfg,instcombine),coro-split)),deadargelim,coro-cleanup,globalopt,globaldce,elim-avail-extern,rpo-function-attrs,recompute-globalsaa,function(float2int,lower-constant-intrinsics,loop(loop-rotate,loop-deletion),loop-distribute,inject-tli-mappings,loop-load-elim,instcombine,simplifycfg,vector-combine,instcombine,transform-warning,instcombine,require,loop-mssa(licm),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify"; + let passes_base = "annotation2metadata,forceattrs,inferattrs,coro-early,function(lower-expect,simplifycfg,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function(mem2reg),function(instcombine,simplifycfg),require,function(invalidate),require,cgscc(devirt<4>(inline,inline,function-attrs,openmp-opt-cgscc,function(early-cse,speculative-execution,jump-threading,correlated-propagation,simplifycfg,instcombine,libcalls-shrinkwrap,tailcallelim,simplifycfg,reassociate,require,loop-mssa(loop-instsimplify,loop-simplifycfg,licm,loop-rotate,licm,simple-loop-unswitch),simplifycfg,instcombine,loop(loop-idiom,indvars,loop-deletion),vector-combine,mldst-motion,gvn<>,sccp,bdce,instcombine,jump-threading,correlated-propagation,adce,memcpyopt,dse,loop-mssa(licm),coro-elide,simplifycfg,instcombine),coro-split)),deadargelim,coro-cleanup,globalopt,globaldce,elim-avail-extern,rpo-function-attrs,recompute-globalsaa,function(float2int,lower-constant-intrinsics,loop(loop-rotate,loop-deletion),loop-distribute,inject-tli-mappings,loop-load-elim,instcombine,simplifycfg,vector-combine,instcombine,transform-warning,instcombine,require,loop-mssa(licm),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify"; + let passes = if cfg!(feature = "inkwell-221") { + passes_base.replace("instcombine", "instcombine") + } 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"; diff --git a/diffsl/src/lib.rs b/diffsl/src/lib.rs index ee13349..c25c48c 100644 --- a/diffsl/src/lib.rs +++ b/diffsl/src/lib.rs @@ -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; @@ -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;