shader: Move siblings check to a separate function and comment them out

This commit is contained in:
ReinUsesLisp 2021-04-21 00:35:08 -03:00 committed by ameerj
parent 4209828646
commit e4d1122082

View file

@ -304,6 +304,23 @@ bool SearchNode(const Tree& tree, ConstNode stmt, size_t& offset) {
return false;
}
bool AreSiblings(Node goto_stmt, Node label_stmt) noexcept {
Node it{goto_stmt};
do {
if (it == label_stmt) {
return true;
}
--it;
} while (it != goto_stmt->up->children.begin());
while (it != goto_stmt->up->children.end()) {
if (it == label_stmt) {
return true;
}
++it;
}
return false;
}
class GotoPass {
public:
explicit GotoPass(Flow::CFG& cfg, ObjectPool<IR::Inst>& inst_pool_,
@ -353,22 +370,10 @@ private:
}
}
}
// TODO: Remove this
{
Node it{goto_stmt};
bool sibling{false};
do {
sibling |= it == label_stmt;
--it;
} while (it != goto_stmt->up->children.begin());
while (it != goto_stmt->up->children.end()) {
sibling |= it == label_stmt;
++it;
}
if (!sibling) {
throw LogicError("Not siblings");
}
}
// Expensive operation:
// if (!AreSiblings(goto_stmt, label_stmt)) {
// throw LogicError("Goto is not a sibling with the label");
// }
// goto_stmt and label_stmt are guaranteed to be siblings, eliminate
if (std::next(goto_stmt) == label_stmt) {
// Simply eliminate the goto if the label is next to it