Recommitting EH patch; this should answer most of the
review feedback.
-enable-eh is still accepted but doesn't do anything.
EH intrinsics use Dwarf EH if the target supports that,
and are handled by LowerInvoke otherwise.
The separation of the EH table and frame move data is,
I think, logically figured out, but either one still
causes full EH info to be generated (not sure how to
split the metadata correctly).
MachineModuleInfo::needsFrameInfo is no longer used and
is removed.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49064 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 80b5c04..f237caf 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -2827,22 +2827,18 @@
   }
     
   case Intrinsic::eh_exception: {
-    if (ExceptionHandling) {
-      if (!CurMBB->isLandingPad()) {
-        // FIXME: Mark exception register as live in.  Hack for PR1508.
-        unsigned Reg = TLI.getExceptionAddressRegister();
-        if (Reg) CurMBB->addLiveIn(Reg);
-      }
-      // Insert the EXCEPTIONADDR instruction.
-      SDVTList VTs = DAG.getVTList(TLI.getPointerTy(), MVT::Other);
-      SDOperand Ops[1];
-      Ops[0] = DAG.getRoot();
-      SDOperand Op = DAG.getNode(ISD::EXCEPTIONADDR, VTs, Ops, 1);
-      setValue(&I, Op);
-      DAG.setRoot(Op.getValue(1));
-    } else {
-      setValue(&I, DAG.getConstant(0, TLI.getPointerTy()));
+    if (!CurMBB->isLandingPad()) {
+      // FIXME: Mark exception register as live in.  Hack for PR1508.
+      unsigned Reg = TLI.getExceptionAddressRegister();
+      if (Reg) CurMBB->addLiveIn(Reg);
     }
+    // Insert the EXCEPTIONADDR instruction.
+    SDVTList VTs = DAG.getVTList(TLI.getPointerTy(), MVT::Other);
+    SDOperand Ops[1];
+    Ops[0] = DAG.getRoot();
+    SDOperand Op = DAG.getNode(ISD::EXCEPTIONADDR, VTs, Ops, 1);
+    setValue(&I, Op);
+    DAG.setRoot(Op.getValue(1));
     return 0;
   }
 
@@ -2852,7 +2848,7 @@
     MVT::ValueType VT = (Intrinsic == Intrinsic::eh_selector_i32 ?
                          MVT::i32 : MVT::i64);
     
-    if (ExceptionHandling && MMI) {
+    if (MMI) {
       if (CurMBB->isLandingPad())
         addCatchInfo(I, MMI, CurMBB);
       else {
@@ -2902,7 +2898,7 @@
   case Intrinsic::eh_return: {
     MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
 
-    if (MMI && ExceptionHandling) {
+    if (MMI) {
       MMI->setCallsEHReturn(true);
       DAG.setRoot(DAG.getNode(ISD::EH_RETURN,
                               MVT::Other,
@@ -2925,32 +2921,27 @@
    }
 
    case Intrinsic::eh_dwarf_cfa: {
-     if (ExceptionHandling) {
-       MVT::ValueType VT = getValue(I.getOperand(1)).getValueType();
-       SDOperand CfaArg;
-       if (MVT::getSizeInBits(VT) > MVT::getSizeInBits(TLI.getPointerTy()))
-         CfaArg = DAG.getNode(ISD::TRUNCATE,
-                              TLI.getPointerTy(), getValue(I.getOperand(1)));
-       else
-         CfaArg = DAG.getNode(ISD::SIGN_EXTEND,
-                              TLI.getPointerTy(), getValue(I.getOperand(1)));
-       
-       SDOperand Offset = DAG.getNode(ISD::ADD,
-                                      TLI.getPointerTy(),
-                                      DAG.getNode(ISD::FRAME_TO_ARGS_OFFSET,
-                                                  TLI.getPointerTy()),
-                                      CfaArg);
-       setValue(&I, DAG.getNode(ISD::ADD,
-                                TLI.getPointerTy(),
-                                DAG.getNode(ISD::FRAMEADDR,
-                                            TLI.getPointerTy(),
-                                            DAG.getConstant(0,
-                                                            TLI.getPointerTy())),
-                                Offset));
-     } else {
-       setValue(&I, DAG.getConstant(0, TLI.getPointerTy()));
-     }
+     MVT::ValueType VT = getValue(I.getOperand(1)).getValueType();
+     SDOperand CfaArg;
+     if (MVT::getSizeInBits(VT) > MVT::getSizeInBits(TLI.getPointerTy()))
+       CfaArg = DAG.getNode(ISD::TRUNCATE,
+                            TLI.getPointerTy(), getValue(I.getOperand(1)));
+     else
+       CfaArg = DAG.getNode(ISD::SIGN_EXTEND,
+                            TLI.getPointerTy(), getValue(I.getOperand(1)));
 
+     SDOperand Offset = DAG.getNode(ISD::ADD,
+                                    TLI.getPointerTy(),
+                                    DAG.getNode(ISD::FRAME_TO_ARGS_OFFSET,
+                                                TLI.getPointerTy()),
+                                    CfaArg);
+     setValue(&I, DAG.getNode(ISD::ADD,
+                              TLI.getPointerTy(),
+                              DAG.getNode(ISD::FRAMEADDR,
+                                          TLI.getPointerTy(),
+                                          DAG.getConstant(0,
+                                                          TLI.getPointerTy())),
+                              Offset));
      return 0;
   }
 
@@ -3176,7 +3167,7 @@
     Args.push_back(Entry);
   }
 
-  if (LandingPad && ExceptionHandling && MMI) {
+  if (LandingPad && MMI) {
     // Insert a label before the invoke call to mark the try range.  This can be
     // used to detect deletion of the invoke via the MachineModuleInfo.
     BeginLabel = MMI->NextLabelID();
@@ -3195,7 +3186,7 @@
     setValue(CS.getInstruction(), Result.first);
   DAG.setRoot(Result.second);
 
-  if (LandingPad && ExceptionHandling && MMI) {
+  if (LandingPad && MMI) {
     // Insert a label at the end of the invoke call to mark the try range.  This
     // can be used to detect deletion of the invoke via the MachineModuleInfo.
     EndLabel = MMI->NextLabelID();
@@ -4614,11 +4605,10 @@
 
   FunctionLoweringInfo FuncInfo(TLI, Fn, MF);
 
-  if (ExceptionHandling)
-    for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I)
-      if (InvokeInst *Invoke = dyn_cast<InvokeInst>(I->getTerminator()))
-        // Mark landing pad.
-        FuncInfo.MBBMap[Invoke->getSuccessor(1)]->setIsLandingPad();
+  for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I)
+    if (InvokeInst *Invoke = dyn_cast<InvokeInst>(I->getTerminator()))
+      // Mark landing pad.
+      FuncInfo.MBBMap[Invoke->getSuccessor(1)]->setIsLandingPad();
 
   for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I)
     SelectBasicBlock(I, MF, FuncInfo);
@@ -4757,7 +4747,7 @@
 
   MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
 
-  if (ExceptionHandling && MMI && BB->isLandingPad()) {
+  if (MMI && BB->isLandingPad()) {
     // Add a label to mark the beginning of the landing pad.  Deletion of the
     // landing pad can thus be detected via the MachineModuleInfo.
     unsigned LabelID = MMI->addLandingPad(BB);