This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Remove some vestiges of PREDICATE_CODES
- From: Paolo Bonzini <paolo dot bonzini at lu dot unisi dot ch>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 05 Sep 2005 10:54:48 +0200
- Subject: Re: [PATCH] Remove some vestiges of PREDICATE_CODES
- References: <431C07A4.8020402@lu.unisi.ch>
Paolo Bonzini wrote:
The code that sets up the predicate table can be simplified now that
all ports use define_predicate. I've been meaning to send this
cleanup for a while, but it always slipped through.
Bootstrapped/regtested powerpc-apple-darwin, and built crosses for
some other targets with this patch in the last few months. Ok for
mainline?
And here is the patch.
Paolo
2005-09-05 Paolo Bonzini <bonzini@gnu.org>
* gensupport.c (old_preds): Rename to std_preds, add special field.
(struct old_pred_table): Rename to struct std_pred_table, add special
field.
(NUM_KNOWN_OLD_PREDS): Rename to NUM_KNOWN_STD_PREDS.
(NUM_OLD_SPECIAL_MODE_PREDS): Remove.
(init_predicate_table): Adjust, and set along the way whether a
predicate is special.
Index: gensupport.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/gensupport.c,v
retrieving revision 1.64
diff -p -u -r1.64 gensupport.c
--- gensupport.c 21 Jul 2005 00:55:16 -0000 1.64
+++ gensupport.c 5 Sep 2005 08:45:26 -0000
@@ -1220,46 +1220,38 @@ add_predicate (struct pred_data *pred)
/* This array gives the initial content of the predicate table. It
has entries for all predicates defined in recog.c. */
-struct old_pred_table
+struct std_pred_table
{
const char *name;
+ bool special;
RTX_CODE codes[NUM_RTX_CODE];
};
-static const struct old_pred_table old_preds[] = {
- {"general_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
- LABEL_REF, SUBREG, REG, MEM }},
- {"address_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
- LABEL_REF, SUBREG, REG, MEM,
- PLUS, MINUS, MULT}},
- {"register_operand", {SUBREG, REG}},
- {"pmode_register_operand", {SUBREG, REG}},
- {"scratch_operand", {SCRATCH, REG}},
- {"immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
- LABEL_REF}},
- {"const_int_operand", {CONST_INT}},
- {"const_double_operand", {CONST_INT, CONST_DOUBLE}},
- {"nonimmediate_operand", {SUBREG, REG, MEM}},
- {"nonmemory_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
- LABEL_REF, SUBREG, REG}},
- {"push_operand", {MEM}},
- {"pop_operand", {MEM}},
- {"memory_operand", {SUBREG, MEM}},
- {"indirect_operand", {SUBREG, MEM}},
- {"comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, GTU,
- UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE,
- UNLT, LTGT}}
+static const struct std_pred_table std_preds[] = {
+ {"general_operand", false, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
+ LABEL_REF, SUBREG, REG, MEM }},
+ {"address_operand", true, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
+ LABEL_REF, SUBREG, REG, MEM,
+ PLUS, MINUS, MULT}},
+ {"register_operand", false, {SUBREG, REG}},
+ {"pmode_register_operand", true, {SUBREG, REG}},
+ {"scratch_operand", false, {SCRATCH, REG}},
+ {"immediate_operand", false, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
+ LABEL_REF}},
+ {"const_int_operand", false, {CONST_INT}},
+ {"const_double_operand", false, {CONST_INT, CONST_DOUBLE}},
+ {"nonimmediate_operand", false, {SUBREG, REG, MEM}},
+ {"nonmemory_operand", false, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
+ false, LABEL_REF, SUBREG, REG}},
+ {"push_operand", false, {MEM}},
+ {"pop_operand", false, {MEM}},
+ {"memory_operand", false, {SUBREG, MEM}},
+ {"indirect_operand", false, {SUBREG, MEM}},
+ {"comparison_operator", false, {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, GTU,
+ UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE,
+ UNLT, LTGT}}
};
-#define NUM_KNOWN_OLD_PREDS ARRAY_SIZE (old_preds)
-
-/* This table gives the set of special predicates. It has entries for
- all special predicates defined in recog.c. */
-static const char *const old_special_pred_table[] = {
- "address_operand",
- "pmode_register_operand",
-};
-
-#define NUM_OLD_SPECIAL_MODE_PREDS ARRAY_SIZE (old_special_pred_table)
+#define NUM_KNOWN_STD_PREDS ARRAY_SIZE (std_preds)
/* Initialize the table of predicate definitions, starting with
the information we have on generic predicates. */
@@ -1274,14 +1266,15 @@ init_predicate_table (void)
eq_struct_pred_data, 0,
xcalloc, free);
- for (i = 0; i < NUM_KNOWN_OLD_PREDS; i++)
+ for (i = 0; i < NUM_KNOWN_STD_PREDS; i++)
{
pred = xcalloc (sizeof (struct pred_data), 1);
- pred->name = old_preds[i].name;
+ pred->name = std_preds[i].name;
+ pred->special = std_preds[i].special;
- for (j = 0; old_preds[i].codes[j] != 0; j++)
+ for (j = 0; std_preds[i].codes[j] != 0; j++)
{
- enum rtx_code code = old_preds[i].codes[j];
+ enum rtx_code code = std_preds[i].codes[j];
pred->codes[code] = true;
if (GET_RTX_CLASS (code) != RTX_CONST_OBJ)
@@ -1295,20 +1288,8 @@ init_predicate_table (void)
pred->allows_non_lvalue = true;
}
if (j == 1)
- pred->singleton = old_preds[i].codes[0];
+ pred->singleton = std_preds[i].codes[0];
add_predicate (pred);
}
-
- for (i = 0; i < NUM_OLD_SPECIAL_MODE_PREDS; i++)
- {
- pred = lookup_predicate (old_special_pred_table[i]);
- if (!pred)
- {
- error ("old-style special predicate list refers "
- "to unknown predicate '%s'", old_special_pred_table[i]);
- continue;
- }
- pred->special = true;
- }
}