* [PATCH] Fix PR54547
@ 2012-11-28 12:10 Richard Biener
0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2012-11-28 12:10 UTC (permalink / raw)
To: gcc-patches
This fixes the FAIL of gcc.dg/tree-ssa/pr37508.c on arm. We fail
to canonicalize anti-ranges of 1-bit precision types correctly.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
Richard.
2012-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/54547
* tree-vrp.c (set_and_canonicalize_value_range): Handle
1-bit anti-ranges explicitely.
(extract_range_from_assert): Properly canonicalize all
built anti-ranges.
Index: gcc/tree-vrp.c
===================================================================
*** gcc/tree-vrp.c (revision 193881)
--- gcc/tree-vrp.c (working copy)
*************** set_and_canonicalize_value_range (value_
*** 541,562 ****
return;
}
else if (TYPE_PRECISION (TREE_TYPE (min)) == 1
- && !TYPE_UNSIGNED (TREE_TYPE (min))
&& (is_min || is_max))
{
! /* For signed 1-bit precision, one is not in-range and
! thus adding/subtracting it would result in overflows. */
! if (operand_equal_p (min, max, 0))
! {
! min = max = is_min ? vrp_val_max (TREE_TYPE (min))
! : vrp_val_min (TREE_TYPE (min));
! t = VR_RANGE;
! }
else
! {
! set_value_range_to_varying (vr);
! return;
! }
}
else if (is_min
/* As a special exception preserve non-null ranges. */
--- 541,555 ----
return;
}
else if (TYPE_PRECISION (TREE_TYPE (min)) == 1
&& (is_min || is_max))
{
! /* Non-empty boolean ranges can always be represented
! as a singleton range. */
! if (is_min)
! min = max = vrp_val_max (TREE_TYPE (min));
else
! min = max = vrp_val_min (TREE_TYPE (min));
! t = VR_RANGE;
}
else if (is_min
/* As a special exception preserve non-null ranges. */
*************** extract_range_from_assert (value_range_t
*** 1707,1713 ****
&& vrp_val_is_max (max))
min = max = limit;
! set_value_range (vr_p, VR_ANTI_RANGE, min, max, vr_p->equiv);
}
else if (cond_code == LE_EXPR || cond_code == LT_EXPR)
{
--- 1700,1707 ----
&& vrp_val_is_max (max))
min = max = limit;
! set_and_canonicalize_value_range (vr_p, VR_ANTI_RANGE,
! min, max, vr_p->equiv);
}
else if (cond_code == LE_EXPR || cond_code == LT_EXPR)
{
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-11-28 12:10 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-28 12:10 [PATCH] Fix PR54547 Richard Biener
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).