[PATCH, i386] Fix PR 64688, ICE: Max. number of generated reload insns per insn is achieved (90)
Uros Bizjak
ubizjak@gmail.com
Thu Jan 22 20:44:00 GMT 2015
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.
-------------- next part --------------
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"
More information about the Gcc-patches
mailing list