소스 검색

[MachineOutliner][NFC] Early exit pruning when candidates don't share an MBB

There's no way they can overlap in this case.

This can save a few iterations when the candidate is close to the beginning
of a MachineBasicBlock. It's particularly useful when the average length of
a MachineBasicBlock in the program is small.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346682 91177308-0d34-0410-b5e6-96231b3b80d8
Jessica Paquette 6 년 전
부모
커밋
412b368b3b
1개의 변경된 파일8개의 추가작업 그리고 0개의 파일을 삭제
  1. 8 0
      lib/CodeGen/MachineOutliner.cpp

+ 8 - 0
lib/CodeGen/MachineOutliner.cpp

@@ -1215,12 +1215,20 @@ void MachineOutliner::pruneOverlaps(
     if (C1.getStartIdx() > MaxCandidateLen)
       FarthestPossibleIdx = C1.getStartIdx() - MaxCandidateLen;
 
+    MachineBasicBlock *C1MBB = C1.getMBB();
+
     // Compare against the candidates in the list that start at most
     // FarthestPossibleIdx indices away from C1. There are at most
     // MaxCandidateLen of these.
     for (auto Sit = It + 1; Sit != Et; Sit++) {
       Candidate &C2 = **Sit;
 
+      // If the two candidates don't belong to the same MBB, then we're done.
+      // Because we sorted the candidates, there's no way that we'd find a
+      // candidate in C1MBB after this point.
+      if (C2.getMBB() != C1MBB)
+        break;
+
       // Is this candidate too far away to overlap?
       if (C2.getStartIdx() < FarthestPossibleIdx)
         break;