mirror of git://gcc.gnu.org/git/gcc.git
* tree-affine.c (tree_to_aff_combination): Handle (T1)(X + X).
From-SVN: r248956
This commit is contained in:
parent
1b92ccde2c
commit
8813f50d2c
|
|
@ -1,3 +1,7 @@
|
||||||
|
2017-06-07 Bin Cheng <bin.cheng@arm.com>
|
||||||
|
|
||||||
|
* tree-affine.c (tree_to_aff_combination): Handle (T1)(X + X).
|
||||||
|
|
||||||
2017-06-07 Bin Cheng <bin.cheng@arm.com>
|
2017-06-07 Bin Cheng <bin.cheng@arm.com>
|
||||||
|
|
||||||
(aff_combination_expand): Move (T1)(X *+- CST) simplification to ...
|
(aff_combination_expand): Move (T1)(X *+- CST) simplification to ...
|
||||||
|
|
|
||||||
|
|
@ -375,17 +375,24 @@ tree_to_aff_combination (tree expr, tree type, aff_tree *comb)
|
||||||
if ((icode == PLUS_EXPR || icode == MINUS_EXPR || icode == MULT_EXPR)
|
if ((icode == PLUS_EXPR || icode == MINUS_EXPR || icode == MULT_EXPR)
|
||||||
&& TREE_CODE (itype) == INTEGER_TYPE
|
&& TREE_CODE (itype) == INTEGER_TYPE
|
||||||
&& TREE_CODE (otype) == INTEGER_TYPE
|
&& TREE_CODE (otype) == INTEGER_TYPE
|
||||||
&& TYPE_PRECISION (otype) > TYPE_PRECISION (itype)
|
&& TYPE_PRECISION (otype) > TYPE_PRECISION (itype))
|
||||||
&& TYPE_OVERFLOW_UNDEFINED (itype)
|
|
||||||
&& TREE_CODE (TREE_OPERAND (inner, 1)) == INTEGER_CST)
|
|
||||||
{
|
{
|
||||||
/* Convert (T1)(X *+- CST) into (T1)X *+- (T1)CST if X's type has
|
tree op0 = TREE_OPERAND (inner, 0), op1 = TREE_OPERAND (inner, 1);
|
||||||
undefined overflow behavior. */
|
|
||||||
tree op0 = fold_convert (otype, TREE_OPERAND (inner, 0));
|
/* If inner type has undefined overflow behavior, fold conversion
|
||||||
tree op1 = fold_convert (otype, TREE_OPERAND (inner, 1));
|
for below two cases:
|
||||||
expr = fold_build2 (icode, otype, op0, op1);
|
(T1)(X *+- CST) -> (T1)X *+- (T1)CST
|
||||||
tree_to_aff_combination (expr, type, comb);
|
(T1)(X + X) -> (T1)X + (T1)X. */
|
||||||
return;
|
if (TYPE_OVERFLOW_UNDEFINED (itype)
|
||||||
|
&& (TREE_CODE (op1) == INTEGER_CST
|
||||||
|
|| (icode == PLUS_EXPR && operand_equal_p (op0, op1, 0))))
|
||||||
|
{
|
||||||
|
op0 = fold_convert (otype, op0);
|
||||||
|
op1 = fold_convert (otype, op1);
|
||||||
|
expr = fold_build2 (icode, otype, op0, op1);
|
||||||
|
tree_to_aff_combination (expr, type, comb);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue