From b3db92ac1996449f3c1f29ba17c9c1b73f8b817b Mon Sep 17 00:00:00 2001 From: Kazuhio Inaoka Date: Tue, 17 May 2011 08:27:40 +0000 Subject: rx.md: Add peepholes to match a register move followed by a comparison of the moved... * config/rx/rx.md: Add peepholes to match a register move followed by a comparison of the moved register. Replace these with an addition of zero that does both actions in one instruction. Co-Authored-By: Nick Clifton From-SVN: r173819 --- gcc/ChangeLog | 7 +++++++ gcc/config/rx/rx.md | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 50b0356..8ceeac3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-05-17 Kazuhio Inaoka + Nick Clifton + + * config/rx/rx.md: Add peepholes to match a register move followed + by a comparison of the moved register. Replace these with an + addition of zero that does both actions in one instruction. + 2011-05-17 Jakub Jelinek PR target/48986 diff --git a/gcc/config/rx/rx.md b/gcc/config/rx/rx.md index a9cf50e..fdbf287 100644 --- a/gcc/config/rx/rx.md +++ b/gcc/config/rx/rx.md @@ -904,6 +904,39 @@ (set_attr "length" "3,4,5,6,7,6")] ) +;; Peepholes to match: +;; (set (reg A) (reg B)) +;; (set (CC) (compare:CC (reg A/reg B) (const_int 0))) +;; and replace them with the addsi3_flags pattern, using an add +;; of zero to copy the register and set the condition code bits. +(define_peephole2 + [(set (match_operand:SI 0 "register_operand") + (match_operand:SI 1 "register_operand")) + (set (reg:CC CC_REG) + (compare:CC (match_dup 0) + (const_int 0)))] + "" + [(parallel [(set (match_dup 0) + (plus:SI (match_dup 1) (const_int 0))) + (set (reg:CC_ZSC CC_REG) + (compare:CC_ZSC (plus:SI (match_dup 1) (const_int 0)) + (const_int 0)))])] +) + +(define_peephole2 + [(set (match_operand:SI 0 "register_operand") + (match_operand:SI 1 "register_operand")) + (set (reg:CC CC_REG) + (compare:CC (match_dup 1) + (const_int 0)))] + "" + [(parallel [(set (match_dup 0) + (plus:SI (match_dup 1) (const_int 0))) + (set (reg:CC_ZSC CC_REG) + (compare:CC_ZSC (plus:SI (match_dup 1) (const_int 0)) + (const_int 0)))])] +) + (define_expand "adddi3" [(set (match_operand:DI 0 "register_operand") (plus:DI (match_operand:DI 1 "register_operand") -- cgit v1.1