This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: RFC: subreg fixing (extract_bit_field or simplify_subreg)
> > Richard, is (subreg:SI (reg:DF)) valid or not?
> >
> > If it isn't, I'm sure classic PPC creates it while building floatdidf.
>
> I think it creates (subreg:SI (reg:DI)), for this very reason.
The thing is that it doesn't always, consider the following PPC splitter:
(define_split
[(set (match_operand:DF 0 "gpc_reg_operand" "")
(match_operand:DF 1 "const_double_operand" ""))]
"! TARGET_POWERPC64 && reload_completed
&& ((GET_CODE (operands[0]) == REG && REGNO (operands[0]) <= 31)
|| (GET_CODE (operands[0]) == SUBREG
&& GET_CODE (SUBREG_REG (operands[0])) == REG
&& REGNO (SUBREG_REG (operands[0])) <= 31))"
[(set (match_dup 2) (match_dup 4))
(set (match_dup 3) (match_dup 5))]
"
{
int endian = (WORDS_BIG_ENDIAN == 0);
long l[2];
REAL_VALUE_TYPE rv;
REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
operands[2] = operand_subword (operands[0], endian, 0, DFmode);
operand_subword creates an SI subreg of a DF value, which is invalid.
It seems we should be catching this in rs6000_emit_move, and converting
the move into a DImode move.-- pre-reload.
What do you think?
Aldy