i386: Add a variant peephole for lea rather than ops that clobber CC.

* config/i386/i386.md (operation on memory peephole): Duplicate an
	existing peephole and adapt it to match lea rather than an operation
	that clobbers CC.

From-SVN: r235443
This commit is contained in:
Bernd Schmidt 2016-04-26 12:57:50 +00:00 committed by Bernd Schmidt
parent 1d776c5f1b
commit a84454dc45
2 changed files with 36 additions and 0 deletions

View File

@ -1,5 +1,9 @@
2016-04-26 Bernd Schmidt <bschmidt@redhat.com>
* config/i386/i386.md (operation on memory peephole): Duplicate an
existing peephole and adapt it to match lea rather than an operation
that clobbers CC.
PR rtl-optimization/57193
* opts.c (default_options_table): Add OPT_frename_registers at -O2
and above.

View File

@ -18018,6 +18018,38 @@
operands[5], const0_rtx);
})
;; Likewise for instances where we have a lea pattern.
(define_peephole2
[(set (match_operand:SWI 0 "register_operand")
(match_operand:SWI 1 "memory_operand"))
(set (match_operand:SWI 3 "register_operand")
(plus (match_dup 0)
(match_operand:SWI 2 "<nonmemory_operand>")))
(set (match_dup 1) (match_dup 3))
(set (reg FLAGS_REG) (compare (match_dup 3) (const_int 0)))]
"(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())
&& peep2_reg_dead_p (4, operands[3])
&& (rtx_equal_p (operands[0], operands[3])
|| peep2_reg_dead_p (2, operands[0]))
&& !reg_overlap_mentioned_p (operands[0], operands[1])
&& !reg_overlap_mentioned_p (operands[3], operands[1])
&& !reg_overlap_mentioned_p (operands[0], operands[2])
&& (<MODE>mode != QImode
|| immediate_operand (operands[2], QImode)
|| any_QIreg_operand (operands[2], QImode))
&& ix86_match_ccmode (peep2_next_insn (3), CCGOCmode)"
[(parallel [(set (match_dup 4) (match_dup 5))
(set (match_dup 1) (plus:SWI (match_dup 1)
(match_dup 2)))])]
{
operands[4] = SET_DEST (PATTERN (peep2_next_insn (3)));
operands[5] = gen_rtx_PLUS (<MODE>mode,
copy_rtx (operands[1]),
copy_rtx (operands[2]));
operands[5] = gen_rtx_COMPARE (GET_MODE (operands[4]),
operands[5], const0_rtx);
})
(define_peephole2
[(parallel [(set (match_operand:SWI 0 "register_operand")
(match_operator:SWI 2 "plusminuslogic_operator"