combine.c (simplify_comparison): Update op1 after constant extension.
* combine.c (simplify_comparison): Update op1 after constant extension. * recog.c (const_int_operand): Accept only constants valid for the given mode. * genrecog.c: Update comments wrt const_int_operand. From-SVN: r42427
This commit is contained in:
parent
47816305fe
commit
b4fbaca7cb
4 changed files with 25 additions and 13 deletions
|
@ -1,5 +1,11 @@
|
|||
2001-05-21 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* combine.c (simplify_comparison): Update op1 after constant
|
||||
extension.
|
||||
* recog.c (const_int_operand): Accept only constants valid
|
||||
for the given mode.
|
||||
* genrecog.c: Update comments wrt const_int_operand.
|
||||
|
||||
* emit-rtl.c (init_emit_once): Zero unused memory in a
|
||||
CONST_DOUBLE.
|
||||
|
||||
|
|
|
@ -10025,6 +10025,7 @@ simplify_comparison (code, pop0, pop1)
|
|||
/* Get the constant we are comparing against and turn off all bits
|
||||
not on in our mode. */
|
||||
const_op = trunc_int_for_mode (INTVAL (op1), mode);
|
||||
op1 = GEN_INT (const_op);
|
||||
|
||||
/* If we are comparing against a constant power of two and the value
|
||||
being compared can only have that single bit nonzero (e.g., it was
|
||||
|
|
|
@ -842,18 +842,16 @@ add_to_sequence (pattern, last, position, insn_type, top)
|
|||
test->u.pred.name = pred_name;
|
||||
test->u.pred.mode = mode;
|
||||
|
||||
/* See if we know about this predicate and save its number. If
|
||||
we do, and it only accepts one code, note that fact. The
|
||||
predicate `const_int_operand' only tests for a CONST_INT, so
|
||||
if we do so we can avoid calling it at all.
|
||||
/* See if we know about this predicate and save its number.
|
||||
If we do, and it only accepts one code, note that fact.
|
||||
|
||||
Finally, if we know that the predicate does not allow
|
||||
CONST_INT, we know that the only way the predicate can match
|
||||
is if the modes match (here we use the kludge of relying on
|
||||
the fact that "address_operand" accepts CONST_INT; otherwise,
|
||||
it would have to be a special case), so we can test the mode
|
||||
(but we need not). This fact should considerably simplify the
|
||||
generated code. */
|
||||
If we know that the predicate does not allow CONST_INT,
|
||||
we know that the only way the predicate can match is if
|
||||
the modes match (here we use the kludge of relying on the
|
||||
fact that "address_operand" accepts CONST_INT; otherwise,
|
||||
it would have to be a special case), so we can test the
|
||||
mode (but we need not). This fact should considerably
|
||||
simplify the generated code. */
|
||||
|
||||
for (i = 0; i < NUM_KNOWN_PREDS; i++)
|
||||
if (! strcmp (preds[i].name, pred_name))
|
||||
|
|
11
gcc/recog.c
11
gcc/recog.c
|
@ -1145,9 +1145,16 @@ immediate_operand (op, mode)
|
|||
int
|
||||
const_int_operand (op, mode)
|
||||
register rtx op;
|
||||
enum machine_mode mode ATTRIBUTE_UNUSED;
|
||||
enum machine_mode mode;
|
||||
{
|
||||
return GET_CODE (op) == CONST_INT;
|
||||
if (GET_CODE (op) != CONST_INT)
|
||||
return 0;
|
||||
|
||||
if (mode != VOIDmode
|
||||
&& trunc_int_for_mode (INTVAL (op), mode) != INTVAL (op))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Returns 1 if OP is an operand that is a constant integer or constant
|
||||
|
|
Loading…
Add table
Reference in a new issue