blob: 96b0b3386b817c4c3a80d59dc959d0af9b2097f3 [file] [log] [blame]
Jamie Madill3c9eeb92013-11-04 11:09:26 -05001//
2// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6// NodeSearch.h: Utilities for searching translator node graphs
7//
8
Geoff Lang0a73dd82014-11-19 16:18:08 -05009#ifndef COMPILER_TRANSLATOR_NODESEARCH_H_
10#define COMPILER_TRANSLATOR_NODESEARCH_H_
Jamie Madill3c9eeb92013-11-04 11:09:26 -050011
Jamie Madillb1a85f42014-08-19 15:23:24 -040012#include "compiler/translator/IntermNode.h"
Jamie Madille53c98b2014-02-03 11:57:13 -050013
Jamie Madill3c9eeb92013-11-04 11:09:26 -050014namespace sh
15{
16
17template <class Parent>
18class NodeSearchTraverser : public TIntermTraverser
19{
20 public:
Jamie Madilld7b1ab52016-12-12 14:42:19 -050021 NodeSearchTraverser() : TIntermTraverser(true, false, false), mFound(false) {}
Jamie Madill3c9eeb92013-11-04 11:09:26 -050022
23 bool found() const { return mFound; }
24
25 static bool search(TIntermNode *node)
26 {
27 Parent searchTraverser;
28 node->traverse(&searchTraverser);
29 return searchTraverser.found();
30 }
31
32 protected:
33 bool mFound;
34};
35
36class FindDiscard : public NodeSearchTraverser<FindDiscard>
37{
38 public:
39 virtual bool visitBranch(Visit visit, TIntermBranch *node)
40 {
41 switch (node->getFlowOp())
42 {
Jamie Madilld7b1ab52016-12-12 14:42:19 -050043 case EOpKill:
44 mFound = true;
45 break;
Jamie Madill3c9eeb92013-11-04 11:09:26 -050046
Jamie Madilld7b1ab52016-12-12 14:42:19 -050047 default:
48 break;
Jamie Madill3c9eeb92013-11-04 11:09:26 -050049 }
50
51 return !mFound;
52 }
53};
Jamie Madill3c9eeb92013-11-04 11:09:26 -050054}
55
Jamie Madilld7b1ab52016-12-12 14:42:19 -050056#endif // COMPILER_TRANSLATOR_NODESEARCH_H_