[Bug c++/64110] [5 Regression] ICE: Max. number of generated reload insns per insn is achieved (90)

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Dec 1 12:37:00 GMT 2014


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64110

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|jakub at redhat dot com            |vmakarov at gcc dot gnu.org

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, before LRA we have:
(insn 27 36 28 2 (set (reg:SI 178 [ x ])
        (reg:SI 5 di [ x ])) pr64110.C:7 90 {*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 5 di [ x ])
        (nil)))
(insn 28 27 29 2 (set (reg/v:HI 177 [ x ])
        (subreg:HI (reg:SI 178 [ x ]) 0)) pr64110.C:7 92 {*movhi_internal}
     (expr_list:REG_DEAD (reg:SI 178 [ x ])
        (nil)))
(note 29 28 89 2 NOTE_INSN_FUNCTION_BEG)
(insn 89 29 247 2 (set (reg:V16HI 214 [ vect_cst_.21 ])
        (vec_duplicate:V16HI (reg/v:HI 177 [ x ]))) 4254 {*vec_dupv16hi}
     (nil))

and *vec_dupv16hi is:
(define_insn "*vec_dup<mode>"
  [(set (match_operand:AVX2_VEC_DUP_MODE 0 "register_operand" "=x,x,x")
        (vec_duplicate:AVX2_VEC_DUP_MODE
          (match_operand:<ssescalarmode> 1 "nonimmediate_operand" "m,x,!r")))]
  "TARGET_AVX2"

Thus, I don't see a bug on the md side, I would have expected LRA to just
use (vec_duplicate:V16HI (reg/v:HI 5 di)) on the rhs (yes, it will be split
after reload).
But, during the ICE I see:
(insn 27 36 28 2 (set (reg:SI 178 [ x ])
        (reg:SI 5 di [ x ])) pr64110.C:7 90 {*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 5 di [ x ])
        (nil)))

(insn 28 27 29 2 (set (reg/v:HI 177 [ x ])
        (subreg:HI (reg:SI 178 [ x ]) 0)) pr64110.C:7 92 {*movhi_internal}
     (expr_list:REG_DEAD (reg:SI 178 [ x ])
        (nil)))

(note 29 28 262 2 NOTE_INSN_FUNCTION_BEG)

(insn 262 29 263 2 (set (reg/v:HI 218 [orig:177 x ] [177])
        (reg/v:HI 177 [ x ])) 92 {*movhi_internal}
     (nil))

(insn 263 262 264 2 (set (reg/v:HI 219 [orig:177 x ] [177])
        (reg/v:HI 218 [orig:177 x ] [177])) 92 {*movhi_internal}
     (nil))

(insn 264 263 265 2 (set (reg/v:HI 220 [orig:177 x ] [177])
        (reg/v:HI 219 [orig:177 x ] [177])) 92 {*movhi_internal}
     (nil))

...
(repeated many times for pseudos 221, 222, ... 305)
(insn 350 349 351 2 (set (reg/v:HI 306 [orig:177 x ] [177])
        (reg/v:HI 305 [orig:177 x ] [177])) 92 {*movhi_internal}
     (nil))

(insn 351 350 89 2 (set (reg/v:HI 217 [orig:177 x ] [177])
        (reg/v:HI 306 [orig:177 x ] [177])) 92 {*movhi_internal}
     (nil))

(insn 89 351 261 2 (set (reg:V16HI 216 [orig:214 vect_cst_.21 ] [214])
        (vec_duplicate:V16HI (reg/v:HI 217 [orig:177 x ] [177]))) 4254
{*vec_dupv16hi}
     (nil))

Vlad, can you please have a look?  Thanks.



More information about the Gcc-bugs mailing list