<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rust/compiler/rustc_codegen_ssa/src/mir, branch stable</title>
<subtitle>https://github.com/rust-lang/rust
</subtitle>
<id>http://git.dreamy.place/mirrors/rust/atom?h=stable</id>
<link rel='self' href='http://git.dreamy.place/mirrors/rust/atom?h=stable'/>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/'/>
<updated>2025-07-31T12:19:27+00:00</updated>
<entry>
<title>remove rustc_attr_data_structures</title>
<updated>2025-07-31T12:19:27+00:00</updated>
<author>
<name>Jana Dönszelmann</name>
<email>jana@donsz.nl</email>
</author>
<published>2025-07-31T09:00:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=e1d3ad89c7a2ad4f5d944a7fee1298ffe8c99645'/>
<id>urn:sha1:e1d3ad89c7a2ad4f5d944a7fee1298ffe8c99645</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Rollup merge of #144232 - xacrimon:explicit-tail-call, r=WaffleLapkin</title>
<updated>2025-07-31T05:42:00+00:00</updated>
<author>
<name>Stuart Cook</name>
<email>Zalathar@users.noreply.github.com</email>
</author>
<published>2025-07-31T05:42:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=8628b78f24c01026d01b82afd3ec91a2019fe647'/>
<id>urn:sha1:8628b78f24c01026d01b82afd3ec91a2019fe647</id>
<content type='text'>
Implement support for `become` and explicit tail call codegen for the LLVM backend

