if (lhs)
{
value_range tmp (TREE_TYPE (lhs));
- if (range_of_stmt (tmp, s, lhs) && !tmp.varying_p ()
- && set_range_info (lhs, tmp) && dump_file)
- {
- fprintf (dump_file, "Global Exported: ");
- print_generic_expr (dump_file, lhs, TDF_SLIM);
- fprintf (dump_file, " = ");
- tmp.dump (dump_file);
- fputc ('\n', dump_file);
- }
+ if (range_of_stmt (tmp, s, lhs) && !tmp.varying_p ())
+ set_range_info (lhs, tmp);
}
m_cache.apply_inferred_ranges (s);
}
void
gimple_ranger::export_global_ranges ()
{
- /* Cleared after the table header has been printed. */
- bool print_header = true;
+ if (dump_file)
+ {
+ /* Print the header only when there's something else
+ to print below. */
+ fprintf (dump_file, "Exporting new global ranges:\n");
+ fprintf (dump_file, "============================\n");
+ }
for (unsigned x = 1; x < num_ssa_names; x++)
{
tree name = ssa_name (x);
if (!name)
continue;
value_range r (TREE_TYPE (name));
- if (name && !SSA_NAME_IN_FREE_LIST (name)
- && gimple_range_ssa_p (name)
- && m_cache.get_global_range (r, name)
- && !r.varying_p())
- {
- bool updated = set_range_info (name, r);
- if (!updated || !dump_file)
- continue;
-
- if (print_header)
- {
- /* Print the header only when there's something else
- to print below. */
- fprintf (dump_file, "Exported global range table:\n");
- fprintf (dump_file, "============================\n");
- print_header = false;
- }
-
- print_generic_expr (dump_file, name , TDF_SLIM);
- fprintf (dump_file, " : ");
- r.dump (dump_file);
- fprintf (dump_file, "\n");
- }
+ if (name && !SSA_NAME_IN_FREE_LIST (name) && gimple_range_ssa_p (name)
+ && m_cache.get_global_range (r, name) && !r.varying_p())
+ set_range_info (name, r);
}
+ if (dump_file)
+ fprintf (dump_file, "========= Done =============\n");
}
// Print the known table values to file F.
// If there is a new calculated range and it is not varying, set
// a global range.
if (ret && name && m_global.merge_range (name, r) && !r.varying_p ())
- {
- if (set_range_info (name, r) && dump_file)
- {
- fprintf (dump_file, "Global Exported: ");
- print_generic_expr (dump_file, name, TDF_SLIM);
- fprintf (dump_file, " = ");
- r.dump (dump_file);
- fputc ('\n', dump_file);
- }
- }
+ set_range_info (name, r);
+
if (idx)
tracer.trailer (idx, " ", ret, name, r);
return ret;
#include "gimple.h"
#include "tree-pass.h"
#include "ssa.h"
+#include "gimple-pretty-print.h"
#include "gimple-iterator.h"
#include "stor-layout.h"
#include "tree-into-ssa.h"
struct ptr_info_def *pi = get_ptr_info (name);
// If R is nonnull and pi is not, set nonnull.
if (r.nonzero_p () && (!pi || pi->pt.null))
- {
- set_ptr_nonnull (name);
- return true;
- }
- return false;
+ set_ptr_nonnull (name);
+ else
+ return false;
}
-
- value_range tmp (type);
- if (range_info_p (name))
- range_info_get_range (name, tmp);
else
- tmp.set_varying (type);
- // If the result doesn't change, or is undefined, return false.
- if (!tmp.intersect (r) || tmp.undefined_p ())
- return false;
-
- return range_info_set_range (name, tmp);
+ {
+ value_range tmp (type);
+ if (range_info_p (name))
+ range_info_get_range (name, tmp);
+ else
+ tmp.set_varying (type);
+ // If the result doesn't change, or is undefined, return false.
+ if (!tmp.intersect (r) || tmp.undefined_p ())
+ return false;
+ if (!range_info_set_range (name, tmp))
+ return false;
+ }
+ if (dump_file)
+ {
+ value_range tmp (type);
+ fprintf (dump_file, "Global Exported: ");
+ print_generic_expr (dump_file, name, TDF_SLIM);
+ fprintf (dump_file, " = ");
+ gimple_range_global (tmp, name);
+ tmp.dump (dump_file);
+ fputc ('\n', dump_file);
+ }
+ return true;
}
/* Set nonnull attribute to pointer NAME. */
// Nothing at this late stage we can do if the write fails.
if (!set_range_info (name, r))
continue;
- if (dump_file)
- {
- fprintf (dump_file, "Global Exported (via early unreachable): ");
- print_generic_expr (dump_file, name, TDF_SLIM);
- fprintf (dump_file, " = ");
- gimple_range_global (r, name);
- r.dump (dump_file);
- fputc ('\n', dump_file);
- }
}
tree ssa = lhs_p ? gimple_cond_lhs (s) : gimple_cond_rhs (s);
if (name && fully_replaceable (name, src))
{
value_range r (TREE_TYPE (name));
- if (gori_name_on_edge (r, name, e, &m_ranger)
- && set_range_info (name, r) &&(dump_file))
- {
- fprintf (dump_file, "Global Exported (via unreachable): ");
- print_generic_expr (dump_file, name, TDF_SLIM);
- fprintf (dump_file, " = ");
- gimple_range_global (r, name);
- r.dump (dump_file);
- fputc ('\n', dump_file);
- }
+ if (gori_name_on_edge (r, name, e, &m_ranger))
+ set_range_info (name, r);
}
change = true;
if (!set_range_info (name, r))
continue;
change = true;
- if (dump_file)
- {
- fprintf (dump_file, "Global Exported (via unreachable): ");
- print_generic_expr (dump_file, name, TDF_SLIM);
- fprintf (dump_file, " = ");
- gimple_range_global (r, name);
- r.dump (dump_file);
- fputc ('\n', dump_file);
- }
}
return change;
}
if (!value_range::supports_type_p (type))
continue;
value_range assume_range (type);
+ // Set the global range of NAME to anything calculated.
if (query.assume_range_p (assume_range, name))
- {
- // Set the global range of NAME to anything calculated.
- set_range_info (name, assume_range);
- if (dump_file)
- {
- print_generic_expr (dump_file, name, TDF_SLIM);
- fprintf (dump_file, " -> ");
- assume_range.dump (dump_file);
- fputc ('\n', dump_file);
- }
- }
+ set_range_info (name, assume_range);
}
if (dump_file)
{