Merge the intrinsic and user tests for select_unpredictable
[1] mentions that having a single test with `-Zmerge-functions=disabled` is preferable to having two separate tests. Apply that to the new `select_unpredicatble` test here. [1]: https://github.com/rust-lang/rust/pull/133964#issuecomment-2569693325
This commit is contained in:
parent
1891c28669
commit
d42c3ae02f
2 changed files with 33 additions and 36 deletions
|
@ -1,35 +0,0 @@
|
||||||
//@ compile-flags: -O
|
|
||||||
|
|
||||||
#![feature(select_unpredictable)]
|
|
||||||
#![crate_type = "lib"]
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub fn test_int(p: bool, a: u64, b: u64) -> u64 {
|
|
||||||
// CHECK-LABEL: define{{.*}} @test_int
|
|
||||||
// CHECK: select i1 %p, i64 %a, i64 %b, !unpredictable
|
|
||||||
p.select_unpredictable(a, b)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub fn test_pair(p: bool, a: (u64, u64), b: (u64, u64)) -> (u64, u64) {
|
|
||||||
// CHECK-LABEL: define{{.*}} @test_pair
|
|
||||||
// CHECK: select i1 %p, {{.*}}, !unpredictable
|
|
||||||
p.select_unpredictable(a, b)
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Large {
|
|
||||||
e: [u64; 100],
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub fn test_struct(p: bool, a: Large, b: Large) -> Large {
|
|
||||||
// CHECK-LABEL: define{{.*}} @test_struct
|
|
||||||
// CHECK: select i1 %p, {{.*}}, !unpredictable
|
|
||||||
p.select_unpredictable(a, b)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
pub fn test_zst(p: bool, a: (), b: ()) -> () {
|
|
||||||
// CHECK-LABEL: define{{.*}} @test_zst
|
|
||||||
p.select_unpredictable(a, b)
|
|
||||||
}
|
|
|
@ -1,8 +1,11 @@
|
||||||
//@ compile-flags: -O
|
//@ compile-flags: -O -Zmerge-functions=disabled
|
||||||
|
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
|
#![feature(select_unpredictable)]
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
/* Test the intrinsic */
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub fn test_int(p: bool, a: u64, b: u64) -> u64 {
|
pub fn test_int(p: bool, a: u64, b: u64) -> u64 {
|
||||||
// CHECK-LABEL: define{{.*}} @test_int
|
// CHECK-LABEL: define{{.*}} @test_int
|
||||||
|
@ -33,3 +36,32 @@ pub fn test_zst(p: bool, a: (), b: ()) -> () {
|
||||||
// CHECK-LABEL: define{{.*}} @test_zst
|
// CHECK-LABEL: define{{.*}} @test_zst
|
||||||
core::intrinsics::select_unpredictable(p, a, b)
|
core::intrinsics::select_unpredictable(p, a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test the user-facing version */
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub fn test_int2(p: bool, a: u64, b: u64) -> u64 {
|
||||||
|
// CHECK-LABEL: define{{.*}} @test_int2
|
||||||
|
// CHECK: select i1 %p, i64 %a, i64 %b, !unpredictable
|
||||||
|
p.select_unpredictable(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub fn test_pair2(p: bool, a: (u64, u64), b: (u64, u64)) -> (u64, u64) {
|
||||||
|
// CHECK-LABEL: define{{.*}} @test_pair2
|
||||||
|
// CHECK: select i1 %p, {{.*}}, !unpredictable
|
||||||
|
p.select_unpredictable(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub fn test_struct2(p: bool, a: Large, b: Large) -> Large {
|
||||||
|
// CHECK-LABEL: define{{.*}} @test_struct2
|
||||||
|
// CHECK: select i1 %p, {{.*}}, !unpredictable
|
||||||
|
p.select_unpredictable(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub fn test_zst2(p: bool, a: (), b: ()) -> () {
|
||||||
|
// CHECK-LABEL: define{{.*}} @test_zst2
|
||||||
|
p.select_unpredictable(a, b)
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue