[Bug rtl-optimization/64688] [5 Regression] internal compiler error: Max. number of generated reload insns per insn is achieved (90)
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Jan 25 16:00:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64688
Uroš Bizjak <ubizjak at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |ra
Status|REOPENED |NEW
Component|target |rtl-optimization
--- Comment #12 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Markus Trippelsdorf from comment #11)
> Created attachment 34566 [details]
> reduced testcase
>
> trippels@gcc20 % g++ -c -O3 -std=c++11 -march=westmere performance.ii
> performance.ii: In function ‘void performance_testtest_method()’:
> performance.ii:133:1: internal compiler error: Max. number of generated
> reload insns per insn is achieved (90)
Happens when trying to reload for:
(insn 73 72 393 2 (set (reg:V4SI 304)
(vec_merge:V4SI (vec_duplicate:V4SI (subreg:SI (reg:QI 103 [ SR.27 ])
0))
(const_vector:V4SI [
(const_int 0 [0])
(const_int 0 [0])
(const_int 0 [0])
(const_int 0 [0])
])
(const_int 1 [0x1]))) 2460 {vec_setv4si_0}
(nil))
Reload goes into infinite loop here.
Changing pseudo 103 in operand 2 of insn 73 on equiv 0
Creating newreg=359, assigning class ALL_REGS to subreg reg r359
73: r304:V4SI=vec_merge(vec_duplicate(r359:QI#0),const_vector,0x1)
Inserting subreg reload before:
502: r359:QI=0
2 Non pseudo reload: reject++
alt=0,overall=1,losers=0,rld_nregs=0
Choosing alt 0 in insn 73: (0) =Yr (1) C (2) Yr {vec_setv4si_0}
Change to class NO_REX_SSE_REGS for r359
0 Non input pseudo reload: reject++
1 Non-pseudo reload: reject+=2
1 Non input pseudo reload: reject++
alt=0,overall=16,losers=2,rld_nregs=2
0 Non input pseudo reload: reject++
alt=1,overall=7,losers=1,rld_nregs=1
0 Non input pseudo reload: reject++
1 Non-pseudo reload: reject+=2
1 Non input pseudo reload: reject++
alt=2,overall=16,losers=2 -- refuse
0 Non input pseudo reload: reject++
1 Non-pseudo reload: reject+=2
1 Non input pseudo reload: reject++
alt=3,overall=16,losers=2 -- refuse
0 Non input pseudo reload: reject++
alt=4,overall=7,losers=1,rld_nregs=1
Staticly defined alt reject+=6
0 Non input pseudo reload: reject++
alt=5,overall=13,losers=1 -- refuse
0 Non input pseudo reload: reject++
alt=6,overall=7,losers=1,rld_nregs=0
alt=7: Bad operand -- refuse
alt=8: Bad operand -- refuse
0 Non input pseudo reload: reject++
alt=9: Bad operand -- refuse
Choosing alt 6 in insn 502: (0) m (1) qn {*movqi_internal}
Creating newreg=360 from oldreg=359, assigning class NO_REGS to r360
502: r360:QI=0
Inserting insn reload after:
503: r359:QI=r360:QI
0 Non input pseudo reload: reject++
alt=0,overall=13,losers=2,rld_nregs=2
0 Non input pseudo reload: reject++
alt=1,overall=13,losers=2,rld_nregs=2
0 Non input pseudo reload: reject++
1 Non pseudo reload: reject++
alt=2,overall=8,losers=1,rld_nregs=1
0 Non input pseudo reload: reject++
alt=3,overall=13,losers=2 -- refuse
0 Non input pseudo reload: reject++
alt=4,overall=13,losers=2 -- refuse
Staticly defined alt reject+=6
0 Non input pseudo reload: reject++
alt=5,overall=13,losers=1 -- refuse
0 Non input pseudo reload: reject++
alt=6,overall=13,losers=2 -- refuse
alt=7: Bad operand -- refuse
alt=8: Bad operand -- refuse
0 Non input pseudo reload: reject++
alt=9: Bad operand -- refuse
Choosing alt 2 in insn 503: (0) q (1) qm {*movqi_internal}
Creating newreg=361 from oldreg=359, assigning class GENERAL_REGS to r361
503: r361:QI=r360:QI
Inserting insn reload after:
504: r359:QI=r361:QI
0 Non input pseudo reload: reject++
1 Non pseudo reload: reject++
alt=0,overall=608,losers=1,rld_nregs=1
0 Non input pseudo reload: reject++
1 Non pseudo reload: reject++
alt=1,overall=608,losers=1,rld_nregs=1
0 Non input pseudo reload: reject++
1 Non pseudo reload: reject++
alt=2,overall=608,losers=1,rld_nregs=1
0 Non input pseudo reload: reject++
1 Non pseudo reload: reject++
alt=3,overall=608,losers=1,rld_nregs=1
0 Non input pseudo reload: reject++
1 Non pseudo reload: reject++
alt=4,overall=608,losers=1,rld_nregs=1
Staticly defined alt reject+=6
0 Non input pseudo reload: reject++
1 Non pseudo reload: reject++
alt=5,overall=614,losers=1,rld_nregs=1
0 Non input pseudo reload: reject++
1 Non pseudo reload: reject++
alt=6,overall=8,losers=1,rld_nregs=0
alt=7: Bad operand -- refuse
alt=8: Bad operand -- refuse
0 Non input pseudo reload: reject++
alt=9: Bad operand -- refuse
Choosing alt 6 in insn 504: (0) m (1) qn {*movqi_internal}
Creating newreg=362 from oldreg=359, assigning class NO_REGS to r362
...
This is a new problem and does not look like target problem to me.
Recategorizing back to RA problem.
More information about the Gcc-bugs
mailing list