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

--- Comment #4 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
(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>"                             
19845  [(set (match_operand:PINSR_MODE 0 "register_operand" "=x,x,x,x,v,v,&x")  
19846        (vec_merge:PINSR_MODE                                              
19847          (vec_duplicate:PINSR_MODE                                        
19848            (match_operand:<ssescalarmode> 2 "nonimmediate_operand"
"jr,jm,r,m,r,m,x"))                                  
19849          (match_operand:PINSR_MODE 1 "register_operand" "0,0,x,x,v,v,x")  
19850          (match_operand:SI 3 "const_int_operand")))]                      
19851  "TARGET_SSE2                                                             
19852   && ((unsigned) exact_log2 (INTVAL (operands[3]))                        
19853       < GET_MODE_NUNITS (<MODE>mode))"  

Doesn't support V2DI, we're using.

21622(define_insn "vec_concatv2di"                                              
21623  [(set (match_operand:V2DI 0 "register_operand"                           
21624          "=Yr,*x,x ,v ,x,v ,x,x,v")                                       
21625        (vec_concat:V2DI                                                   
21626          (match_operand:DI 1 "register_operand"                           
21627          "  0, 0,x ,Yv,0,Yv,0,0,v")                                       
21628          (match_operand:DI 2 "nonimmediate_operand"                       
21629          " jrjm,jrjm,rm,rm,x,Yv,x,m,m")))]                                
21630  "TARGET_SSE"

Reply via email to