2011/8/4 Richard Henderson <r...@redhat.com>:
> When a frame pointer is in use, we can optimize popping all
> queued parameters via a simple move from the frame pointer
> instead of an addition to the stack pointer.
>
> The new sequence is 4 insns, the old sequence was 9 insns.
>
> Committed.

It seems strange for me:
+;; Notice a special-case when adding N to SP where N results in a
+;; zero REG_ARGS_SIZE.  This is equivalent to a move from FP.
+(define_split
+  [(set (reg:HI REG_SP) (match_operand:HI 0 "register_operand" ""))]
+  "reload_completed
+   && frame_pointer_needed
+   && !cfun->calls_alloca
+   && find_reg_note (insn, REG_ARGS_SIZE, const0_rtx)"
+  [(set (reg:HI REG_SP) (reg:HI REG_Y))]
+  "")

What is it ? ... It's a transition from SP = general-register to
SP = REG_Y with set of conditions.
Generally, it's seems wrong (SP = REG) isn't equal to (SP = REG_Y).

Denis.

Reply via email to