[gccrs COMMIT 4/4] gccrs: Update llvm_builtins test cases
gerris.rs@gmail.com
gerris.rs@gmail.com
Mon Aug 31 13:08:30 GMT 2026
From: Yap Zhi Heng <yapzhhg@gmail.com>
gcc/testsuite/ChangeLog:
* rust/compile/llvm_builtins.rs: Removed 64-bit functions, ensure main calls all llvm
built-ins, add dg-final directives to check the generated tree dump, ensure the test
only gets compiled on x86 targets.
* rust/compile/llvm_builtins_64_bit.rs: New test derived from llvm_builtins.rs, but
for 64-bit functions.
Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.
Commit on github: https://github.com/Rust-GCC/gccrs/commit/63ea23dca8c1175c3e2b6a069f3ce1396196cee9
The commit has NOT been mentioned in any issue.
The commit has been mentioned in the following pull-request(s):
- https://github.com/Rust-GCC/gccrs/pull/4809
gcc/testsuite/rust/compile/llvm_builtins.rs | 38 ++++++++++-------
.../rust/compile/llvm_builtins_64_bit.rs | 42 +++++++++++++++++++
2 files changed, 66 insertions(+), 14 deletions(-)
create mode 100644 gcc/testsuite/rust/compile/llvm_builtins_64_bit.rs
diff --git a/gcc/testsuite/rust/compile/llvm_builtins.rs b/gcc/testsuite/rust/compile/llvm_builtins.rs
index 7f44eb02f..066c9d1a7 100644
--- a/gcc/testsuite/rust/compile/llvm_builtins.rs
+++ b/gcc/testsuite/rust/compile/llvm_builtins.rs
@@ -1,4 +1,5 @@
-// { dg-options "-mrdrnd" }
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+// { dg-options "-mrdrnd -mrdseed -fdump-tree-gimple" }
#![feature(no_core, abi_unadjusted)]
#![no_core]
@@ -8,14 +9,10 @@ extern "unadjusted" {
fn x86_rdrand16_step() -> (u16, i32);
#[link_name = "llvm.x86.rdrand.32"]
fn x86_rdrand32_step() -> (u32, i32);
- #[link_name = "llvm.x86.rdrand.64"]
- fn x86_rdrand64_step() -> (u64, i32);
#[link_name = "llvm.x86.rdseed.16"]
fn x86_rdseed16_step() -> (u16, i32);
#[link_name = "llvm.x86.rdseed.32"]
fn x86_rdseed32_step() -> (u32, i32);
- #[link_name = "llvm.x86.rdseed.64"]
- fn x86_rdseed64_step() -> (u64, i32);
#[link_name = "llvm.x86.addcarry.32"]
fn llvm_addcarry_u32(a: u8, b: u32, c: u32) -> (u8, u32);
@@ -23,12 +20,6 @@ extern "unadjusted" {
fn llvm_addcarryx_u32(a: u8, b: u32, c: u32, d: *mut u8) -> u8;
#[link_name = "llvm.x86.subborrow.32"]
fn llvm_subborrow_u32(a: u8, b: u32, c: u32) -> (u8, u32);
- #[link_name = "llvm.x86.addcarry.64"]
- fn llvm_addcarry_u64(a: u8, b: u64, c: u64) -> (u8, u64);
- #[link_name = "llvm.x86.addcarryx.u64"]
- fn llvm_addcarryx_u64(a: u8, b: u64, c: u64, d: *mut u8) -> u8;
- #[link_name = "llvm.x86.subborrow.64"]
- fn llvm_subborrow_u64(a: u8, b: u64, c: u64) -> (u8, u64);
// TODO implement the SIMD types (i16x8, f32x4, f32x8) before
// enabling these tests
@@ -43,10 +34,29 @@ extern "unadjusted" {
}
fn main() {
- let (_status2, _v1) = unsafe {
+ let (_v1, _s1) = unsafe {
+ x86_rdrand16_step() // { dg-final { scan-tree-dump-times {__builtin_ia32_rdrand16_step} 1 gimple } }
+ };
+ let (_v2, _s2) = unsafe {
+ x86_rdrand32_step() // { dg-final { scan-tree-dump-times {__builtin_ia32_rdrand32_step} 1 gimple } }
+ };
+ let (_v3, _s3) = unsafe {
+ x86_rdseed16_step() // { dg-final { scan-tree-dump-times {__builtin_ia32_rdseed_hi_step} 1 gimple } }
+ };
+ let (_v4, _s4) = unsafe {
+ x86_rdseed32_step() // { dg-final { scan-tree-dump-times {__builtin_ia32_rdseed_si_step} 1 gimple } }
+ };
+
+ // { dg-final { scan-tree-dump-times {__builtin_ia32_addcarryx_u32} 2 gimple } }
+ let (_v5, _s5) = unsafe {
llvm_addcarry_u32(0, 1, 2)
};
- let (_v2, _status2) = unsafe {
- x86_rdrand16_step()
+ let _s6 = unsafe {
+ let _temp_ptr: *mut u8;
+ llvm_addcarryx_u32(0, 1, 2, _temp_ptr)
+ };
+
+ let (_v7, _s7) = unsafe {
+ llvm_subborrow_u32(0, 1, 2) // { dg-final { scan-tree-dump-times {__builtin_ia32_sbb_u32} 1 gimple } }
};
}
diff --git a/gcc/testsuite/rust/compile/llvm_builtins_64_bit.rs b/gcc/testsuite/rust/compile/llvm_builtins_64_bit.rs
new file mode 100644
index 000000000..c3ba93b06
--- /dev/null
+++ b/gcc/testsuite/rust/compile/llvm_builtins_64_bit.rs
@@ -0,0 +1,42 @@
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && { ! ia32 } } } }
+// { dg-options "-mrdrnd -m64 -mrdseed -fdump-tree-gimple" }
+#![feature(no_core, abi_unadjusted)]
+#![no_core]
+
+#[allow(improper_ctypes)]
+extern "unadjusted" {
+ #[link_name = "llvm.x86.rdrand.64"]
+ fn x86_rdrand64_step() -> (u64, i32);
+ #[link_name = "llvm.x86.rdseed.64"]
+ fn x86_rdseed64_step() -> (u64, i32);
+
+ #[link_name = "llvm.x86.addcarry.64"]
+ fn llvm_addcarry_u64(a: u8, b: u64, c: u64) -> (u8, u64);
+ #[link_name = "llvm.x86.addcarryx.u64"]
+ fn llvm_addcarryx_u64(a: u8, b: u64, c: u64, d: *mut u8) -> u8;
+ #[link_name = "llvm.x86.subborrow.64"]
+ fn llvm_subborrow_u64(a: u8, b: u64, c: u64) -> (u8, u64);
+}
+
+fn main() {
+ let (_v1, _s1) = unsafe {
+ x86_rdrand64_step() // { dg-final { scan-tree-dump-times {__builtin_ia32_rdrand64_step} 1 gimple } }
+ };
+ let (_v2, _s2) = unsafe {
+ x86_rdseed64_step() // { dg-final { scan-tree-dump-times {__builtin_ia32_rdseed_di_step} 1 gimple } }
+ };
+
+ // { dg-final { scan-tree-dump-times {__builtin_ia32_addcarryx_u64} 2 gimple } }
+ let (_s3, _v3) = unsafe {
+ llvm_addcarry_u64(0, 1, 2)
+ };
+ let _s4 = unsafe {
+ let _temp_ptr: *mut u8;
+ llvm_addcarryx_u64(0, 1, 2, _temp_ptr)
+ };
+
+ // { dg-final { scan-tree-dump-times {__builtin_ia32_sbb_u64} 1 gimple } }
+ let (_s5, _v5) = unsafe {
+ llvm_subborrow_u64(0, 1, 2)
+ };
+}
--
2.55.0
More information about the Gcc-rust
mailing list