#ifndef DEINTERLEAVE_H #define DEINTERLEAVE_H /** \file * * Defines methods for splitting up a vector into the even lanes and * the odd lanes. Useful for optimizing expressions such as select(x % * 2, f(x/2), g(x/2)) */ #include "IR.h" namespace Halide { namespace Internal { /** Extract the odd-numbered lanes in a vector */ EXPORT Expr extract_odd_lanes(Expr a); /** Extract the even-numbered lanes in a vector */ EXPORT Expr extract_even_lanes(Expr a); /** Extract the nth lane of a vector */ EXPORT Expr extract_lane(Expr vec, int lane); /** Look through a statement for expressions of the form select(ramp % * 2 == 0, a, b) and replace them with calls to an interleave * intrinsic */ Stmt rewrite_interleavings(Stmt s); EXPORT void deinterleave_vector_test(); } } #endif