Skip to content

Commit 16a623a

Browse files
committed
Auto merge of #161434 - jhpratt:rollup-hq3P7uc, r=jhpratt
Rollup of 25 pull requests Successful merges: - #152617 (std: implement `sleep_until` for Fuchsia) - #158934 (diagnostics: fix `let x: vec![]` suggestion pointing into stdlib) - #160995 (Tiny readability cleanups for initialization dataflow analyses) - #161277 (bootstrap: Move all non-module items out of the crate root) - #161295 (std: don't panic on long-elapsed deadlines for `sleep_until`) - #161368 (Double-word align `_Unwind_Exception`) - #161370 (Uplift rustfmt macro formatting fix) - #161378 (`FlowSensitiveAnalysis` cleanups) - #161420 (Bump wasm-component-ld to 0.5.30) - #161429 (Tighten allocator `Send`/`Sync` requirements for `Arc` in preparation for refactor) - #158032 (Offload expose device selection) - #158855 (Add `desktop` method to `CommandExt`) - #160299 (Stabilize `bool::toggle`) - #160842 (Apply `&[T]` visualizer to `*const [T]`, `*mut [T]` and `Box<[T]>`) - #160981 (Partially support building and locating wasm proc-macros) - #161199 (Add regression test for non lifetime binders) - #161212 (rust-installer/install-template.sh: catch cp(1) error when installing…) - #161302 (Add regression test for inconsistent import resolution from issue 147208) - #161329 (Add regression tests for a few fixed issues with E-needs-test) - #161330 (Add regression test for nested RPIT not an iterator ICE) - #161331 (Bitset simplifications) - #161340 (rustdoc: enable scrolling only on table/code) - #161351 (Cleanup: Move impl of `#[rustc_dump_object_lifetime_defaults]`) - #161355 (Add file path to some archive build errors) - #161373 (Allow running EC2 jobs locally)
2 parents 0cfa1c4 + 636dec4 commit 16a623a

127 files changed

