predicates.md (general_gr_operand): New predicate.
authorUros Bizjak <uros@gcc.gnu.org>
Tue, 6 Dec 2016 19:56:03 +0000 (20:56 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 6 Dec 2016 19:56:03 +0000 (20:56 +0100)
* config/i386/predicates.md (general_gr_operand): New predicate.
* config/i386/i386.md (TImode and DImode push_operand splitter):
Use general_gr_operand.  Macroize using DWI mode macro.
(TImode and DImode nonimmediate_operand splitter): Use
nonimmediate_gr_operand and general_gr_operand.  Macroize using
DWI mode macro.
(TF/XF/DFmode push_operand splitter): Use general_gr_operand.
(TFmode nonimmediate_operand splitter): Use nonimmediate_gr_operand
and general_gr_operand.
(XFmode nonimmediate_operand splitter): Ditto.
(DFmode nonimmediate_operand splitter): Ditto.
* config/i386/mmx.md (MMXMODE nonimmediate_operand splitter): Ditto.

From-SVN: r243315

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/config/i386/mmx.md
gcc/config/i386/predicates.md

index 662f145dc7529da4e744eb1cdcd3bddef14b7d89..49dc64634969bd4bfb1ea9da4acc752545672652 100644 (file)
@@ -1,3 +1,18 @@
+2016-12-06  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/predicates.md (general_gr_operand): New predicate.
+       * config/i386/i386.md (TImode and DImode push_operand splitter):
+       Use general_gr_operand.  Macroize using DWI mode macro.
+       (TImode and DImode nonimmediate_operand splitter): Use
+       nonimmediate_gr_operand and general_gr_operand.  Macroize using
+       DWI mode macro.
+       (TF/XF/DFmode push_operand splitter): Use general_gr_operand.
+       (TFmode nonimmediate_operand splitter): Use nonimmediate_gr_operand
+       and general_gr_operand.
+       (XFmode nonimmediate_operand splitter): Ditto.
+       (DFmode nonimmediate_operand splitter): Ditto.
+       * config/i386/mmx.md (MMXMODE nonimmediate_operand splitter): Ditto.
+
 2016-12-06  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/arm/arm-cores.def (cortex-m23, cortex-m33): Move into
        * diagnostic.c (diagnostic_check_max_errors): New, broken out of ...
        (diagnostic_action_after_output): ... here.
        (diagnostic_report_diagnostic): Call it for non-notes.
-       * diagnostic.h (struct diagnostic_context): Make max_errors signed
-       int.
+       * diagnostic.h (struct diagnostic_context): Make max_errors signed int.
        (diagnostic_check_max_errors): Declare.
 
 2016-12-05  Cupertino Miranda  <cmiranda@synopsys.com>
index 773f29be1009130a17cb3e6105645a8933add310..f2248a5da952c7b4754a4d3be4af4213a3ba11a5 100644 (file)
    (set_attr "mode" "<MODE>")])
 
 (define_split
-  [(set (match_operand:TI 0 "push_operand")
-        (match_operand:TI 1 "general_operand"))]
-  "TARGET_64BIT && reload_completed
-   && !SSE_REG_P (operands[1])"
+  [(set (match_operand:DWI 0 "push_operand")
+        (match_operand:DWI 1 "general_gr_operand"))]
+  "reload_completed"
   [(const_int 0)]
   "ix86_split_long_move (operands); DONE;")
 
                                                   GEN_INT (4)));
 })
 
-(define_split
-  [(set (match_operand:DI 0 "push_operand")
-        (match_operand:DI 1 "general_operand"))]
-  "!TARGET_64BIT && reload_completed
-   && !(MMX_REG_P (operands[1]) || SSE_REG_P (operands[1]))"
-  [(const_int 0)]
-  "ix86_split_long_move (operands); DONE;")
-
 (define_insn "*pushsi2"
   [(set (match_operand:SI 0 "push_operand" "=<")
        (match_operand:SI 1 "general_no_elim_operand" "ri*m"))]
               ]
               (const_string "TI")))])
 
