Skip to content

Commit ab989ac

Browse files
committed
Sync from rust 9b72238
2 parents 6fbe4d9 + 15848f3 commit ab989ac

File tree

3 files changed

+21
-35
lines changed

3 files changed

+21
-35
lines changed

example/float-minmax-pass.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99

1010
#[repr(simd)]
1111
#[derive(Copy, Clone, PartialEq, Debug)]
12-
struct f32x4(pub f32, pub f32, pub f32, pub f32);
12+
struct f32x4(pub [f32; 4]);
1313

1414
use std::intrinsics::simd::*;
1515

1616
fn main() {
17-
let x = f32x4(1.0, 2.0, 3.0, 4.0);
18-
let y = f32x4(2.0, 1.0, 4.0, 3.0);
17+
let x = f32x4([1.0, 2.0, 3.0, 4.0]);
18+
let y = f32x4([2.0, 1.0, 4.0, 3.0]);
1919

2020
#[cfg(not(any(target_arch = "mips", target_arch = "mips64")))]
2121
let nan = f32::NAN;
@@ -24,13 +24,13 @@ fn main() {
2424
#[cfg(any(target_arch = "mips", target_arch = "mips64"))]
2525
let nan = f32::from_bits(f32::NAN.to_bits() - 1);
2626

27-
let n = f32x4(nan, nan, nan, nan);
27+
let n = f32x4([nan, nan, nan, nan]);
2828

2929
unsafe {
3030
let min0 = simd_fmin(x, y);
3131
let min1 = simd_fmin(y, x);
3232
assert_eq!(min0, min1);
33-
let e = f32x4(1.0, 1.0, 3.0, 3.0);
33+
let e = f32x4([1.0, 1.0, 3.0, 3.0]);
3434
assert_eq!(min0, e);
3535
let minn = simd_fmin(x, n);
3636
assert_eq!(minn, x);
@@ -40,7 +40,7 @@ fn main() {
4040
let max0 = simd_fmax(x, y);
4141
let max1 = simd_fmax(y, x);
4242
assert_eq!(max0, max1);
43-
let e = f32x4(2.0, 2.0, 4.0, 4.0);
43+
let e = f32x4([2.0, 2.0, 4.0, 4.0]);
4444
assert_eq!(max0, e);
4545
let maxn = simd_fmax(x, n);
4646
assert_eq!(maxn, x);

example/std_example.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ fn main() {
166166
enum Never {}
167167
}
168168

169-
foo(I64X2(0, 0));
169+
foo(I64X2([0, 0]));
170170

171171
transmute_fat_pointer();
172172

@@ -204,7 +204,7 @@ fn rust_call_abi() {
204204
}
205205

206206
#[repr(simd)]
207-
struct I64X2(i64, i64);
207+
struct I64X2([i64; 2]);
208208

209209
#[allow(improper_ctypes_definitions)]
210210
extern "C" fn foo(_a: I64X2) {}

src/intrinsics/simd.rs

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -180,34 +180,20 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
180180
return;
181181
}
182182

183-
// Make sure this is actually an array, since typeck only checks the length-suffixed
184-
// version of this intrinsic.
183+
// Make sure this is actually a SIMD vector.
185184
let idx_ty = fx.monomorphize(idx.node.ty(fx.mir, fx.tcx));
186-
let n: u16 = match idx_ty.kind() {
187-
ty::Array(ty, len) if matches!(ty.kind(), ty::Uint(ty::UintTy::U32)) => len
188-
.try_eval_target_usize(fx.tcx, ty::ParamEnv::reveal_all())
189-
.unwrap_or_else(|| {
190-
span_bug!(span, "could not evaluate shuffle index array length")
191-
})
192-
.try_into()
193-
.unwrap(),
194-
_ if idx_ty.is_simd()
195-
&& matches!(
196-
idx_ty.simd_size_and_type(fx.tcx).1.kind(),
197-
ty::Uint(ty::UintTy::U32)
198-
) =>
199-
{
200-
idx_ty.simd_size_and_type(fx.tcx).0.try_into().unwrap()
201-
}
202-
_ => {
203-
fx.tcx.dcx().span_err(
204-
span,
205-
format!("simd_shuffle index must be an array of `u32`, got `{}`", idx_ty),
206-
);
207-
// Prevent verifier error
208-
fx.bcx.ins().trap(TrapCode::UnreachableCodeReached);
209-
return;
210-
}
185+
let n: u16 = if idx_ty.is_simd()
186+
&& matches!(idx_ty.simd_size_and_type(fx.tcx).1.kind(), ty::Uint(ty::UintTy::U32))
187+
{
188+
idx_ty.simd_size_and_type(fx.tcx).0.try_into().unwrap()
189+
} else {
190+
fx.tcx.dcx().span_err(
191+
span,
192+
format!("simd_shuffle index must be a SIMD vector of `u32`, got `{}`", idx_ty),
193+
);
194+
// Prevent verifier error
195+
fx.bcx.ins().trap(TrapCode::UnreachableCodeReached);
196+
return;
211197
};
212198

213199
assert_eq!(x.layout(), y.layout());

0 commit comments

Comments
 (0)