166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com//
266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com// Use of this source code is governed by a BSD-style license that can be
466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com// found in the LICENSE file.
566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com//
666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
7dcefb75e81f3eec28fb1d2d3b3847682659e7378Geoff Lang#include "compiler/translator/depgraph/DependencyGraphOutput.h"
866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TDependencyGraphOutput::outputIndentation()
1066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
1166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    for (int i = 0; i < getDepth(); ++i)
1266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com        mSink << "  ";
1366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
1466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
1566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TDependencyGraphOutput::visitArgument(TGraphArgument* parameter)
1666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
1766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    outputIndentation();
1866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    mSink << "argument " << parameter->getArgumentNumber() << " of call to "
1966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com          << parameter->getIntermFunctionCall()->getName() << "\n";
2066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
2166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
2266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TDependencyGraphOutput::visitFunctionCall(TGraphFunctionCall* functionCall)
2366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
2466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    outputIndentation();
2566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    mSink << "function call " <<  functionCall->getIntermFunctionCall()->getName() << "\n";
2666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
2766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
2866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TDependencyGraphOutput::visitSymbol(TGraphSymbol* symbol)
2966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
3066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    outputIndentation();
3166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    mSink << symbol->getIntermSymbol()->getSymbol() << " (symbol id: "
3266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com          << symbol->getIntermSymbol()->getId() << ")\n";
3366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
3466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
3566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TDependencyGraphOutput::visitSelection(TGraphSelection* selection)
3666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
3766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    outputIndentation();
3866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    mSink << "selection\n";
3966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
4066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
4166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TDependencyGraphOutput::visitLoop(TGraphLoop* loop)
4266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
4366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    outputIndentation();
4466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    mSink << "loop condition\n";
4566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
4666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
4766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TDependencyGraphOutput::visitLogicalOp(TGraphLogicalOp* logicalOp)
4866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
4966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    outputIndentation();
5066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    mSink << "logical " << logicalOp->getOpString() << "\n";
5166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
5266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
5366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TDependencyGraphOutput::outputAllSpanningTrees(TDependencyGraph& graph)
5466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
5566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    mSink << "\n";
5666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
5766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    for (TGraphNodeVector::const_iterator iter = graph.begin(); iter != graph.end(); ++iter)
5866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    {
5966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com        TGraphNode* symbol = *iter;
6066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com        mSink << "--- Dependency graph spanning tree ---\n";
6166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com        clearVisited();
6266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com        symbol->traverse(this);
6366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com        mSink << "\n";
6466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    }
6566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
66