tests: fix RISC-V failures and adjust transmute-scalar.rs target
Resolve several ./x test failures on RISC-V caused by ABI and codegen differences. Update multiple codegen-llvm tests for compatibility, and explicitly set the target for transmute-scalar.rs to x86_64 to ensure consistent behavior across hosts.
This commit is contained in:
@@ -27,7 +27,7 @@ fn make_none_bool() -> Option<bool> {
|
|||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
fn make_some_ordering(x: Ordering) -> Option<Ordering> {
|
fn make_some_ordering(x: Ordering) -> Option<Ordering> {
|
||||||
// CHECK-LABEL: i8 @make_some_ordering(i8 %x)
|
// CHECK-LABEL: i8 @make_some_ordering(i8{{( signext)?}} %x)
|
||||||
// CHECK-NEXT: start:
|
// CHECK-NEXT: start:
|
||||||
// CHECK-NEXT: ret i8 %x
|
// CHECK-NEXT: ret i8 %x
|
||||||
Some(x)
|
Some(x)
|
||||||
@@ -35,7 +35,7 @@ fn make_some_ordering(x: Ordering) -> Option<Ordering> {
|
|||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
fn make_some_u16(x: u16) -> Option<u16> {
|
fn make_some_u16(x: u16) -> Option<u16> {
|
||||||
// CHECK-LABEL: { i16, i16 } @make_some_u16(i16 %x)
|
// CHECK-LABEL: { i16, i16 } @make_some_u16(i16{{( zeroext)?}} %x)
|
||||||
// CHECK-NEXT: start:
|
// CHECK-NEXT: start:
|
||||||
// CHECK-NEXT: %0 = insertvalue { i16, i16 } { i16 1, i16 poison }, i16 %x, 1
|
// CHECK-NEXT: %0 = insertvalue { i16, i16 } { i16 1, i16 poison }, i16 %x, 1
|
||||||
// CHECK-NEXT: ret { i16, i16 } %0
|
// CHECK-NEXT: ret { i16, i16 } %0
|
||||||
@@ -52,7 +52,7 @@ fn make_none_u16() -> Option<u16> {
|
|||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
fn make_some_nzu32(x: NonZero<u32>) -> Option<NonZero<u32>> {
|
fn make_some_nzu32(x: NonZero<u32>) -> Option<NonZero<u32>> {
|
||||||
// CHECK-LABEL: i32 @make_some_nzu32(i32 %x)
|
// CHECK-LABEL: i32 @make_some_nzu32(i32{{( signext)?}} %x)
|
||||||
// CHECK-NEXT: start:
|
// CHECK-NEXT: start:
|
||||||
// CHECK-NEXT: ret i32 %x
|
// CHECK-NEXT: ret i32 %x
|
||||||
Some(x)
|
Some(x)
|
||||||
@@ -114,7 +114,7 @@ fn make_uninhabited_err_indirectly(n: Never) -> Result<u32, Never> {
|
|||||||
fn make_fully_uninhabited_result(v: u32, n: Never) -> Result<(u32, Never), (Never, u32)> {
|
fn make_fully_uninhabited_result(v: u32, n: Never) -> Result<(u32, Never), (Never, u32)> {
|
||||||
// Actually reaching this would be UB, so we don't actually build a result.
|
// Actually reaching this would be UB, so we don't actually build a result.
|
||||||
|
|
||||||
// CHECK-LABEL: { i32, i32 } @make_fully_uninhabited_result(i32 %v)
|
// CHECK-LABEL: { i32, i32 } @make_fully_uninhabited_result(i32{{( signext)?}} %v)
|
||||||
// CHECK-NEXT: start:
|
// CHECK-NEXT: start:
|
||||||
// CHECK-NEXT: call void @llvm.trap()
|
// CHECK-NEXT: call void @llvm.trap()
|
||||||
// CHECK-NEXT: call void @llvm.trap()
|
// CHECK-NEXT: call void @llvm.trap()
|
||||||
|
|||||||
@@ -739,7 +739,7 @@ pub enum Tricky {
|
|||||||
|
|
||||||
const _: () = assert!(std::intrinsics::discriminant_value(&Tricky::V100) == 100);
|
const _: () = assert!(std::intrinsics::discriminant_value(&Tricky::V100) == 100);
|
||||||
|
|
||||||
// CHECK-LABEL: define noundef{{( range\(i8 [0-9]+, [0-9]+\))?}} i8 @discriminant6(i8 noundef %e)
|
// CHECK-LABEL: define noundef{{( range\(i8 [0-9]+, [0-9]+\))?}} i8 @discriminant6(i8 noundef{{( zeroext)?}} %e)
|
||||||
// CHECK-NEXT: start:
|
// CHECK-NEXT: start:
|
||||||
// CHECK-NEXT: %[[REL_VAR:.+]] = add i8 %e, -66
|
// CHECK-NEXT: %[[REL_VAR:.+]] = add i8 %e, -66
|
||||||
// CHECK-NEXT: %[[IS_NICHE:.+]] = icmp ult i8 %[[REL_VAR]], -56
|
// CHECK-NEXT: %[[IS_NICHE:.+]] = icmp ult i8 %[[REL_VAR]], -56
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ pub enum Never {}
|
|||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub fn make_unmake_result_never(x: i32) -> i32 {
|
pub fn make_unmake_result_never(x: i32) -> i32 {
|
||||||
// CHECK-LABEL: define i32 @make_unmake_result_never(i32 %x)
|
// CHECK-LABEL: define i32 @make_unmake_result_never(i32{{( signext)?}} %x)
|
||||||
// CHECK: start:
|
// CHECK: start:
|
||||||
// CHECK-NEXT: ret i32 %x
|
// CHECK-NEXT: ret i32 %x
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
pub struct Wrapper<T, const N: usize>([T; N]);
|
pub struct Wrapper<T, const N: usize>([T; N]);
|
||||||
|
|
||||||
// CHECK-LABEL: define {{.+}}do_repeat{{.+}}(i32 noundef %x)
|
// CHECK-LABEL: define {{.+}}do_repeat{{.+}}(i32 noundef{{( signext)?}} %x)
|
||||||
// CHECK-NEXT: start:
|
// CHECK-NEXT: start:
|
||||||
// CHECK-NOT: alloca
|
// CHECK-NOT: alloca
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
@@ -23,6 +23,6 @@ pub fn do_repeat<T: Copy, const N: usize>(x: T) -> Wrapper<T, N> {
|
|||||||
// CHECK-LABEL: @trigger_repeat_zero_len
|
// CHECK-LABEL: @trigger_repeat_zero_len
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub fn trigger_repeat_zero_len() -> Wrapper<u32, 0> {
|
pub fn trigger_repeat_zero_len() -> Wrapper<u32, 0> {
|
||||||
// CHECK: call void {{.+}}do_repeat{{.+}}(i32 noundef 4)
|
// CHECK: call void {{.+}}do_repeat{{.+}}(i32 noundef{{( signext)?}} 4)
|
||||||
do_repeat(4)
|
do_repeat(4)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
//@ add-core-stubs
|
//@ add-core-stubs
|
||||||
//@ compile-flags: -C opt-level=0 -C no-prepopulate-passes
|
//@ compile-flags: -C opt-level=0 -C no-prepopulate-passes --target=x86_64-unknown-linux-gnu
|
||||||
|
//@ needs-llvm-components: x86
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
#![feature(no_core, repr_simd, arm_target_feature, mips_target_feature, s390x_target_feature)]
|
#![feature(no_core, repr_simd)]
|
||||||
#![no_core]
|
#![no_core]
|
||||||
extern crate minicore;
|
extern crate minicore;
|
||||||
|
|
||||||
@@ -117,11 +118,7 @@ struct S([i64; 1]);
|
|||||||
// CHECK-NEXT: %[[TEMP:.+]] = load i64, ptr %[[RET]]
|
// CHECK-NEXT: %[[TEMP:.+]] = load i64, ptr %[[RET]]
|
||||||
// CHECK-NEXT: ret i64 %[[TEMP]]
|
// CHECK-NEXT: ret i64 %[[TEMP]]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
|
|
||||||
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
|
|
||||||
#[cfg_attr(target_arch = "x86", target_feature(enable = "sse"))]
|
#[cfg_attr(target_arch = "x86", target_feature(enable = "sse"))]
|
||||||
#[cfg_attr(target_arch = "mips", target_feature(enable = "msa"))]
|
|
||||||
#[cfg_attr(target_arch = "s390x", target_feature(enable = "vector"))]
|
|
||||||
pub extern "C" fn single_element_simd_to_scalar(b: S) -> i64 {
|
pub extern "C" fn single_element_simd_to_scalar(b: S) -> i64 {
|
||||||
unsafe { mem::transmute(b) }
|
unsafe { mem::transmute(b) }
|
||||||
}
|
}
|
||||||
@@ -133,11 +130,7 @@ pub extern "C" fn single_element_simd_to_scalar(b: S) -> i64 {
|
|||||||
// CHECK-NEXT: %[[TEMP:.+]] = load <1 x i64>, ptr %[[RET]]
|
// CHECK-NEXT: %[[TEMP:.+]] = load <1 x i64>, ptr %[[RET]]
|
||||||
// CHECK-NEXT: ret <1 x i64> %[[TEMP]]
|
// CHECK-NEXT: ret <1 x i64> %[[TEMP]]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
|
|
||||||
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
|
|
||||||
#[cfg_attr(target_arch = "x86", target_feature(enable = "sse"))]
|
#[cfg_attr(target_arch = "x86", target_feature(enable = "sse"))]
|
||||||
#[cfg_attr(target_arch = "mips", target_feature(enable = "msa"))]
|
|
||||||
#[cfg_attr(target_arch = "s390x", target_feature(enable = "vector"))]
|
|
||||||
pub extern "C" fn scalar_to_single_element_simd(b: i64) -> S {
|
pub extern "C" fn scalar_to_single_element_simd(b: i64) -> S {
|
||||||
unsafe { mem::transmute(b) }
|
unsafe { mem::transmute(b) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ pub fn test_uninhabited_ret_by_ref() {
|
|||||||
pub fn test_uninhabited_ret_by_ref_with_arg(rsi: u32) {
|
pub fn test_uninhabited_ret_by_ref_with_arg(rsi: u32) {
|
||||||
// CHECK: %_2 = alloca [24 x i8], align {{8|4}}
|
// CHECK: %_2 = alloca [24 x i8], align {{8|4}}
|
||||||
// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 24, )?}}ptr nonnull %_2)
|
// CHECK-NEXT: call void @llvm.lifetime.start.p0({{(i64 24, )?}}ptr nonnull %_2)
|
||||||
// CHECK-NEXT: call void @opaque_with_arg({{.*}} sret([24 x i8]) {{.*}} %_2, i32 noundef %rsi) #2
|
// CHECK-NEXT: call void @opaque_with_arg({{.*}} sret([24 x i8]) {{.*}} %_2, i32 noundef{{( signext)?}} %rsi) #2
|
||||||
// CHECK-NEXT: unreachable
|
// CHECK-NEXT: unreachable
|
||||||
unsafe {
|
unsafe {
|
||||||
opaque_with_arg(rsi);
|
opaque_with_arg(rsi);
|
||||||
|
|||||||
Reference in New Issue
Block a user