OSDN Git Service

misched: Don't consider artificial edges weak edges.
authorAndrew Trick <atrick@apple.com>
Tue, 13 Nov 2012 02:35:06 +0000 (02:35 +0000)
committerAndrew Trick <atrick@apple.com>
Tue, 13 Nov 2012 02:35:06 +0000 (02:35 +0000)
For now be more conservative in case other out-of-tree schedulers rely
on the old behavior of artificial edges.

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

include/llvm/CodeGen/ScheduleDAG.h
lib/CodeGen/PostRASchedulerList.cpp
lib/CodeGen/ScheduleDAG.cpp

index 2b6429f..016722e 100644 (file)
@@ -206,8 +206,7 @@ namespace llvm {
     /// not force ordering. Breaking a weak edge may require the scheduler to
     /// compensate, for example by inserting a copy.
     bool isWeak() const {
-      return getKind() == Order
-        && (Contents.OrdKind == Artificial || Contents.OrdKind == Cluster);
+      return getKind() == Order && Contents.OrdKind == Cluster;
     }
 
     /// isArtificial - Test if this is an Order dependence that is marked
index 4284c42..f37fc82 100644 (file)
@@ -581,7 +581,7 @@ void SchedulePostRATDList::FixupKills(MachineBasicBlock *MBB) {
 void SchedulePostRATDList::ReleaseSucc(SUnit *SU, SDep *SuccEdge) {
   SUnit *SuccSU = SuccEdge->getSUnit();
 
-  if (SuccEdge->isArtificial()) {
+  if (SuccEdge->isWeak()) {
     --SuccSU->WeakPredsLeft;
     return;
   }
index 6224036..0c50db8 100644 (file)
@@ -100,11 +100,8 @@ bool SUnit::addPred(const SDep &D, bool Required) {
     ++NumPreds;
     ++N->NumSuccs;
   }
-  // SD scheduler relies on artificial edges to enforce physreg
-  // antidependence, so it doesn't treat them as weak edges.
-  bool isWeak = D.isWeak() && N->isInstr();
   if (!N->isScheduled) {
-    if (isWeak) {
+    if (D.isWeak()) {
       ++WeakPredsLeft;
     }
     else {
@@ -113,7 +110,7 @@ bool SUnit::addPred(const SDep &D, bool Required) {
     }
   }
   if (!isScheduled) {
-    if (isWeak) {
+    if (D.isWeak()) {
       ++N->WeakSuccsLeft;
     }
     else {
@@ -160,9 +157,8 @@ void SUnit::removePred(const SDep &D) {
         --NumPreds;
         --N->NumSuccs;
       }
-      bool isWeak = D.isWeak() && N->isInstr();
       if (!N->isScheduled) {
-        if (isWeak)
+        if (D.isWeak())
           --WeakPredsLeft;
         else {
           assert(NumPredsLeft > 0 && "NumPredsLeft will underflow!");
@@ -170,7 +166,7 @@ void SUnit::removePred(const SDep &D) {
         }
       }
       if (!isScheduled) {
-        if (isWeak)
+        if (D.isWeak())
           --N->WeakSuccsLeft;
         else {
           assert(N->NumSuccsLeft > 0 && "NumSuccsLeft will underflow!");