Halide
FindIntrinsics.h
Go to the documentation of this file.
1 #ifndef HALIDE_FIND_INTRINSICS_H
2 #define HALIDE_FIND_INTRINSICS_H
3 
4 /** \file
5  * Tools to replace common patterns with more readily recognizable intrinsics.
6  */
7 
8 #include "IR.h"
9 
10 namespace Halide {
11 namespace Internal {
12 
13 /** Implement intrinsics with non-intrinsic using equivalents. */
14 Expr lower_widen_right_add(const Expr &a, const Expr &b);
15 Expr lower_widen_right_mul(const Expr &a, const Expr &b);
16 Expr lower_widen_right_sub(const Expr &a, const Expr &b);
17 Expr lower_widening_add(const Expr &a, const Expr &b);
18 Expr lower_widening_mul(const Expr &a, const Expr &b);
19 Expr lower_widening_sub(const Expr &a, const Expr &b);
20 Expr lower_widening_shift_left(const Expr &a, const Expr &b);
21 Expr lower_widening_shift_right(const Expr &a, const Expr &b);
22 
23 Expr lower_rounding_shift_left(const Expr &a, const Expr &b);
24 Expr lower_rounding_shift_right(const Expr &a, const Expr &b);
25 
26 Expr lower_saturating_add(const Expr &a, const Expr &b);
27 Expr lower_saturating_sub(const Expr &a, const Expr &b);
28 Expr lower_saturating_cast(const Type &t, const Expr &a);
29 
30 Expr lower_halving_add(const Expr &a, const Expr &b);
31 Expr lower_halving_sub(const Expr &a, const Expr &b);
32 Expr lower_rounding_halving_add(const Expr &a, const Expr &b);
33 
34 Expr lower_mul_shift_right(const Expr &a, const Expr &b, const Expr &q);
35 Expr lower_rounding_mul_shift_right(const Expr &a, const Expr &b, const Expr &q);
36 
37 /** Replace one of the above ops with equivalent arithmetic. */
38 Expr lower_intrinsic(const Call *op);
39 
40 /** Replace common arithmetic patterns with intrinsics. */
41 Stmt find_intrinsics(const Stmt &s);
42 Expr find_intrinsics(const Expr &e);
43 
44 /** The reverse of find_intrinsics. */
45 Expr lower_intrinsics(const Expr &e);
46 Stmt lower_intrinsics(const Stmt &s);
47 
48 } // namespace Internal
49 } // namespace Halide
50 
51 #endif
Halide::Internal::lower_saturating_cast
Expr lower_saturating_cast(const Type &t, const Expr &a)
Halide::Internal::lower_halving_sub
Expr lower_halving_sub(const Expr &a, const Expr &b)
Halide::Internal::lower_saturating_sub
Expr lower_saturating_sub(const Expr &a, const Expr &b)
Halide::Internal::lower_widen_right_add
Expr lower_widen_right_add(const Expr &a, const Expr &b)
Implement intrinsics with non-intrinsic using equivalents.
IR.h
Halide::Internal::lower_saturating_add
Expr lower_saturating_add(const Expr &a, const Expr &b)
Halide::Internal::lower_mul_shift_right
Expr lower_mul_shift_right(const Expr &a, const Expr &b, const Expr &q)
Halide
This file defines the class FunctionDAG, which is our representation of a Halide pipeline,...
Definition: AbstractGenerator.h:19
Halide::Internal::lower_rounding_halving_add
Expr lower_rounding_halving_add(const Expr &a, const Expr &b)
Halide::LinkageType::Internal
@ Internal
Not visible externally, similar to 'static' linkage in C.
Halide::Internal::lower_intrinsics
Expr lower_intrinsics(const Expr &e)
The reverse of find_intrinsics.
Halide::Internal::lower_halving_add
Expr lower_halving_add(const Expr &a, const Expr &b)
Halide::Internal::lower_intrinsic
Expr lower_intrinsic(const Call *op)
Replace one of the above ops with equivalent arithmetic.
Halide::Internal::lower_widening_add
Expr lower_widening_add(const Expr &a, const Expr &b)
Halide::Internal::lower_widen_right_mul
Expr lower_widen_right_mul(const Expr &a, const Expr &b)
Halide::Internal::lower_widening_mul
Expr lower_widening_mul(const Expr &a, const Expr &b)
Halide::Internal::lower_widening_shift_left
Expr lower_widening_shift_left(const Expr &a, const Expr &b)
Halide::Internal::lower_widen_right_sub
Expr lower_widen_right_sub(const Expr &a, const Expr &b)
Halide::Internal::lower_widening_sub
Expr lower_widening_sub(const Expr &a, const Expr &b)
Halide::Internal::lower_widening_shift_right
Expr lower_widening_shift_right(const Expr &a, const Expr &b)
Halide::Internal::lower_rounding_shift_right
Expr lower_rounding_shift_right(const Expr &a, const Expr &b)
Halide::Internal::lower_rounding_mul_shift_right
Expr lower_rounding_mul_shift_right(const Expr &a, const Expr &b, const Expr &q)
Halide::Internal::lower_rounding_shift_left
Expr lower_rounding_shift_left(const Expr &a, const Expr &b)
Halide::Internal::find_intrinsics
Stmt find_intrinsics(const Stmt &s)
Replace common arithmetic patterns with intrinsics.