Fix constant-offset folding to use the correct operand for stores.

This commit is contained in:
Dan Gohman
2018-10-26 06:05:54 -07:00
committed by Benjamin Bouvier
parent 2de5542139
commit f1db50aa76
2 changed files with 15 additions and 1 deletions

View File

@@ -16,3 +16,17 @@ ebb0(v0: i64):
; nextln: [RexOp1ldDisp8#808b] v2 = load.i64 notrap aligned v0+16 ; nextln: [RexOp1ldDisp8#808b] v2 = load.i64 notrap aligned v0+16
; nextln: [Op1ret#c3] return v2 ; nextln: [Op1ret#c3] return v2
; nextln: } ; nextln: }
function u0:1(i64, i64 vmctx) {
ebb0(v3: i64, v0: i64):
v1 = iadd_imm.i64 v0, 16
[RexOp1stDisp8#8089] store.i64 notrap aligned v3, v1
[Op1ret#c3] return
}
; sameln: function u0:1(i64, i64 vmctx) fast {
; nextln: ebb0(v3: i64, v0: i64):
; nextln: v1 = iadd_imm v0, 16
; nextln: [RexOp1stDisp8#8089] store notrap aligned v3, v0+16
; nextln: [Op1ret#c3] return
; nextln: }

View File

@@ -329,7 +329,7 @@ fn optimize_complex_addresses(pos: &mut EncCursor, inst: Inst, isa: &TargetIsa)
.. ..
} => { } => {
if let Some(imm) = offset.try_add_i64(imm.into()) { if let Some(imm) = offset.try_add_i64(imm.into()) {
store_args[0] = arg; store_args[1] = arg;
*offset = imm; *offset = imm;
} else { } else {
// Overflow. // Overflow.