OSDN Git Service

[AMDGPU] Ignore non-SUnits edges
authorPiotr Sobczak <piotr.sobczak@amd.com>
Fri, 19 Apr 2019 06:19:14 +0000 (06:19 +0000)
committerPiotr Sobczak <piotr.sobczak@amd.com>
Fri, 19 Apr 2019 06:19:14 +0000 (06:19 +0000)
Summary:
Ignore edges to non-SUnits (e.g. ExitSU) when checking
for low latency instructions.

When calling the function isLowLatencyInstruction(),
an ExitSU could be on the list of successors, not necessarily
a regular SU. In other places in the code there is a check
"Succ->NodeNum >= DAGSize" to prevent further processing of
ExitSU as "Succ->getInstr()" is NULL in such a case.
Also, 8 out of 9 cases of "SUnit *Succ = SuccDep.getSUnit())"
has the guard, so it is clearly an omission here.

Change-Id: Ica86f0327c7b2e6bcb56958e804ea6c71084663b

Reviewers: nhaehnle

Reviewed By: nhaehnle

Subscribers: MatzeB, arsenm, kzhuravl, jvesely, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, javed.absar, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D60864

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358740 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AMDGPU/SIMachineScheduler.cpp

index 22fa166..343c8b6 100644 (file)
@@ -1874,6 +1874,8 @@ void SIScheduleDAGMI::moveLowLatencies() {
       bool CopyForLowLat = false;
       for (SDep& SuccDep : SU->Succs) {
         SUnit *Succ = SuccDep.getSUnit();
+        if (SuccDep.isWeak() || Succ->NodeNum >= DAGSize)
+          continue;
         if (SITII->isLowLatencyInstruction(*Succ->getInstr())) {
           CopyForLowLat = true;
         }