------- Comment #13 from ebotcazou at gcc dot gnu dot org 2006-01-25 20:15 ------- > My apologies once again for the inconvenience. In the previous version of the > patch I'd mistakenly assumed that STRICT_LOW_PART was some indication that the > SUBREG only affected the "low_part". Investigating Jan's testcase with > -mtune=i486, I now understand it really means STRICT_SUB_PART, and actually > behaves identically to SUBREG in this optimization, as we preserve all of the > unaffected bits anyway!
You're right, the manual doesn't seem to allow that kind of STRICT_LOW_PARTs: `(strict_low_part (subreg:M (reg:N R) 0))' This expression code is used in only one context: as the destination operand of a `set' expression. In addition, the operand of this expression must be a non-paradoxical `subreg' expression. The presence of `strict_low_part' says that the part of the register which is meaningful in mode N, but is not part of mode M, is not to be altered. Normally, an assignment to such a subreg is allowed to have undefined effects on the rest of the register when M is less than a word. Is that a typo in the manual? What happens on big-endian? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25703