This PR implements codegen of explicit tail calls via `become` in `rustc_codegen_ssa` and support within the LLVM backend. Completes a task on (https://github.com/rust-lang/rust/issues/112788). This PR implements all the necessary bits to make explicit tail calls usable, other backends have received stubs for now and will ICE if you use `become` on them. I suspect there is some bikeshedding to be done on how we should go about implementing this for other backends, but it should be relatively straightforward for GCC after this is merged.

During development I also put together a POC bytecode VM based on tail call dispatch to test these changes out and analyze the codegen to make sure it generates expected assembly. That is available [here](https://github.com/xacrimon/tcvm).
</content>
</entry>
<entry>
<title>Auto merge of #144347 - scottmcm:ssa-enums-v0, r=WaffleLapkin</title>
<updated>2025-07-27T06:37:55+00:00</updated>
<author>
<name>bors</name>
<email>bors@rust-lang.org</email>
</author>
<published>2025-07-27T06:37:55+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=86ef32029427cfc4161a3fd7a51992302f7c5552'/>
<id>urn:sha1:86ef32029427cfc4161a3fd7a51992302f7c5552</id>
<content type='text'>
No longer need `alloca`s for consuming `Result&lt;!, i32&gt;` and similar

In optimized builds GVN gets rid of these already, but in `opt-level=0` we actually make `alloca`s for this, which particularly impacts `?`-style things that use actually-only-one-variant types like this.

While doing so, rewrite `LocalAnalyzer::process_place` to be non-recursive, solving a 6+ year old FIXME.

r? codegen
</content>
</entry>
<entry>
<title>Auto merge of #143860 - scottmcm:transmute-always-rvalue, r=WaffleLapkin</title>
<updated>2025-07-26T22:45:18+00:00</updated>
<author>
<name>bors</name>
<email>bors@rust-lang.org</email>
</author>
<published>2025-07-26T22:45:18+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=283a0746a244a88503fed61844f44df925ccdbb6'/>
<id>urn:sha1:283a0746a244a88503fed61844f44df925ccdbb6</id>
<content type='text'>
Let `codegen_transmute_operand` just handle everything

When combined with rust-lang/rust#143720, this means `rvalue_creates_operand` can just return `true` for *every* `Rvalue`.  (A future PR could consider removing it, though just letting it optimize out is fine for now.)

It's nicer anyway, IMHO, because it avoids needing the layout checks to be consistent in the two places, and thus is an overall reduction in code.  Plus it's a more helpful building block when used in other places this way.

(TBH, it probably would have been better to have it this way the whole time, but I clearly didn't understand `rvalue_creates_operand` when I originally wrote rust-lang/rust#109843.)
</content>
</entry>
<entry>
<title>Implement support for explicit tail calls in the MIR block builders and the LLVM codegen backend.</title>
<updated>2025-07-25T23:02:29+00:00</updated>
<author>
<name>Joel Wejdenstål</name>
<email>joel.wejdenstal@gmail.com</email>
</author>
<published>2025-07-25T19:21:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=a448837045326d7c33059dc3aa2d1d87529dcf3d'/>
<id>urn:sha1:a448837045326d7c33059dc3aa2d1d87529dcf3d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Rollup merge of #144209 - scottmcm:assume_less, r=lcnr,dianqk</title>
<updated>2025-07-25T09:16:36+00:00</updated>
<author>
<name>Matthias Krüger</name>
<email>476013+matthiaskrgr@users.noreply.github.com</email>
</author>
<published>2025-07-25T09:16:36+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=f414e7ac54c026c6c8b7355cbb0d9ec553c31d12'/>
<id>urn:sha1:f414e7ac54c026c6c8b7355cbb0d9ec553c31d12</id>
<content type='text'>
Don't emit two `assume`s in transmutes when one is a subset of the other

For example, transmuting between `bool` and `Ordering` doesn't need two `assume`s because one range is a superset of the other.

Multiple are still used for things like `char` &lt;-&gt; `NonZero&lt;u32&gt;`, which overlap but where neither fully contains the other.
</content>
</entry>
<entry>
<title>Remove useless lifetime parameter.</title>
<updated>2025-07-23T23:54:37+00:00</updated>
<author>
<name>Camille GILLOT</name>
<email>gillot.camille@gmail.com</email>
</author>
<published>2025-07-03T18:41:12+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=0460c92d527dbada3fde227d3f01e6d1e132a186'/>
<id>urn:sha1:0460c92d527dbada3fde227d3f01e6d1e132a186</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Give an AllocId to ConstValue::Slice.</title>
<updated>2025-07-23T23:54:37+00:00</updated>
<author>
<name>Camille GILLOT</name>
<email>gillot.camille@gmail.com</email>
</author>
<published>2023-10-13T20:20:57+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=9ff071219bca913e45235568defadd5ab840c50a'/>
<id>urn:sha1:9ff071219bca913e45235568defadd5ab840c50a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Don't emit two `assume`s in transmutes when one is a subset of the other</title>
<updated>2025-07-23T16:16:32+00:00</updated>
<author>
<name>Scott McMurray</name>
<email>scottmcm@users.noreply.github.com</email>
</author>
<published>2025-07-20T07:17:22+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=a93a9aa2d57564660b2c28e5c1cdda7943989f17'/>
<id>urn:sha1:a93a9aa2d57564660b2c28e5c1cdda7943989f17</id>
<content type='text'>
For example, transmuting between `bool` and `Ordering` doesn't need two `assume`s because one range is a superset of the other.

Multiple are still used for things like `char` &lt;-&gt; `NonZero&lt;u32&gt;`, which overlap but where neither fully contains the other.

</content>
</entry>
<entry>
<title>Remove `rvalue_creates_operand` entirely</title>
<updated>2025-07-23T15:40:27+00:00</updated>
<author>
<name>Scott McMurray</name>
<email>scottmcm@users.noreply.github.com</email>
</author>
<published>2025-07-23T15:40:27+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=b7e025cfb64094d8672c752a9fffb12e9bc79567'/>
<id>urn:sha1:b7e025cfb64094d8672c752a9fffb12e9bc79567</id>
<content type='text'>
Split to a separate commit to it could be reverted later if necessary, should we get new `Rvalue`s where we can't handle it this way.

</content>
</entry>
</feed>
