aboutsummaryrefslogtreecommitdiff
path: root/gcc/gensupport.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-05-26 11:01:42 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-05-26 11:01:42 +0000
commit851ee5f43c954f1831ae23ec45347ce5441ebab5 (patch)
treefbc57b19f37c4860b50243a95bee808045aad0b0 /gcc/gensupport.c
parent3a37ecec8934dc378bfce06d9ea2325a98159f43 (diff)
downloadgcc-851ee5f43c954f1831ae23ec45347ce5441ebab5.zip
gcc-851ee5f43c954f1831ae23ec45347ce5441ebab5.tar.gz
gcc-851ee5f43c954f1831ae23ec45347ce5441ebab5.tar.bz2
gensupport.h (compute_test_codes): Declare.
gcc/ * gensupport.h (compute_test_codes): Declare. * gensupport.c (compute_predicate_codes): Rename to... (compute_test_codes): ...this. Generalize error message. (process_define_predicate): Update accordingly. * genpreds.c (compute_maybe_allows): Delete. (add_constraint): Use compute_test_codes to determine whether something can accept a SUBREG, REG or MEM. From-SVN: r223687
Diffstat (limited to 'gcc/gensupport.c')
-rw-r--r--gcc/gensupport.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/gcc/gensupport.c b/gcc/gensupport.c
index 2955d29..d828051 100644
--- a/gcc/gensupport.c
+++ b/gcc/gensupport.c
@@ -204,8 +204,8 @@ static char did_you_mean_codes[NUM_RTX_CODE];
predicate expression EXP, writing the result to CODES. LINENO is
the line number on which the directive containing EXP appeared. */
-static void
-compute_predicate_codes (rtx exp, int lineno, char codes[NUM_RTX_CODE])
+void
+compute_test_codes (rtx exp, int lineno, char *codes)
{
char op0_codes[NUM_RTX_CODE];
char op1_codes[NUM_RTX_CODE];
@@ -215,29 +215,29 @@ compute_predicate_codes (rtx exp, int lineno, char codes[NUM_RTX_CODE])
switch (GET_CODE (exp))
{
case AND:
- compute_predicate_codes (XEXP (exp, 0), lineno, op0_codes);
- compute_predicate_codes (XEXP (exp, 1), lineno, op1_codes);
+ compute_test_codes (XEXP (exp, 0), lineno, op0_codes);
+ compute_test_codes (XEXP (exp, 1), lineno, op1_codes);
for (i = 0; i < NUM_RTX_CODE; i++)
codes[i] = TRISTATE_AND (op0_codes[i], op1_codes[i]);
break;
case IOR:
- compute_predicate_codes (XEXP (exp, 0), lineno, op0_codes);
- compute_predicate_codes (XEXP (exp, 1), lineno, op1_codes);
+ compute_test_codes (XEXP (exp, 0), lineno, op0_codes);
+ compute_test_codes (XEXP (exp, 1), lineno, op1_codes);
for (i = 0; i < NUM_RTX_CODE; i++)
codes[i] = TRISTATE_OR (op0_codes[i], op1_codes[i]);
break;
case NOT:
- compute_predicate_codes (XEXP (exp, 0), lineno, op0_codes);
+ compute_test_codes (XEXP (exp, 0), lineno, op0_codes);
for (i = 0; i < NUM_RTX_CODE; i++)
codes[i] = TRISTATE_NOT (op0_codes[i]);
break;
case IF_THEN_ELSE:
/* a ? b : c accepts the same codes as (a & b) | (!a & c). */
- compute_predicate_codes (XEXP (exp, 0), lineno, op0_codes);
- compute_predicate_codes (XEXP (exp, 1), lineno, op1_codes);
- compute_predicate_codes (XEXP (exp, 2), lineno, op2_codes);
+ compute_test_codes (XEXP (exp, 0), lineno, op0_codes);
+ compute_test_codes (XEXP (exp, 1), lineno, op1_codes);
+ compute_test_codes (XEXP (exp, 2), lineno, op2_codes);
for (i = 0; i < NUM_RTX_CODE; i++)
codes[i] = TRISTATE_OR (TRISTATE_AND (op0_codes[i], op1_codes[i]),
TRISTATE_AND (TRISTATE_NOT (op0_codes[i]),
@@ -321,7 +321,7 @@ compute_predicate_codes (rtx exp, int lineno, char codes[NUM_RTX_CODE])
default:
error_with_line (lineno,
- "'%s' cannot be used in a define_predicate expression",
+ "'%s' cannot be used in predicates or constraints",
GET_RTX_NAME (GET_CODE (exp)));
memset (codes, I, NUM_RTX_CODE);
break;
@@ -373,7 +373,7 @@ process_define_predicate (rtx desc, int lineno)
if (GET_CODE (desc) == DEFINE_SPECIAL_PREDICATE)
pred->special = true;
- compute_predicate_codes (XEXP (desc, 1), lineno, codes);
+ compute_test_codes (XEXP (desc, 1), lineno, codes);
for (i = 0; i < NUM_RTX_CODE; i++)
if (codes[i] != N)