diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-05-15 16:46:00 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-05-15 16:46:00 -0700 |
commit | 0239e3d01cb1c049770e99044516ed0479a0ce48 (patch) | |
tree | 1c3fe6ab92b2ff8ab33931d76b681a5e750ea669 /src | |
parent | 22686b6bb91361c3ab20e07bc8b9ce17fdac661f (diff) | |
download | binaryen-0239e3d01cb1c049770e99044516ed0479a0ce48.tar.gz binaryen-0239e3d01cb1c049770e99044516ed0479a0ce48.tar.bz2 binaryen-0239e3d01cb1c049770e99044516ed0479a0ce48.zip |
don't create a basic block for a block that has no branches out of it
Diffstat (limited to 'src')
-rw-r--r-- | src/cfg/cfg-traversal.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/cfg/cfg-traversal.h b/src/cfg/cfg-traversal.h index f6c055542..b862c9403 100644 --- a/src/cfg/cfg-traversal.h +++ b/src/cfg/cfg-traversal.h @@ -72,14 +72,18 @@ struct CFGWalker : public PostWalker<SubType, VisitorType> { } static void doEndBlock(SubType* self, Expression** currp) { - // TODO: if no name, no need for a new block + auto* curr = (*currp)->cast<Block>(); + if (!curr->name.is()) return; + auto iter = self->branches.find(curr->name); + if (iter == self->branches.end()) return; + auto& origins = iter->second; + if (origins.size() == 0) return; + // we have branches to here, so we need a new block auto* last = self->currBasicBlock; doStartBasicBlock(self, currp); self->link(last, self->currBasicBlock); // fallthrough // branches to the new one - auto* curr = (*currp)->cast<Block>(); if (curr->name.is()) { - auto& origins = self->branches[curr->name]; for (auto* origin : origins) { self->link(origin, self->currBasicBlock); } |