-(define_split
-  [(set (match_operand:TI 0 "nonimmediate_operand")
-       (match_operand:TI 1 "general_operand"))]
-  "reload_completed
-   && !SSE_REG_P (operands[0]) && !SSE_REG_P (operands[1])"
-  [(const_int 0)]
-  "ix86_split_long_move (operands); DONE;")
-
 (define_insn "*movdi_internal"
   [(set (match_operand:DI 0 "nonimmediate_operand"
     "=r  ,o  ,r,r  ,r,m ,*y,*y,?*y,?m,?r ,?*Ym,*v,*v,*v,m ,m,?r ,?r,?*Yi,?*Ym,?*Yi,*k,*k ,*r,*m")
           (const_string "*")))])
 
 (define_split
-  [(set (match_operand:DI 0 "nonimmediate_operand")
-        (match_operand:DI 1 "general_operand"))]
-  "!TARGET_64BIT && reload_completed
-   && !(MMX_REG_P (operands[0])
-       || SSE_REG_P (operands[0])
-       || MASK_REG_P (operands[0]))
-   && !(MMX_REG_P (operands[1])
-       || SSE_REG_P (operands[1])
-       || MASK_REG_P (operands[1]))"
+  [(set (match_operand:DWI 0 "nonimmediate_gr_operand")
+        (match_operand:DWI 1 "general_gr_operand"))]
+  "reload_completed"
   [(const_int 0)]
   "ix86_split_long_move (operands); DONE;")
 
 
 (define_split
   [(set (match_operand 0 "push_operand")
-       (match_operand 1 "general_operand"))]
+       (match_operand 1 "general_gr_operand"))]
   "reload_completed
    && (GET_MODE (operands[0]) == TFmode
        || GET_MODE (operands[0]) == XFmode
-       || GET_MODE (operands[0]) == DFmode)
-   && !ANY_FP_REG_P (operands[1])"
+       || GET_MODE (operands[0]) == DFmode)"
   [(const_int 0)]
   "ix86_split_long_move (operands); DONE;")
 \f
               (const_string "TI")))])
 
 (define_split
-  [(set (match_operand:TF 0 "nonimmediate_operand")
-        (match_operand:TF 1 "general_operand"))]
-  "reload_completed
-   && !(ANY_FP_REG_P (operands[0]) || ANY_FP_REG_P (operands[1]))"
+  [(set (match_operand:TF 0 "nonimmediate_gr_operand")
+        (match_operand:TF 1 "general_gr_operand"))]
+  "reload_completed"
   [(const_int 0)]
   "ix86_split_long_move (operands); DONE;")
 
           (const_string "*")))])
    
 (define_split
-  [(set (match_operand:XF 0 "nonimmediate_operand")
-        (match_operand:XF 1 "general_operand"))]
-  "reload_completed
-   && !(ANY_FP_REG_P (operands[0]) || ANY_FP_REG_P (operands[1]))"
+  [(set (match_operand:XF 0 "nonimmediate_gr_operand")
+        (match_operand:XF 1 "general_gr_operand"))]
+  "reload_completed"
   [(const_int 0)]
   "ix86_split_long_move (operands); DONE;")
 
           (const_string "*")))])
 
 (define_split
-  [(set (match_operand:DF 0 "nonimmediate_operand")
-        (match_operand:DF 1 "general_operand"))]
-  "!TARGET_64BIT && reload_completed
-   && !(ANY_FP_REG_P (operands[0]) || ANY_FP_REG_P (operands[1]))"
+  [(set (match_operand:DF 0 "nonimmediate_gr_operand")
+        (match_operand:DF 1 "general_gr_operand"))]
+  "!TARGET_64BIT && reload_completed"
   [(const_int 0)]
   "ix86_split_long_move (operands); DONE;")
 
index 99922332e8730a626abc0d647520a77d769d4daf..37e6a28de680fe13303a697ef1b980c2f22f1e8e 100644 (file)
           (const_string "DI")))])
 
 (define_split
-  [(set (match_operand:MMXMODE 0 "nonimmediate_operand")
-        (match_operand:MMXMODE 1 "general_operand"))]
-  "!TARGET_64BIT && reload_completed
-   && !(MMX_REG_P (operands[0]) || SSE_REG_P (operands[0]))
-   && !(MMX_REG_P (operands[1]) || SSE_REG_P (operands[1]))"
+  [(set (match_operand:MMXMODE 0 "nonimmediate_gr_operand")
+        (match_operand:MMXMODE 1 "general_gr_operand"))]
+  "!TARGET_64BIT && reload_completed"
   [(const_int 0)]
   "ix86_split_long_move (operands); DONE;")
 
index 59566909f7e4887cf50ac93f16bdaf008152b142..4c45df68a48806912b984d658f396329a0e3421e 100644 (file)
     (match_test "GENERAL_REGNO_P (REGNO (op))")
     (match_operand 0 "nonimmediate_operand")))
 
+;; True if the operand is a general operand with GENERAL class register.
+(define_predicate "general_gr_operand"
+  (if_then_else (match_code "reg")
+    (match_test "GENERAL_REGNO_P (REGNO (op))")
+    (match_operand 0 "general_operand")))
+
 ;; True if the operand is an MMX register.
 (define_predicate "mmx_reg_operand"
   (and (match_code "reg")