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

--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> ---
Reload starts with:

(insn 76 67 101 5 (set (reg/v:V2DF 108 [ x ])
        (vec_concat:V2DF (reg:DF 182)
            (reg:DF 182))) "pr107057.c":7:10 5952 {vec_concatv2df}
     (expr_list:REG_EQUAL (const_vector:V2DF [
                (const_double:DF 1.0e+0 [0x0.8p+1]) repeated x2
            ])
        (nil)))

And reloads the insn with:

(insn 392 67 393 5 (set (reg:DI 0 ax [330])
        (symbol_ref/u:DI ("*.LC0") [flags 0x2])) "pr107057.c":7:10 82
{*movdi_internal}
     (nil))
(insn 407 393 76 5 (set (reg:DI 4 si [331])
        (reg:DI 0 ax [330])) "pr107057.c":7:10 82 {*movdi_internal}
     (nil))
(insn 76 407 101 5 (set (reg/v:V2DF 24 xmm4 [orig:108 x ] [108])
        (vec_concat:V2DF (mem/u/c:DF (reg:DI 0 ax [330]) [0  S8 A64])
            (mem/u/c:DF (reg:DI 4 si [331]) [0  S8 A64]))) "pr107057.c":7:10
5952 {vec_concatv2df}
     (expr_list:REG_EQUAL (const_vector:V2DF [
                (const_double:DF 1.0e+0 [0x0.8p+1]) repeated x2
            ])
        (nil)))

Non-matching mem RTXes violate the candidate (x,m,1) constraint (and also insn
constraint):

(define_insn "vec_concatv2df"
  [(set (match_operand:V2DF 0 "register_operand"     "=x,x,v,x,v,x,x, v,x,x")
        (vec_concat:V2DF
          (match_operand:DF 1 "nonimmediate_operand" " 0,x,v,m,m,0,x,vm,0,0")
          (match_operand:DF 2 "nonimm_or_0_operand"  " x,x,v,1,1,m,m,
C,x,m")))]
  "TARGET_SSE
   && (!(MEM_P (operands[1]) && MEM_P (operands[2]))
       || (TARGET_SSE3 && rtx_equal_p (operands[1], operands[2])))"

Reply via email to