Lines changed: 3313 additions & 2600 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6334,9 +6334,9 @@ dependencies = [
63346334

63356335
[[package]]
63366336
name = "wasm-component-ld"
6337-
version = "0.5.27"
6337+
version = "0.5.30"
63386338
source = "registry+https://github.com/rust-lang/crates.io-index"
6339-
checksum = "5fd1ba338b2c06654988a76b13f38cad9a1c738e3275bf71ecf70eeac5d98eb4"
6339+
checksum = "baf08212b996e5acc1338cb354247de0d7cd82ada2e6568cdc5a662a998fddbd"
63406340
dependencies = [
63416341
"anyhow",
63426342
"clap",
@@ -6345,7 +6345,7 @@ dependencies = [
63456345
"libc",
63466346
"tempfile",
63476347
"wasi-preview1-component-adapter-provider",
6348-
"wasmparser 0.254.0",
6348+
"wasmparser 0.257.1",
63496349
"wat",
63506350
"windows-sys 0.61.2",
63516351
"winsplit",
@@ -6372,24 +6372,24 @@ dependencies = [
63726372

63736373
[[package]]
63746374
name = "wasm-encoder"
6375-
version = "0.254.0"
6375+
version = "0.257.1"
63766376
source = "registry+https://github.com/rust-lang/crates.io-index"
6377-
checksum = "09480d646178e5fdd12bb06e812d0af9a3a191dbc9cd697fdc86687beade7393"
6377+
checksum = "7d8ad9f0a39050867bda22e6486c316e2e52d20a42154d5bc433934bf738d085"
63786378
dependencies = [
63796379
"leb128fmt",
6380-
"wasmparser 0.254.0",
6380+
"wasmparser 0.257.1",
63816381
]
63826382

63836383
[[package]]
63846384
name = "wasm-metadata"
6385-
version = "0.254.0"
6385+
version = "0.257.1"
63866386
source = "registry+https://github.com/rust-lang/crates.io-index"
6387-
checksum = "b01df5f3b4ca7881e843f3bc0fb8a3905d79c68692250dcb8e33e698705ccdb6"
6387+
checksum = "57460ad9bce753e8a80d47a445cb87c8724ea57f463d9c906a947c41032ce1ac"
63886388
dependencies = [
63896389
"anyhow",
63906390
"indexmap",
6391-
"wasm-encoder 0.254.0",
6392-
"wasmparser 0.254.0",
6391+
"wasm-encoder 0.257.1",
6392+
"wasmparser 0.257.1",
63936393
]
63946394

63956395
[[package]]
@@ -6405,9 +6405,9 @@ dependencies = [
64056405

64066406
[[package]]
64076407
name = "wasmparser"
6408-
version = "0.254.0"
6408+
version = "0.257.1"
64096409
source = "registry+https://github.com/rust-lang/crates.io-index"
6410-
checksum = "d5769a29f799fbab136aaf65b4fe5384cd7d93fe6fc9ba0dcb6c8382a1f16e27"
6410+
checksum = "d92fc335fb6d48f46bda1d8b26b69e28320c15ac3272208333833d6e217e2b4a"
64116411
dependencies = [
64126412
"bitflags",
64136413
"hashbrown",
@@ -6418,22 +6418,22 @@ dependencies = [
64186418

64196419
[[package]]
64206420
name = "wast"
6421-
version = "254.0.0"
6421+
version = "257.0.1"
64226422
source = "registry+https://github.com/rust-lang/crates.io-index"
6423-
checksum = "e7ed4dfc8f6b9fc38b231065e2cdfbf7359af5ab945990abf09658dcc63c3e32"
6423+
checksum = "3c416ee8044cf88c5280e3d87c322b009525eb25142cf7428f0a90ea88febc3b"
64246424
dependencies = [
64256425
"bumpalo",
64266426
"leb128fmt",
64276427
"memchr",
64286428
"unicode-width 0.2.2",
6429-
"wasm-encoder 0.254.0",
6429+
"wasm-encoder 0.257.1",
64306430
]
64316431

64326432
[[package]]
64336433
name = "wat"
6434-
version = "1.254.0"
6434+
version = "1.257.1"
64356435
source = "registry+https://github.com/rust-lang/crates.io-index"
6436-
checksum = "7127f7f9b8f127c879991cecd35f494e4628bae1b0874c681414d8d8831e952c"
6436+
checksum = "672e5495f00c5fc6c6b502205bae4708aa4dd13d969754438743afe0a8af0f1d"
64376437
dependencies = [
64386438
"wast",
64396439
]
@@ -6805,9 +6805,9 @@ dependencies = [
68056805

68066806
[[package]]
68076807
name = "wit-component"
6808-
version = "0.254.0"
6808+
version = "0.257.1"
68096809
source = "registry+https://github.com/rust-lang/crates.io-index"
6810-
checksum = "b0e65bb94c369b3c4741ce3d1d2704b1fec93db7c540df0e521a097e7ceeb5be"
6810+
checksum = "2e8b7d04a4c9491ffea354923ed70c8826d52c699fe20a52e8ceca95017dddb8"
68116811
dependencies = [
68126812
"anyhow",
68136813
"bitflags",
@@ -6816,17 +6816,17 @@ dependencies = [
68166816
"serde",
68176817
"serde_derive",
68186818
"serde_json",
6819-
"wasm-encoder 0.254.0",
6819+
"wasm-encoder 0.257.1",
68206820
"wasm-metadata",
6821-
"wasmparser 0.254.0",
6821+
"wasmparser 0.257.1",
68226822
"wit-parser",
68236823
]
68246824

68256825
[[package]]
68266826
name = "wit-parser"
6827-
version = "0.254.0"
6827+
version = "0.257.1"
68286828
source = "registry+https://github.com/rust-lang/crates.io-index"
6829-
checksum = "1655131e4f7d3f0cb141f6eca71315ca40eff0f3d4de7cff0a82bacedd8c89b4"
6829+
checksum = "6f815340f0bb65d9775ae21e56b503b496683557b9b627b195d2766c25fb24ae"
68306830
dependencies = [
68316831
"anyhow",
68326832
"hashbrown",
@@ -6838,7 +6838,7 @@ dependencies = [
68386838
"serde_derive",
68396839
"serde_json",
68406840
"unicode-ident",
6841-
"wasmparser 0.254.0",
6841+
"wasmparser 0.257.1",
68426842
]
68436843

68446844
[[package]]

compiler/rustc_codegen_llvm/src/builder/gpu_offload.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,20 @@ fn generate_launcher<'ll>(cx: &CodegenCx<'ll, '_>) -> (&'ll llvm::Value, &'ll ll
197197
(tgt_decl, tgt_fn_ty)
198198
}
199199

200+
/// Declares the `omp_get_num_devices` runtime function and returns the
201+
/// declaration together with its type.
202+
pub(crate) fn declare_omp_get_num_devices<'ll>(
203+
cx: &CodegenCx<'ll, '_>,
204+
) -> (&'ll llvm::Value, &'ll llvm::Type) {
205+
let ti32 = cx.type_i32();
206+
let tgt_fn_ty = cx.type_func(&[], ti32);
207+
let name = "omp_get_num_devices";
208+
let tgt_decl = declare_offload_fn(&cx, name, tgt_fn_ty);
209+
let nounwind = llvm::AttributeKind::NoUnwind.create_attr(cx.llcx);
210+
attributes::apply_to_llfn(tgt_decl, Function, &[nounwind]);
211+
(tgt_decl, tgt_fn_ty)
212+
}
213+
200214
// What is our @1 here? A magic global, used in our data_{begin/update/end}_mapper:
201215
// @0 = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
202216
// @1 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 22, ptr @0 }, align 8
@@ -591,6 +605,7 @@ pub(crate) fn gen_call_handling<'ll, 'tcx>(
591605
offload_globals: &OffloadGlobals<'ll>,
592606
offload_dims: &OffloadKernelDims<'ll>,
593607
dyn_cache: &'ll Value,
608+
device_id: &'ll Value,
594609
) {
595610
let cx = builder.cx;
596611
let OffloadKernelGlobals {
@@ -775,15 +790,8 @@ pub(crate) fn gen_call_handling<'ll, 'tcx>(
775790
builder.store(value.2, ptr, value.0);
776791
}
777792

778-
let args = vec![
779-
s_ident_t,
780-
// FIXME(offload) give users a way to select which GPU to use.
781-
cx.get_const_i64(u64::MAX), // MAX == -1.
782-
num_workgroups,
783-
threads_per_block,
784-
region_id,
785-
a5,
786-
];
793+
let device_id = builder.sext(device_id, cx.type_i64());
794+
let args = vec![s_ident_t, device_id, num_workgroups, threads_per_block, region_id, a5];
787795
builder.call(tgt_target_kernel_ty, None, None, tgt_decl, &args, None, None);
788796
// %41 = call i32 @__tgt_target_kernel(ptr @1, i64 -1, i32 2097152, i32 256, ptr @.kernel_1.region_id, ptr %kernel_args)
789797

compiler/rustc_codegen_llvm/src/intrinsic.rs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ use crate::abi::FnAbiLlvmExt;
3737
use crate::builder::Builder;
3838
use crate::builder::autodiff::{adjust_activity_to_abi, generate_enzyme_call};
3939
use crate::builder::gpu_offload::{
40-
OffloadKernelDims, gen_call_handling, gen_define_handling, register_offload,
40+
self, OffloadKernelDims, declare_omp_get_num_devices, register_offload,
4141
};
4242
use crate::context::CodegenCx;
4343
use crate::declare::declare_raw_fn;
@@ -241,6 +241,13 @@ impl<'ll, 'tcx> IntrinsicCallBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
241241
// offload *has* a return type, but somehow works without mentioning the place
242242
return IntrinsicResult::WroteIntoPlace;
243243
}
244+
sym::offload_get_num_devices => {
245+
let (fn_decl, fn_ty) = declare_omp_get_num_devices(self.cx);
246+
247+
let llval = self.call(fn_ty, None, None, fn_decl, &[], None, None);
248+
249+
return IntrinsicResult::Operand(OperandValue::Immediate(llval));
250+
},
244251
sym::is_val_statically_known => {
245252
if let OperandValue::Immediate(imm) = args[0].val {
246253
self.call_intrinsic(
@@ -1851,7 +1858,11 @@ fn codegen_offload<'ll, 'tcx>(
18511858
OperandValue::Immediate(val) => val,
18521859
_ => panic!("unparsable"),
18531860
};
1854-
let args = get_args_from_tuple(bx, args[4], fn_target);
1861+
let device_id = match args[4].val {
1862+
OperandValue::Immediate(val) => val,
1863+
_ => panic!("unparsable"),
1864+
};
1865+
let args = get_args_from_tuple(bx, args[5], fn_target);
18551866
let target_symbol = mangle_offload_export(tcx, fn_target);
18561867

18571868
let sig = tcx.fn_sig(fn_target.def_id()).instantiate(tcx, fn_target.args).skip_norm_wip();
@@ -1882,8 +1893,9 @@ fn codegen_offload<'ll, 'tcx>(
18821893
}
18831894
};
18841895
register_offload(cx);
1885-
let offload_data = gen_define_handling(&cx, &metadata, target_symbol, offload_globals);
1886-
gen_call_handling(
1896+
let offload_data =
1897+
gpu_offload::gen_define_handling(&cx, &metadata, target_symbol, offload_globals);
1898+
gpu_offload::gen_call_handling(
18871899
bx,
18881900
&offload_data,
18891901
&args,
@@ -1892,6 +1904,7 @@ fn codegen_offload<'ll, 'tcx>(
18921904
offload_globals,
18931905
&offload_dims,
18941906
&dyn_cache,
1907+
&device_id,
18951908
);
18961909
}
18971910

compiler/rustc_codegen_ssa/src/back/archive.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -623,8 +623,9 @@ impl<'a> ArArchiveBuilder<'a> {
623623
io::Error::new(
624624
io::ErrorKind::InvalidData,
625625
format!(
626-
"archive member at offset {start} with size {} \
626+
"archive member of {} at offset {start} with size {} \
627627
exceeds archive size {} in `{}`",
628+
src_archive.0.display(),
628629
file_range.1,
629630
archive_data.len(),
630631
src_archive.0.display(),
@@ -642,11 +643,18 @@ impl<'a> ArArchiveBuilder<'a> {
642643
}
643644
}
644645
ArchiveEntrySource::File(file) => unsafe {
645-
let mmap = Mmap::map(
646-
File::open(file)
647-
.map_err(|err| io_error_context("failed to open object file", err))?,
648-
)
649-
.map_err(|err| io_error_context("failed to map object file", err))?;
646+
let mmap = Mmap::map(File::open(&file).map_err(|err| {
647+
io_error_context(
648+
&format!("failed to open object file {}", file.display()),
649+
err,
650+
)
651+
})?)
652+
.map_err(|err| {
653+
io_error_context(
654+
&format!("failed to map object file {}", file.display()),
655+
err,
656+
)
657+
})?;
650658
if entry.kind == ArchiveEntryKind::RustObj
651659
&& let Some(sym) = &symbols
652660
{

compiler/rustc_codegen_ssa/src/mir/intrinsic.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
135135
| sym::atomic_fence
136136
| sym::atomic_singlethreadfence
137137
| sym::caller_location
138+
| sym::offload_get_num_devices
138139
| sym::return_address => {}
139140
_ => {
140141
span_bug!(

0 commit comments

Comments
 (0)