diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-02-07 15:52:16 -0500 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-02-09 09:09:54 -0500 |
commit | c6bb1db76b3ac127aff7dacf391fc1798a94bb7d (patch) | |
tree | ece35b744603236671d2ee0e8cc8fdf1c8f06828 /gcc/tree-vrp.cc | |
parent | da2bf62d9e2a25f2d6a99176144c250b51fbdee7 (diff) | |
download | gcc-c6bb1db76b3ac127aff7dacf391fc1798a94bb7d.zip gcc-c6bb1db76b3ac127aff7dacf391fc1798a94bb7d.tar.gz gcc-c6bb1db76b3ac127aff7dacf391fc1798a94bb7d.tar.bz2 |
Register non-null side effects properly.
This patch adjusts uses of nonnull to accurately reflect "somewhere in block".
It also adds the ability to register statement side effects within a block
for ranger which will apply for the rest of the block.
PR tree-optimization/104288
gcc/
* gimple-range-cache.cc (non_null_ref::set_nonnull): New.
(non_null_ref::adjust_range): Move to header.
(ranger_cache::range_of_def): Don't check non-null.
(ranger_cache::entry_range): Don't check non-null.
(ranger_cache::range_on_edge): Check for nonnull on normal edges.
(ranger_cache::update_to_nonnull): New.
(non_null_loadstore): New.
(ranger_cache::block_apply_nonnull): New.
* gimple-range-cache.h (class non_null_ref): Update prototypes.
(non_null_ref::adjust_range): Move to here and inline.
(class ranger_cache): Update prototypes.
* gimple-range-path.cc (path_range_query::range_defined_in_block): Do
not search dominators.
(path_range_query::adjust_for_non_null_uses): Ditto.
* gimple-range.cc (gimple_ranger::range_of_expr): Check on-entry for
def overrides. Do not check nonnull.
(gimple_ranger::range_on_entry): Check dominators for nonnull.
(gimple_ranger::range_on_edge): Check for nonnull on normal edges..
(gimple_ranger::register_side_effects): New.
* gimple-range.h (gimple_ranger::register_side_effects): New.
* tree-vrp.cc (rvrp_folder::fold_stmt): Call register_side_effects.
gcc/testsuite/
* gcc.dg/pr104288.c: New.
Diffstat (limited to 'gcc/tree-vrp.cc')
-rw-r--r-- | gcc/tree-vrp.cc | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index 6294645..e9f19d0 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -4309,9 +4309,11 @@ public: bool fold_stmt (gimple_stmt_iterator *gsi) OVERRIDE { - if (m_simplifier.simplify (gsi)) - return true; - return m_ranger->fold_stmt (gsi, follow_single_use_edges); + bool ret = m_simplifier.simplify (gsi); + if (!ret) + ret = m_ranger->fold_stmt (gsi, follow_single_use_edges); + m_ranger->register_side_effects (gsi_stmt (*gsi)); + return ret; } private: |