#ifndef HALIDE_IR_HEXAGON_OPTIMIZE_H
#define HALIDE_IR_HEXAGON_OPTIMIZE_H
/** \file
* Tools for optimizing IR for Hexagon.
*/
#include "IR.h"
namespace Halide {
namespace Internal {
/** Replace indirect and other loads with simple loads + vlut
* calls. */
EXPORT Stmt optimize_hexagon_shuffles(Stmt s, int lut_alignment);
/** Hexagon deinterleaves when performing widening operations, and
* interleaves when performing narrowing operations. This pass
* rewrites widenings/narrowings to be explicit in the IR, and
* attempts to simplify away most of the
* interleaving/deinterleaving. */
EXPORT Stmt optimize_hexagon_instructions(Stmt s, Target t);
/** Generate deinterleave or interleave operations, operating on
* groups of vectors at a time. */
//@{
EXPORT Expr native_deinterleave(Expr x);
EXPORT Expr native_interleave(Expr x);
EXPORT bool is_native_deinterleave(Expr x);
EXPORT bool is_native_interleave(Expr x);
//@}
} // namespace Internal
} // namespace Halide
#endif