From: jakub Date: Tue, 8 Jan 2019 22:29:56 +0000 (+0000) Subject: PR rtl-optimization/79593 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8629d61f2f532361bc5991666d36c6f5cdf7fc09;p=thirdparty%2Fgcc.git PR rtl-optimization/79593 * config/i386/i386.md (reg = mem; mem = reg): New define_peephole2. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@267740 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ef77184b994..10f8e1341b77 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2019-01-08 Jakub Jelinek + PR rtl-optimization/79593 + * config/i386/i386.md (reg = mem; mem = reg): New define_peephole2. + * config/rs6000/rs6000.c (rs6000_delegitimize_address): Delegitimize UNSPEC_FUSION_GPR to its argument. Formatting fixes. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index c8123cb6caad..83124ccbeb3a 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -18740,6 +18740,18 @@ const0_rtx); }) +;; Attempt to optimize away memory stores of values the memory already +;; has. See PR79593. +(define_peephole2 + [(set (match_operand 0 "register_operand") + (match_operand 1 "memory_operand")) + (set (match_operand 2 "memory_operand") (match_dup 0))] + "!MEM_VOLATILE_P (operands[1]) + && !MEM_VOLATILE_P (operands[2]) + && rtx_equal_p (operands[1], operands[2]) + && !reg_overlap_mentioned_p (operands[0], operands[2])" + [(set (match_dup 0) (match_dup 1))]) + ;; Attempt to always use XOR for zeroing registers (including FP modes). (define_peephole2 [(set (match_operand 0 "general_reg_operand")