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:
parent
1d776c5f1b
commit
a84454dc45
@ -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.
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user