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

Hongtao.liu <crazylht at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |crazylht at gmail dot com

--- Comment #2 from Hongtao.liu <crazylht at gmail dot com> ---
Increase constraints preference and reduce sse->integer move cost can't help
it.

----
modified   gcc/config/i386/i386.md                                              
@@ -2294,9 +2294,9 @@                                                           

 (define_insn "*movsi_internal"                                                 
   [(set (match_operand:SI 0 "nonimmediate_operand"                             
-    "=r,m ,*y,*y,?*y,?m,?r,?*y,*v,*v,*v,m ,?r,?*v,*k,*k ,*rm,*k")              
+    "=r,m ,*y,*y,?*y,?m,?r,?*y,*v,*v,*v,r ,m,?*v,*k,*k ,*rm,*k")               
         (match_operand:SI 1 "general_operand"                                  
-    "g ,re,C ,*y,m  ,*y,*y,r  ,C ,*v,m ,*v,*v,r  ,*r,*km,*k ,CBC"))]           
+    "g ,re,C ,*y,m  ,*y,*y,r  ,C ,*v,m ,v,*v,r  ,*r,*km,*k ,CBC"))]            
   "!(MEM_P (operands[0]) && MEM_P (operands[1]))"                              
 {                                                                              
   switch (get_attr_type (insn))                                                
modified   gcc/config/i386/x86-tune-costs.h                                     
@@ -1624,7 +1624,7 @@ struct processor_costs skylake_cost = {                   
                                            in 32,64,128,256 and 512-bit */     
   {8, 8, 8, 12, 24},                   /* cost of storing SSE registers        
                                            in 32,64,128,256 and 512-bit */     
-  6, 6,                                        /* SSE->integer and
integer->SSE moves */                                                           
+  2, 2,                                        /* SSE->integer and
integer->SSE moves */  

------

It seems to me for insn inserted reloaded before

18: r89:SI=r87:SF#0

(insn 18 16 6 2 (set (reg:SI 89) 
 (subreg:SI (reg:SF 87) 0))

LRA prefer to put reg:SI 89 into memory since it would be used later.

Reply via email to