Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NVPTX: Allow PassMode::Direct for ptx kernels for now #117247

Merged
merged 3 commits into from
Oct 27, 2023

Conversation

kjetilkjeka
Copy link
Contributor

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.

@rustbot
Copy link
Collaborator

rustbot commented Oct 26, 2023

r? @cjgillot

(rustbot has picked a reviewer for you, use r? to override)

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Oct 26, 2023
@kjetilkjeka
Copy link
Contributor Author

@rustbot label +O-NVPTX

@rustbot rustbot added the O-NVPTX Target: the NVPTX LLVM backend for running rust on GPUs, https://llvm.org/docs/NVPTXUsage.html label Oct 26, 2023
@RalfJung
Copy link
Member

Since the ptx_abi is currently unstable and have been working with PassMode::Direct for more than a year now,

Have you ever tried having different-but-ABI-compatible types on the caller and callee side of these functions? "Have been working" might just mean "we didn't hit the edge case that breaks it". You can use the wrong ABI for many years without realizing; the assertion helps to find those cases before they occur in production.

I admit I have no ideas how arguments for these kernel functions work. Is there a restriction on which types can be used as arguments? What happens for large array types, or structs with tons of fields (more than there are registers)? How does one even call these functions, since it sounds like it's not a regular function call?

@workingjubilee
Copy link
Member

@RalfJung Do we have any test cases that we expect a target to pass in order to declare its ABI "good"? It sounds like you have some "reasonably easy to test but persnickety to lower" ones in mind. Does the test infra support such?

compiler/rustc_codegen_llvm/src/abi.rs Outdated Show resolved Hide resolved
compiler/rustc_codegen_llvm/src/abi.rs Outdated Show resolved Hide resolved
@workingjubilee
Copy link
Member

I admit I have no ideas how arguments for these kernel functions work. Is there a restriction on which types can be used as arguments? What happens for large array types, or structs with tons of fields (more than there are registers)? How does one even call these functions, since it sounds like it's not a regular function call?

so, like, it technically IS a regular function call
...onto a different computer.
...so, RPC, with the "serializing data over the (tiny, local) network" that entails.

@kjetilkjeka Correct me if I am wrong:

The GPU, because it not only does not have access to the CPU stack, but has no concept of a stack at the PTX level, instead provides some space that the CPU is expected to write args into? And PassMode::Direct accomplishes that write, correct?

@kjetilkjeka
Copy link
Contributor Author

...so, RPC, with the "serializing data over the (tiny, local) network" that entails.

I think this is a good model. Additionally ptx-kernels are not allowed to have any return values. Any pointers to CPU memory will of course not be valid on the GPU. There are no limits on size of structs or unions that can be used as args.

In practice the nvidia (as the GPU vendor) will provide you with a C API to call these kernels . The arguments to the kernels is given as a double pointer which is interpreted as an array of pointers to the arguments. The driver uses the PTX description to know the length of the argument list and the size and alignment of the arguments. The driver (the part running on the CPU) will then be responsible for copying this memory into the correct GPU location before the kernels are dispatched.

The GPU, because it not only does not have access to the CPU stack, but has no concept of a stack at the PTX level, instead provides some space that the CPU is expected to write args into? And PassMode::Direct accomplishes that write, correct?

To make it even clearer, how the kernel are called (from the CPU) is not something Rust can influence directly since that is the CUDA drivers job. The PassMode::DIrect makes it correct on the callee side of things.

Let me also try to add a little context/history. This ABI used to miscompile due to calling make_indirect() even for these kernels. As I mentioned, that will result in invalid code. A while back I replaced this with different logic and added the unit tests for the kernel ABI. There exists a interoperability guide but it is not 100% correct compared to what the driver actually does. The behavior and tests are therefore based on mimicking the behavior of Nvidias cuda compiler (nvcc) and clang.

If there already exists a sensible way to make it correct without using PassingMode::Direct that would be great. If not it is better to keep the current behavior than to use something that is impossible to match from the caller side.

