shader: Move siblings check to a separate function and comment them out
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user