Skip to content

Commit 76e3145

Browse files
committed
Auto merge of #123555 - DianQK:update-llvm-18, r=cuviper
Update to LLVM 18.1.3 Fixes #122805. This should work on all targets: https://rust.godbolt.org/z/svW8ha31z. r? `@cuviper`
2 parents 087ae97 + f59517f commit 76e3145

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/llvm-project

Submodule llvm-project updated 52 files

tests/codegen/issues/issue-122805.rs

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//@ compile-flags: -O
2+
3+
#![crate_type = "lib"]
4+
#![no_std]
5+
6+
// The code is from https://github.com/rust-lang/rust/issues/122805.
7+
// Ensure we do not generate the shufflevector instruction
8+
// to avoid complicating the code.
9+
// CHECK-LABEL: define{{.*}}void @convert(
10+
// CHECK-NOT: shufflevector
11+
// CHECK: insertelement <8 x i16>
12+
// CHECK-NEXT: insertelement <8 x i16>
13+
// CHECK-NEXT: insertelement <8 x i16>
14+
// CHECK-NEXT: insertelement <8 x i16>
15+
// CHECK-NEXT: insertelement <8 x i16>
16+
// CHECK-NEXT: insertelement <8 x i16>
17+
// CHECK-NEXT: insertelement <8 x i16>
18+
// CHECK-NEXT: insertelement <8 x i16>
19+
// CHECK-NEXT: store <8 x i16>
20+
// CHECK-NEXT: ret void
21+
#[no_mangle]
22+
pub fn convert(value: [u16; 8]) -> [u8; 16] {
23+
let addr16 = [
24+
value[0].to_be(),
25+
value[1].to_be(),
26+
value[2].to_be(),
27+
value[3].to_be(),
28+
value[4].to_be(),
29+
value[5].to_be(),
30+
value[6].to_be(),
31+
value[7].to_be(),
32+
];
33+
unsafe { core::mem::transmute::<_, [u8; 16]>(addr16) }
34+
}

0 commit comments

Comments
 (0)