[BranchFolding] Unique added live-ins after hoisting code.
authorAhmed Bougacha <ahmed.bougacha@gmail.com>
Mon, 12 Sep 2016 16:05:31 +0000 (16:05 +0000)
committerAhmed Bougacha <ahmed.bougacha@gmail.com>
Mon, 12 Sep 2016 16:05:31 +0000 (16:05 +0000)
We're not supposed to have duplicate live-ins.

llvm-svn: 281224

llvm/lib/CodeGen/BranchFolding.cpp
llvm/test/CodeGen/X86/tail-call-conditional.mir

index 06a8222..0d4a071 100644 (file)
@@ -1972,14 +1972,21 @@ bool BranchFolder::HoistCommonCodeInSuccs(MachineBasicBlock *MBB) {
   FBB->erase(FBB->begin(), FIB);
 
   // Update livein's.
+  bool AddedLiveIns = false;
   for (unsigned i = 0, e = LocalDefs.size(); i != e; ++i) {
     unsigned Def = LocalDefs[i];
     if (LocalDefsSet.count(Def)) {
       TBB->addLiveIn(Def);
       FBB->addLiveIn(Def);
+      AddedLiveIns = true;
     }
   }
 
+  if (AddedLiveIns) {
+    TBB->sortUniqueLiveIns();
+    FBB->sortUniqueLiveIns();
+  }
+
   ++NumHoist;
   return true;
 }
index cf24eed..3646076 100644 (file)
@@ -66,7 +66,7 @@ body:             |
     TCRETURNdi64 @f1, 0, csr_64, implicit %rsp, implicit %rdi, implicit %rsi
 
   ; CHECK: bb.2:
-  ; CHECK-NEXT: liveins: %rax, %rsi, %rdi, %rsi
+  ; CHECK-NEXT: liveins: %rax, %rdi, %rsi
   ; CHECK-NEXT: {{^  $}}
   ; CHECK-NEXT: TCRETURNdi64 @f2, 0, csr_64, implicit %rsp, implicit %rdi, implicit %rsi