shader: Move siblings check to a separate function and comment them out
This commit is contained in:
		
							parent
							
								
									7bf134b294
								
							
						
					
					
						commit
						7769517fc0
					
				
					 1 changed files with 21 additions and 16 deletions
				
			
		|  | @ -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
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 ReinUsesLisp
						ReinUsesLisp