aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2016-08-08 18:36:49 +0930
committerAlan Modra <amodra@gcc.gnu.org>2016-08-08 18:36:49 +0930
commit0476487d4916e62bf7e52d06501ef8837ba47cf8 (patch)
tree2e7447a8b4469907cfa07780bdb22d820b3a8b14 /gcc/fortran/trans-array.c
parentad69178ca9b691e39308062bc46a801806ea1030 (diff)
downloadgcc-0476487d4916e62bf7e52d06501ef8837ba47cf8.zip
gcc-0476487d4916e62bf7e52d06501ef8837ba47cf8.tar.gz
gcc-0476487d4916e62bf7e52d06501ef8837ba47cf8.tar.bz2
[RS6000] PR72802 part 2, reload ICE
After fixing the constraint problem, we hit an "insn does not satisfy its constraints" with -mno-lra on the following insn, a vector load from mem which has an invalid offset: (insn 631 630 1122 12 (set (reg:SF 108 31 [orig:260 pretmp_44 ] [260]) (mem:SF (plus:DI (reg:DI 30 30 [orig:338 ivtmp.141 ] [338]) (const_int 2 [0x2])) [5 MEM[base: _1, offset: 2B]+0 S4 A32])) 470 {movsf_hardfloat} (nil)) Here are the reload costs for the various alternatives of movsf_hardfloat: "=!r, !r, m, f, ww, ww, !r, f, wb, m, wY, wu, Z,?wn, ?r,*c*l, !r, *h" "r, m, r, f, ww, j, j, m, wY, f, wb, Z, wu, r, wn, r, *h, 0" 617 609 17 17 8 8 617 9 8 17 17 8 17 23 23 17 617 17 Notice that the cost for a vector<-vector move (ww,ww) is the same as the cost for a vector<-mem move (wb,wY or wu,Z). Since the vector<-vector move comes first, it is chosen and the mem part of the insn reloaded. That just gives another copy of insn 631. PR target/72802 * config/rs6000/rs6000.md (mov<mode>_hardfloat): Sort alternatives. Put loads first, then stores, and reg/reg moves within same class later. Delete attr length. testsuite/ * gcc.c-torture/compile/pr72802.c: New. From-SVN: r239234
Diffstat (limited to 'gcc/fortran/trans-array.c')
0 files changed, 0 insertions, 0 deletions