diff options
author | Richard Biener <rguenther@suse.de> | 2018-11-28 13:04:27 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-11-28 13:04:27 +0000 |
commit | a257ad466894df673adc46865d763ee4324d9e17 (patch) | |
tree | bb9217b9fbab81210da2036428065e73b22e1fa1 /gcc/vr-values.c | |
parent | 20f65b5607d4cf5b4b61e8d1923bb922abadf1ba (diff) | |
download | gcc-a257ad466894df673adc46865d763ee4324d9e17.zip gcc-a257ad466894df673adc46865d763ee4324d9e17.tar.gz gcc-a257ad466894df673adc46865d763ee4324d9e17.tar.bz2 |
re PR tree-optimization/88217 (Compile time and memory hog w/ -O2 -fstrict-enums -fno-tree-forwprop -fno-tree-fre)
2018-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/88217
* vr-values.c (vr_values::extract_range_from_phi_node): Make
sure to handle results > +INF and < -INF correctly when
trying to drop down to +INF - 1 or -INF + 1.
* g++.dg/pr88217.C: New testcase.
From-SVN: r266557
Diffstat (limited to 'gcc/vr-values.c')
-rw-r--r-- | gcc/vr-values.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/vr-values.c b/gcc/vr-values.c index 41862b9..a0027c0 100644 --- a/gcc/vr-values.c +++ b/gcc/vr-values.c @@ -2857,7 +2857,8 @@ vr_values::extract_range_from_phi_node (gphi *phi, value_range *vr_result) if (cmp_min < 0) new_min = lhs_vr->min (); else if (cmp_min > 0 - && !vrp_val_is_min (vr_result->min ())) + && tree_int_cst_lt (vrp_val_min (vr_result->type ()), + vr_result->min ())) new_min = int_const_binop (PLUS_EXPR, vrp_val_min (vr_result->type ()), build_int_cst (vr_result->type (), 1)); @@ -2866,7 +2867,8 @@ vr_values::extract_range_from_phi_node (gphi *phi, value_range *vr_result) if (cmp_max > 0) new_max = lhs_vr->max (); else if (cmp_max < 0 - && !vrp_val_is_max (vr_result->max ())) + && tree_int_cst_lt (vr_result->max (), + vrp_val_max (vr_result->type ()))) new_max = int_const_binop (MINUS_EXPR, vrp_val_max (vr_result->type ()), build_int_cst (vr_result->type (), 1)); |