[PATCH] Add new target-hook truncated_to_mode

Adam Nemet anemet@sonic.net
Mon Mar 13 08:02:00 GMT 2006


Paolo Bonzini writes:
> > +mips_truncated_to_mode (enum machine_mode mode, rtx x)
> > +{
> > +  gcc_assert (!TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode),
> > +				      GET_MODE_BITSIZE (GET_MODE (x)))
> > +	      && GET_MODE (x) == DImode);
> > +
> > +  return num_sign_bit_copies (x, GET_MODE (x)) >= 33;
>
> ... 
> 
> bool
> truncated_to_mode (enum machine_mode mode, rtx x)
> {
>    if (REG_P (x) && rtl_hooks.reg_truncated_to_mode (mode, x))
>      return true;
> 
>    gcc_assert (!TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode),
>                                        GET_MODE_BITSIZE (GET_MODE (x)));
>    return num_sign_bit_copies (x, GET_MODE (x)) >
> 	 GET_MODE_BITSIZE (GET_MODE (x)) - GET_MODE_BITSIZE (mode);
> }
> 
> In the MIPS case, you would have n_s_b_c (x, GET_MODE (x)) > 64 - 32.

This wouldn't work for DI->HI truncation for example.  There too only
the upper 33 bits have to match for the TRUNCATE to be unnecessary.
See comment around truncsdi in mips.md.

Adam



More information about the Gcc-patches mailing list