> Tested on x86_64-linux-gnu, mipsisa32-elf and mipsisa64-elf.  Also tested
> by making sure that there were no code differences for a set of gcc .ii
> files on gcc20 (-O2 -march=native).  OK to install?

Are you sure that generating TRUNCATEs out of nowhere in simplify_subreg is 
always correct?

> gcc/
>       * machmode.h (GET_MODE_UNIT_PRECISION): New macro.
>       * simplify-rtx.c (simplify_truncation): New function.

You should say where it comes from.

>       (simplify_unary_operation_1): Use it.  Remove sign bit test
>       for !TRULY_NOOP_TRUNCATION_MODES_P.

        (simplify_unary_operation_1) <TRUNCATE>: ...

>       (simplify_subreg): Use simplify_int_lowpart for TRUNCATE.

This function doesn't exist.  And this is misleading, it's not just for 
TRUNCATE, it's for a truncation to the lowpart.

>  /* Try to simplify a unary operation CODE whose output mode is to be
>     MODE with input operand OP whose mode was originally OP_MODE.
>     Return zero if no simplification can be made.  */
> @@ -689,12 +850,6 @@ simplify_unary_operation_1 (enum rtx_cod
>           op_mode = mode;
>         in2 = simplify_gen_unary (NOT, op_mode, in2, op_mode);
> 
> -       if (GET_CODE (in2) == NOT && GET_CODE (in1) != NOT)
> -         {
> -           rtx tem = in2;
> -           in2 = in1; in1 = tem;
> -         }
> -
>         return gen_rtx_fmt_ee (GET_CODE (op) == IOR ? AND : IOR,
>                                mode, in1, in2);
>       }

Why is this hunk here?

> @@ -5595,14 +5730,6 @@ simplify_subreg (enum machine_mode outer
>        return NULL_RTX;
>      }
> 
> -  /* Merge implicit and explicit truncations.  */
> -
> -  if (GET_CODE (op) == TRUNCATE
> -      && GET_MODE_SIZE (outermode) < GET_MODE_SIZE (innermode)
> -      && subreg_lowpart_offset (outermode, innermode) == byte)
> -    return simplify_gen_unary (TRUNCATE, outermode, XEXP (op, 0),
> -                            GET_MODE (XEXP (op, 0)));
> -
>    /* SUBREG of a hard register => just change the register number
>       and/or mode.  If the hard register is not valid in that mode,
>       suppress this simplification.  If the hard register is the stack,

Likewise.

-- 
Eric Botcazou

Reply via email to