Index: gcc/gcc/genrecog.c |
diff --git a/gcc/gcc/genrecog.c b/gcc/gcc/genrecog.c |
index 01177c6de8f8159e871c7c4328b36367a1b4a755..6e82584cf9f7bb3b4cc4c0338fd8fea76004eec4 100644 |
--- a/gcc/gcc/genrecog.c |
+++ b/gcc/gcc/genrecog.c |
@@ -1,6 +1,6 @@ |
/* Generate code from machine description to recognize rtl as insns. |
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1997, 1998, |
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 |
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 |
Free Software Foundation, Inc. |
This file is part of GCC. |
@@ -71,6 +71,17 @@ struct decision_head |
struct decision *last; |
}; |
+/* These types are roughly in the order in which we'd like to test them. */ |
+enum decision_type |
+{ |
+ DT_num_insns, |
+ 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 |
+}; |
+ |
/* A single test. The two accept types aren't tests per-se, but |
their equality (or lack thereof) does affect tree merging so |
it is convenient to keep them here. */ |
@@ -80,16 +91,7 @@ struct decision_test |
/* A linked list through the tests attached to a node. */ |
struct decision_test *next; |
- /* These types are roughly in the order in which we'd like to test them. */ |
- enum decision_type |
- { |
- DT_num_insns, |
- 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; |
+ enum decision_type type; |
union |
{ |
@@ -378,7 +380,7 @@ process_define_predicate (rtx desc) |
for (i = 0; i < NUM_RTX_CODE; i++) |
if (codes[i] != N) |
- add_predicate_code (pred, i); |
+ add_predicate_code (pred, (enum rtx_code) i); |
add_predicate (pred); |
} |
@@ -793,7 +795,8 @@ validate_pattern (rtx pattern, rtx insn, rtx set, int set_code) |
&& GET_CODE (dest) != CC0 |
&& GET_CODE (src) != PC |
&& GET_CODE (src) != CC0 |
- && GET_CODE (src) != CONST_INT) |
+ && !CONST_INT_P (src) |
+ && GET_CODE (src) != CALL) |
{ |
const char *which; |
which = (dmode == VOIDmode ? "destination" : "source"); |
@@ -1243,7 +1246,7 @@ maybe_both_true_2 (struct decision_test *d1, struct decision_test *d2) |
else if (d2->type == DT_pred && d2->u.pred.data) |
{ |
bool common = false; |
- enum rtx_code c; |
+ int c; |
for (c = 0; c < NUM_RTX_CODE; c++) |
if (d1->u.pred.data->codes[c] && d2->u.pred.data->codes[c]) |
@@ -1921,7 +1924,8 @@ write_switch (struct decision *start, int depth) |
while (p && p->tests->type == DT_pred && p->tests->u.pred.data) |
{ |
const struct pred_data *data = p->tests->u.pred.data; |
- RTX_CODE c; |
+ int c; |
+ |
for (c = 0; c < NUM_RTX_CODE; c++) |
if (codemap[c] && data->codes[c]) |
goto pred_done; |
@@ -1930,7 +1934,7 @@ write_switch (struct decision *start, int depth) |
if (data->codes[c]) |
{ |
fputs (" case ", stdout); |
- print_code (c); |
+ print_code ((enum rtx_code) c); |
fputs (":\n", stdout); |
codemap[c] = 1; |
} |