aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2016-12-06 20:56:03 +0100
committerUros Bizjak <uros@gcc.gnu.org>2016-12-06 20:56:03 +0100
commitcd3fe55a185181aeb1a6b626cfbaa6e14839b7e9 (patch)
treee5d7ada93d3369d411c35b277527a654890ec9da /gcc
parentf68963c09232f56ee793ab12b902f16c45af0214 (diff)
downloadgcc-cd3fe55a185181aeb1a6b626cfbaa6e14839b7e9.zip
gcc-cd3fe55a185181aeb1a6b626cfbaa6e14839b7e9.tar.gz
gcc-cd3fe55a185181aeb1a6b626cfbaa6e14839b7e9.tar.bz2
predicates.md (general_gr_operand): New predicate.
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog18
-rw-r--r--gcc/config/i386/i386.md61
-rw-r--r--gcc/config/i386/mmx.md8
-rw-r--r--gcc/config/i386/predicates.md6
4 files changed, 42 insertions, 51 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 662f145..49dc646 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
@@ -138,8 +153,7 @@
* 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>
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 773f29b..f2248a5d 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1749,10 +1749,9 @@
(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;")
@@ -1814,14 +1813,6 @@
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"))]
@@ -2150,14 +2141,6 @@
]
(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")
@@ -2333,15 +2316,9 @@
(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;")
@@ -3098,12 +3075,11 @@
(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;")
@@ -3197,10 +3173,9 @@
(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;")
@@ -3271,10 +3246,9 @@
(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;")
@@ -3474,10 +3448,9 @@
(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;")
diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md
index 9992233..37e6a28 100644
--- a/gcc/config/i386/mmx.md
+++ b/gcc/config/i386/mmx.md
@@ -205,11 +205,9 @@
(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;")
diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
index 5956690..4c45df6 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -38,6 +38,12 @@
(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")