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.