Issue with reload

Segher Boessenkool segher@kernel.crashing.org
Tue Nov 3 17:23:57 GMT 2020


Hi Henri,

On Tue, Nov 03, 2020 at 04:25:32PM +0100, Henri Cloetens wrote:
> > 583: r990:SI=zero_extend(r378:SI#0)
> 
> - The statement (r378:SI#0) takes the '0' subreg form reg r378:SI. 
> (shorthand in the reload dump.)

And it doesn't say what mode subreg it is (QImore or HImode here).
There are multiple cases like this, where the abbreviated RTL is not
conclusive (so cannot be parsed back).

> > (define_insn "zero_extendhisi2_internal"
> >   [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r,r")
> >        (zero_extend:SI (match_operand:HI 1 "movhi_operand_0" 
> "Z,C,r")))]
> 
> - However, the predicate "r" in the statement above, does not allow a 
> subreg.

Yes it does.  See register_operand in recog.c for example.  It is of
course possible your gpc_reg_operand doesn't allow it (bad idea, but I
don't know your code).

You would normally start the gpc_reg_operand code with something like

  if (SUBREG_P (op))
    op = SUBREG_REG (op);

(as well as pretty much all other register operand predicates).


Segher


More information about the Gcc-help mailing list