[WinEH] Remove NewMSEH and enable its behavior by default

Testing has shown that it is at least as reliable as the old landingpad
pattern matching code.

llvm-svn: 249647
diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
index 504dc3f..369d21f 100644
--- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp
+++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
@@ -879,20 +879,15 @@
 }
 
 namespace {
-struct CallEndCatchMSVC final : EHScopeStack::Cleanup {
+struct CatchRetScope final : EHScopeStack::Cleanup {
   llvm::CatchPadInst *CPI;
 
-  CallEndCatchMSVC(llvm::CatchPadInst *CPI) : CPI(CPI) {}
+  CatchRetScope(llvm::CatchPadInst *CPI) : CPI(CPI) {}
 
   void Emit(CodeGenFunction &CGF, Flags flags) override {
-    if (CGF.CGM.getCodeGenOpts().NewMSEH) {
-      llvm::BasicBlock *BB = CGF.createBasicBlock("catchret.dest");
-      CGF.Builder.CreateCatchRet(CPI, BB);
-      CGF.EmitBlock(BB);
-    } else {
-      CGF.EmitNounwindRuntimeCall(
-          CGF.CGM.getIntrinsic(llvm::Intrinsic::eh_endcatch));
-    }
+    llvm::BasicBlock *BB = CGF.createBasicBlock("catchret.dest");
+    CGF.Builder.CreateCatchRet(CPI, BB);
+    CGF.EmitBlock(BB);
   }
 };
 }
@@ -902,39 +897,21 @@
   // In the MS ABI, the runtime handles the copy, and the catch handler is
   // responsible for destruction.
   VarDecl *CatchParam = S->getExceptionDecl();
-  llvm::Value *Exn = nullptr;
-  llvm::Function *BeginCatch = nullptr;
-  llvm::CatchPadInst *CPI = nullptr;
-  bool NewEH = CGF.CGM.getCodeGenOpts().NewMSEH;
-  if (!NewEH) {
-    Exn = CGF.getExceptionFromSlot();
-    BeginCatch = CGF.CGM.getIntrinsic(llvm::Intrinsic::eh_begincatch);
-  } else {
-    llvm::BasicBlock *CatchPadBB =
-        CGF.Builder.GetInsertBlock()->getSinglePredecessor();
-    CPI = cast<llvm::CatchPadInst>(CatchPadBB->getFirstNonPHI());
-  }
+  llvm::BasicBlock *CatchPadBB =
+      CGF.Builder.GetInsertBlock()->getSinglePredecessor();
+  llvm::CatchPadInst *CPI =
+      cast<llvm::CatchPadInst>(CatchPadBB->getFirstNonPHI());
+
   // If this is a catch-all or the catch parameter is unnamed, we don't need to
   // emit an alloca to the object.
   if (!CatchParam || !CatchParam->getDeclName()) {
-    if (!NewEH) {
-      llvm::Value *Args[2] = {Exn, llvm::Constant::getNullValue(CGF.Int8PtrTy)};
-      CGF.EmitNounwindRuntimeCall(BeginCatch, Args);
-    }
-    CGF.EHStack.pushCleanup<CallEndCatchMSVC>(NormalCleanup, CPI);
+    CGF.EHStack.pushCleanup<CatchRetScope>(NormalCleanup, CPI);
     return;
   }
 
   CodeGenFunction::AutoVarEmission var = CGF.EmitAutoVarAlloca(*CatchParam);
-  if (!NewEH) {
-    Address ParamAddr =
-        CGF.Builder.CreateElementBitCast(var.getObjectAddress(CGF), CGF.Int8Ty);
-    llvm::Value *Args[2] = {Exn, ParamAddr.getPointer()};
-    CGF.EmitNounwindRuntimeCall(BeginCatch, Args);
-  } else {
-    CPI->setArgOperand(2, var.getObjectAddress(CGF).getPointer());
-  }
-  CGF.EHStack.pushCleanup<CallEndCatchMSVC>(NormalCleanup, CPI);
+  CPI->setArgOperand(2, var.getObjectAddress(CGF).getPointer());
+  CGF.EHStack.pushCleanup<CatchRetScope>(NormalCleanup, CPI);
   CGF.EmitAutoVarCleanups(var);
 }