(note: it's also technically possible to dispatch kernels from kernels but I have not tested it in Rust and believe it's unsupported. I don't think it will influence this decision)

@rust-log-analyzer

This comment has been minimized.

…ect assert

Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
@kjetilkjeka kjetilkjeka force-pushed the nvptx_direct_passmode_exception branch from 1a17f0b to 4d33876 Compare October 26, 2023 22:55
Copy link
Member

@workingjubilee workingjubilee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excellent.

@workingjubilee
Copy link
Member

This only affects code using an unstable feature, in any case, which means that if the ABI is imperfect, that is to be expected, unfortunately.

Moreover, the change appears to be correct.

@RalfJung
Copy link
Member

RalfJung commented Oct 27, 2023

Do we have any test cases that we expect a target to pass in order to declare its ABI "good"? It sounds like you have some "reasonably easy to test but persnickety to lower" ones in mind. Does the test infra support such?

We have tests/ui/abi/compatibility.rs, but that test assumes that PassMode::Direct is not ever used for aggregates. (Also that test only checks for a particular kind of ABI issues. ABIs can be broken in so many wonderful ways, I have no idea how to test all of them. For instance that check cannot find #115609.) The entire rustc ABI infrastructure is based on that assumption. So the assertion that this PR proposes to disable is part of the tests which are required to ensure that the ABI is "good"; without that assertion we are basically throwing random data at LLVM and hope it works. It's a violation of the design of PassMode itself. (I'm not blaming anyone, that design was never properly documented. But that doesn't make violations of the design any less problematic.)


Can I call a function with this ABI like a regular Rust function? If yes, then how are arguments passed for such calls?

The driver uses the PTX description to know the length of the argument list and the size and alignment of the arguments. The driver (the part running on the CPU) will then be responsible for copying this memory into the correct GPU location before the kernels are dispatched.

Okay so that sounds like arguments are never passed in registers and everything that is memory-layout-compatible is also ABI-compatible. That means PassMode::Direct for aggregates is likely harmless. It's still a hack though and in re-designing the ABI handling (rust-lang/compiler-team#672) we should find a better way.

//
// The unstable abi `PtxKernel` also uses Direct for now.
// It needs to switch to something else before stabilization can happen.
// (Tracking issue abi_ptx: https://github.com/rust-lang/rust/issues/38788)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you open an issue specifically for "nvptx uses Direct for Aggregates", and link that from here and from #38788?

Copy link
Contributor Author

@kjetilkjeka kjetilkjeka Oct 27, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue is created and linked to in code comments.

I updated my suggestion post with the new link but I do not have the permissions to update the tracking issue itself. That means someone else will have to copy over the correct link if we want it in the "head post" of the tracking issue.

I also see that @workingjubilee copied my suggestion to updated text into the tracking issue in #38788 (Thanks!), but that was still with the old link.

@RalfJung
Copy link
Member

RalfJung commented Oct 27, 2023

Okay, thanks!

This important question is still open:

Can I call a function with this ABI like a regular Rust function -- directly, without passing it to the runtime? If yes, then how are arguments passed for such calls?

@kjetilkjeka
Copy link
Contributor Author

kjetilkjeka commented Oct 27, 2023

This important question is still open:

Can I call a function with this ABI like a regular Rust function -- directly, without passing it to the runtime? If yes, then how are arguments passed for such calls?

You're not supposed to. Well not directly at least.

There exists mechanisms for dispatching the kernel from the GPU. But this is, to my knowledge, different than calling a function. I can only find documentation on the programming model (not the ISA level). When I attempt to compile it to ptx to inspect the code I observe that it calls some undocumented ptx intrinsics. I assume this notify the driver to dispatch it in a similar way to what is done from the CPU and the same rules apply here. This behavior might of course change in newer version of the ptx isa, we're at version 8 now..

There's a bug in the rust compiler where calling a ptx-kernel function will generate invalid ptx. For the short term I think this should give an error message. For the longer term it could be interesting looking into supporting dynamic parallelism. This was previously not mentioned in the tracking issue so I added it to my update proposal.

@RalfJung
Copy link
Member

RalfJung commented Oct 27, 2023

You're not supposed to.

That wasn't my question. :)

What happens if you declare a extern "ptx-kernel" fn myfun(x: (i32, i32, i32)) { ... }, and then just call it as myfun((0, 1, 2)) directly from main, i.e. in the "host" part of the code? If this does not lead to a compilation error, and even more so if it does not require unsafe, then we have to worry about the ABI used for such calls.

Maybe the answer is "that should be a hard error but currently isn't"; in that case we need to adjust comments and issues appropriately.

@kjetilkjeka
Copy link
Contributor Author

kjetilkjeka commented Oct 27, 2023

If you do it from the host you're on a target where this ABI doesn't make any sense and will have a compilation error on your hands

error[E0570]: `"ptx-kernel"` is not a supported ABI for the current target

If you do it from normal device code (running on the GPU, compiling with --target nvptx64-nvidia-cuda) it will trigger the miscompilation I mentioned in my previous comment. An error will currently be given from the nvidia tooling when the ptx is lowered to binary code (cubin) suitable for a concrete GPU chip. This is not the desired behavior and at least before stabilizing this ABI it needs to at least give a proper compiler error.

Maybe the answer is "that should be a hard error but currently isn't"; in that case we need to adjust comments and issues appropriately.

Spot on for the device code. But this MR doesn't change any behavior related to this problem. Is it sufficient to flag it in the tracking issue (like I already did) or does this MR need to change anything related to this as well?

@RalfJung
Copy link
Member

will have a compilation error

Great!

Yeah then I think I can see why this current "just works" and adding the exception seems fine. Thanks for the explanations!

@bors r=workingjubilee,RalfJung rollup

@bors
Copy link
Contributor

bors commented Oct 27, 2023

📌 Commit bb45c81 has been approved by workingjubilee,RalfJung

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 27, 2023
@kjetilkjeka
Copy link
Contributor Author

Thanks to both of you for reviewing 🙂

bors added a commit to rust-lang-ci/rust that referenced this pull request Oct 27, 2023
…iaskrgr

Rollup of 7 pull requests

Successful merges:

 - rust-lang#116834 (Remove `rustc_symbol_mangling/messages.ftl`.)
 - rust-lang#117212 (Properly restore snapshot when failing to recover parsing ternary)
 - rust-lang#117246 (Fix ICE: Restrict param constraint suggestion)
 - rust-lang#117247 (NVPTX: Allow PassMode::Direct for ptx kernels for now)
 - rust-lang#117270 (Hide internal methods from documentation)
 - rust-lang#117281 (std::thread : add SAFETY comment)
 - rust-lang#117287 (fix miri target information for Test step)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit to rust-lang-ci/rust that referenced this pull request Oct 27, 2023
…iaskrgr

Rollup of 7 pull requests

Successful merges:

 - rust-lang#116834 (Remove `rustc_symbol_mangling/messages.ftl`.)
 - rust-lang#117212 (Properly restore snapshot when failing to recover parsing ternary)
 - rust-lang#117246 (Fix ICE: Restrict param constraint suggestion)
 - rust-lang#117247 (NVPTX: Allow PassMode::Direct for ptx kernels for now)
 - rust-lang#117270 (Hide internal methods from documentation)
 - rust-lang#117281 (std::thread : add SAFETY comment)
 - rust-lang#117287 (fix miri target information for Test step)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit c3d56be into rust-lang:master Oct 27, 2023
11 checks passed
@rustbot rustbot added this to the 1.75.0 milestone Oct 27, 2023
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Oct 27, 2023
Rollup merge of rust-lang#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 rust-lang#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). rust-lang#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.
bors-ferrocene bot added a commit to ferrocene/ferrocene that referenced this pull request Oct 31, 2023
74: Automated pull from upstream `master` r=tshepang a=github-actions[bot]


This PR pulls the following changes from the upstream repository:

* rust-lang/rust#117363
* rust-lang/rust#116405
* rust-lang/rust#117415
  * rust-lang/rust#117414
  * rust-lang/rust#117411
  * rust-lang/rust#117403
  * rust-lang/rust#117398
  * rust-lang/rust#117396
  * rust-lang/rust#117389
  * rust-lang/rust#116862
* rust-lang/rust#117405
  * rust-lang/rust#117395
  * rust-lang/rust#117390
  * rust-lang/rust#117383
  * rust-lang/rust#117376
  * rust-lang/rust#117370
  * rust-lang/rust#117357
  * rust-lang/rust#117356
  * rust-lang/rust#117317
  * rust-lang/rust#117132
  * rust-lang/rust#117068
  * rust-lang/rust#112463
* rust-lang/rust#117267
* rust-lang/rust#116939
* rust-lang/rust#117387
  * rust-lang/rust#117385
  * rust-lang/rust#117382
  * rust-lang/rust#117371
  * rust-lang/rust#117365
  * rust-lang/rust#117350
  * rust-lang/rust#117205
  * rust-lang/rust#117177
  * rust-lang/rust#117147
* rust-lang/rust#116485
* rust-lang/rust#117328
* rust-lang/rust#117332
* rust-lang/rust#117089
* rust-lang/rust#116733
* rust-lang/rust#116889
* rust-lang/rust#116270
* rust-lang/rust#117354
  * rust-lang/rust#117337
  * rust-lang/rust#117312
  * rust-lang/rust#117082
  * rust-lang/rust#117043
  * rust-lang/rust#115968
* rust-lang/rust#117336
  * rust-lang/rust#117325
  * rust-lang/rust#117322
  * rust-lang/rust#117259
  * rust-lang/rust#117170
* rust-lang/rust#117335
  * rust-lang/rust#117319
  * rust-lang/rust#117316
  * rust-lang/rust#117311
  * rust-lang/rust#117162
  * rust-lang/rust#115773
* rust-lang/rust#116447
* rust-lang/rust#117149
* rust-lang/rust#116240
* rust-lang/rust#117123
* rust-lang/rust#81746
* rust-lang/rust#117038
* rust-lang/rust#116609
* rust-lang/rust#117309
  * rust-lang/rust#117277
  * rust-lang/rust#117268
  * rust-lang/rust#117256
  * rust-lang/rust#117025
  * rust-lang/rust#116945
  * rust-lang/rust#116816
  * rust-lang/rust#116739
  * rust-lang/rust#116534
* rust-lang/rust#117253
* rust-lang/rust#117302
* rust-lang/rust#117197
* rust-lang/rust#116471
* rust-lang/rust#117294
  * rust-lang/rust#117287
  * rust-lang/rust#117281
  * rust-lang/rust#117270
  * rust-lang/rust#117247
  * rust-lang/rust#117246
  * rust-lang/rust#117212
  * rust-lang/rust#116834
* rust-lang/rust#103208
* rust-lang/rust#117166
* rust-lang/rust#116751
* rust-lang/rust#116858
* rust-lang/rust#117272
  * rust-lang/rust#117266
  * rust-lang/rust#117262
  * rust-lang/rust#117241
  * rust-lang/rust#117240
  * rust-lang/rust#116868
  * rust-lang/rust#114998
* rust-lang/rust#116205
* rust-lang/rust#117260
* rust-lang/rust#116035
* rust-lang/rust#113183
* rust-lang/rust#117249
  * rust-lang/rust#117243
  * rust-lang/rust#117188
  * rust-lang/rust#117114
  * rust-lang/rust#117106
  * rust-lang/rust#117032
  * rust-lang/rust#116968
* rust-lang/rust#116581
* rust-lang/rust#117228
  * rust-lang/rust#117221
  * rust-lang/rust#117214
  * rust-lang/rust#117207
  * rust-lang/rust#117202
  * rust-lang/rust#117194
  * rust-lang/rust#117143
  * rust-lang/rust#117095
  * rust-lang/rust#116905
* rust-lang/rust#117171
* rust-lang/rust#113262
* rust-lang/rust#112875
* rust-lang/rust#116983
* rust-lang/rust#117148
* rust-lang/rust#117115
* rust-lang/rust#116818
* rust-lang/rust#115872
* rust-lang/rust#117193
  * rust-lang/rust#117175
  * rust-lang/rust#117009
  * rust-lang/rust#117008
  * rust-lang/rust#116931
  * rust-lang/rust#116553
  * rust-lang/rust#116401
* rust-lang/rust#117180
  * rust-lang/rust#117173
  * rust-lang/rust#117163
  * rust-lang/rust#117159
  * rust-lang/rust#117154
  * rust-lang/rust#117152
  * rust-lang/rust#117141
  * rust-lang/rust#117111
* rust-lang/rust#117172
  * rust-lang/rust#117168
  * rust-lang/rust#117160
  * rust-lang/rust#117158
  * rust-lang/rust#117150
  * rust-lang/rust#117136
  * rust-lang/rust#117133
  * rust-lang/rust#116801
* rust-lang/rust#117165
* rust-lang/rust#117113
* rust-lang/rust#117102
* rust-lang/rust#117076
* rust-lang/rust#116236
* rust-lang/rust#116993
* rust-lang/rust#117139
* rust-lang/rust#116482
* rust-lang/rust#115796
* rust-lang/rust#117135
  * rust-lang/rust#117127
  * rust-lang/rust#117010
  * rust-lang/rust#116943
  * rust-lang/rust#116841
  * rust-lang/rust#116792
  * rust-lang/rust#116714
  * rust-lang/rust#116396
  * rust-lang/rust#116094
* rust-lang/rust#117126
  * rust-lang/rust#117105
  * rust-lang/rust#117093
  * rust-lang/rust#117092
  * rust-lang/rust#117091
  * rust-lang/rust#117081
* rust-lang/rust#116773
* rust-lang/rust#117124
* rust-lang/rust#116461
* rust-lang/rust#116435
* rust-lang/rust#116319
* rust-lang/rust#116238
* rust-lang/rust#116998
* rust-lang/rust#116300
* rust-lang/rust#117103
  * rust-lang/rust#117086
  * rust-lang/rust#117074
  * rust-lang/rust#117070
  * rust-lang/rust#117046
  * rust-lang/rust#116859
  * rust-lang/rust#107159
* rust-lang/rust#116033
* rust-lang/rust#107009
* rust-lang/rust#117087
  * rust-lang/rust#117073
  * rust-lang/rust#117064
  * rust-lang/rust#117040
  * rust-lang/rust#116978
  * rust-lang/rust#116960
* rust-lang/rust#116837
* rust-lang/rust#116835
* rust-lang/rust#116849
* rust-lang/rust#117071
  * rust-lang/rust#117069
  * rust-lang/rust#117051
  * rust-lang/rust#117049
  * rust-lang/rust#117044
  * rust-lang/rust#117042
  * rust-lang/rust#105666
* rust-lang/rust#116606
* rust-lang/rust#117066
* rust-lang/rust#115324
* rust-lang/rust#117062
* rust-lang/rust#117000
* rust-lang/rust#117007
* rust-lang/rust#117018
* rust-lang/rust#116256
* rust-lang/rust#117041
  * rust-lang/rust#117037
  * rust-lang/rust#117034
  * rust-lang/rust#116989
  * rust-lang/rust#116985
* rust-lang/rust#116950
* rust-lang/rust#116956
* rust-lang/rust#116932
* rust-lang/rust#117031
* rust-lang/rust#117030
  * rust-lang/rust#117028
  * rust-lang/rust#117026
  * rust-lang/rust#116992
  * rust-lang/rust#116981
  * rust-lang/rust#116955
  * rust-lang/rust#116928
  * rust-lang/rust#116312
* rust-lang/rust#116368
* rust-lang/rust#116922
* rust-lang/rust#117021
* rust-lang/rust#117020
  * rust-lang/rust#117019
  * rust-lang/rust#116975
  * rust-lang/rust#106601
* rust-lang/rust#116734
* rust-lang/rust#117013
  * rust-lang/rust#116995
  * rust-lang/rust#116990
  * rust-lang/rust#116974
  * rust-lang/rust#116964
  * rust-lang/rust#116961
  * rust-lang/rust#116917
  * rust-lang/rust#116911
  * rust-lang/rust#114521
* rust-lang/rust#117011
* rust-lang/rust#116958
* rust-lang/rust#116951
* rust-lang/rust#116966
* rust-lang/rust#116965
* rust-lang/rust#116962
* rust-lang/rust#116946
* rust-lang/rust#116899
* rust-lang/rust#116785
* rust-lang/rust#116838
* rust-lang/rust#116875
* rust-lang/rust#116874
* rust-lang/rust#115214
* rust-lang/rust#116810
* rust-lang/rust#116940
  * rust-lang/rust#116921
  * rust-lang/rust#116906
  * rust-lang/rust#116896
  * rust-lang/rust#116650
* rust-lang/rust#116132
* rust-lang/rust#116037
* rust-lang/rust#116923
  * rust-lang/rust#116912
  * rust-lang/rust#116908
  * rust-lang/rust#116883
  * rust-lang/rust#116829
  * rust-lang/rust#116795
  * rust-lang/rust#116761
  * rust-lang/rust#116663
* rust-lang/rust#114534
* rust-lang/rust#116402
* rust-lang/rust#116493
* rust-lang/rust#116046
* rust-lang/rust#116887
* rust-lang/rust#116885
  * rust-lang/rust#116879
  * rust-lang/rust#116870
  * rust-lang/rust#116865
  * rust-lang/rust#116856
  * rust-lang/rust#116812
* rust-lang/rust#116815
* rust-lang/rust#116814
* rust-lang/rust#116713
* rust-lang/rust#116830



Co-authored-by: Matthias Krüger <matthias.krueger@famsik.de>
Co-authored-by: antoyo <antoyo@users.noreply.github.com>
Co-authored-by: Antoni Boucher <bouanto@zoho.com>
Co-authored-by: bors <bors@rust-lang.org>
Co-authored-by: Esteban Küber <esteban@kuber.com.ar>
Co-authored-by: Kjetil Kjeka <kjetilkjeka@gmail.com>
Co-authored-by: clubby789 <jamie@hill-daniel.co.uk>
Co-authored-by: okaneco <47607823+okaneco@users.noreply.github.com>
Co-authored-by: David Tolnay <dtolnay@gmail.com>
Co-authored-by: Nadrieril <nadrieril+git@gmail.com>
Co-authored-by: Celina G. Val <celinval@amazon.com>
Co-authored-by: Ralf Jung <post@ralfj.de>
Co-authored-by: Zalathar <Zalathar@users.noreply.github.com>
Co-authored-by: Havard Eidnes <he@NetBSD.org>
Co-authored-by: Jacob Pratt <jacob@jhpratt.dev>
Co-authored-by: Kjetil Kjeka <kjetil@muybridge.com>
bors-ferrocene bot added a commit to ferrocene/ferrocene that referenced this pull request Oct 31, 2023
74: Automated pull from upstream `master` r=tshepang a=github-actions[bot]


This PR pulls the following changes from the upstream repository:

* rust-lang/rust#117363
* rust-lang/rust#116405
* rust-lang/rust#117415
  * rust-lang/rust#117414
  * rust-lang/rust#117411
  * rust-lang/rust#117403
  * rust-lang/rust#117398
  * rust-lang/rust#117396
  * rust-lang/rust#117389
  * rust-lang/rust#116862
* rust-lang/rust#117405
  * rust-lang/rust#117395
  * rust-lang/rust#117390
  * rust-lang/rust#117383
  * rust-lang/rust#117376
  * rust-lang/rust#117370
  * rust-lang/rust#117357
  * rust-lang/rust#117356
  * rust-lang/rust#117317
  * rust-lang/rust#117132
  * rust-lang/rust#117068
  * rust-lang/rust#112463
* rust-lang/rust#117267
* rust-lang/rust#116939
* rust-lang/rust#117387
  * rust-lang/rust#117385
  * rust-lang/rust#117382
  * rust-lang/rust#117371
  * rust-lang/rust#117365
  * rust-lang/rust#117350
  * rust-lang/rust#117205
  * rust-lang/rust#117177
  * rust-lang/rust#117147
* rust-lang/rust#116485
* rust-lang/rust#117328
* rust-lang/rust#117332
* rust-lang/rust#117089
* rust-lang/rust#116733
* rust-lang/rust#116889
* rust-lang/rust#116270
* rust-lang/rust#117354
  * rust-lang/rust#117337
  * rust-lang/rust#117312
  * rust-lang/rust#117082
  * rust-lang/rust#117043
  * rust-lang/rust#115968
* rust-lang/rust#117336
  * rust-lang/rust#117325
  * rust-lang/rust#117322
  * rust-lang/rust#117259
  * rust-lang/rust#117170
* rust-lang/rust#117335
  * rust-lang/rust#117319
  * rust-lang/rust#117316
  * rust-lang/rust#117311
  * rust-lang/rust#117162
  * rust-lang/rust#115773
* rust-lang/rust#116447
* rust-lang/rust#117149
* rust-lang/rust#116240
* rust-lang/rust#117123
* rust-lang/rust#81746
* rust-lang/rust#117038
* rust-lang/rust#116609
* rust-lang/rust#117309
  * rust-lang/rust#117277
  * rust-lang/rust#117268
  * rust-lang/rust#117256
  * rust-lang/rust#117025
  * rust-lang/rust#116945
  * rust-lang/rust#116816
  * rust-lang/rust#116739
  * rust-lang/rust#116534
* rust-lang/rust#117253
* rust-lang/rust#117302
* rust-lang/rust#117197
* rust-lang/rust#116471
* rust-lang/rust#117294
  * rust-lang/rust#117287
  * rust-lang/rust#117281
  * rust-lang/rust#117270
  * rust-lang/rust#117247
  * rust-lang/rust#117246
  * rust-lang/rust#117212
  * rust-lang/rust#116834
* rust-lang/rust#103208
* rust-lang/rust#117166
* rust-lang/rust#116751
* rust-lang/rust#116858
* rust-lang/rust#117272
  * rust-lang/rust#117266
  * rust-lang/rust#117262
  * rust-lang/rust#117241
  * rust-lang/rust#117240
  * rust-lang/rust#116868
  * rust-lang/rust#114998
* rust-lang/rust#116205
* rust-lang/rust#117260
* rust-lang/rust#116035
* rust-lang/rust#113183
* rust-lang/rust#117249
  * rust-lang/rust#117243
  * rust-lang/rust#117188
  * rust-lang/rust#117114
  * rust-lang/rust#117106
  * rust-lang/rust#117032
  * rust-lang/rust#116968
* rust-lang/rust#116581
* rust-lang/rust#117228
  * rust-lang/rust#117221
  * rust-lang/rust#117214
  * rust-lang/rust#117207
  * rust-lang/rust#117202
  * rust-lang/rust#117194
  * rust-lang/rust#117143
  * rust-lang/rust#117095
  * rust-lang/rust#116905
* rust-lang/rust#117171
* rust-lang/rust#113262
* rust-lang/rust#112875
* rust-lang/rust#116983
* rust-lang/rust#117148
* rust-lang/rust#117115
* rust-lang/rust#116818
* rust-lang/rust#115872
* rust-lang/rust#117193
  * rust-lang/rust#117175
  * rust-lang/rust#117009
  * rust-lang/rust#117008
  * rust-lang/rust#116931
  * rust-lang/rust#116553
  * rust-lang/rust#116401
* rust-lang/rust#117180
  * rust-lang/rust#117173
  * rust-lang/rust#117163
  * rust-lang/rust#117159
  * rust-lang/rust#117154
  * rust-lang/rust#117152
  * rust-lang/rust#117141
  * rust-lang/rust#117111
* rust-lang/rust#117172
  * rust-lang/rust#117168
  * rust-lang/rust#117160
  * rust-lang/rust#117158
  * rust-lang/rust#117150
  * rust-lang/rust#117136
  * rust-lang/rust#117133
  * rust-lang/rust#116801
* rust-lang/rust#117165
* rust-lang/rust#117113
* rust-lang/rust#117102
* rust-lang/rust#117076
* rust-lang/rust#116236
* rust-lang/rust#116993
* rust-lang/rust#117139
* rust-lang/rust#116482
* rust-lang/rust#115796
* rust-lang/rust#117135
  * rust-lang/rust#117127
  * rust-lang/rust#117010
  * rust-lang/rust#116943
  * rust-lang/rust#116841
  * rust-lang/rust#116792
  * rust-lang/rust#116714
  * rust-lang/rust#116396
  * rust-lang/rust#116094
* rust-lang/rust#117126
  * rust-lang/rust#117105
  * rust-lang/rust#117093
  * rust-lang/rust#117092
  * rust-lang/rust#117091
  * rust-lang/rust#117081
* rust-lang/rust#116773
* rust-lang/rust#117124
* rust-lang/rust#116461
* rust-lang/rust#116435
* rust-lang/rust#116319
* rust-lang/rust#116238
* rust-lang/rust#116998
* rust-lang/rust#116300
* rust-lang/rust#117103
  * rust-lang/rust#117086
  * rust-lang/rust#117074
  * rust-lang/rust#117070
  * rust-lang/rust#117046
  * rust-lang/rust#116859
  * rust-lang/rust#107159
* rust-lang/rust#116033
* rust-lang/rust#107009
* rust-lang/rust#117087
  * rust-lang/rust#117073
  * rust-lang/rust#117064
  * rust-lang/rust#117040
  * rust-lang/rust#116978
  * rust-lang/rust#116960
* rust-lang/rust#116837
* rust-lang/rust#116835
* rust-lang/rust#116849
* rust-lang/rust#117071
  * rust-lang/rust#117069
  * rust-lang/rust#117051
  * rust-lang/rust#117049
  * rust-lang/rust#117044
  * rust-lang/rust#117042
  * rust-lang/rust#105666
* rust-lang/rust#116606
* rust-lang/rust#117066
* rust-lang/rust#115324
* rust-lang/rust#117062
* rust-lang/rust#117000
* rust-lang/rust#117007
* rust-lang/rust#117018
* rust-lang/rust#116256
* rust-lang/rust#117041
  * rust-lang/rust#117037
  * rust-lang/rust#117034
  * rust-lang/rust#116989
  * rust-lang/rust#116985
* rust-lang/rust#116950
* rust-lang/rust#116956
* rust-lang/rust#116932
* rust-lang/rust#117031
* rust-lang/rust#117030
  * rust-lang/rust#117028
  * rust-lang/rust#117026
  * rust-lang/rust#116992
  * rust-lang/rust#116981
  * rust-lang/rust#116955
  * rust-lang/rust#116928
  * rust-lang/rust#116312
* rust-lang/rust#116368
* rust-lang/rust#116922
* rust-lang/rust#117021
* rust-lang/rust#117020
  * rust-lang/rust#117019
  * rust-lang/rust#116975
  * rust-lang/rust#106601
* rust-lang/rust#116734
* rust-lang/rust#117013
  * rust-lang/rust#116995
  * rust-lang/rust#116990
  * rust-lang/rust#116974
  * rust-lang/rust#116964
  * rust-lang/rust#116961
  * rust-lang/rust#116917
  * rust-lang/rust#116911
  * rust-lang/rust#114521
* rust-lang/rust#117011
* rust-lang/rust#116958
* rust-lang/rust#116951
* rust-lang/rust#116966
* rust-lang/rust#116965
* rust-lang/rust#116962
* rust-lang/rust#116946
* rust-lang/rust#116899
* rust-lang/rust#116785
* rust-lang/rust#116838
* rust-lang/rust#116875
* rust-lang/rust#116874
* rust-lang/rust#115214
* rust-lang/rust#116810
* rust-lang/rust#116940
  * rust-lang/rust#116921
  * rust-lang/rust#116906
  * rust-lang/rust#116896
  * rust-lang/rust#116650
* rust-lang/rust#116132
* rust-lang/rust#116037
* rust-lang/rust#116923
  * rust-lang/rust#116912
  * rust-lang/rust#116908
  * rust-lang/rust#116883
  * rust-lang/rust#116829
  * rust-lang/rust#116795
  * rust-lang/rust#116761
  * rust-lang/rust#116663
* rust-lang/rust#114534
* rust-lang/rust#116402
* rust-lang/rust#116493
* rust-lang/rust#116046
* rust-lang/rust#116887
* rust-lang/rust#116885
  * rust-lang/rust#116879
  * rust-lang/rust#116870
  * rust-lang/rust#116865
  * rust-lang/rust#116856
  * rust-lang/rust#116812
* rust-lang/rust#116815
* rust-lang/rust#116814
* rust-lang/rust#116713
* rust-lang/rust#116830



Co-authored-by: antoyo <antoyo@users.noreply.github.com>
Co-authored-by: Antoni Boucher <bouanto@zoho.com>
Co-authored-by: bors <bors@rust-lang.org>
Co-authored-by: Esteban Küber <esteban@kuber.com.ar>
Co-authored-by: Kjetil Kjeka <kjetilkjeka@gmail.com>
Co-authored-by: clubby789 <jamie@hill-daniel.co.uk>
Co-authored-by: okaneco <47607823+okaneco@users.noreply.github.com>
Co-authored-by: David Tolnay <dtolnay@gmail.com>
Co-authored-by: Nadrieril <nadrieril+git@gmail.com>
Co-authored-by: Celina G. Val <celinval@amazon.com>
Co-authored-by: Ralf Jung <post@ralfj.de>
Co-authored-by: Zalathar <Zalathar@users.noreply.github.com>
Co-authored-by: Havard Eidnes <he@NetBSD.org>
Co-authored-by: Jacob Pratt <jacob@jhpratt.dev>
Co-authored-by: Kjetil Kjeka <kjetil@muybridge.com>
Co-authored-by: Matthias Krüger <matthias.krueger@famsik.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
O-NVPTX Target: the NVPTX LLVM backend for running rust on GPUs, https://llvm.org/docs/NVPTXUsage.html S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants