[WinEH] Stop BranchFolding from merging across funclets

BranchFolding would merge two funclets together, this is not OK.
Disable this and strengthen the assertion in FuncletLayout.

llvm-svn: 249069
diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp
index 2ef8889..2cc851f 100644
--- a/llvm/lib/CodeGen/BranchFolding.cpp
+++ b/llvm/lib/CodeGen/BranchFolding.cpp
@@ -94,9 +94,11 @@
 
   TargetPassConfig *PassConfig = &getAnalysis<TargetPassConfig>();
   // TailMerge can create jump into if branches that make CFG irreducible for
-  // HW that requires structurized CFG.
+  // HW that requires structurized CFG.  It can also cause BBs to get shared
+  // between funclets.
   bool EnableTailMerge = !MF.getTarget().requiresStructuredCFG() &&
-      PassConfig->getEnableTailMerge();
+                         !MF.getMMI().hasEHFunclets() &&
+                         PassConfig->getEnableTailMerge();
   BranchFolder Folder(EnableTailMerge, /*CommonHoist=*/true,
                       getAnalysis<MachineBlockFrequencyInfo>(),
                       getAnalysis<MachineBranchProbabilityInfo>());
diff --git a/llvm/lib/CodeGen/FuncletLayout.cpp b/llvm/lib/CodeGen/FuncletLayout.cpp
index e1e185b..4fdb6670 100644
--- a/llvm/lib/CodeGen/FuncletLayout.cpp
+++ b/llvm/lib/CodeGen/FuncletLayout.cpp
@@ -39,17 +39,9 @@
                       int Funclet, MachineBasicBlock *MBB) {
   // Don't revisit blocks.
   if (FuncletMembership.count(MBB) > 0) {
-    // FIXME: This is a hack, we need to assert this unconditionally.
-    bool IsProbablyUnreachableBlock =
-        MBB->empty() ||
-        (MBB->succ_empty() && !MBB->getFirstTerminator()->isReturn() &&
-         MBB->size() == 1);
-
-    if (!IsProbablyUnreachableBlock) {
-      if (FuncletMembership[MBB] != Funclet) {
-        assert(false && "MBB is part of two funclets!");
-        report_fatal_error("MBB is part of two funclets!");
-      }
+    if (FuncletMembership[MBB] != Funclet) {
+      assert(false && "MBB is part of two funclets!");
+      report_fatal_error("MBB is part of two funclets!");
     }
     return;
   }