[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #22 from Alan Modra --- Author: amodra Date: Thu Mar 31 06:26:02 2016 New Revision: 234609 URL: https://gcc.gnu.org/viewcvs?rev=234609=gcc=rev Log: [RS6000] reload_vsx_from_gprsf splitter This is PR68973 part 2, caused by the reload_vsx_from_gprsf splitter emitting an invalid move. Part 1 deferred for branch until it is proven that the reload change is necessary. Backport from mainline 2016-02-16 Alan ModraPR target/68973 * config/rs6000/rs6000.md (reload_vsx_from_gprsf): Rewrite splitter. (p8_mtvsrd_df, p8_mtvsrd_sf): New. (p8_mtvsrd_1, p8_mtvsrd_2): Delete. (p8_mtvsrwz): New. (p8_mtvsrwz_1, p8_mtvsrwz_2): Delete. (p8_xxpermdi_): Take two DF inputs rather than one TF. (p8_fmrgow_): Likewise. (reload_vsx_from_gpr): Adjust for above. Use "wa" for clobber constraint. (reload_fpr_from_gpr): Adjust for above. Use "d" for op0 constraint. (reload_vsx_from_gprsf): Use p8_mtvsrd_sf rather than attempting to use movdi_internal64. Remove op0_di. * config/rs6000/vsx.md (vsx_xscvspdpn_directmove): Make op1 SFmode. Modified: branches/gcc-4_9-branch/gcc/ChangeLog branches/gcc-4_9-branch/gcc/config/rs6000/rs6000.md branches/gcc-4_9-branch/gcc/config/rs6000/vsx.md
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #21 from Alan Modra --- Author: amodra Date: Thu Mar 31 06:24:40 2016 New Revision: 234608 URL: https://gcc.gnu.org/viewcvs?rev=234608=gcc=rev Log: [RS6000] reload_vsx_from_gprsf splitter This is PR68973 part 2, caused by the reload_vsx_from_gprsf splitter emitting an invalid move. Part 1 deferred for branch until it is proven that the reload change is necessary. Backport from mainline 2016-02-16 Alan ModraPR target/68973 * config/rs6000/rs6000.md (reload_vsx_from_gprsf): Rewrite splitter. (p8_mtvsrd_df, p8_mtvsrd_sf): New. (p8_mtvsrd_1, p8_mtvsrd_2): Delete. (p8_mtvsrwz): New. (p8_mtvsrwz_1, p8_mtvsrwz_2): Delete. (p8_xxpermdi_): Take two DF inputs rather than one TF. (p8_fmrgow_): Likewise. (reload_vsx_from_gpr): Adjust for above. Use "wa" for clobber constraint. (reload_fpr_from_gpr): Adjust for above. Use "d" for op0 constraint. (reload_vsx_from_gprsf): Use p8_mtvsrd_sf rather than attempting to use movdi_internal64. Remove op0_di. * config/rs6000/vsx.md (vsx_xscvspdpn_directmove): Make op1 SFmode. Modified: branches/gcc-5-branch/gcc/ChangeLog branches/gcc-5-branch/gcc/config/rs6000/rs6000.md branches/gcc-5-branch/gcc/config/rs6000/vsx.md
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 Alan Modra changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution|--- |FIXED --- Comment #20 from Alan Modra --- Fixed
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #19 from Alan Modra --- Author: amodra Date: Mon Feb 15 23:29:17 2016 New Revision: 233438 URL: https://gcc.gnu.org/viewcvs?rev=233438=gcc=rev Log: [RS6000] reload_vsx_from_gprsf splitter This is PR68973 part 2, caused by the reload_vsx_from_gprsf splitter emitting an invalid move. The patch also fixes uses of TFmode, which cannot now be assumed to be IBM double-double. PR target/68973 * config/rs6000/rs6000.md (reload_vsx_from_gprsf): Rewrite splitter. (p8_mtvsrd_df, p8_mtvsrd_sf): New. (p8_mtvsrd_1, p8_mtvsrd_2): Delete. (p8_mtvsrwz): New. (p8_mtvsrwz_1, p8_mtvsrwz_2): Delete. (p8_xxpermdi_): Take two DF inputs rather than one TF. (p8_fmrgow_): Likewise. (reload_vsx_from_gpr): Make clobber IF. Adjust for above changes. (reload_fpr_from_gpr): Similarly. Use "d" for op0 constraint. (reload_vsx_from_gprsf): Use p8_mtvsrd_sf rather than attempting to use movdi_internal64. Remove op0_di. * config/rs6000/vsx.md (vsx_xscvspdpn_directmove): Make op1 SFmode. Modified: trunk/gcc/ChangeLog trunk/gcc/config/rs6000/rs6000.md trunk/gcc/config/rs6000/vsx.md
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #18 from Alan Modra --- Author: amodra Date: Sun Feb 14 01:37:40 2016 New Revision: 233406 URL: https://gcc.gnu.org/viewcvs?rev=233406=gcc=rev Log: PRE_INC with invalid hard reg PR target/68973 * reloads.c (find_reloads_address_1): For pre/post-inc/dec with an invalid hard reg, reload just the reg not the entire pre/post-inc/dec address expression. Modified: trunk/gcc/ChangeLog trunk/gcc/reload.c
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 Alan Modra changed: What|Removed |Added Assignee|segher at gcc dot gnu.org |amodra at gmail dot com --- Comment #16 from Alan Modra --- Patches posted for both the g++.dg/pr67211.C and the boost testcase.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #17 from Alan Modra --- Created attachment 37670 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37670=edit rtl dumps dumps for pr67211.C -O3 -mcpu=power7 -fno-vect-cost-model, mainline rev 233357.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 Segher Boessenkool changed: What|Removed |Added Status|NEW |ASSIGNED CC||segher at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |segher at gcc dot gnu.org
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 Alan Modra changed: What|Removed |Added CC||amodra at gmail dot com --- Comment #14 from Alan Modra --- This looks like a reload problem. The pr67211.C testcase on powerpc64le gives reload this insn (insn 155 153 156 8 (set (reg/f:DI 178 [ p3$_M_first ]) (mem/f:DI (pre_inc:DI (reg/f:DI 185 [ p3$_M_node ])) [3 MEM[base: _9, offset: 0B]+0 S8 A64])) /src/gcc.git/gcc/testsuite/g++.dg/pr67211.C:28 550 {*movdi_internal64} (expr_list:REG_INC (reg/f:DI 185 [ p3$_M_node ]) (nil))) and reload chooses to put reg 185 in fr31, likely due to using that reg in vector insns elsewhere. Of course, (pre_inc:DI (reg/f:DI 63)) isn't a valid memory address so it needs reloading. reload does that by reloading the entire address into a gpr rather than just reloading fr31. Unfortunately neither the rs6000 backend machinery nor the code in push_reload that normally handles secondary memory sees that a secondary reload is needed. There is some pre_inc code in find_reloads_address_1 that could reload just fr31 but that is currently only active for regs that already have a mem. Making that code active for invalid hard regs cures this failure. Another fix is to disable the auto_inc_dec pass (maybe we should do that anyway for powerpc processors where the update forms of memory insns are slow).
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #15 from David Edelsohn --- Improving find_reloads_address_1 seems the better path. auto_inc_dec is beneficial in recent Power processors.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 Markus Trippelsdorf changed: What|Removed |Added CC||trippels at gcc dot gnu.org --- Comment #13 from Markus Trippelsdorf --- Created attachment 37639 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37639=edit reduced testcase With today's trunk I've hit the ICE in the boost testsuite: % g++ -c -w -mcpu=power8 -O3 -mlra test_fixed_containers.ii test_fixed_containers.ii: In function ‘void test_matrix(std::B) [with T = std::complex]’: test_fixed_containers.ii:203:1: error: insn does not satisfy its constraints: } ^ (insn 1206 1205 1207 2 (set (reg:DI 108 31) (reg:DI 9 9 [970])) test_fixed_containers.ii:171 540 {*movdi_internal64} (expr_list:REG_DEAD (reg:DI 9 9 [970]) (nil))) test_fixed_containers.ii:203:1: internal compiler error: in extract_constrain_insn, at recog.c:2190
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #12 from Jakub Jelinek --- Indeed, latest trunk with -O3 -mcpu=power7 -mtune=power8 pr67211.C -fno-vect-cost-model still ICEs.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #10 from Jakub Jelinek --- Indeed, there were tons of richi's SLP changes in the last 10 days. Where one of those changes make this bug latent.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #11 from Richard Biener --- Give a cost model change exposed this I suspect the cost mode fix (PR68961) hid this again. Just debug the issue ontop of r231674 please - it is definitely a latent issue. Or try -fno-vect-cost-model on g++.dg/pr67211.C and trunk.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #6 from Bill Seurer --- As of Tuesday (19 January 2015) morning this test case was no longer failing. Something fixed things up in the Friday-Monday timespan though I do not know what it was.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #7 from Bill Seurer --- I should say that it succeeds on power8 LE. I haven't tried it on a BE system nor targeting power7.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #8 from Michael Meissner --- I did try it with svn id 232575 yesterday on a power7 BE target, using various optimization levels and various -mcpu=/-mtune= combinations.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #9 from Michael Meissner --- Whoops, I saved the response too soon. I meant I tried various combinations of optimization, -mcpu=, -mtune=, -mbig/-mlittle, -m32 and I couldn't get it to fail with subversion id 232575.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 Jakub Jelinek changed: What|Removed |Added CC||jakub at gcc dot gnu.org --- Comment #5 from Jakub Jelinek --- Mike, could you please have a look at this? This is a P1 blocker. It ICEs also with -mcpu=power7 -mtune=power7. And is again fixed with LRA as various other PPC ICEs. In IRA we have: (insn 155 153 156 8 (set (reg/f:DI 178 [ p3$_M_first ]) (mem/f:DI (pre_inc:DI (reg/f:DI 185 [ p3$_M_node ])) [3 MEM[base: _9, offset: 0B]+0 S8 A64])) pr67211.C:28 540 {*movdi_internal64} (expr_list:REG_INC (reg/f:DI 185 [ p3$_M_node ]) (nil))) and disposition for pseudo 185 looks good: 9:r185 l0 but reload decides to put r185 into a floating point register despite of that, because it is used in some VSX instruction.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 Richard Biener changed: What|Removed |Added Priority|P3 |P1
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #3 from Richard Biener --- That just made a latent issue (re-)appear. It looks like just a reg-reg DImode move - what can be possibly wrong with it?
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #4 from Michael Meissner --- I haven't looked at the bug, but on PowerPC systems before power8, the following is illegal: (insn 258 153 259 8 (set (reg:DI 9 9) (reg/f:DI 63 31 [orig:185 p3$_M_node ] [185])) pr67211.C:28 540 {*movdi_internal64} (nil)) That is because register 9 is a GPR register and register 63 is a FPR register. Power8 systems in 64-bit mode have the ability to move values between GPRs and FPRs/VSX registers, but earlier systems don't. In order to transfer stuff between the two register sets, you would need to do a store and a load. Power8 32-bit (big endian only) would need scratch registers and multiple instructions to transfer 64-bit values.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 --- Comment #2 from Andreas Schwab--- 141d7d6e93a44d509f0be246231b46939e728c97 is the first bad commit git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@231674 138bc75d-0d04-0410-961f-82ee72b054a4
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 David Edelsohn changed: What|Removed |Added Status|UNCONFIRMED |NEW Last reconfirmed||2015-12-22 CC||dje at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from David Edelsohn --- Confirmed.
[Bug target/68973] [6 regression] Internal compiler error on power for gcc/testsuite/g++.dg/pr67211.C
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68973 Richard Biener changed: What|Removed |Added Target||powerpc64* Target Milestone|--- |6.0