diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-05-09 15:35:14 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-05-17 14:38:03 -0400 |
commit | b7501739f3b14ac7749aace93f636d021fd607f7 (patch) | |
tree | 5c359661a70191c7ee4cc92b6d001a78ff26c099 /gcc/gimple-range.h | |
parent | 451894cadcf1210883ceefb2d69a0ed2d6a8cd8b (diff) | |
download | gcc-b7501739f3b14ac7749aace93f636d021fd607f7.zip gcc-b7501739f3b14ac7749aace93f636d021fd607f7.tar.gz gcc-b7501739f3b14ac7749aace93f636d021fd607f7.tar.bz2 |
Add side effect infrastructure.
Replace the non-null procesing with a generic side effect implementation that
can handle arbitrary side effects.
* Makefile.in (OBJS): Add gimple-range-side-effect.o.
* gimple-range-cache.cc (non_null_ref::non_null_ref): Delete.
(non_null_ref::~non_null_ref): Delete.
(non_null_ref::set_nonnull): Delete.
(non_null_ref::non_null_deref_p): Delete.
(non_null_ref::process_name): Delete.
(ranger_cache::ranger_cache): Initialize m_exit object.
(ranger_cache::fill_block_cache): Use m_exit object intead of nonnull.
(ranger_cache::range_from_dom): Use side_effect class and m_exit object.
(ranger_cache::update_to_nonnull): Delete.
(non_null_loadstore): Delete.
(ranger_cache::block_apply_nonnull): Delete.
(ranger_cache::apply_side_effects): New.
* gimple-range-cache.h (class non_null_ref): Delete.
(non_null_ref::adjust_range): Delete.
(class ranger_cache): Adjust prototypes, add side effect manager.
* gimple-range-path.cc (path_range_query::range_defined_in_block): Use
side effect manager for queries.
(path_range_query::adjust_for_non_null_uses): Ditto.
* gimple-range-path.h (class path_range_query): Delete non_null_ref.
* gimple-range-side-effect.cc: New.
* gimple-range-side-effect.h: New.
* gimple-range.cc (gimple_ranger::gimple_ranger): Update contructor.
(gimple_ranger::range_of_expr): Check def block for override value.
(gimple_ranger::range_on_entry): Don't scan dominators for non-null.
(gimple_ranger::range_on_edge): Check for outgoing side-effects.
(gimple_ranger::register_side_effects): Call apply_side_effects.
(enable_ranger): Update contructor.
* gimple-range.h (class gimple_ranger): Update prototype.
(enable_ranger): Update prototype.
* tree-vrp.cc (execute_ranger_vrp): Invoke without immediate-use flag.
Diffstat (limited to 'gcc/gimple-range.h')
-rw-r--r-- | gcc/gimple-range.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/gimple-range.h b/gcc/gimple-range.h index 0733a53..ae6c402 100644 --- a/gcc/gimple-range.h +++ b/gcc/gimple-range.h @@ -46,7 +46,7 @@ along with GCC; see the file COPYING3. If not see class gimple_ranger : public range_query { public: - gimple_ranger (); + gimple_ranger (bool use_imm_uses = true); ~gimple_ranger (); virtual bool range_of_stmt (irange &r, gimple *, tree name = NULL) OVERRIDE; virtual bool range_of_expr (irange &r, tree name, gimple * = NULL) OVERRIDE; @@ -69,12 +69,15 @@ protected: range_tracer tracer; basic_block current_bb; vec<tree> m_stmt_list; + friend class path_range_query; }; /* Create a new ranger instance and associate it with a function. Each call must be paired with a call to disable_ranger to release - resources. */ -extern gimple_ranger *enable_ranger (struct function *); + resources. If USE_IMM_USES is true, pre-calculate sideffects like + non-null uses as required using the immediate use chains. */ +extern gimple_ranger *enable_ranger (struct function *m, + bool use_imm_uses = true); extern void disable_ranger (struct function *); #endif // GCC_GIMPLE_RANGE_H |