Commit b2a9e897 by Andrew Burgess Committed by Jeff Law

genrecog.c (special_predicate_operand_p): New function.

	* genrecog.c (special_predicate_operand_p): New function.
	(predicate_name): Move function.
	(validate_pattern): Don't warn about missing mode for all
	define_special_predicate predicates.

From-SVN: r238314
parent 03ef0c6c
2016-07-13 Andrew Burgess <andrew.burgess@embecosm.com>
* genrecog.c (special_predicate_operand_p): New function.
(predicate_name): Move function.
(validate_pattern): Don't warn about missing mode for all
define_special_predicate predicates.
2016-07-13 Bin Cheng <bin.cheng@arm.com> 2016-07-13 Bin Cheng <bin.cheng@arm.com>
* tree-vect-data-refs.c (vect_no_alias_p): New function. * tree-vect-data-refs.c (vect_no_alias_p): New function.
......
...@@ -463,6 +463,38 @@ constraints_supported_in_insn_p (rtx insn) ...@@ -463,6 +463,38 @@ constraints_supported_in_insn_p (rtx insn)
|| GET_CODE (insn) == DEFINE_PEEPHOLE2); || GET_CODE (insn) == DEFINE_PEEPHOLE2);
} }
/* Return the name of the predicate matched by MATCH_RTX. */
static const char *
predicate_name (rtx match_rtx)
{
if (GET_CODE (match_rtx) == MATCH_SCRATCH)
return "scratch_operand";
else
return XSTR (match_rtx, 1);
}
/* Return true if OPERAND is a MATCH_OPERAND using a special predicate
function. */
static bool
special_predicate_operand_p (rtx operand)
{
if (GET_CODE (operand) == MATCH_OPERAND)
{
const char *pred_name = predicate_name (operand);
if (pred_name[0] != 0)
{
const struct pred_data *pred;
pred = lookup_predicate (pred_name);
return pred != NULL && pred->special;
}
}
return false;
}
/* Check for various errors in PATTERN, which is part of INFO. /* Check for various errors in PATTERN, which is part of INFO.
SET is nonnull for a destination, and is the complete set pattern. SET is nonnull for a destination, and is the complete set pattern.
SET_CODE is '=' for normal sets, and '+' within a context that SET_CODE is '=' for normal sets, and '+' within a context that
...@@ -651,10 +683,9 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code) ...@@ -651,10 +683,9 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code)
dmode = GET_MODE (dest); dmode = GET_MODE (dest);
smode = GET_MODE (src); smode = GET_MODE (src);
/* The mode of an ADDRESS_OPERAND is the mode of the memory /* Mode checking is not performed for special predicates. */
reference, not the mode of the address. */ if (special_predicate_operand_p (src)
if (GET_CODE (src) == MATCH_OPERAND || special_predicate_operand_p (dest))
&& ! strcmp (XSTR (src, 1), "address_operand"))
; ;
/* The operands of a SET must have the same mode unless one /* The operands of a SET must have the same mode unless one
...@@ -3788,17 +3819,6 @@ operator < (const pattern_pos &e1, const pattern_pos &e2) ...@@ -3788,17 +3819,6 @@ operator < (const pattern_pos &e1, const pattern_pos &e2)
return diff < 0; return diff < 0;
} }
/* Return the name of the predicate matched by MATCH_RTX. */
static const char *
predicate_name (rtx match_rtx)
{
if (GET_CODE (match_rtx) == MATCH_SCRATCH)
return "scratch_operand";
else
return XSTR (match_rtx, 1);
}
/* Add new decisions to S that check whether the rtx at position POS /* Add new decisions to S that check whether the rtx at position POS
matches PATTERN. Return the state that is reached in that case. matches PATTERN. Return the state that is reached in that case.
TOP_PATTERN is the overall pattern, as passed to match_pattern_1. */ TOP_PATTERN is the overall pattern, as passed to match_pattern_1. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment