Skip to content

Commit dd7117b

Browse files
committed
Sync from rust 9c3ad80
2 parents 1ace86e + 804eeff commit dd7117b

File tree

8 files changed

+89
-23
lines changed

8 files changed

+89
-23
lines changed

example/float-minmax-pass.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@
44

55
// Test that the simd_f{min,max} intrinsics produce the correct results.
66

7-
#![feature(repr_simd, platform_intrinsics)]
7+
#![feature(repr_simd, core_intrinsics)]
88
#![allow(non_camel_case_types)]
99

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

14-
extern "platform-intrinsic" {
15-
fn simd_fmin<T>(x: T, y: T) -> T;
16-
fn simd_fmax<T>(x: T, y: T) -> T;
17-
}
14+
use std::intrinsics::simd::*;
1815

1916
fn main() {
2017
let x = f32x4(1.0, 2.0, 3.0, 4.0);

example/mini_core.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,8 +525,11 @@ pub struct Unique<T: ?Sized> {
525525
impl<T: ?Sized, U: ?Sized> CoerceUnsized<Unique<U>> for Unique<T> where T: Unsize<U> {}
526526
impl<T: ?Sized, U: ?Sized> DispatchFromDyn<Unique<U>> for Unique<T> where T: Unsize<U> {}
527527

528+
#[lang = "global_alloc_ty"]
529+
pub struct Global;
530+
528531
#[lang = "owned_box"]
529-
pub struct Box<T: ?Sized, A = ()>(Unique<T>, A);
532+
pub struct Box<T: ?Sized, A = Global>(Unique<T>, A);
530533

531534
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T> {}
532535

@@ -536,7 +539,7 @@ impl<T> Box<T> {
536539
let size = intrinsics::size_of::<T>();
537540
let ptr = libc::malloc(size);
538541
intrinsics::copy(&val as *const T as *const u8, ptr, size);
539-
Box(Unique { pointer: NonNull(ptr as *const T), _marker: PhantomData }, ())
542+
Box(Unique { pointer: NonNull(ptr as *const T), _marker: PhantomData }, Global)
540543
}
541544
}
542545
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
From 9f65e742ba3e41474e6126c6c4469c48eaa6ca7e Mon Sep 17 00:00:00 2001
2+
From: Chris Denton <chris@chrisdenton.dev>
3+
Date: Tue, 20 Feb 2024 16:01:40 -0300
4+
Subject: [PATCH] Don't use raw-dylib in std
5+
6+
---
7+
library/std/src/sys/pal/windows/c.rs | 2 +-
8+
library/std/src/sys/pal/windows/rand.rs | 3 +--
9+
2 files changed, 2 insertions(+), 3 deletions(-)
10+
11+
diff --git a/library/std/src/sys/pal/windows/c.rs b/library/std/src/sys/pal/windows/c.rs
12+
index ad8e01bfa9b..9ca8e4c16ce 100644
13+
--- a/library/std/src/sys/pal/windows/c.rs
14+
+++ b/library/std/src/sys/pal/windows/c.rs
15+
@@ -323,7 +323,7 @@ pub unsafe fn NtWriteFile(
16+
17+
// Use raw-dylib to import ProcessPrng as we can't rely on there being an import library.
18+
cfg_if::cfg_if! {
19+
-if #[cfg(not(target_vendor = "win7"))] {
20+
+if #[cfg(any())] {
21+
#[cfg(target_arch = "x86")]
22+
#[link(name = "bcryptprimitives", kind = "raw-dylib", import_name_type = "undecorated")]
23+
extern "system" {
24+
diff --git a/library/std/src/sys/pal/windows/rand.rs b/library/std/src/sys/pal/windows/rand.rs
25+
index e427546222a..f2fe42a4d51 100644
26+
--- a/library/std/src/sys/pal/windows/rand.rs
27+
+++ b/library/std/src/sys/pal/windows/rand.rs
28+
@@ -2,7 +2,7 @@
29+
use core::mem;
30+
use core::ptr;
31+
32+
-#[cfg(not(target_vendor = "win7"))]
33+
+#[cfg(any())]
34+
#[inline]
35+
pub fn hashmap_random_keys() -> (u64, u64) {
36+
let mut v = (0, 0);
37+
@@ -13,7 +13,6 @@ pub fn hashmap_random_keys() -> (u64, u64) {
38+
v
39+
}
40+
41+
-#[cfg(target_vendor = "win7")]
42+
pub fn hashmap_random_keys() -> (u64, u64) {
43+
use crate::ffi::c_void;
44+
use crate::io;
45+
--
46+
2.42.0.windows.2
47+

src/archive.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use rustc_session::Session;
88
pub(crate) struct ArArchiveBuilderBuilder;
99

1010
impl ArchiveBuilderBuilder for ArArchiveBuilderBuilder {
11-
fn new_archive_builder<'a>(&self, sess: &'a Session) -> Box<dyn ArchiveBuilder<'a> + 'a> {
11+
fn new_archive_builder<'a>(&self, sess: &'a Session) -> Box<dyn ArchiveBuilder + 'a> {
1212
Box::new(ArArchiveBuilder::new(sess, get_native_object_symbols))
1313
}
1414

src/common.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@ pub(crate) fn scalar_to_clif_type(tcx: TyCtxt<'_>, scalar: Scalar) -> Type {
3333
Integer::I64 => types::I64,
3434
Integer::I128 => types::I128,
3535
},
36+
Primitive::F16 => unimplemented!("f16_f128"),
3637
Primitive::F32 => types::F32,
3738
Primitive::F64 => types::F64,
39+
Primitive::F128 => unimplemented!("f16_f128"),
3840
// FIXME(erikdesjardins): handle non-default addrspace ptr sizes
3941
Primitive::Pointer(_) => pointer_ty(tcx),
4042
}
@@ -61,8 +63,10 @@ fn clif_type_from_ty<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> Option<types::Typ
6163
},
6264
ty::Char => types::I32,
6365
ty::Float(size) => match size {
66+
FloatTy::F16 => unimplemented!("f16_f128"),
6467
FloatTy::F32 => types::F32,
6568
FloatTy::F64 => types::F64,
69+
FloatTy::F128 => unimplemented!("f16_f128"),
6670
},
6771
ty::FnPtr(_) => pointer_ty(tcx),
6872
ty::RawPtr(TypeAndMut { ty: pointee_ty, mutbl: _ }) | ty::Ref(_, pointee_ty, _) => {

src/intrinsics/mod.rs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use rustc_middle::ty::layout::{HasParamEnv, ValidityRequirement};
2323
use rustc_middle::ty::print::{with_no_trimmed_paths, with_no_visible_paths};
2424
use rustc_middle::ty::GenericArgsRef;
2525
use rustc_span::source_map::Spanned;
26-
use rustc_span::symbol::{kw, sym, Symbol};
26+
use rustc_span::symbol::{sym, Symbol};
2727

2828
pub(crate) use self::llvm::codegen_llvm_intrinsic_call;
2929
use crate::prelude::*;
@@ -1132,7 +1132,7 @@ fn codegen_regular_intrinsic_call<'tcx>(
11321132
ret.write_cvalue(fx, val);
11331133
}
11341134

1135-
kw::Try => {
1135+
sym::catch_unwind => {
11361136
intrinsic_args!(fx, args => (f, data, catch_fn); intrinsic);
11371137
let f = f.load_scalar(fx);
11381138
let data = data.load_scalar(fx);
@@ -1152,17 +1152,26 @@ fn codegen_regular_intrinsic_call<'tcx>(
11521152
ret.write_cvalue(fx, ret_val);
11531153
}
11541154

1155-
sym::fadd_fast | sym::fsub_fast | sym::fmul_fast | sym::fdiv_fast | sym::frem_fast => {
1155+
sym::fadd_fast
1156+
| sym::fsub_fast
1157+
| sym::fmul_fast
1158+
| sym::fdiv_fast
1159+
| sym::frem_fast
1160+
| sym::fadd_algebraic
1161+
| sym::fsub_algebraic
1162+
| sym::fmul_algebraic
1163+
| sym::fdiv_algebraic
1164+
| sym::frem_algebraic => {
11561165
intrinsic_args!(fx, args => (x, y); intrinsic);
11571166

11581167
let res = crate::num::codegen_float_binop(
11591168
fx,
11601169
match intrinsic {
1161-
sym::fadd_fast => BinOp::Add,
1162-
sym::fsub_fast => BinOp::Sub,
1163-
sym::fmul_fast => BinOp::Mul,
1164-
sym::fdiv_fast => BinOp::Div,
1165-
sym::frem_fast => BinOp::Rem,
1170+
sym::fadd_fast | sym::fadd_algebraic => BinOp::Add,
1171+
sym::fsub_fast | sym::fsub_algebraic => BinOp::Sub,
1172+
sym::fmul_fast | sym::fmul_algebraic => BinOp::Mul,
1173+
sym::fdiv_fast | sym::fdiv_algebraic => BinOp::Div,
1174+
sym::frem_fast | sym::frem_algebraic => BinOp::Rem,
11661175
_ => unreachable!(),
11671176
},
11681177
x,
@@ -1246,7 +1255,17 @@ fn codegen_regular_intrinsic_call<'tcx>(
12461255

12471256
// Unimplemented intrinsics must have a fallback body. The fallback body is obtained
12481257
// by converting the `InstanceDef::Intrinsic` to an `InstanceDef::Item`.
1249-
_ => return Err(Instance::new(instance.def_id(), instance.args)),
1258+
_ => {
1259+
let intrinsic = fx.tcx.intrinsic(instance.def_id()).unwrap();
1260+
if intrinsic.must_be_overridden {
1261+
span_bug!(
1262+
source_info.span,
1263+
"intrinsic {} must be overridden by codegen_cranelift, but isn't",
1264+
intrinsic.name,
1265+
);
1266+
}
1267+
return Err(Instance::new(instance.def_id(), instance.args));
1268+
}
12501269
}
12511270

12521271
let ret_block = fx.get_block(destination.unwrap());

src/intrinsics/simd.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
743743
simd_reduce(fx, v, None, ret, &|fx, _ty, a, b| fx.bcx.ins().bxor(a, b));
744744
}
745745

746-
sym::simd_reduce_min | sym::simd_reduce_min_nanless => {
746+
sym::simd_reduce_min => {
747747
intrinsic_args!(fx, args => (v); intrinsic);
748748

749749
if !v.layout().ty.is_simd() {
@@ -762,7 +762,7 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
762762
});
763763
}
764764

765-
sym::simd_reduce_max | sym::simd_reduce_max_nanless => {
765+
sym::simd_reduce_max => {
766766
intrinsic_args!(fx, args => (v); intrinsic);
767767

768768
if !v.layout().ty.is_simd() {

src/unsize.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,6 @@ fn unsize_ptr<'tcx>(
7474
| (&ty::RawPtr(ty::TypeAndMut { ty: a, .. }), &ty::RawPtr(ty::TypeAndMut { ty: b, .. })) => {
7575
(src, unsized_info(fx, *a, *b, old_info))
7676
}
77-
(&ty::Adt(def_a, _), &ty::Adt(def_b, _)) if def_a.is_box() && def_b.is_box() => {
78-
let (a, b) = (src_layout.ty.boxed_ty(), dst_layout.ty.boxed_ty());
79-
(src, unsized_info(fx, a, b, old_info))
80-
}
8177
(&ty::Adt(def_a, _), &ty::Adt(def_b, _)) => {
8278
assert_eq!(def_a, def_b);
8379

0 commit comments

Comments
 (0)