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.