For "pat ass", move fake stack to real stack before adjusting SP.

This fixes code that tried to "addi SP, SP, 4" to drop a value that
was in a register, not on the real stack.

Add a rule to optimize "asp 4" (which becomes "loc 4" "ass") when
the value being dropped is already in a GPR.
This commit is contained in:
George Koehler 2016-09-28 00:13:35 -04:00
parent 1e3dde915a
commit a71eee3914

View file

@ -2004,12 +2004,19 @@ PATTERNS
pat str $1==2 /* Store HP */ pat str $1==2 /* Store HP */
leaving leaving
ste ".reghp" ste ".reghp"
pat loc ass $1==4 /* Drop 4 bytes from stack */
with exact GPR
/* nop */
with STACK
gen
addi SP, SP, {CONST, 4}
pat ass /* Adjust stack by variable amount */ pat ass /* Adjust stack by variable amount */
with CONST with CONST STACK
gen gen
move {SUM_RC, SP, %1.val}, {GPRE, SP} move {SUM_RC, SP, %1.val}, {GPRE, SP}
with GPR with GPR STACK
gen gen
move {SUM_RR, SP, %1}, {GPRE, SP} move {SUM_RR, SP, %1}, {GPRE, SP}