Allow wrap-around when subtracting type size to immediate in try_fold_extended_move;

This commit is contained in:
Benjamin Bouvier
2019-10-08 16:09:26 +02:00
parent 13676cafd1
commit cbbd94db02
2 changed files with 15 additions and 1 deletions

View File

@@ -508,7 +508,7 @@ fn try_fold_extended_move(
} }
let imm_bits: i64 = imm.into(); let imm_bits: i64 = imm.into();
let ireduce_ty = match dest_ty.lane_bits() as i64 - imm_bits { let ireduce_ty = match (dest_ty.lane_bits() as i64).wrapping_sub(imm_bits) {
8 => I8, 8 => I8,
16 => I16, 16 => I16,
32 => I32, 32 => I32,

View File

@@ -0,0 +1,14 @@
test simple_preopt
target x86_64
function %wraparound(i64 vmctx) -> f32 system_v {
gv0 = vmctx
gv1 = iadd_imm.i64 gv0, 48
ebb35(v0: i64):
v88 = iconst.i64 0
v89 = iconst.i64 0x8000_0000_0000_0000
v90 = ishl_imm v88, 0x8000_0000_0000_0000
v91 = sshr v90, v89; check: sshr_imm v90, 0x8000_0000_0000_0000
trap user0
}