]> git.ipfire.org Git - thirdparty/gcc.git/commit
[aarch64] Avoid tag collisions for loads falkor
authorsiddhesh <siddhesh@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Sep 2018 09:37:27 +0000 (09:37 +0000)
committersiddhesh <siddhesh@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Sep 2018 09:37:27 +0000 (09:37 +0000)
commit8df53f4d103384ac2b1fba182848e499a56ecc47
treee0bc967c3951ffb158ba96325be0dccb7b7a02bf
parentf69c2645eebb84c25aea4afb904b5792b8f18f6f
[aarch64] Avoid tag collisions for loads falkor

This is a rewrite of the tag collision avoidance patch that Kugan had
written as a machine reorg pass back in February.

The falkor hardware prefetching system uses a combination of the
source, destination and offset to decide which prefetcher unit to
train with the load.  This is great when loads in a loop are
sequential but sub-optimal if there are unrelated loads in a loop that
tag to the same prefetcher unit.

This pass attempts to rename the desination register of such colliding
loads using routines available in regrename.c so that their tags do
not collide.  This shows some performance gains with mcf and xalancbmk
(~5% each) and will be tweaked further.  The pass is placed near the
fag end of the pass list so that subsequent passes don't inadvertantly
end up undoing the renames.

2018-07-02  Siddhesh Poyarekar  <siddhesh@sourceware.org>
            Kugan Vivekanandarajah  <kugan.vivekanandarajah@linaro.org>

* config/aarch64/falkor-tag-collision-avoidance.c: New file.
* config.gcc (extra_objs): Build it.
* config/aarch64/t-aarch64 (falkor-tag-collision-avoidance.o):
Likewise.
* config/aarch64/aarch64-passes.def
(pass_tag_collision_avoidance): New pass.
* config/aarch64/aarch64.c (qdf24xx_tunings): Add
AARCH64_EXTRA_TUNE_RENAME_LOAD_REGS to tuning_flags.
(aarch64_classify_address): Remove static qualifier.
(aarch64_address_info, aarch64_address_type): Move to...
* config/aarch64/aarch64-protos.h: ... here.
(make_pass_tag_collision_avoidance): New function.
* config/aarch64/aarch64-tuning-flags.def (rename_load_regs):
New tuning flag.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@264115 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config.gcc
gcc/config/aarch64/aarch64-passes.def
gcc/config/aarch64/aarch64-protos.h
gcc/config/aarch64/aarch64-tuning-flags.def
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/falkor-tag-collision-avoidance.c [new file with mode: 0644]
gcc/config/aarch64/t-aarch64