OSDN Git Service

* genrecog.c (decision_type): Add DT_const_int.
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 31 Jan 2004 23:08:52 +0000 (23:08 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 31 Jan 2004 23:08:52 +0000 (23:08 +0000)
(write_cond) [DT_const_int]: Print a comparison against small
constant.
(write_node): Simplify comparisons against small constants
before printing tests.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77055 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/genrecog.c

index 201cd8b..710a184 100644 (file)
@@ -1,5 +1,13 @@
 2004-01-31  Kazu Hirata  <kazu@cs.umass.edu>
 
+       * 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  <kazu@cs.umass.edu>
+
        * config/m32r/m32r.c (m32r_load_pic_register): Use GEN_INT
        instead of gen_rtx_CONST_INT.
 
index dc756fe..8673de3 100644 (file)
@@ -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)