@@ -228,6 +228,7 @@ pub(crate) fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> Option<LLVMFea
228
228
} else {
229
229
& * sess. target . arch
230
230
} ;
231
+ let ( major, _, _) = get_version ( ) ;
231
232
match ( arch, s) {
232
233
( "x86" , "sse4.2" ) => Some ( LLVMFeature :: with_dependencies (
233
234
"sse4.2" ,
@@ -247,8 +248,8 @@ pub(crate) fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> Option<LLVMFea
247
248
( "aarch64" , "paca" ) => Some ( LLVMFeature :: new ( "pauth" ) ) ,
248
249
( "aarch64" , "pacg" ) => Some ( LLVMFeature :: new ( "pauth" ) ) ,
249
250
// Before LLVM 20 those two features were packaged together as b16b16
250
- ( "aarch64" , "sve-b16b16" ) if get_version ( ) . 0 < 20 => Some ( LLVMFeature :: new ( "b16b16" ) ) ,
251
- ( "aarch64" , "sme-b16b16" ) if get_version ( ) . 0 < 20 => Some ( LLVMFeature :: new ( "b16b16" ) ) ,
251
+ ( "aarch64" , "sve-b16b16" ) if major < 20 => Some ( LLVMFeature :: new ( "b16b16" ) ) ,
252
+ ( "aarch64" , "sme-b16b16" ) if major < 20 => Some ( LLVMFeature :: new ( "b16b16" ) ) ,
252
253
( "aarch64" , "flagm2" ) => Some ( LLVMFeature :: new ( "altnzcv" ) ) ,
253
254
// Rust ties fp and neon together.
254
255
( "aarch64" , "neon" ) => Some ( LLVMFeature :: with_dependencies (
@@ -263,31 +264,27 @@ pub(crate) fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> Option<LLVMFea
263
264
( "aarch64" , "fpmr" ) => None , // only existed in 18
264
265
( "arm" , "fp16" ) => Some ( LLVMFeature :: new ( "fullfp16" ) ) ,
265
266
// NVPTX targets added in LLVM 20
266
- ( "nvptx64" , "sm_100" ) if get_version ( ) . 0 < 20 => None ,
267
- ( "nvptx64" , "sm_100a" ) if get_version ( ) . 0 < 20 => None ,
268
- ( "nvptx64" , "sm_101" ) if get_version ( ) . 0 < 20 => None ,
269
- ( "nvptx64" , "sm_101a" ) if get_version ( ) . 0 < 20 => None ,
270
- ( "nvptx64" , "sm_120" ) if get_version ( ) . 0 < 20 => None ,
271
- ( "nvptx64" , "sm_120a" ) if get_version ( ) . 0 < 20 => None ,
272
- ( "nvptx64" , "ptx86" ) if get_version ( ) . 0 < 20 => None ,
273
- ( "nvptx64" , "ptx87" ) if get_version ( ) . 0 < 20 => None ,
267
+ ( "nvptx64" , "sm_100" ) if major < 20 => None ,
268
+ ( "nvptx64" , "sm_100a" ) if major < 20 => None ,
269
+ ( "nvptx64" , "sm_101" ) if major < 20 => None ,
270
+ ( "nvptx64" , "sm_101a" ) if major < 20 => None ,
271
+ ( "nvptx64" , "sm_120" ) if major < 20 => None ,
272
+ ( "nvptx64" , "sm_120a" ) if major < 20 => None ,
273
+ ( "nvptx64" , "ptx86" ) if major < 20 => None ,
274
+ ( "nvptx64" , "ptx87" ) if major < 20 => None ,
274
275
// Filter out features that are not supported by the current LLVM version
275
- ( "loongarch64" , "div32" | "lam-bh" | "lamcas" | "ld-seq-sa" | "scq" )
276
- if get_version ( ) . 0 < 20 =>
277
- {
278
- None
279
- }
280
- ( "loongarch32" | "loongarch64" , "32s" ) if get_version ( ) . 0 < 21 => None ,
276
+ ( "loongarch64" , "div32" | "lam-bh" | "lamcas" | "ld-seq-sa" | "scq" ) if major < 20 => None ,
277
+ ( "loongarch32" | "loongarch64" , "32s" ) if major < 21 => None ,
281
278
// Filter out features that are not supported by the current LLVM version
282
- ( "riscv32" | "riscv64" , "zacas" | "rva23u64" | "supm" ) if get_version ( ) . 0 < 20 => None ,
279
+ ( "riscv32" | "riscv64" , "zacas" | "rva23u64" | "supm" ) if major < 20 => None ,
283
280
(
284
281
"s390x" ,
285
282
"message-security-assist-extension12"
286
283
| "concurrent-functions"
287
284
| "miscellaneous-extensions-4"
288
285
| "vector-enhancements-3"
289
286
| "vector-packed-decimal-enhancement-3" ,
290
- ) if get_version ( ) . 0 < 20 => None ,
287
+ ) if major < 20 => None ,
291
288
// Enable the evex512 target feature if an avx512 target feature is enabled.
292
289
( "x86" , s) if s. starts_with ( "avx512" ) => Some ( LLVMFeature :: with_dependencies (
293
290
s,
@@ -301,18 +298,18 @@ pub(crate) fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> Option<LLVMFea
301
298
// https://github.com/llvm/llvm-project/blob/llvmorg-19.1.0/llvm/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp#L27-L28
302
299
// Before LLVM 19, there was no `v8plus` feature and `v9` means "SPARC-V9 instruction available".
303
300
// https://github.com/llvm/llvm-project/blob/llvmorg-18.1.0/llvm/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp#L26
304
- ( "sparc" , "v8plus" ) if get_version ( ) . 0 == 19 => Some ( LLVMFeature :: new ( "v9" ) ) ,
301
+ ( "sparc" , "v8plus" ) if major == 19 => Some ( LLVMFeature :: new ( "v9" ) ) ,
305
302
( "powerpc" , "power8-crypto" ) => Some ( LLVMFeature :: new ( "crypto" ) ) ,
306
303
// These new `amx` variants and `movrs` were introduced in LLVM20
307
304
( "x86" , "amx-avx512" | "amx-fp8" | "amx-movrs" | "amx-tf32" | "amx-transpose" )
308
- if get_version ( ) . 0 < 20 =>
305
+ if major < 20 =>
309
306
{
310
307
None
311
308
}
312
- ( "x86" , "movrs" ) if get_version ( ) . 0 < 20 => None ,
309
+ ( "x86" , "movrs" ) if major < 20 => None ,
313
310
( "x86" , "avx10.1" ) => Some ( LLVMFeature :: new ( "avx10.1-512" ) ) ,
314
- ( "x86" , "avx10.2" ) if get_version ( ) . 0 < 20 => None ,
315
- ( "x86" , "avx10.2" ) if get_version ( ) . 0 >= 20 => Some ( LLVMFeature :: new ( "avx10.2-512" ) ) ,
311
+ ( "x86" , "avx10.2" ) if major < 20 => None ,
312
+ ( "x86" , "avx10.2" ) if major >= 20 => Some ( LLVMFeature :: new ( "avx10.2-512" ) ) ,
316
313
( "x86" , "apxf" ) => Some ( LLVMFeature :: with_dependencies (
317
314
"egpr" ,
318
315
smallvec ! [
0 commit comments