mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-17 05:20:26 +08:00
wide-int-range.h (wide_int_range_shift_undefined_p): Adjust to use sign as argument.
* wide-int-range.h (wide_int_range_shift_undefined_p): Adjust to use sign as argument. * tree-vrp.c (extract_range_from_binary_expr_1): Pass sign to wide_int_range_shift_undefined_p. From-SVN: r265237
This commit is contained in:
parent
cd1e244a1c
commit
fa6b20f32c
@ -1,3 +1,10 @@
|
||||
2018-10-17 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* wide-int-range.h (wide_int_range_shift_undefined_p): Adjust to
|
||||
use sign as argument.
|
||||
* tree-vrp.c (extract_range_from_binary_expr_1): Pass sign to
|
||||
wide_int_range_shift_undefined_p.
|
||||
|
||||
2018-10-16 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* config/aarch64/aarch64.md (despeculate_copy<ALLI_TI:mode>):
|
||||
|
@ -1521,7 +1521,8 @@ extract_range_from_binary_expr_1 (value_range *vr,
|
||||
|| code == LSHIFT_EXPR)
|
||||
{
|
||||
if (range_int_cst_p (&vr1)
|
||||
&& !wide_int_range_shift_undefined_p (prec,
|
||||
&& !wide_int_range_shift_undefined_p (TYPE_SIGN (TREE_TYPE (vr1.min)),
|
||||
prec,
|
||||
wi::to_wide (vr1.min),
|
||||
wi::to_wide (vr1.max)))
|
||||
{
|
||||
|
@ -128,10 +128,11 @@ extern bool wide_int_range_div (wide_int &wmin, wide_int &wmax,
|
||||
bool &extra_range_p,
|
||||
wide_int &extra_min, wide_int &extra_max);
|
||||
|
||||
/* Return TRUE if shifting by range [MIN, MAX] is undefined behavior. */
|
||||
/* Return TRUE if shifting by range [MIN, MAX] is undefined behavior,
|
||||
interpreting MIN and MAX according to SIGN. */
|
||||
|
||||
inline bool
|
||||
wide_int_range_shift_undefined_p (unsigned prec,
|
||||
wide_int_range_shift_undefined_p (signop sign, unsigned prec,
|
||||
const wide_int &min, const wide_int &max)
|
||||
{
|
||||
/* ?? Note: The original comment said this only applied to
|
||||
@ -142,7 +143,7 @@ wide_int_range_shift_undefined_p (unsigned prec,
|
||||
behavior from the shift operation. We cannot even trust
|
||||
SHIFT_COUNT_TRUNCATED at this stage, because that applies to rtl
|
||||
shifts, and the operation at the tree level may be widened. */
|
||||
return wi::sign_mask (min) || wi::ge_p (max, prec, UNSIGNED);
|
||||
return wi::lt_p (min, 0, sign) || wi::ge_p (max, prec, sign);
|
||||
}
|
||||
|
||||
/* Calculate MIN/MAX_EXPR of two ranges and store the result in [MIN, MAX]. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user