diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2020-03-11 08:26:02 +0100 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2020-03-11 10:40:07 +0100 |
commit | 1ece551411eb8533da304ed20d380febc75dc694 (patch) | |
tree | 677654e399c2fbfb06c8d4b735a2c716285c47b7 /gcc | |
parent | 25acb185730931fb8fbe824c145bbb1cce42d61c (diff) | |
download | gcc-1ece551411eb8533da304ed20d380febc75dc694.zip gcc-1ece551411eb8533da304ed20d380febc75dc694.tar.gz gcc-1ece551411eb8533da304ed20d380febc75dc694.tar.bz2 |
Always trap on gori / evrp mismatches.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-ssa-evrp-analyze.c | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/gcc/gimple-ssa-evrp-analyze.c b/gcc/gimple-ssa-evrp-analyze.c index d9ddba6..d214418 100644 --- a/gcc/gimple-ssa-evrp-analyze.c +++ b/gcc/gimple-ssa-evrp-analyze.c @@ -154,13 +154,16 @@ all_uses_feed_or_dominated_by_stmt (tree name, gimple *stmt) return true; } +// Class to assert that gori/ranger provide ranges that are at least +// as good as evrp. + class vr_gori_comparison { public: vr_gori_comparison (const value_range *r_evrp, const irange *r_gori); - void dump_comparison (tree name, edge, vr_values *vr); + void compare (tree name, edge, vr_values *vr); private: - void dump_differences_and_maybe_trap () const; + void dump_differences_and_trap () const; void dump_differences (FILE *) const; void dump_improvements (FILE *) const; bool gori_range_is_same () const; @@ -180,7 +183,7 @@ vr_gori_comparison::vr_gori_comparison (const value_range *r_evrp, } void -vr_gori_comparison::dump_comparison (tree name, edge e, vr_values *vr) +vr_gori_comparison::compare (tree name, edge e, vr_values *vr) { m_name = name; m_edge = e; @@ -223,7 +226,7 @@ vr_gori_comparison::dump_comparison (tree name, edge e, vr_values *vr) return; } } - dump_differences_and_maybe_trap (); + dump_differences_and_trap (); } bool @@ -262,25 +265,20 @@ vr_gori_comparison::gori_range_is_better () const } void -vr_gori_comparison::dump_differences_and_maybe_trap () const +vr_gori_comparison::dump_differences_and_trap () const { - if (!getenv("GORIME")) - return; - - FILE *out = stderr; - bool dumping = false; - if (!strcmp (getenv ("GORIME"), "dump")) + bool dumping = getenv("GORIME") && !strcmp (getenv ("GORIME"), "dump"); + if (dumping) { - dumping = true; - out = fopen ("/tmp/gori-differences", "a"); + FILE *out = fopen ("/tmp/gori-differences", "a"); fprintf (out, "=========FILE: %s ========\n", main_input_filename ? main_input_filename : "UNKNOWN"); + dump_differences (out); + fclose (out); + return; } - dump_differences (out); - if (dumping) - fclose (out); - else - gcc_unreachable (); + dump_differences (stderr); + gcc_unreachable (); } void @@ -341,7 +339,7 @@ evrp_range_analyzer::try_find_new_range_for_assert (const assert_info &assert, if (CHECKING_P && dbg_cnt (evrp_find_range)) { vr_gori_comparison comp (vr, &vr_gori); - comp.dump_comparison (name, e, vr_values); + comp.compare (name, e, vr_values); } if (!vr) { |