For "pat ass", move fake stack to real stack before adjusting SP.
authorGeorge Koehler <xkernigh@netscape.net>
Wed, 28 Sep 2016 04:13:35 +0000 (00:13 -0400)
committerGeorge Koehler <xkernigh@netscape.net>
Wed, 28 Sep 2016 04:13:35 +0000 (00:13 -0400)
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.

mach/powerpc/ncg/table

index 547fe07..a5585be 100644 (file)
@@ -2004,12 +2004,19 @@ PATTERNS
        pat str $1==2                      /* Store HP */
                leaving
                        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 */
-               with CONST
+               with CONST STACK
                        gen
                                move {SUM_RC, SP, %1.val}, {GPRE, SP}
-               with GPR
+               with GPR STACK
                        gen
                                move {SUM_RR, SP, %1}, {GPRE, SP}