diff mbox

[i386] Fix PR 64688, ICE: Max. number of generated reload insns per insn is achieved (90)

Message ID CAFULd4YsYWZ4iWy1XntWnQKQfxH86ygEWtia2pSM7r8sUPRrgg@mail.gmail.com
State New
Headers show

Commit Message

Uros Bizjak Jan. 22, 2015, 8:27 p.m. UTC
On Thu, Jan 22, 2015 at 7:37 PM, Uros Bizjak <ubizjak@gmail.com> wrote:

>> Attached patch fixes PR 64688. Operand constraints were wrong for
>> reg-to-vec targets.
>>
>> The patch also fixes PR 64477.
>
> Whoops, I have regtested wrong compiler. The patch introduced some
> AVX2 regressions. Following patch is also needed, otherwise vec_dup
> post-reload splitter creates invalid pattern that involves general reg
> for reg-to-vec targets.

Now fixed, attached is the complete patch.

2015-22-01  Uros Bizjak  <ubizjak@gmail.com>

    PR target/64688
    PR target/64477
    * config/i386/sse.md (vec_set<mode>_0): Use (Yi/r/C) constraints
    for alternative 3.
    (*vec_dup<mode>): Use (Yi/$r) constraints for alternative 1.

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Committed to mainline SVN.

Uros.
diff mbox

Patch

Index: config/i386/sse.md
===================================================================
--- config/i386/sse.md	(revision 219987)
+++ config/i386/sse.md	(working copy)
@@ -6391,11 +6391,11 @@ 
 ;; see comment above inline_secondary_memory_needed function in i386.c
 (define_insn "vec_set<mode>_0"
   [(set (match_operand:VI4F_128 0 "nonimmediate_operand"
-	  "=Yr,*v,v,v ,x,x,v,Yr ,*x ,x  ,m ,m   ,m")
+	  "=Yr,*v,v,Yi,x,x,v,Yr ,*x ,x  ,m ,m   ,m")
 	(vec_merge:VI4F_128
 	  (vec_duplicate:VI4F_128
 	    (match_operand:<ssescalarmode> 2 "general_operand"
-	  " Yr,*v,m,*r,m,x,v,*rm,*rm,*rm,!x,!*re,!*fF"))
+	  " Yr,*v,m,r ,m,x,v,*rm,*rm,*rm,!x,!*re,!*fF"))
 	  (match_operand:VI4F_128 1 "vector_move_operand"
 	  " C , C,C,C ,C,0,v,0  ,0  ,x  ,0 ,0   ,0")
 	  (const_int 1)))]
@@ -16711,7 +16711,7 @@ 
   [V32QI V16QI V16HI V8HI V8SI V4SI])
 
 (define_insn "*vec_dup<mode>"
-  [(set (match_operand:AVX2_VEC_DUP_MODE 0 "register_operand" "=x,x,x")
+  [(set (match_operand:AVX2_VEC_DUP_MODE 0 "register_operand" "=x,x,Yi")
        (vec_duplicate:AVX2_VEC_DUP_MODE
          (match_operand:<ssescalarmode> 1 "nonimmediate_operand" "m,x,$r")))]
   "TARGET_AVX2"