aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-fold.cc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2023-09-13 10:09:16 -0400
committerAndrew MacLeod <amacleod@redhat.com>2023-09-15 10:08:25 -0400
commit76a2d567842088ff296609c9e3b53c3df179aefd (patch)
tree85a3c207ffae75bfcc06dc27ec9e7d2fa8f8cf3f /gcc/gimple-range-fold.cc
parentc43bd879b46c46b218c1040d68d0c7810cb47039 (diff)
downloadgcc-76a2d567842088ff296609c9e3b53c3df179aefd.zip
gcc-76a2d567842088ff296609c9e3b53c3df179aefd.tar.gz
gcc-76a2d567842088ff296609c9e3b53c3df179aefd.tar.bz2
Always do PHI analysis and before loop analysis.
PHI analysis wasn't being done if loop analysis found a value. Always do the PHI analysis, and run it for an iniital value before invoking loop analysis. * gimple-range-fold.cc (fold_using_range::range_of_phi): Always run phi analysis, and do it before loop analysis.
Diffstat (limited to 'gcc/gimple-range-fold.cc')
-rw-r--r--gcc/gimple-range-fold.cc53
1 files changed, 26 insertions, 27 deletions
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc
index 03805d8..d1945cc 100644
--- a/gcc/gimple-range-fold.cc
+++ b/gcc/gimple-range-fold.cc
@@ -939,7 +939,32 @@ fold_using_range::range_of_phi (vrange &r, gphi *phi, fur_source &src)
}
}
- bool loop_info_p = false;
+ // If PHI analysis is available, see if there is an iniital range.
+ if (phi_analysis_available_p ()
+ && irange::supports_p (TREE_TYPE (phi_def)))
+ {
+ phi_group *g = (phi_analysis())[phi_def];
+ if (g && !(g->range ().varying_p ()))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "PHI GROUP query for ");
+ print_generic_expr (dump_file, phi_def, TDF_SLIM);
+ fprintf (dump_file, " found : ");
+ g->range ().dump (dump_file);
+ fprintf (dump_file, " and adjusted original range from :");
+ r.dump (dump_file);
+ }
+ r.intersect (g->range ());
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, " to :");
+ r.dump (dump_file);
+ fprintf (dump_file, "\n");
+ }
+ }
+ }
+
// If SCEV is available, query if this PHI has any known values.
if (scev_initialized_p ()
&& !POINTER_TYPE_P (TREE_TYPE (phi_def)))
@@ -962,32 +987,6 @@ fold_using_range::range_of_phi (vrange &r, gphi *phi, fur_source &src)
fprintf (dump_file, "\n");
}
r.intersect (loop_range);
- loop_info_p = true;
- }
- }
- }
-
- if (!loop_info_p && phi_analysis_available_p ()
- && irange::supports_p (TREE_TYPE (phi_def)))
- {
- phi_group *g = (phi_analysis())[phi_def];
- if (g && !(g->range ().varying_p ()))
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "PHI GROUP query for ");
- print_generic_expr (dump_file, phi_def, TDF_SLIM);
- fprintf (dump_file, " found : ");
- g->range ().dump (dump_file);
- fprintf (dump_file, " and adjusted original range from :");
- r.dump (dump_file);
- }
- r.intersect (g->range ());
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, " to :");
- r.dump (dump_file);
- fprintf (dump_file, "\n");
}
}
}