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

--- Comment #7 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Hongtao Liu from comment #4)
> (In reply to Hongtao Liu from comment #3)
> > A simple testcase
> > 
> > typedef long long v4di __attribute__((vector_size(32)));
> > 
> > v4di
> > foo (long long a)
> > {
> >     return __extension__(v4di){(long long)foo, 1, 1, 1};
> > }
> > 
> > reproduced with -O2 -mavx2, failed at least since gcc4.8.1
> 
> 19843;; sse4_1_pinsrd must come before sse2_loadld since it is preferred.   
> 
> 19844(define_insn "<sse2p4_1>_pinsr<ssemodesuffix>"                         
[...]
> Doesn't support V2DI, we're using.

It's not a problem with the above pattern, which *does* support V2DI:

;; Modes handled by pinsr patterns.
(define_mode_iterator PINSR_MODE
  [(V16QI "TARGET_SSE4_1") V8HI V8HF V8BF
   (V4SI "TARGET_SSE4_1")
   (V2DI "TARGET_SSE4_1 && TARGET_64BIT")])

but with operand 2 that doesn't satisfy DImode nonimmediate_operand predicate
in:

;; sse4_1_pinsrd must come before sse2_loadld since it is preferred.
(define_insn "<sse2p4_1>_pinsr<ssemodesuffix>"
  [(set (match_operand:PINSR_MODE 0 "register_operand" "=x,x,x,x,v,v,&x")
        (vec_merge:PINSR_MODE
          (vec_duplicate:PINSR_MODE
            (match_operand:<ssescalarmode> 2 "nonimmediate_operand"
"jr,jm,r,m,r,m,x"))
          (match_operand:PINSR_MODE 1 "register_operand" "0,0,x,x,v,v,x")
          (match_operand:SI 3 "const_int_operand")))]
  "TARGET_SSE2
   && ((unsigned) exact_log2 (INTVAL (operands[3]))
       < GET_MODE_NUNITS (<MODE>mode))"

(insn 8 7 9 2 (set (reg:V2DI 103)
        (vec_merge:V2DI (vec_duplicate:V2DI (symbol_ref:DI ("foo") [flags 0x3]
<function_decl 0x7f412dfec200 foo>))
            (reg:V2DI 103)
            (const_int 1 [0x1]))) "pr117116.c":6:12 -1
     (nil))

Please note that:

(symbol_ref:DI ("foo") [flags 0x3] <function_decl 0x7f412dfec200 foo>)

does *not* represent a memory operand. A mem(...) is missing around.

So, the problem is, where immediate operand leaks into RTX.

Reply via email to