[Bug target/79636] [5/6/7 Regression] ICE in assign_by_spills, at lra-assigns.c:1457
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79636 Jakub Jelinek changed: What|Removed |Added Priority|P2 |P4
[Bug target/79636] [5/6/7 Regression] ICE in assign_by_spills, at lra-assigns.c:1457
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79636 --- Comment #2 from Vladimir Makarov --- The bug is also present in GCC-4.7 which uses the old reload pass. But GCC-4.4 works ok on the test. The culprit is in udivmod. GCC-4.4 generates a shift instead of udivmod generated by GCC-4.7 and the trunk. As for more accurate live analysis based on partial availability. It was implemented in global.c 15 years ago. Unfortunately, it created more problems than solutions and was removed in a short time. DF-infastructure has analogous code (DF_LIVE problem) but it is not used for the same reasons (I remember people tried this too in global.c). So the simplest solution would be generating the shift for -O0 too. Another alternative is to implement hard reg live range splitting in LRA for this case but it would be a dangerous approach when we are close to the release. The code is very questionable to me. I'd never use dx for register variable in a real program as it is used by an integer div/mod. I don't think it should be a P2 or even P3 bug.
[Bug target/79636] [5/6/7 Regression] ICE in assign_by_spills, at lra-assigns.c:1457
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79636 Jakub Jelinek changed: What|Removed |Added Priority|P3 |P2 Status|UNCONFIRMED |NEW Last reconfirmed||2017-02-20 CC||jakub at gcc dot gnu.org, ||vmakarov at gcc dot gnu.org Target Milestone|--- |5.5 Summary|ICE in assign_by_spills, at |[5/6/7 Regression] ICE in |lra-assigns.c:1457 |assign_by_spills, at ||lra-assigns.c:1457 Ever confirmed|0 |1 --- Comment #1 from Jakub Jelinek --- Likely started with r164593. That said, I have no idea what can be done with similar testcases, when there is a use of uninitialized hard reg that is required for the division, RA considers it live from the beginning and thuse isn't able to reload it.