https://github.com/halide/Halide
Raw File
Tip revision: 04ec9c041fa3eb9f55d9783439eb5c3b36f540bd authored by Steven Johnson on 14 November 2019, 20:17:17 UTC
Merge branch 'master' into pdb_mul_div_mod_multi_thread
Tip revision: 04ec9c0
Deinterleave.h
#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 */
Expr extract_odd_lanes(Expr a);

/** Extract the even-numbered lanes in a vector */
Expr extract_even_lanes(Expr a);

/** Extract the nth lane of a vector */
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);

void deinterleave_vector_test();

}  // namespace Internal
}  // namespace Halide

#endif
back to top