Skip to content

Commit 4ffa31f

Browse files
feat: support inkwell 7 & llvm 19, 20, 21 (#71)
* feat: support inkwell 7 * turn off llvm 21 * cargo fmt * add required features * fix: build_call api * ci: set LLVM_SYS_XXX_DIR * fix env var * turn off 19 for now * make 18 and 19 experimental * update enzyme * update llvm-sys * make sure we use clang compiler with llvm * experimental * try inkwells solution * and again * try just ubuntu * now try macos * try rayon again on 18 * add llvm 21
1 parent 5f4aae8 commit 4ffa31f

File tree

5 files changed

+88
-42
lines changed

5 files changed

+88
-42
lines changed

.github/workflows/ci.yml

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@ jobs:
3737
strategy:
3838
matrix:
3939
llvm:
40-
- ["15.0", "15-0"]
41-
- ["16.0", "16-0"]
42-
- ["17.0", "17-0"]
40+
- ["15.0", "15-0", "150"]
41+
- ["16.0", "16-0", "160"]
42+
- ["17.0", "17-0", "170"]
43+
- ["19.1", "19-1", "191", "19"]
44+
- ["20.1", "20-1", "201", "20"]
45+
- ["21.1", "21-1", "211", "21"]
4346
toolchain:
4447
- stable
4548
os:
@@ -57,12 +60,12 @@ jobs:
5760
- false
5861
basename:
5962
- Tests
60-
63+
6164
include:
6265
- toolchain: stable
6366
os: ubuntu-latest
64-
llvm: ["18.1", "18-1"]
65-
features: "cranelift"
67+
llvm: ["18.1", "18-1", "181"]
68+
features: "rayon cranelift"
6669
tests: true
6770
clippy: false
6871
rustdoc: false
@@ -71,8 +74,8 @@ jobs:
7174

7275
- toolchain: stable
7376
os: macos-latest
74-
llvm: ["18.1", "18-1"]
75-
features: "cranelift"
77+
llvm: ["18.1", "18-1", "181"]
78+
features: "rayon cranelift"
7679
tests: true
7780
clippy: false
7881
rustdoc: false
@@ -91,7 +94,7 @@ jobs:
9194

9295
- toolchain: beta
9396
os: ubuntu-latest
94-
llvm: ["16.0", "16-0"]
97+
llvm: ["16.0", "16-0", "160"]
9598
features: "rayon cranelift"
9699
tests: true
97100
clippy: false
@@ -101,7 +104,7 @@ jobs:
101104

102105
- toolchain: nightly
103106
os: ubuntu-latest
104-
llvm: ["16.0", "16-0"]
107+
llvm: ["16.0", "16-0", "160"]
105108
features: "rayon cranelift"
106109
tests: true
107110
clippy: false
@@ -121,7 +124,7 @@ jobs:
121124

122125
- toolchain: stable
123126
os: ubuntu-latest
124-
llvm: ["16.0", "16-0"]
127+
llvm: ["16.0", "16-0", "160"]
125128
features: "rayon cranelift"
126129
tests: false
127130
clippy: true
@@ -131,7 +134,7 @@ jobs:
131134

132135
- toolchain: nightly
133136
os: ubuntu-latest
134-
llvm: ["16.0", "16-0"]
137+
llvm: ["16.0", "16-0", "160"]
135138
features: "rayon cranelift"
136139
tests: false
137140
clippy: false
@@ -154,11 +157,35 @@ jobs:
154157
run: rustup default ${{ matrix.toolchain }} && rustup update ${{ matrix.toolchain }} --no-self-update && rustup component add clippy rust-docs
155158
- name: Rust version
156159
run: rustc -Vv
157-
- name: Install LLVM and Clang
160+
- name: Install LLVM and Clang (LLVM >= 19.1 & macos)
161+
if : matrix.llvm != '' && matrix.os == 'macos-latest' && (matrix.llvm[0] >= '19.1')
162+
run: |
163+
brew install llvm@${{ matrix.llvm[3] }}
164+
echo "LLVM_PATH=$(brew --prefix llvm@${{ matrix.llvm[3] }})" >> $GITHUB_ENV
165+
- name: Install LLVM and Clang (LLVM >= 19.1 & ubuntu)
166+
if : matrix.llvm != '' && (matrix.os == 'ubuntu-latest'|| matrix.os == 'ubuntu-24.04-arm') && (matrix.llvm[0] >= '19.1')
167+
run: |
168+
sudo apt install --no-install-recommends -y lsb-release wget software-properties-common gnupg
169+
wget https://apt.llvm.org/llvm.sh
170+
chmod +x llvm.sh
171+
sudo ./llvm.sh ${{ matrix.llvm[3] }}
172+
sudo apt-get update
173+
sudo apt install --no-install-recommends -y libllvm${{ matrix.llvm[3] }} \
174+
llvm-${{ matrix.llvm[3] }} \
175+
llvm-${{ matrix.llvm[3] }}-dev \
176+
llvm-${{ matrix.llvm[3] }}-runtime \
177+
libpolly-${{ matrix.llvm[3] }}-dev
178+
sudo update-alternatives --install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-${{ matrix.llvm[3] }} 10
179+
echo "LLVM_PATH=/usr/lib/llvm-${{ matrix.llvm[3] }}" >> $GITHUB_ENV
180+
- name: Install LLVM and Clang (LLVM < 19.1)
158181
uses: KyleMayes/install-llvm-action@v2
159-
if : matrix.llvm != '' && (matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' || matrix.os == 'ubuntu-24.04-arm')
182+
if : matrix.llvm != '' && (matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' || matrix.os == 'ubuntu-24.04-arm') && (matrix.llvm[0] < '19.1')
160183
with:
161184
version: ${{ matrix.llvm[0] }}
185+
- name: Set LLVM_SYS_XXX_DIR and CC, CXX environment variables
186+
if : matrix.llvm != ''
187+
run: |
188+
echo "LLVM_SYS_${{ matrix.llvm[2] }}_DIR=${LLVM_PATH}" >> $GITHUB_ENV
162189
- name: Install LLVM 16 (macos-13)
163190
if : matrix.os == 'macos-13'
164191
run:

diffsl/Cargo.toml

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ llvm15-0 = ["inkwell-150", "llvm-sys-150", "llvm", "enzyme"]
1616
llvm16-0 = ["inkwell-160", "llvm-sys-160", "llvm", "enzyme"]
1717
llvm17-0 = ["inkwell-170", "llvm-sys-170", "llvm", "enzyme"]
1818
llvm18-1 = ["inkwell-181", "llvm-sys-181", "llvm", "enzyme"]
19+
llvm19-1 = ["inkwell-191", "llvm-sys-191", "llvm", "enzyme"]
20+
llvm20-1 = ["inkwell-201", "llvm-sys-201", "llvm", "enzyme"]
21+
llvm21-1 = ["inkwell-211", "llvm-sys-211", "llvm", "enzyme"]
1922
enzyme = ["bindgen", "cmake"]
2023
llvm = []
2124
cranelift = ["dep:cranelift", "dep:cranelift-module", "dep:cranelift-object", "dep:cranelift-jit", "dep:cranelift-native"]
@@ -30,14 +33,20 @@ pest = "2.8"
3033
pest_derive = "2.8"
3134
itertools = "0.14.0"
3235
uid = "0.1.8"
33-
inkwell-150 = { package = "inkwell", version = "0.6.0", features = ["llvm15-0"], optional = true }
34-
inkwell-160 = { package = "inkwell", version = "0.6.0", features = ["llvm16-0"], optional = true }
35-
inkwell-170 = { package = "inkwell", version = "0.6.0", features = ["llvm17-0"], optional = true }
36-
inkwell-181 = { package = "inkwell", version = "0.6.0", features = ["llvm18-1"], optional = true }
36+
inkwell-150 = { package = "inkwell", version = "0.7.1", features = ["llvm15-0"], optional = true }
37+
inkwell-160 = { package = "inkwell", version = "0.7.1", features = ["llvm16-0"], optional = true }
38+
inkwell-170 = { package = "inkwell", version = "0.7.1", features = ["llvm17-0"], optional = true }
39+
inkwell-181 = { package = "inkwell", version = "0.7.1", features = ["llvm18-1"], optional = true }
40+
inkwell-191 = { package = "inkwell", version = "0.7.1", features = ["llvm19-1"], optional = true }
41+
inkwell-201 = { package = "inkwell", version = "0.7.1", features = ["llvm20-1"], optional = true }
42+
inkwell-211 = { package = "inkwell", version = "0.7.1", features = ["llvm21-1"], optional = true }
3743
llvm-sys-150 = { package = "llvm-sys", version = "150.2.1", optional = true }
3844
llvm-sys-160 = { package = "llvm-sys", version = "160.2.1", optional = true }
39-
llvm-sys-170 = { package = "llvm-sys", version = "170.2.0", optional = true }
40-
llvm-sys-181 = { package = "llvm-sys", version = "181.2.0", optional = true }
45+
llvm-sys-170 = { package = "llvm-sys", version = "170.4.0", optional = true }
46+
llvm-sys-181 = { package = "llvm-sys", version = "181.3.0", optional = true }
47+
llvm-sys-191 = { package = "llvm-sys", version = "191.1.0", optional = true }
48+
llvm-sys-201 = { package = "llvm-sys", version = "201.0.0", optional = true }
49+
llvm-sys-211 = { package = "llvm-sys", version = "211.0.0", optional = true }
4150
inkwell_internals = { version = "0.11.0", optional = true }
4251
cranelift = { version = "0.125", optional = true}
4352
cranelift-module = { version = "0.125", optional = true}

diffsl/Enzyme

Submodule Enzyme updated 530 files

diffsl/src/execution/llvm/codegen.rs

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,8 +1360,7 @@ impl<'ctx> CodeGen<'ctx> {
13601360
.build_float_add(
13611361
exp_negx
13621362
.try_as_basic_value()
1363-
.left()
1364-
.unwrap()
1363+
.unwrap_basic()
13651364
.into_float_value(),
13661365
one,
13671366
name,
@@ -1412,8 +1411,7 @@ impl<'ctx> CodeGen<'ctx> {
14121411
)
14131412
.unwrap()
14141413
.try_as_basic_value()
1415-
.left()
1416-
.unwrap()
1414+
.unwrap_basic()
14171415
.into_float_value();
14181416
let x_plus_sqrt_one_plus_x_squared = self
14191417
.builder
@@ -1431,8 +1429,7 @@ impl<'ctx> CodeGen<'ctx> {
14311429
)
14321430
.unwrap()
14331431
.try_as_basic_value()
1434-
.left()
1435-
.unwrap()
1432+
.unwrap_basic()
14361433
.into_float_value();
14371434
self.builder.build_return(Some(&result)).ok();
14381435
self.builder.position_at_end(current_block);
@@ -1506,23 +1503,21 @@ impl<'ctx> CodeGen<'ctx> {
15061503
let expx_minus_exp_negx = self
15071504
.builder
15081505
.build_float_sub(
1509-
expx.try_as_basic_value().left().unwrap().into_float_value(),
1506+
expx.try_as_basic_value().unwrap_basic().into_float_value(),
15101507
exp_negx
15111508
.try_as_basic_value()
1512-
.left()
1513-
.unwrap()
1509+
.unwrap_basic()
15141510
.into_float_value(),
15151511
name,
15161512
)
15171513
.ok()?;
15181514
let expx_plus_exp_negx = self
15191515
.builder
15201516
.build_float_add(
1521-
expx.try_as_basic_value().left().unwrap().into_float_value(),
1517+
expx.try_as_basic_value().unwrap_basic().into_float_value(),
15221518
exp_negx
15231519
.try_as_basic_value()
1524-
.left()
1525-
.unwrap()
1520+
.unwrap_basic()
15261521
.into_float_value(),
15271522
name,
15281523
)
@@ -2415,8 +2410,7 @@ impl<'ctx> CodeGen<'ctx> {
24152410
.builder
24162411
.build_call(function, args.as_slice(), name)?
24172412
.try_as_basic_value()
2418-
.left()
2419-
.unwrap()
2413+
.unwrap_basic()
24202414
.into_float_value();
24212415
Ok(ret_value)
24222416
}
@@ -3098,12 +3092,14 @@ impl<'ctx> CodeGen<'ctx> {
30983092
CDerivativeMode_DEM_ForwardMode, // return value, dret_used, top_level which was 1
30993093
1, // free memory
31003094
0, // runtime activity
3095+
0, // strong zero
31013096
1, // vector mode width
3102-
std::ptr::null_mut(),
3103-
fn_type_info, // additional_arg, type info (return + args)
3104-
args_uncacheable.as_mut_ptr(),
3105-
args_uncacheable.len(), // uncacheable arguments
3106-
std::ptr::null_mut(), // write augmented function to this
3097+
std::ptr::null_mut(), // additional argument
3098+
fn_type_info, // additional_arg, type info (return + args)
3099+
1, // subsequent calls may write
3100+
args_uncacheable.as_mut_ptr(), // overwritten args
3101+
args_uncacheable.len(), // overwritten args length
3102+
std::ptr::null_mut(), // write augmented function to this
31073103
)
31083104
},
31093105
CompileMode::Reverse | CompileMode::ReverseSens => {
@@ -3121,15 +3117,17 @@ impl<'ctx> CodeGen<'ctx> {
31213117
diff_ret as u8,
31223118
CDerivativeMode_DEM_ReverseModeCombined,
31233119
0,
3120+
0, // strong zero
31243121
1,
31253122
1,
31263123
std::ptr::null_mut(),
3127-
0,
3124+
0, // force annonymous tape
31283125
fn_type_info,
3126+
0, // subsequent calls may write
31293127
args_uncacheable.as_mut_ptr(),
31303128
args_uncacheable.len(),
31313129
std::ptr::null_mut(),
3132-
if self.threaded { 1 } else { 0 },
3130+
if self.threaded { 1 } else { 0 }, // atomic add
31333131
)
31343132
};
31353133
if self.threaded {

diffsl/src/lib.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ extern crate inkwell_160 as inkwell;
2929
extern crate inkwell_170 as inkwell;
3030
#[cfg(feature = "inkwell-181")]
3131
extern crate inkwell_181 as inkwell;
32+
#[cfg(feature = "inkwell-191")]
33+
extern crate inkwell_191 as inkwell;
34+
#[cfg(feature = "inkwell-201")]
35+
extern crate inkwell_201 as inkwell;
36+
#[cfg(feature = "inkwell-211")]
37+
extern crate inkwell_211 as inkwell;
3238

3339
#[cfg(feature = "inkwell-150")]
3440
extern crate llvm_sys_150 as llvm_sys;
@@ -38,3 +44,9 @@ extern crate llvm_sys_160 as llvm_sys;
3844
extern crate llvm_sys_170 as llvm_sys;
3945
#[cfg(feature = "inkwell-181")]
4046
extern crate llvm_sys_181 as llvm_sys;
47+
#[cfg(feature = "inkwell-191")]
48+
extern crate llvm_sys_191 as llvm_sys;
49+
#[cfg(feature = "inkwell-201")]
50+
extern crate llvm_sys_201 as llvm_sys;
51+
#[cfg(feature = "inkwell-211")]
52+
extern crate llvm_sys_211 as llvm_sys;

0 commit comments

Comments
 (0)