================ Comment at: lib/CodeGen/CGException.cpp:1309-1313 @@ -1318,5 +1308,7 @@ + // In 64-bit, we call the child function with arguments. In 32-bit, we store + // zero in the parent frame and use framerecover to check the value. + const CGFunctionInfo *FnInfo; CallArgList Args; - llvm::Value *IsForEH = - llvm::ConstantInt::get(CGF.ConvertType(ArgTys[0]), F.isForEHCleanup()); - Args.add(RValue::get(IsForEH), ArgTys[0]); + if (CGF.getTarget().getTriple().getArch() == llvm::Triple::x86_64) { + // Compute the two argument values. ---------------- I bet ARM is more like x86_64 than x86_32. Perhaps we should have `!= llvm::Triple::x86`
================ Comment at: lib/CodeGen/CGException.cpp:1459-1466 @@ -1378,10 +1458,10 @@ - // Typically there are no captures and we can exit early. - if (Finder.Captures.empty()) + // We can exit early on x86_64 when there are no captures. + if (!Finder.foundCaptures() && + CGM.getTarget().getTriple().getArch() == llvm::Triple::x86_64) return; - // Prepare the first two arguments to llvm.framerecover. - llvm::Function *FrameRecoverFn = llvm::Intrinsic::getDeclaration( - &CGM.getModule(), llvm::Intrinsic::framerecover); - llvm::Constant *ParentI8Fn = - llvm::ConstantExpr::getBitCast(ParentCGF.CurFn, Int8PtrTy); + llvm::Value *EntryEBP = nullptr; + llvm::Value *ParentFP; + if (CGM.getTarget().getTriple().getArch() == llvm::Triple::x86_64) { + // On x64, the parent FP is passed as the second argument. ---------------- Ditto here for ARM. http://reviews.llvm.org/D10852 EMAIL PREFERENCES http://reviews.llvm.org/settings/panel/emailpreferences/ _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits