On 01/11/2019 04:58 AM, Richard Sandiford wrote:
Hi Vlad,
I think for !WORDS_BIG_ENDIAN the equivalent problem to:
|| !TEST_HARD_REG_BIT (reg_class_contents[rclass],
hard_regno - nregs_diff)))
would be:
|| !TEST_HARD_REG_BIT (reg_class_contents[rclass],
hard_regno + biggest_nregs - 1)))
Where does that little-endian check happen? I wasn't sure why
"biggest_mode goes outside the class" problems only occured here
for big-endian.
Yes, you are right. Although probability of the same problem for little
endian is much smaller, it is still present. I am working on it.
It would be nice to avoid wrong assignments in IRA too but it is too
much work. LRA will fix wrong assignments (by spilling and probably
reassignment afterwards) but sometimes with worse result.