Skip to content

Commit c3d56be

Browse files
authored
Rollup merge of #117247 - kjetilkjeka:nvptx_direct_passmode_exception, r=workingjubilee,RalfJung
NVPTX: Allow PassMode::Direct for ptx kernels for now Upgrading the nvptx toolchain to the newest nightly makes it hit the assert that links to #115666 It seems like most targets get around this by using `PassMode::Indirect`. That is impossible for the kernel as it's not a normal call, but instead the arguments are copied from CPU to GPU and the passed pointer would be invalid when it reached the GPU. I also made an experiment with `PassMode::Cast` but at least the most simple version of this broke the assembly API tests. I added fixing the pass mode in my unofficial tracking issue list (I do not have the necessary permissions to update to official one). #38788 (comment) Since the ptx_abi is currently unstable and have been working with `PassMode::Direct` for more than a year now, the steps above is hopefully sufficient to enable it as an exception until I can prioritize to fix it. I'm currently looking at steps to enable the CI for nvptx64 again and would prefer to finish that first.
2 parents a77f743 + bb45c81 commit c3d56be

File tree

1 file changed

+7
-2
lines changed
  • compiler/rustc_codegen_llvm/src

1 file changed

+7
-2
lines changed

compiler/rustc_codegen_llvm/src/abi.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,14 @@ impl<'ll, 'tcx> FnAbiLlvmExt<'ll, 'tcx> for FnAbi<'tcx, Ty<'tcx>> {
362362
// currently use this mode so we have to allow it -- but we absolutely
363363
// shouldn't let any more targets do that.
364364
// (Also see <https://github.com/rust-lang/rust/issues/115666>.)
365+
//
366+
// The unstable abi `PtxKernel` also uses Direct for now.
367+
// It needs to switch to something else before stabilization can happen.
368+
// (See issue: https://github.com/rust-lang/rust/issues/117271)
365369
assert!(
366-
matches!(&*cx.tcx.sess.target.arch, "wasm32" | "wasm64"),
367-
"`PassMode::Direct` for aggregates only allowed on wasm targets\nProblematic type: {:#?}",
370+
matches!(&*cx.tcx.sess.target.arch, "wasm32" | "wasm64")
371+
|| self.conv == Conv::PtxKernel,
372+
"`PassMode::Direct` for aggregates only allowed on wasm and `extern \"ptx-kernel\"` fns\nProblematic type: {:#?}",
368373
arg.layout,
369374
);
370375
}

0 commit comments

Comments
 (0)