fold-const.c (div_if_zero_remainder): Honor that sizetypes are sign-extending.
2009-12-02 Richard Guenther <rguenther@suse.de> * fold-const.c (div_if_zero_remainder): Honor that sizetypes are sign-extending. Simplify. From-SVN: r154926
This commit is contained in:
parent
fc81a3692d
commit
793e86a71b
|
@ -1,3 +1,8 @@
|
|||
2009-12-02 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* fold-const.c (div_if_zero_remainder): Honor that sizetypes
|
||||
are sign-extending. Simplify.
|
||||
|
||||
2009-12-02 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR tree-opt/42215
|
||||
|
|
|
@ -881,22 +881,18 @@ div_if_zero_remainder (enum tree_code code, const_tree arg1, const_tree arg2)
|
|||
HOST_WIDE_INT int1h, int2h;
|
||||
unsigned HOST_WIDE_INT quol, reml;
|
||||
HOST_WIDE_INT quoh, remh;
|
||||
tree type = TREE_TYPE (arg1);
|
||||
int uns = TYPE_UNSIGNED (type);
|
||||
int uns;
|
||||
|
||||
/* The sign of the division is according to operand two, that
|
||||
does the correct thing for POINTER_PLUS_EXPR where we want
|
||||
a signed division. */
|
||||
uns = TYPE_UNSIGNED (TREE_TYPE (arg2));
|
||||
if (TREE_CODE (TREE_TYPE (arg2)) == INTEGER_TYPE
|
||||
&& TYPE_IS_SIZETYPE (TREE_TYPE (arg2)))
|
||||
uns = false;
|
||||
|
||||
int1l = TREE_INT_CST_LOW (arg1);
|
||||
int1h = TREE_INT_CST_HIGH (arg1);
|
||||
/* &obj[0] + -128 really should be compiled as &obj[-8] rather than
|
||||
&obj[some_exotic_number]. */
|
||||
if (POINTER_TYPE_P (type))
|
||||
{
|
||||
uns = false;
|
||||
type = signed_type_for (type);
|
||||
fit_double_type (int1l, int1h, &int1l, &int1h,
|
||||
type);
|
||||
}
|
||||
else
|
||||
fit_double_type (int1l, int1h, &int1l, &int1h, type);
|
||||
int2l = TREE_INT_CST_LOW (arg2);
|
||||
int2h = TREE_INT_CST_HIGH (arg2);
|
||||
|
||||
|
@ -905,7 +901,7 @@ div_if_zero_remainder (enum tree_code code, const_tree arg1, const_tree arg2)
|
|||
if (remh != 0 || reml != 0)
|
||||
return NULL_TREE;
|
||||
|
||||
return build_int_cst_wide (type, quol, quoh);
|
||||
return build_int_cst_wide (TREE_TYPE (arg1), quol, quoh);
|
||||
}
|
||||
|
||||
/* This is nonzero if we should defer warnings about undefined
|
||||
|
|
Loading…
Reference in New Issue