From c06d5c8586da408dc208f97b95058599aef96089 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Mon, 17 Nov 2003 02:29:54 +0000 Subject: [PATCH] h8300-protos.h: Add the prototype for same_cmp_following_p. * config/h8300/h8300-protos.h: Add the prototype for same_cmp_following_p. * config/h8300/h8300.c (same_cmp_following_p): New. * config/h8300/h8300.md (peephole2): Use it. From-SVN: r73662 --- gcc/ChangeLog | 7 +++++++ gcc/config/h8300/h8300-protos.h | 1 + gcc/config/h8300/h8300.c | 20 ++++++++++++++++++++ gcc/config/h8300/h8300.md | 3 +-- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 19446d7f72e..5b35017e1bb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-11-16 Kazu Hirata + + * config/h8300/h8300-protos.h: Add the prototype for + same_cmp_following_p. + * config/h8300/h8300.c (same_cmp_following_p): New. + * config/h8300/h8300.md (peephole2): Use it. + 2003-11-16 Kazu Hirata * config/h8300/h8300.md: Don't use REGNO when its operand is diff --git a/gcc/config/h8300/h8300-protos.h b/gcc/config/h8300/h8300-protos.h index e36ae4b719c..a7987d06a83 100644 --- a/gcc/config/h8300/h8300-protos.h +++ b/gcc/config/h8300/h8300-protos.h @@ -79,6 +79,7 @@ extern int h8300_eightbit_constant_address_p (rtx); extern int h8300_tiny_constant_address_p (rtx); extern int byte_accesses_mergeable_p (rtx, rtx); extern int same_cmp_preceding_p (rtx); +extern int same_cmp_following_p (rtx); /* Used in builtins.c */ extern rtx h8300_return_addr_rtx (int, rtx); diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 88e9a63a6dd..28b44e0cdc6 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -4514,6 +4514,26 @@ same_cmp_preceding_p (rtx i3) && any_condjump_p (i2) && onlyjump_p (i2)); } +/* Return nonzero if we have the same comparison insn as I1 two insns + after I1. I1 is assumed to be a comparison insn. */ + +int +same_cmp_following_p (rtx i1) +{ + rtx i2, i3; + + /* Make sure we have a sequence of three insns. */ + i2 = next_nonnote_insn (i1); + if (i2 == NULL_RTX) + return 0; + i3 = next_nonnote_insn (i2); + if (i3 == NULL_RTX) + return 0; + + return (INSN_P (i3) && rtx_equal_p (PATTERN (i1), PATTERN (i3)) + && any_condjump_p (i2) && onlyjump_p (i2)); +} + /* Return nonzero if register OLD_REG can be renamed to register NEW_REG. */ int diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index 5ebb8919f0e..8f6e78caa86 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -4482,8 +4482,7 @@ (pc)))] "(TARGET_H8300H || TARGET_H8300S) && !peep2_reg_dead_p (1, operands[0]) - && !rtx_equal_p (PATTERN (insn), - PATTERN (next_nonnote_insn (next_nonnote_insn (insn))))" + && !same_cmp_following_p (insn)" [(set (match_dup 4) (match_dup 0)) (set (match_dup 4) -- 2.30.2