* config/bfin-parse.y (binary): Do some more constant folding for
additions.
This commit is contained in:
parent
76052d04e0
commit
c4ae04ceb1
2 changed files with 26 additions and 6 deletions
|
@ -1,3 +1,8 @@
|
|||
2006-09-15 Bernd Schmidt <bernd.schmidt@analog.com>
|
||||
|
||||
* config/bfin-parse.y (binary): Do some more constant folding for
|
||||
additions.
|
||||
|
||||
2006-09-13 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* input-file.c (input_file_give_next_buffer): Demote as_bad to
|
||||
|
|
|
@ -4270,6 +4270,8 @@ value_match (Expr_Node *expr, int sz, int sign, int mul, int issigned)
|
|||
static Expr_Node *
|
||||
binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
|
||||
{
|
||||
Expr_Node_Value val;
|
||||
|
||||
if (x->type == Expr_Node_Constant && y->type == Expr_Node_Constant)
|
||||
{
|
||||
switch (op)
|
||||
|
@ -4319,13 +4321,26 @@ binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y)
|
|||
}
|
||||
return x;
|
||||
}
|
||||
else
|
||||
/* Canonicalize order to EXPR OP CONSTANT. */
|
||||
if (x->type == Expr_Node_Constant)
|
||||
{
|
||||
/* Create a new expression structure. */
|
||||
Expr_Node_Value val;
|
||||
val.op_value = op;
|
||||
return Expr_Node_Create (Expr_Node_Binop, val, x, y);
|
||||
}
|
||||
Expr_Node *t = x;
|
||||
x = y;
|
||||
y = t;
|
||||
}
|
||||
if (y->type == Expr_Node_Constant && x->type == Expr_Node_Binop
|
||||
&& x->Right_Child->type == Expr_Node_Constant)
|
||||
{
|
||||
if (op == x->value.op_value && x->value.op_value == Expr_Op_Type_Add)
|
||||
{
|
||||
x->Right_Child->value.i_value += y->value.i_value;
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
/* Create a new expression structure. */
|
||||
val.op_value = op;
|
||||
return Expr_Node_Create (Expr_Node_Binop, val, x, y);
|
||||
}
|
||||
|
||||
static Expr_Node *
|
||||
|
|
Loading…
Reference in a new issue