[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