]> git.ipfire.org Git - thirdparty/gcc.git/commit
MMIX: remove generic placeholders parameters in call insn patterns.
authorHans-Peter Nilsson <hp@bitrange.com>
Sun, 18 Jul 2021 02:59:30 +0000 (04:59 +0200)
committerHans-Peter Nilsson <hp@bitrange.com>
Fri, 30 Jul 2021 21:38:49 +0000 (23:38 +0200)
commit5b2515f5ae86c21fc13021e1a8728a48e68aa7d6
tree2e40b87aaa3982154e36d264b75033f7efeac41c
parentee189a7327565cfcc2441aa308333ad3b6525e6e
MMIX: remove generic placeholders parameters in call insn patterns.

I guess the best way to describe these operands, at least for MMIX, is
"ballast".  Some targets seem to drag along one or two of the incoming
pattern operands through the rtl passes and not dropping them until
assembly output.  Let's stop doing that for MMIX.  There really are
*two* unused parameters: one is a number corresponding to the
stack-size of arguments as a const_int and the other is whatever the
target yields for targetm.calls.function_arg (args_so_far,
function_arg_info::end_marker ()).  There's a mandatory second
argument to the "call" RTX, but the target doesn't have to keep it a
variable number; it can be replaced by (const_int 0) early, like this.

Astute readers may object that as the MMIX call-type insns (PUSHJ,
PUSHGO) have a parameter in addition to the address of the called
function, so should the emitted RTL.  But, that parameter depends only
on the local function, not the called function (IOW, it's the same for
all calls in a function), and its value isn't known until frame layout
time.  Having it a parameter in the emitted RTL for the call would
just be confusing.  (Maybe this will be amended later, if/when
improving "shrink-wrapping".)

gcc:
* config/mmix/mmix.md ("call", "call_value", "*call_real")
("*call_value_real"): Don't generate rtx mentioning the generic
operands 1 and 2 to "call", and similarly for "call_value".
* config/mmix/mmix.c (mmix_print_operand_punct_valid_p)
(mmix_print_operand): Use '!' instead of 'p'.
gcc/config/mmix/mmix.c
gcc/config/mmix/mmix.md