From ccdc170325f15c929a3b44688c1f223047e3e4e5 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Sat, 31 Jan 2004 23:08:52 +0000 Subject: [PATCH] genrecog.c (decision_type): Add DT_const_int. * genrecog.c (decision_type): Add DT_const_int. (write_cond) [DT_const_int]: Print a comparison against small constant. (write_node): Simplify comparisons against small constants before printing tests. From-SVN: r77055 --- gcc/ChangeLog | 8 ++++++++ gcc/genrecog.c | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 201cd8b4582..710a1840e6d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2004-01-31 Kazu Hirata + + * genrecog.c (decision_type): Add DT_const_int. + (write_cond) [DT_const_int]: Print a comparison against small + constant. + (write_node): Simplify comparisons against small constants + before printing tests. + 2004-01-31 Kazu Hirata * config/m32r/m32r.c (m32r_load_pic_register): Use GEN_INT diff --git a/gcc/genrecog.c b/gcc/genrecog.c index dc756fe7644..8673de39a39 100644 --- a/gcc/genrecog.c +++ b/gcc/genrecog.c @@ -90,6 +90,7 @@ struct decision_test { DT_mode, DT_code, DT_veclen, DT_elt_zero_int, DT_elt_one_int, DT_elt_zero_wide, DT_elt_zero_wide_safe, + DT_const_int, DT_veclen_ge, DT_dup, DT_pred, DT_c_test, DT_accept_op, DT_accept_insn } type; @@ -1981,6 +1982,11 @@ write_cond (struct decision_test *p, int depth, print_host_wide_int (p->u.intval); break; + case DT_const_int: + printf ("x%d == const_int_rtx[MAX_SAVED_CONST_INT + (%d)]", + depth, (int) p->u.intval); + break; + case DT_veclen_ge: printf ("XVECLEN (x%d, 0) >= %d", depth, p->u.veclen); break; @@ -2143,6 +2149,23 @@ write_node (struct decision *p, int depth, struct decision_test *test, *last_test; int uncond; + /* Scan the tests and simplify comparisons against small + constants. */ + for (test = p->tests; test; test = test->next) + { + if (test->type == DT_code + && test->u.code == CONST_INT + && test->next + && test->next->type == DT_elt_zero_wide_safe + && -MAX_SAVED_CONST_INT <= test->next->u.intval + && test->next->u.intval <= MAX_SAVED_CONST_INT) + { + test->type = DT_const_int; + test->u.intval = test->next->u.intval; + test->next = test->next->next; + } + } + last_test = test = p->tests; uncond = is_unconditional (test, subroutine_type); if (uncond == 0) -- 2.30.2