diff options
| author | DianQK <dianqk@dianqk.net> | 2024-04-06 22:16:10 +0800 |
|---|---|---|
| committer | DianQK <dianqk@dianqk.net> | 2024-04-07 13:01:54 +0800 |
| commit | 5acfe772fa811e08046ea849e1b4d84b11e60c34 (patch) | |
| tree | 0ad08c79d1443fabbc3d1dffd9bc459f8abeee3b | |
| parent | 87519b258c4708b573bd8d5dc6d775e57c23acac (diff) | |
| download | rust-5acfe772fa811e08046ea849e1b4d84b11e60c34.tar.gz rust-5acfe772fa811e08046ea849e1b4d84b11e60c34.zip | |
Add the test case for #122805
| -rw-r--r-- | tests/codegen/issues/issue-122805.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/codegen/issues/issue-122805.rs b/tests/codegen/issues/issue-122805.rs new file mode 100644 index 00000000000..3bfffcd4a96 --- /dev/null +++ b/tests/codegen/issues/issue-122805.rs @@ -0,0 +1,35 @@ +//@ compile-flags: -O +//@ min-llvm-version: 18.1.3 + +#![crate_type = "lib"] +#![no_std] + +// The code is from https://github.com/rust-lang/rust/issues/122805. +// Ensure we do not generate the shufflevector instruction +// to avoid complicating the code. +// CHECK-LABEL: define{{.*}}void @convert( +// CHECK-NOT: shufflevector +// CHECK: insertelement <8 x i16> +// CHECK-NEXT: insertelement <8 x i16> +// CHECK-NEXT: insertelement <8 x i16> +// CHECK-NEXT: insertelement <8 x i16> +// CHECK-NEXT: insertelement <8 x i16> +// CHECK-NEXT: insertelement <8 x i16> +// CHECK-NEXT: insertelement <8 x i16> +// CHECK-NEXT: insertelement <8 x i16> +// CHECK-NEXT: store <8 x i16> +// CHECK-NEXT: ret void +#[no_mangle] +pub fn convert(value: [u16; 8]) -> [u8; 16] { + let addr16 = [ + value[0].to_be(), + value[1].to_be(), + value[2].to_be(), + value[3].to_be(), + value[4].to_be(), + value[5].to_be(), + value[6].to_be(), + value[7].to_be(), + ]; + unsafe { core::mem::transmute::<_, [u8; 16]>(addr16) } +} |
