diff options
author | Richard Earnshaw <rearnsha@arm.com> | 2022-08-03 10:01:51 +0100 |
---|---|---|
committer | Richard Earnshaw <rearnsha@arm.com> | 2022-08-03 10:07:15 +0100 |
commit | 64ce76d940501cb04d14a0d36752b4f93473531c (patch) | |
tree | 1c7cb524db411f7625a6a08bad592e476dc1c28d /gcc/alias.h | |
parent | a6b7fff06c5b27c4ffacf4c84ea1189254b9ad84 (diff) | |
download | gcc-64ce76d940501cb04d14a0d36752b4f93473531c.zip gcc-64ce76d940501cb04d14a0d36752b4f93473531c.tar.gz gcc-64ce76d940501cb04d14a0d36752b4f93473531c.tar.bz2 |
cselib: add function to check if SET is redundant [PR106187]
A SET operation that writes memory may have the same value as an
earlier store but if the alias sets of the new and earlier store do
not conflict then the set is not truly redundant. This can happen,
for example, if objects of different types share a stack slot.
To fix this we define a new function in cselib that first checks for
equality and if that is successful then finds the earlier store in the
value history and checks the alias sets.
The routine is used in two places elsewhere in the compiler:
cfgcleanup and postreload.
gcc/ChangeLog:
PR rtl-optimization/106187
* alias.h (mems_same_for_tbaa_p): Declare.
* alias.cc (mems_same_for_tbaa_p): New function.
* dse.cc (record_store): Use it instead of open-coding
alias check.
* cselib.h (cselib_redundant_set_p): Declare.
* cselib.cc: Include alias.h
(cselib_redundant_set_p): New function.
* cfgcleanup.cc: (mark_effect): Use cselib_redundant_set_p instead
of rtx_equal_for_cselib_p.
* postreload.cc (reload_cse_simplify): Use cselib_redundant_set_p.
(reload_cse_noop_set_p): Delete.
Diffstat (limited to 'gcc/alias.h')
-rw-r--r-- | gcc/alias.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/alias.h b/gcc/alias.h index b259651..ee3db46 100644 --- a/gcc/alias.h +++ b/gcc/alias.h @@ -40,6 +40,7 @@ tree reference_alias_ptr_type_1 (tree *); bool alias_ptr_types_compatible_p (tree, tree); int compare_base_decls (tree, tree); bool refs_same_for_tbaa_p (tree, tree); +bool mems_same_for_tbaa_p (rtx, rtx); /* This alias set can be used to force a memory to conflict with all other memories, creating a barrier across which no memory reference |