> Yes, I realize that, but it looks like that code is not doing
> something because old integrate.c choked on it. Quoting that part of
> the patch:
>
> Index: expmed.c
> ===================================================================
> --- expmed.c  (revision 187936)
> +++ expmed.c  (working copy)
> @@ -1866,6 +1866,9 @@ extract_fixed_bit_field (enum machine_mode tmode,
>            shift it so it does.  */
>         /* Maybe propagate the target for the shift.  */
>         /* But not if we will return it--could confuse integrate.c.  */
> +       /* ??? What does the above comment mean in relation to the code
> +          below?  NB, integrate.c is no more, so I guess it can't be
> +          confused by anything anymore...  */
>         rtx subtarget = (target != 0 && REG_P (target) ? target : 0);
>         if (tmode != mode) subtarget = 0;
>         op0 = expand_shift (RSHIFT_EXPR, mode, op0, bitpos, subtarget, 1);
>
> Does that "But not if..." comment refer to the "if (tmode != mode)
> subtarget = 0;" line? Of so, can/should we drop that line (as well as
> the comment)? I don't know this part of the compiler well enough to
> tell.

I don't think it's a direct reference.  There is the same pattern at the end of 
the function, where TARGET has already been zeroed if mode != tmode.  If the 
mode don't match, expand_shift cannot reuse [SUB]TARGET as-is, so the code 
consistently avoids to pass it.

I'd just drop the dangling reference to integrate.c and reformat the line

if (tmode != mode) subtarget = 0;

into

if (mode != mode)
  subtarget = 0;

to make it more closely ressemble the other instance.

-- 
Eric Botcazou

Reply via email to