> I think I understand what was being attempted now. IIUC, the logic > should have been (again, for the QI/SI instance): > > If at least _26_ bits are set, and if c1 is < 64, ok to make the > transformation.
Yes, that was the intended logic. > In this case, I don't see an instance where "compare (subreg (a - > c1), c2)" is not equivalent to "compare (a - c1, c2)". It appears to > be a simple typo in the last line of the conditional: > > (GET_MODE_BITSIZE (inner_mode) - mode_width - 1) > > Should be: > > (GET_MODE_BITSIZE (inner_mode) - (mode_width - 1)) > > or: > > (GET_MODE_BITSIZE (inner_mode) - mode_width + 1) Yes, I've just come to the same conclusion. Sorry about the typo. > I'll run this through a number of tests and submit an actual patch, > unless I'm still missing something... Please submit the fix for all active branches and CC me in the submission (and Roger Sayle who approved the patch). Thanks in advance. -- Eric Botcazou