diff options
| author | bors <bors@rust-lang.org> | 2025-03-09 01:25:48 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-03-09 01:25:48 +0000 |
| commit | 446649d46383734e9e047d072a482720216dd59c (patch) | |
| tree | 2cdb9b08907734080e46988709cb6a361fa7608f /compiler/rustc_hir/src | |
| parent | dea1661cdb6ccaa636abdeea3bd0a9804d3db240 (diff) | |
| parent | 23c6b93de8fdee21f50bfd20b8e9a30f24234fbe (diff) | |
| download | rust-446649d46383734e9e047d072a482720216dd59c.tar.gz rust-446649d46383734e9e047d072a482720216dd59c.zip | |
Auto merge of #137513 - scottmcm:identity-transmute, r=saethlin
Don't re-`assume` in `transmute`s that don't change niches
I noticed in nightly 2025-02-21 that `transmute` is emitting way more `assume`s than necessary for newtypes.
For example, the three transmutes in <https://rust.godbolt.org/z/fW1KaTc4o> emits
```rust
define noundef range(i32 1, 0) i32 `@repeatedly_transparent_transmute(i32` noundef range(i32 1, 0) %_1) unnamed_addr {
start:
%0 = sub i32 %_1, 1
%1 = icmp ule i32 %0, -2
call void `@llvm.assume(i1` %1)
%2 = sub i32 %_1, 1
%3 = icmp ule i32 %2, -2
call void `@llvm.assume(i1` %3)
%4 = sub i32 %_1, 1
%5 = icmp ule i32 %4, -2
call void `@llvm.assume(i1` %5)
%6 = sub i32 %_1, 1
%7 = icmp ule i32 %6, -2
call void `@llvm.assume(i1` %7)
%8 = sub i32 %_1, 1
%9 = icmp ule i32 %8, -2
call void `@llvm.assume(i1` %9)
%10 = sub i32 %_1, 1
%11 = icmp ule i32 %10, -2
call void `@llvm.assume(i1` %11)
ret i32 %_1
}
```
But those are all just newtypes that don't change size or niches, so none of it's needed.
After this PR it's down to just
```rust
define noundef range(i32 1, 0) i32 `@repeatedly_transparent_transmute(i32` noundef range(i32 1, 0) %_1) unnamed_addr {
start:
ret i32 %_1
}
```
because none of those `assume`s in the original actually did anything.
(Transmuting to something with a difference niche, though, still has the assumes -- the other tests continue to pass checking that.)
Diffstat (limited to 'compiler/rustc_hir/src')
0 files changed, 0 insertions, 0 deletions
