mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[WebAssembly] Don't make wasm cleanuppads into funclet entries
Summary: Catchpads and cleanuppads are not funclet entries; they are only EH scope entries. We already dont't set `isEHFuncletEntry` for catchpads. This patch does the same thing for cleanuppads. Reviewers: dschuff Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits Differential Revision: https://reviews.llvm.org/D50654 llvm-svn: 340330
This commit is contained in:
parent
dc4bfc8462
commit
18d2aa833a
@ -1437,8 +1437,11 @@ void SelectionDAGBuilder::visitCleanupPad(const CleanupPadInst &CPI) {
|
||||
// Don't emit any special code for the cleanuppad instruction. It just marks
|
||||
// the start of an EH scope/funclet.
|
||||
FuncInfo.MBB->setIsEHScopeEntry();
|
||||
FuncInfo.MBB->setIsEHFuncletEntry();
|
||||
FuncInfo.MBB->setIsCleanupFuncletEntry();
|
||||
auto Pers = classifyEHPersonality(FuncInfo.Fn->getPersonalityFn());
|
||||
if (Pers != EHPersonality::Wasm_CXX) {
|
||||
FuncInfo.MBB->setIsEHFuncletEntry();
|
||||
FuncInfo.MBB->setIsCleanupFuncletEntry();
|
||||
}
|
||||
}
|
||||
|
||||
/// When an invoke or a cleanupret unwinds to the next EH pad, there are
|
||||
@ -1458,6 +1461,7 @@ static void findUnwindDestinations(
|
||||
classifyEHPersonality(FuncInfo.Fn->getPersonalityFn());
|
||||
bool IsMSVCCXX = Personality == EHPersonality::MSVC_CXX;
|
||||
bool IsCoreCLR = Personality == EHPersonality::CoreCLR;
|
||||
bool IsWasmCXX = Personality == EHPersonality::Wasm_CXX;
|
||||
bool IsSEH = isAsynchronousEHPersonality(Personality);
|
||||
|
||||
while (EHPadBB) {
|
||||
@ -1472,7 +1476,8 @@ static void findUnwindDestinations(
|
||||
// personalities.
|
||||
UnwindDests.emplace_back(FuncInfo.MBBMap[EHPadBB], Prob);
|
||||
UnwindDests.back().first->setIsEHScopeEntry();
|
||||
UnwindDests.back().first->setIsEHFuncletEntry();
|
||||
if (!IsWasmCXX)
|
||||
UnwindDests.back().first->setIsEHFuncletEntry();
|
||||
break;
|
||||
} else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(Pad)) {
|
||||
// Add the catchpad handlers to the possible destinations.
|
||||
|
@ -164,8 +164,7 @@ terminate10: ; preds = %ehcleanup7
|
||||
; CHECK: try
|
||||
; CHECK: call foo@FUNCTION
|
||||
; CHECK: catch_all
|
||||
; TODO This should be removed too in a later patch
|
||||
; CHECK-NO T: get_global $push{{.+}}=, __stack_pointer@GLOBAL
|
||||
; CHECK-NOT: get_global $push{{.+}}=, __stack_pointer@GLOBAL
|
||||
; CHECK: call __cxa_end_catch@FUNCTION
|
||||
; CHECK-NOT: set_global __stack_pointer@GLOBAL, $pop{{.+}}
|
||||
; CHECK: end_try
|
||||
|
Loading…
Reference in New Issue
Block a user