7afed92749
Simpler checked shifts in MIR building
Doing masking to check unsigned shift amounts is overcomplicated; just comparing the shift directly saves a statement and a temporary, as well as is much easier to read as a human. And shifting by unsigned is the canonical case -- notably, all the library shifting methods (that don't support every type) take shift RHSs as `u32` -- so we might as well make that simpler since it's easy to do so.
This PR also changes *signed* shift amounts to `IntToInt` casts and then uses the same check as for unsigned. The bit-masking is a nice trick, but for example LLVM actually canonicalizes it to an unsigned comparison anyway <https://rust.godbolt.org/z/8h59fMGT4> so I don't think it's worth the effort and the extra `Constant`. (If MIR's `assert` was `assert_nz` then the masking might make sense, but when the `!=` uses another statement I think the comparison is better.)
To review, I suggest looking at
|
||
---|---|---|
.. | ||
custom | ||
async_await.a-{closure#0}.generator_resume.0.mir | ||
async_await.b-{closure#0}.generator_resume.0.mir | ||
async_await.rs | ||
enum_cast.bar.built.after.mir | ||
enum_cast.boo.built.after.mir | ||
enum_cast.droppy.built.after.mir | ||
enum_cast.foo.built.after.mir | ||
enum_cast.rs | ||
issue_49232.main.built.after.mir | ||
issue_49232.rs | ||
issue_101867.main.built.after.mir | ||
issue_101867.rs | ||
match_false_edges.full_tested_match2.built.after.mir | ||
match_false_edges.full_tested_match.built.after.mir | ||
match_false_edges.main.built.after.mir | ||
match_false_edges.rs | ||
receiver_ptr_mutability.main.built.after.mir | ||
receiver_ptr_mutability.rs | ||
shifts.rs | ||
shifts.shift_signed.built.after.mir | ||
shifts.shift_unsigned.built.after.mir | ||
simple_match.match_bool.built.after.mir | ||
simple_match.rs | ||
storage_live_dead_in_statics.rs | ||
storage_live_dead_in_statics.XXX.built.after.mir | ||
uniform_array_move_out.move_out_by_subslice.built.after.mir | ||
uniform_array_move_out.move_out_from_end.built.after.mir | ||
uniform_array_move_out.rs |