#ifndef HALIDE_IR_VISITOR_H
#define HALIDE_IR_VISITOR_H
#include "IR.h"
#include "Util.h"
#include <set>
#include <map>
#include <string>
namespace Halide {
namespace Internal {
class IRVisitor {
public:
EXPORT virtual ~IRVisitor();
EXPORT virtual void visit(const IntImm *);
EXPORT virtual void visit(const UIntImm *);
EXPORT virtual void visit(const FloatImm *);
EXPORT virtual void visit(const StringImm *);
EXPORT virtual void visit(const Cast *);
EXPORT virtual void visit(const Variable *);
EXPORT virtual void visit(const Add *);
EXPORT virtual void visit(const Sub *);
EXPORT virtual void visit(const Mul *);
EXPORT virtual void visit(const Div *);
EXPORT virtual void visit(const Mod *);
EXPORT virtual void visit(const Min *);
EXPORT virtual void visit(const Max *);
EXPORT virtual void visit(const EQ *);
EXPORT virtual void visit(const NE *);
EXPORT virtual void visit(const LT *);
EXPORT virtual void visit(const LE *);
EXPORT virtual void visit(const GT *);
EXPORT virtual void visit(const GE *);
EXPORT virtual void visit(const And *);
EXPORT virtual void visit(const Or *);
EXPORT virtual void visit(const Not *);
EXPORT virtual void visit(const Select *);
EXPORT virtual void visit(const Load *);
EXPORT virtual void visit(const Ramp *);
EXPORT virtual void visit(const Broadcast *);
EXPORT virtual void visit(const Call *);
EXPORT virtual void visit(const Let *);
EXPORT virtual void visit(const LetStmt *);
EXPORT virtual void visit(const AssertStmt *);
EXPORT virtual void visit(const ProducerConsumer *);
EXPORT virtual void visit(const For *);
EXPORT virtual void visit(const Store *);
EXPORT virtual void visit(const Provide *);
EXPORT virtual void visit(const Allocate *);
EXPORT virtual void visit(const Free *);
EXPORT virtual void visit(const Realize *);
EXPORT virtual void visit(const Block *);
EXPORT virtual void visit(const IfThenElse *);
EXPORT virtual void visit(const Evaluate *);
EXPORT virtual void visit(const Shuffle *);
EXPORT virtual void visit(const Prefetch *);
};
class IRGraphVisitor : public IRVisitor {
protected:
EXPORT virtual void include(const Expr &);
EXPORT virtual void include(const Stmt &);
std::set<const IRNode *> visited;
public:
EXPORT virtual void visit(const IntImm *);
EXPORT virtual void visit(const UIntImm *);
EXPORT virtual void visit(const FloatImm *);
EXPORT virtual void visit(const StringImm *);
EXPORT virtual void visit(const Cast *);
EXPORT virtual void visit(const Variable *);
EXPORT virtual void visit(const Add *);
EXPORT virtual void visit(const Sub *);
EXPORT virtual void visit(const Mul *);
EXPORT virtual void visit(const Div *);
EXPORT virtual void visit(const Mod *);
EXPORT virtual void visit(const Min *);
EXPORT virtual void visit(const Max *);
EXPORT virtual void visit(const EQ *);
EXPORT virtual void visit(const NE *);
EXPORT virtual void visit(const LT *);
EXPORT virtual void visit(const LE *);
EXPORT virtual void visit(const GT *);
EXPORT virtual void visit(const GE *);
EXPORT virtual void visit(const And *);
EXPORT virtual void visit(const Or *);
EXPORT virtual void visit(const Not *);
EXPORT virtual void visit(const Select *);
EXPORT virtual void visit(const Load *);
EXPORT virtual void visit(const Ramp *);
EXPORT virtual void visit(const Broadcast *);
EXPORT virtual void visit(const Call *);
EXPORT virtual void visit(const Let *);
EXPORT virtual void visit(const LetStmt *);
EXPORT virtual void visit(const AssertStmt *);
EXPORT virtual void visit(const ProducerConsumer *);
EXPORT virtual void visit(const For *);
EXPORT virtual void visit(const Store *);
EXPORT virtual void visit(const Provide *);
EXPORT virtual void visit(const Allocate *);
EXPORT virtual void visit(const Free *);
EXPORT virtual void visit(const Realize *);
EXPORT virtual void visit(const Block *);
EXPORT virtual void visit(const IfThenElse *);
EXPORT virtual void visit(const Evaluate *);
EXPORT virtual void visit(const Shuffle *);
EXPORT virtual void visit(const Prefetch *);
};
}
}
#endif