#ifndef HALIDE_INTERNAL_CSE_H #define HALIDE_INTERNAL_CSE_H /** \file * Defines a pass for introducing let expressions to wrap common sub-expressions. */ #include "IR.h" namespace Halide { namespace Internal { /** Replace each common sub-expression in the argument with a * variable, and wrap the resulting expr in a let statement giving a * value to that variable. * * This is important to do within Halide (instead of punting to llvm), * because exprs that come in from the front-end are small when * considered as a graph, but combinatorially large when considered as * a tree. For an example of a such a case, see * test/code_explosion.cpp */ EXPORT Expr common_subexpression_elimination(Expr); /** Do common-subexpression-elimination on each expression in a * statement. Does not introduce let statements. */ EXPORT Stmt common_subexpression_elimination(Stmt); EXPORT void cse_test(); } } #endif