Auto merge of #135764 - nikic:llvm-20-test-fixes, r=wesleywiser
Fix tests on LLVM 20 For sparcv8plus.rs, duplicate the test for LLVM 19 and LLVM 20. LLVM 20 resolves one of the FIXME in the test. For x86_64-bigint-add.rs split the check lines for LLVM 19 and LLVM 20. The difference in codegen here is due to a difference in unroll factor, which I believe is not what the test is interested in. Fixes https://github.com/rust-lang/rust/issues/132957. Fixes https://github.com/rust-lang/rust/issues/133754.
This commit is contained in:
commit
01a26c026d
12 changed files with 105 additions and 15 deletions
|
|
@ -2,6 +2,9 @@
|
|||
//@ assembly-output: emit-asm
|
||||
//@ compile-flags: --crate-type=lib -O -C target-cpu=x86-64-v4
|
||||
//@ compile-flags: -C llvm-args=-x86-asm-syntax=intel
|
||||
//@ revisions: llvm-pre-20 llvm-20
|
||||
//@ [llvm-20] min-llvm-version: 20
|
||||
//@ [llvm-pre-20] max-llvm-major-version: 19
|
||||
|
||||
#![no_std]
|
||||
#![feature(bigint_helper_methods)]
|
||||
|
|
@ -20,12 +23,16 @@ pub unsafe extern "sysv64" fn bigint_chain_carrying_add(
|
|||
n: usize,
|
||||
mut carry: bool,
|
||||
) -> bool {
|
||||
// CHECK: mov [[TEMP:r..]], qword ptr [rsi + 8*[[IND:r..]] + 8]
|
||||
// CHECK: adc [[TEMP]], qword ptr [rdx + 8*[[IND]] + 8]
|
||||
// CHECK: mov qword ptr [rdi + 8*[[IND]] + 8], [[TEMP]]
|
||||
// CHECK: mov [[TEMP]], qword ptr [rsi + 8*[[IND]] + 16]
|
||||
// CHECK: adc [[TEMP]], qword ptr [rdx + 8*[[IND]] + 16]
|
||||
// CHECK: mov qword ptr [rdi + 8*[[IND]] + 16], [[TEMP]]
|
||||
// llvm-pre-20: mov [[TEMP:r..]], qword ptr [rsi + 8*[[IND:r..]] + 8]
|
||||
// llvm-pre-20: adc [[TEMP]], qword ptr [rdx + 8*[[IND]] + 8]
|
||||
// llvm-pre-20: mov qword ptr [rdi + 8*[[IND]] + 8], [[TEMP]]
|
||||
// llvm-pre-20: mov [[TEMP]], qword ptr [rsi + 8*[[IND]] + 16]
|
||||
// llvm-pre-20: adc [[TEMP]], qword ptr [rdx + 8*[[IND]] + 16]
|
||||
// llvm-pre-20: mov qword ptr [rdi + 8*[[IND]] + 16], [[TEMP]]
|
||||
// llvm-20: adc [[TEMP:r..]], qword ptr [rdx + 8*[[IND:r..]]]
|
||||
// llvm-20: mov qword ptr [rdi + 8*[[IND]]], [[TEMP]]
|
||||
// llvm-20: mov [[TEMP]], qword ptr [rsi + 8*[[IND]] + 8]
|
||||
// llvm-20: adc [[TEMP]], qword ptr [rdx + 8*[[IND]] + 8]
|
||||
for i in 0..n {
|
||||
(*dest.add(i), carry) = u64::carrying_add(*src1.add(i), *src2.add(i), carry);
|
||||
}
|
||||
|
|
|
|||
43
tests/ui/abi/sparcv8plus-llvm19.rs
Normal file
43
tests/ui/abi/sparcv8plus-llvm19.rs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
//@ revisions: sparc sparcv8plus sparc_cpu_v9 sparc_feature_v8plus sparc_cpu_v9_feature_v8plus
|
||||
//@[sparc] compile-flags: --target sparc-unknown-none-elf
|
||||
//@[sparc] needs-llvm-components: sparc
|
||||
//@[sparcv8plus] compile-flags: --target sparc-unknown-linux-gnu
|
||||
//@[sparcv8plus] needs-llvm-components: sparc
|
||||
//@[sparc_cpu_v9] compile-flags: --target sparc-unknown-none-elf -C target-cpu=v9
|
||||
//@[sparc_cpu_v9] needs-llvm-components: sparc
|
||||
//@[sparc_feature_v8plus] compile-flags: --target sparc-unknown-none-elf -C target-feature=+v8plus
|
||||
//@[sparc_feature_v8plus] needs-llvm-components: sparc
|
||||
//@[sparc_cpu_v9_feature_v8plus] compile-flags: --target sparc-unknown-none-elf -C target-cpu=v9 -C target-feature=+v8plus
|
||||
//@[sparc_cpu_v9_feature_v8plus] needs-llvm-components: sparc
|
||||
//@ exact-llvm-major-version: 19
|
||||
|
||||
#![crate_type = "rlib"]
|
||||
#![feature(no_core, rustc_attrs, lang_items)]
|
||||
#![no_core]
|
||||
|
||||
#[lang = "sized"]
|
||||
trait Sized {}
|
||||
#[lang = "copy"]
|
||||
trait Copy {}
|
||||
|
||||
#[rustc_builtin_macro]
|
||||
macro_rules! compile_error {
|
||||
() => {};
|
||||
}
|
||||
|
||||
#[cfg(all(not(target_feature = "v8plus"), not(target_feature = "v9")))]
|
||||
compile_error!("-v8plus,-v9");
|
||||
//[sparc]~^ ERROR -v8plus,-v9
|
||||
|
||||
// FIXME: sparc_cpu_v9 should be in "-v8plus,+v9" group (fixed in LLVM 20)
|
||||
#[cfg(all(target_feature = "v8plus", target_feature = "v9"))]
|
||||
compile_error!("+v8plus,+v9");
|
||||
//[sparcv8plus,sparc_cpu_v9_feature_v8plus,sparc_cpu_v9]~^ ERROR +v8plus,+v9
|
||||
|
||||
// FIXME: should be rejected
|
||||
#[cfg(all(target_feature = "v8plus", not(target_feature = "v9")))]
|
||||
compile_error!("+v8plus,-v9 (FIXME)");
|
||||
//[sparc_feature_v8plus]~^ ERROR +v8plus,-v9 (FIXME)
|
||||
|
||||
#[cfg(all(not(target_feature = "v8plus"), target_feature = "v9"))]
|
||||
compile_error!("-v8plus,+v9");
|
||||
8
tests/ui/abi/sparcv8plus-llvm19.sparc.stderr
Normal file
8
tests/ui/abi/sparcv8plus-llvm19.sparc.stderr
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
error: -v8plus,-v9
|
||||
--> $DIR/sparcv8plus-llvm19.rs:29:1
|
||||
|
|
||||
LL | compile_error!("-v8plus,-v9");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
8
tests/ui/abi/sparcv8plus-llvm19.sparc_cpu_v9.stderr
Normal file
8
tests/ui/abi/sparcv8plus-llvm19.sparc_cpu_v9.stderr
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
error: +v8plus,+v9
|
||||
--> $DIR/sparcv8plus-llvm19.rs:34:1
|
||||
|
|
||||
LL | compile_error!("+v8plus,+v9");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
error: +v8plus,+v9
|
||||
--> $DIR/sparcv8plus-llvm19.rs:34:1
|
||||
|
|
||||
LL | compile_error!("+v8plus,+v9");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
error: +v8plus,-v9 (FIXME)
|
||||
--> $DIR/sparcv8plus-llvm19.rs:39:1
|
||||
|
|
||||
LL | compile_error!("+v8plus,-v9 (FIXME)");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
8
tests/ui/abi/sparcv8plus-llvm19.sparcv8plus.stderr
Normal file
8
tests/ui/abi/sparcv8plus-llvm19.sparcv8plus.stderr
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
error: +v8plus,+v9
|
||||
--> $DIR/sparcv8plus-llvm19.rs:34:1
|
||||
|
|
||||
LL | compile_error!("+v8plus,+v9");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
//@[sparc_feature_v8plus] needs-llvm-components: sparc
|
||||
//@[sparc_cpu_v9_feature_v8plus] compile-flags: --target sparc-unknown-none-elf -C target-cpu=v9 -C target-feature=+v8plus
|
||||
//@[sparc_cpu_v9_feature_v8plus] needs-llvm-components: sparc
|
||||
//@ min-llvm-version: 19
|
||||
//@ min-llvm-version: 20
|
||||
|
||||
#![crate_type = "rlib"]
|
||||
#![feature(no_core, rustc_attrs, lang_items)]
|
||||
|
|
@ -29,10 +29,9 @@ macro_rules! compile_error {
|
|||
compile_error!("-v8plus,-v9");
|
||||
//[sparc]~^ ERROR -v8plus,-v9
|
||||
|
||||
// FIXME: sparc_cpu_v9 should be in "-v8plus,+v9" group (fixed in LLVM 20)
|
||||
#[cfg(all(target_feature = "v8plus", target_feature = "v9"))]
|
||||
compile_error!("+v8plus,+v9");
|
||||
//[sparcv8plus,sparc_cpu_v9_feature_v8plus,sparc_cpu_v9]~^ ERROR +v8plus,+v9
|
||||
//[sparcv8plus,sparc_cpu_v9_feature_v8plus]~^ ERROR +v8plus,+v9
|
||||
|
||||
// FIXME: should be rejected
|
||||
#[cfg(all(target_feature = "v8plus", not(target_feature = "v9")))]
|
||||
|
|
@ -41,3 +40,4 @@ compile_error!("+v8plus,-v9 (FIXME)");
|
|||
|
||||
#[cfg(all(not(target_feature = "v8plus"), target_feature = "v9"))]
|
||||
compile_error!("-v8plus,+v9");
|
||||
//[sparc_cpu_v9]~^ ERROR -v8plus,+v9
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
error: +v8plus,+v9
|
||||
--> $DIR/sparcv8plus.rs:34:1
|
||||
error: -v8plus,+v9
|
||||
--> $DIR/sparcv8plus.rs:42:1
|
||||
|
|
||||
LL | compile_error!("+v8plus,+v9");
|
||||
LL | compile_error!("-v8plus,+v9");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: +v8plus,+v9
|
||||
--> $DIR/sparcv8plus.rs:34:1
|
||||
--> $DIR/sparcv8plus.rs:33:1
|
||||
|
|
||||
LL | compile_error!("+v8plus,+v9");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: +v8plus,-v9 (FIXME)
|
||||
--> $DIR/sparcv8plus.rs:39:1
|
||||
--> $DIR/sparcv8plus.rs:38:1
|
||||
|
|
||||
LL | compile_error!("+v8plus,-v9 (FIXME)");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: +v8plus,+v9
|
||||
--> $DIR/sparcv8plus.rs:34:1
|
||||
--> $DIR/sparcv8plus.rs:33:1
|
||||
|
|
||||
LL | compile_error!("+v8plus,+v9");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue