Halide
CSE.h
Go to the documentation of this file.
1
#ifndef HALIDE_INTERNAL_CSE_H
2
#define HALIDE_INTERNAL_CSE_H
3
4
/** \file
5
* Defines a pass for introducing let expressions to wrap common sub-expressions. */
6
7
#include "
Expr.h
"
8
9
namespace
Halide
{
10
namespace
Internal
{
11
12
/** Replace each common sub-expression in the argument with a
13
* variable, and wrap the resulting expr in a let statement giving a
14
* value to that variable.
15
*
16
* This is important to do within Halide (instead of punting to llvm),
17
* because exprs that come in from the front-end are small when
18
* considered as a graph, but combinatorially large when considered as
19
* a tree. For an example of a such a case, see
20
* test/code_explosion.cpp
21
*
22
* The last parameter determines whether all common subexpressions are
23
* lifted, or only those that the simplifier would not subsitute back
24
* in (e.g. addition of a constant).
25
*/
26
Expr
common_subexpression_elimination
(
const
Expr &,
bool
lift_all =
false
);
27
28
/** Do common-subexpression-elimination on each expression in a
29
* statement. Does not introduce let statements. */
30
Stmt
common_subexpression_elimination
(
const
Stmt &,
bool
lift_all =
false
);
31
32
void
cse_test
();
33
34
}
// namespace Internal
35
}
// namespace Halide
36
37
#endif
Halide::Internal::cse_test
void cse_test()
Halide::Internal::common_subexpression_elimination
Expr common_subexpression_elimination(const Expr &, bool lift_all=false)
Replace each common sub-expression in the argument with a variable, and wrap the resulting expr in a ...
Halide
This file defines the class FunctionDAG, which is our representation of a Halide pipeline,...
Definition:
AbstractGenerator.h:19
Halide::LinkageType::Internal
@ Internal
Not visible externally, similar to 'static' linkage in C.
Expr.h
src
CSE.h
Generated by
1.8.17