From cd3fe55a185181aeb1a6b626cfbaa6e14839b7e9 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Tue, 6 Dec 2016 20:56:03 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 18 +++++++++-- gcc/config/i386/i386.md | 61 ++++++++++------------------------- gcc/config/i386/mmx.md | 8 ++--- gcc/config/i386/predicates.md | 6 ++++ 4 files changed, 42 insertions(+), 51 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 662f145dc75..49dc6463496 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2016-12-06 Uros Bizjak + + * 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 * 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 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 773f29be100..f2248a5da95 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1749,10 +1749,9 @@ (set_attr "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 99922332e87..37e6a28de68 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 59566909f7e..4c45df68a48 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") -- 2.30.2