[Bug target/79636] [5/6/7 Regression] ICE in assign_by_spills, at lra-assigns.c:1457

2017-02-23 Thread jakub at gcc dot gnu.org
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

2017-02-23 Thread vmakarov at gcc dot gnu.org
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

2017-02-20 Thread jakub at gcc dot gnu.org
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.