26 auto GetStatus = [&](BlockT *BB) {
27 auto It = Statuses.
find(BB);
28 return It != Statuses.
end() ? It->second :
Unknown;
31 auto CheckPredecessors = [&](BlockT *BB,
Status Stat) {
33 Status PredStatus = GetStatus(PredBB);
36 if (PredStatus > Stat)
42 auto AddSuccesors = [&](BlockT *BB) {
44 if (!SuccBB->isEHPad())
50 BlockT *StartBlock = &
F.front();
51 Statuses[StartBlock] = NonEH;
52 AddSuccesors(StartBlock);
62 while (!WorkList.
empty()) {
63 auto *BB = *WorkList.
begin();
66 Status OldStatus = GetStatus(BB);
70 Status NewStatus = CheckPredecessors(BB, OldStatus);
73 bool Changed = OldStatus != NewStatus;
76 Statuses[BB] = NewStatus;
80 for (
auto Entry : Statuses) {
81 if (Entry.second == EH)
82 EHBlocks.
insert(Entry.first);