Make stable_sort in tail merging actually be stable (it never was, but didn't
authorDale Johannesen <dalej@apple.com>
Tue, 29 May 2007 23:47:50 +0000 (23:47 +0000)
committerDale Johannesen <dalej@apple.com>
Tue, 29 May 2007 23:47:50 +0000 (23:47 +0000)
matter until my last change).  Reenable tail merging by default.

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

include/llvm/Target/TargetMachine.h
lib/CodeGen/BranchFolding.cpp

index 01cbe7d3106a98a5122ed475eea4280693af5aeb..e7f211bf15136208a285106dda0f9ec678ffb8d9 100644 (file)
@@ -187,7 +187,7 @@ public:
 
   /// getEnableTailMergeDefault - the default setting for -enable-tail-merge
   /// on this target.  User flag overrides.
-  virtual const bool getEnableTailMergeDefault() const { return false; }
+  virtual const bool getEnableTailMergeDefault() const { return true; }
 
   /// addPassesToEmitFile - Add passes to the specified pass manager to get the
   /// specified file emitted.  Typically this will involve several steps of code
@@ -322,7 +322,7 @@ public:
 
   /// getEnableTailMergeDefault - the default setting for -enable-tail-merge
   /// on this target.  User flag overrides.
-  virtual const bool getEnableTailMergeDefault() const { return false; }
+  virtual const bool getEnableTailMergeDefault() const { return true; }
 };
 
 } // End llvm namespace
index 1fe2962a365ca3d8df20bbd0ed92d3dc41897404..c34aeebe0ee07c5cc300e0bf0d854da87cf3cb63 100644 (file)
@@ -420,6 +420,21 @@ static void FixTail(MachineBasicBlock* CurMBB, MachineBasicBlock *SuccBB,
   TII->InsertBranch(*CurMBB, SuccBB, NULL, std::vector<MachineOperand>());
 }
 
+static bool MergeCompare(std::pair<unsigned,MachineBasicBlock*> p,
+                         std::pair<unsigned,MachineBasicBlock*> q) {
+
+    if (p.first < q.first)
+      return true;
+     else if (p.first > q.first)
+      return false;
+    else if (p.second->getNumber() < q.second->getNumber())
+      return true;
+    else if (p.second->getNumber() > q.second->getNumber())
+      return false;
+    else
+      assert(0 && "Predecessor appears twice");
+}
+
 // See if any of the blocks in MergePotentials (which all have a common single
 // successor, or all have no successor) can be tail-merged.  If there is a
 // successor, any blocks in MergePotentials that are not tail-merged and
@@ -435,7 +450,7 @@ bool BranchFolder::TryMergeBlocks(MachineBasicBlock *SuccBB,
   
   // Sort by hash value so that blocks with identical end sequences sort
   // together.
-  std::stable_sort(MergePotentials.begin(), MergePotentials.end());
+  std::stable_sort(MergePotentials.begin(), MergePotentials.end(), MergeCompare);
 
   // Walk through equivalence sets looking for actual exact matches.
   while (MergePotentials.size() > 1) {