diff options
author | Richard Biener <rguenther@suse.de> | 2024-12-07 14:43:00 +0100 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2024-12-09 10:53:41 +0100 |
commit | 6b390f8253b7f6575f18e356610aeb5d83e1140f (patch) | |
tree | 545bfa7afa9f9c3c20c04931c90269baddd15df3 /gcc/config/glibc-stdint.h | |
parent | 57dcb27e7a48151ad5f9a6122c6a40fac31843e9 (diff) | |
download | gcc-6b390f8253b7f6575f18e356610aeb5d83e1140f.zip gcc-6b390f8253b7f6575f18e356610aeb5d83e1140f.tar.gz gcc-6b390f8253b7f6575f18e356610aeb5d83e1140f.tar.bz2 |
middle-end/117932 - further speedup DF worklist solver
The triple-indirect memory reference we perform for each incoming
edge age <= last_change_age[bbindex_to_postorder[e->src->index]]
is pretty bad and when there are a lot of small BBs like for the
PR26854 testcase this shows in the profile. The following reduces
this by one level by making last_change_age indexed by BB index
rather than postorder number and realizing that for the first
iteration the age check is always true. We pay for this by
allocating last_change_age for all BBs in the function but we
do it like for sparsesets and avoid initializing given we check
the considerd bitmap anyway. We can also elide initializing
last_visit_age in an obvious way given we separated the initial
iteration in the previous change.
Together this improves compile-time in the PR117932 setting by
another 2%.
PR middle-end/117932
* df-core.cc (df_worklist_propagate_forward): Elide
age check for the first iteration, adjust for
last_change_age change.
(df_worklist_propagate_backward): Likewise.
(df_worklist_dataflow_doublequeue): Make last_change_age
indexed by BB index, avoid clearing both age arrays.
Diffstat (limited to 'gcc/config/glibc-stdint.h')
0 files changed, 0 insertions, 0 deletions