Add two additional hazard recognizer functions
authorHal Finkel <hfinkel@anl.gov>
Wed, 11 Dec 2013 22:33:43 +0000 (22:33 +0000)
committerHal Finkel <hfinkel@anl.gov>
Wed, 11 Dec 2013 22:33:43 +0000 (22:33 +0000)
commit8bacb53cc6925f2af7f0f61f5bd06f34e46fc672
tree19e508100b4302982997ad6e9268e0910839d20c
parentb7cb5eacf1af61e2b240640fba4a641254bea3b9
Add two additional hazard recognizer functions

This adds two additional functions to the hazard recognizer interface. These
are optional (in the sense that the default implementations preserve the
current behavior), and used by the post-RA scheduler. Upcoming commits will use
this functionality in order to improve dispatch-group formation on the POWER7
and related cores. Dispatch groups are an odd construct: sometimes we need to
insert nops to force a new one to start (for performance reasons), and some
instructions need to appear in certain positions within a group, but the groups
are not fundamentally cycle based (they can contain instructions with data
dependencies with non-trivial latencies).

Motivation:

unsigned PreEmitNoops(SUnit *) - Used to force the post-RA scheduler to insert
nops to force a new dispatch group to begin. We already have a NoopHazard, and
this is also still needed. However, NoopHazard only causes a nop to be inserted
if there are no other available instructions, and so is not always sufficient.
The number of nops to insert depends on state that only the hazard recognizer
has, so a general callback is necessary.

bool ShouldPreferAnother(SUnit *) - Used to avoid scheduling instructions that
would start a new dispatch group when others are available that could be part
of the current dispatch group. In this case, we don't want to issue nops,
because the non-preferred instruction will implicitly start a new dispatch
group regardless.

Although the motivation for these functions is driven by the PowerPC backend,
they are completely general.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197084 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/ScheduleHazardRecognizer.h
lib/CodeGen/PostRASchedulerList.cpp