Halide
Deinterleave.h
Go to the documentation of this file.
1 #ifndef DEINTERLEAVE_H
2 #define DEINTERLEAVE_H
3 
4 /** \file
5  *
6  * Defines methods for splitting up a vector into the even lanes and
7  * the odd lanes. Useful for optimizing expressions such as select(x %
8  * 2, f(x/2), g(x/2))
9  */
10 
11 #include "Expr.h"
12 
13 namespace Halide {
14 namespace Internal {
15 
16 /** Extract the odd-numbered lanes in a vector */
17 Expr extract_odd_lanes(const Expr &a);
18 
19 /** Extract the even-numbered lanes in a vector */
20 Expr extract_even_lanes(const Expr &a);
21 
22 /** Extract the nth lane of a vector */
23 Expr extract_lane(const Expr &vec, int lane);
24 
25 /** Look through a statement for expressions of the form select(ramp %
26  * 2 == 0, a, b) and replace them with calls to an interleave
27  * intrinsic */
28 Stmt rewrite_interleavings(const Stmt &s);
29 
31 
32 } // namespace Internal
33 } // namespace Halide
34 
35 #endif
Halide::Internal::extract_even_lanes
Expr extract_even_lanes(const Expr &a)
Extract the even-numbered lanes in a vector.
Halide::Internal::extract_lane
Expr extract_lane(const Expr &vec, int lane)
Extract the nth lane of a vector.
Halide::Internal::deinterleave_vector_test
void deinterleave_vector_test()
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
Halide::Internal::rewrite_interleavings
Stmt rewrite_interleavings(const Stmt &s)
Look through a statement for expressions of the form select(ramp % 2 == 0, a, b) and replace them wit...
Halide::Internal::extract_odd_lanes
Expr extract_odd_lanes(const Expr &a)
Extract the odd-numbered lanes in a vector.