But I don't think that's enough, with the current loop it would strip the subreg of a multiword subreg and there is some logic in df_ref_record, which wouldn't see it. An alternative might be:

  while (GET_CODE (dst) == STRICT_LOW_PART
         || GET_CODE (dst) == ZERO_EXTRACT)
    {
      flags |= DF_REF_READ_WRITE | DF_REF_PARTIAL;
      loc = &XEXP (dst, 0);
      dst = *loc;
    }

  if (df_read_modify_subreg_p (dst))
    flags |= DF_REF_READ_WRITE | DF_REF_PARTIAL;

That would only leave singleword subreg and paradoxical subreg, if they should require anything.

This seems also correct, if you want to test it.

One could also restrict STRICT_LOW_PART to subregs, as after reload the subreg part is usually gone.

No, a strict_low_part of a reg is also a partial set.

Paolo

Reply via email to