diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2016-12-06 20:56:03 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2016-12-06 20:56:03 +0100 |
commit | cd3fe55a185181aeb1a6b626cfbaa6e14839b7e9 (patch) | |
tree | e5d7ada93d3369d411c35b277527a654890ec9da /gcc | |
parent | f68963c09232f56ee793ab12b902f16c45af0214 (diff) | |
download | gcc-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/ChangeLog | 18 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 61 | ||||
-rw-r--r-- | gcc/config/i386/mmx.md | 8 | ||||
-rw-r--r-- | gcc/config/i386/predicates.md | 6 |
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") |