re PR tree-optimization/91257 (Compile-time and memory-hog hog)

2019-07-31  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91257
	* tree-vrp.c (union_ranges): Unify equality and less tests
	by using compare_values.  Re-order cheap tests first.

From-SVN: r273923
This commit is contained in:
Richard Biener 2019-07-31 07:53:11 +00:00 committed by Richard Biener
parent c3ac76aa40
commit ce52e0ffb4
2 changed files with 22 additions and 14 deletions

View File

@ -1,3 +1,9 @@
2019-07-31 Richard Biener <rguenther@suse.de>
PR tree-optimization/91257
* tree-vrp.c (union_ranges): Unify equality and less tests
by using compare_values. Re-order cheap tests first.
2019-07-31 Jakub Jelinek <jakub@redhat.com>
PR middle-end/91301

View File

@ -5420,8 +5420,10 @@ union_ranges (enum value_range_kind *vr0type,
enum value_range_kind vr1type,
tree vr1min, tree vr1max)
{
bool mineq = vrp_operand_equal_p (*vr0min, vr1min);
bool maxeq = vrp_operand_equal_p (*vr0max, vr1max);
int cmpmin = compare_values (*vr0min, vr1min);
int cmpmax = compare_values (*vr0max, vr1max);
bool mineq = cmpmin == 0;
bool maxeq = cmpmax == 0;
/* [] is vr0, () is vr1 in the following classification comments. */
if (mineq && maxeq)
@ -5521,8 +5523,8 @@ union_ranges (enum value_range_kind *vr0type,
else
gcc_unreachable ();
}
else if ((maxeq || operand_less_p (vr1max, *vr0max) == 1)
&& (mineq || operand_less_p (*vr0min, vr1min) == 1))
else if ((maxeq || cmpmax == 1)
&& (mineq || cmpmin == -1))
{
/* [ ( ) ] or [( ) ] or [ ( )] */
if (*vr0type == VR_RANGE
@ -5555,8 +5557,8 @@ union_ranges (enum value_range_kind *vr0type,
else
gcc_unreachable ();
}
else if ((maxeq || operand_less_p (*vr0max, vr1max) == 1)
&& (mineq || operand_less_p (vr1min, *vr0min) == 1))
else if ((maxeq || cmpmax == -1)
&& (mineq || cmpmin == 1))
{
/* ( [ ] ) or ([ ] ) or ( [ ]) */
if (*vr0type == VR_RANGE
@ -5595,10 +5597,10 @@ union_ranges (enum value_range_kind *vr0type,
else
gcc_unreachable ();
}
else if ((operand_less_p (vr1min, *vr0max) == 1
|| operand_equal_p (vr1min, *vr0max, 0))
&& operand_less_p (*vr0min, vr1min) == 1
&& operand_less_p (*vr0max, vr1max) == 1)
else if (cmpmin == -1
&& cmpmax == -1
&& (operand_less_p (vr1min, *vr0max) == 1
|| operand_equal_p (vr1min, *vr0max, 0)))
{
/* [ ( ] ) or [ ]( ) */
if (*vr0type == VR_RANGE
@ -5632,10 +5634,10 @@ union_ranges (enum value_range_kind *vr0type,
else
gcc_unreachable ();
}
else if ((operand_less_p (*vr0min, vr1max) == 1
|| operand_equal_p (*vr0min, vr1max, 0))
&& operand_less_p (vr1min, *vr0min) == 1
&& operand_less_p (vr1max, *vr0max) == 1)
else if (cmpmin == 1
&& cmpmax == 1
&& (operand_less_p (*vr0min, vr1max) == 1
|| operand_equal_p (*vr0min, vr1max, 0)))
{
/* ( [ ) ] or ( )[ ] */
if (*vr0type == VR_RANGE