Pattern            73 src/CodeGen_ARM.cpp         Pattern p("", "", intrin_lanes, Expr(), Pattern::NarrowArgs);
Pattern           149 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqrdmulh.v4i16", "sqrdmulh.v4i16", 4,
Pattern           151 src/CodeGen_ARM.cpp                             Pattern::NarrowArgs));
Pattern           152 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqrdmulh.v8i16", "sqrdmulh.v8i16", 8,
Pattern           154 src/CodeGen_ARM.cpp                             Pattern::NarrowArgs));
Pattern           155 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqrdmulh.v2i32", "sqrdmulh.v2i32", 2,
Pattern           157 src/CodeGen_ARM.cpp                             Pattern::NarrowArgs));
Pattern           158 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqrdmulh.v4i32", "sqrdmulh.v4i32", 4,
Pattern           160 src/CodeGen_ARM.cpp                             Pattern::NarrowArgs));
Pattern           162 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftns.v8i8",  "sqshrn.v8i8",  8, i8_sat(wild_i16x_/wild_i16x_),  Pattern::RightShift));
Pattern           163 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftns.v4i16", "sqshrn.v4i16", 4, i16_sat(wild_i32x_/wild_i32x_), Pattern::RightShift));
Pattern           164 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftns.v2i32", "sqshrn.v2i32", 2, i32_sat(wild_i64x_/wild_i64x_), Pattern::RightShift));
Pattern           165 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftnu.v8i8",  "uqshrn.v8i8",  8, u8_sat(wild_u16x_/wild_u16x_),  Pattern::RightShift));
Pattern           166 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftnu.v4i16", "uqshrn.v4i16", 4, u16_sat(wild_u32x_/wild_u32x_), Pattern::RightShift));
Pattern           167 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftnu.v2i32", "uqshrn.v2i32", 2, u32_sat(wild_u64x_/wild_u64x_), Pattern::RightShift));
Pattern           168 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftnsu.v8i8",  "sqshrun.v8i8",  8, u8_sat(wild_i16x_/wild_i16x_),  Pattern::RightShift));
Pattern           169 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftnsu.v4i16", "sqshrun.v4i16", 4, u16_sat(wild_i32x_/wild_i32x_), Pattern::RightShift));
Pattern           170 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftnsu.v2i32", "sqshrun.v2i32", 2, u32_sat(wild_i64x_/wild_i64x_), Pattern::RightShift));
Pattern           174 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshifts.v8i8",  "sqshl.v8i8",  8, i8_sat(i16(wild_i8x8)*wild_i16x8), Pattern::LeftShift));
Pattern           175 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshifts.v4i16", "sqshl.v4i16", 4, i16_sat(i32(wild_i16x4)*wild_i32x4), Pattern::LeftShift));
Pattern           176 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshifts.v2i32", "sqshl.v2i32", 2, i32_sat(i64(wild_i32x2)*wild_i64x2), Pattern::LeftShift));
Pattern           177 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftu.v8i8",  "uqshl.v8i8",  8, u8_sat(u16(wild_u8x8)*wild_u16x8), Pattern::LeftShift));
Pattern           178 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftu.v4i16", "uqshl.v4i16", 4, u16_sat(u32(wild_u16x4)*wild_u32x4), Pattern::LeftShift));
Pattern           179 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftu.v2i32", "uqshl.v2i32", 2, u32_sat(u64(wild_u32x2)*wild_u64x2), Pattern::LeftShift));
Pattern           180 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftsu.v8i8",  "sqshlu.v8i8",  8, u8_sat(i16(wild_i8x8)*wild_i16x8), Pattern::LeftShift));
Pattern           181 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftsu.v4i16", "sqshlu.v4i16", 4, u16_sat(i32(wild_i16x4)*wild_i32x4), Pattern::LeftShift));
Pattern           182 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftsu.v2i32", "sqshlu.v2i32", 2, u32_sat(i64(wild_i32x2)*wild_i64x2), Pattern::LeftShift));
Pattern           185 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshifts.v16i8", "sqshl.v16i8", 16, i8_sat(i16(wild_i8x_)*wild_i16x_), Pattern::LeftShift));
Pattern           186 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshifts.v8i16", "sqshl.v8i16",  8, i16_sat(i32(wild_i16x_)*wild_i32x_), Pattern::LeftShift));
Pattern           187 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshifts.v4i32", "sqshl.v4i32",  4, i32_sat(i64(wild_i32x_)*wild_i64x_), Pattern::LeftShift));
Pattern           188 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftu.v16i8", "uqshl.v16i8",  16, u8_sat(u16(wild_u8x_)*wild_u16x_), Pattern::LeftShift));
Pattern           189 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftu.v8i16", "uqshl.v8i16",  8, u16_sat(u32(wild_u16x_)*wild_u32x_), Pattern::LeftShift));
Pattern           190 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftu.v4i32", "uqshl.v4i32",  4, u32_sat(u64(wild_u32x_)*wild_u64x_), Pattern::LeftShift));
Pattern           191 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftsu.v16i8", "sqshlu.v16i8", 16, u8_sat(i16(wild_i8x_)*wild_i16x_), Pattern::LeftShift));
Pattern           192 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftsu.v8i16", "sqshlu.v8i16", 8, u16_sat(i32(wild_i16x_)*wild_i32x_), Pattern::LeftShift));
Pattern           193 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqshiftsu.v4i32", "sqshlu.v4i32", 4, u32_sat(i64(wild_i32x_)*wild_i64x_), Pattern::LeftShift));
Pattern           195 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqmovns.v8i8",  "sqxtn.v8i8",    8,   i8_sat(wild_i16x_)));
Pattern           196 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqmovns.v4i16", "sqxtn.v4i16",   4,  i16_sat(wild_i32x_)));
Pattern           197 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqmovns.v2i32", "sqxtn.v2i32",   2,  i32_sat(wild_i64x_)));
Pattern           198 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqmovnu.v8i8",  "uqxtn.v8i8",    8,   u8_sat(wild_u16x_)));
Pattern           199 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqmovnu.v4i16", "uqxtn.v4i16",   4,  u16_sat(wild_u32x_)));
Pattern           200 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqmovnu.v2i32", "uqxtn.v2i32",   2,  u32_sat(wild_u64x_)));
Pattern           201 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqmovnsu.v8i8",  "sqxtun.v8i8",  8,   u8_sat(wild_i16x_)));
Pattern           202 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqmovnsu.v4i16", "sqxtun.v4i16", 4,  u16_sat(wild_i32x_)));
Pattern           203 src/CodeGen_ARM.cpp     casts.push_back(Pattern("vqmovnsu.v2i32", "sqxtun.v2i32", 2,  u32_sat(wild_i64x_)));
Pattern           209 src/CodeGen_ARM.cpp     averagings.push_back(Pattern("vhadds.v2i32", "shadd.v2i32", 2, (wild_i32x2 + wild_i32x2)));
Pattern           212 src/CodeGen_ARM.cpp     averagings.push_back(Pattern("vhadds.v4i32", "shadd.v4i32", 4, (wild_i32x_ + wild_i32x_)));
Pattern           215 src/CodeGen_ARM.cpp     averagings.push_back(Pattern("vhsubs.v2i32", "shsub.v2i32", 2, (wild_i32x2 - wild_i32x2)));
Pattern           218 src/CodeGen_ARM.cpp     averagings.push_back(Pattern("vhsubs.v4i32", "shsub.v4i32", 4, (wild_i32x_ - wild_i32x_)));
Pattern           221 src/CodeGen_ARM.cpp     negations.push_back(Pattern("vqneg.v8i8",  "sqneg.v8i8", 8, -max(wild_i8x8, -127)));
Pattern           222 src/CodeGen_ARM.cpp     negations.push_back(Pattern("vqneg.v4i16", "sqneg.v4i16", 4, -max(wild_i16x4, -32767)));
Pattern           223 src/CodeGen_ARM.cpp     negations.push_back(Pattern("vqneg.v2i32", "sqneg.v2i32", 2, -max(wild_i32x2, -(0x7fffffff))));
Pattern           226 src/CodeGen_ARM.cpp     negations.push_back(Pattern("vqneg.v16i8", "sqneg.v16i8", 16, -max(wild_i8x_, -127)));
Pattern           227 src/CodeGen_ARM.cpp     negations.push_back(Pattern("vqneg.v8i16", "sqneg.v8i16", 8,  -max(wild_i16x_, -32767)));
Pattern           228 src/CodeGen_ARM.cpp     negations.push_back(Pattern("vqneg.v4i32", "sqneg.v4i32", 4,  -max(wild_i32x_, -(0x7fffffff))));
Pattern           231 src/CodeGen_ARM.cpp Value *CodeGen_ARM::call_pattern(const Pattern &p, Type t, const vector<Expr> &args) {
Pattern           239 src/CodeGen_ARM.cpp Value *CodeGen_ARM::call_pattern(const Pattern &p, llvm::Type *t, const vector<llvm::Value *> &args) {
Pattern           258 src/CodeGen_ARM.cpp         const Pattern &pattern = casts[i];
Pattern           263 src/CodeGen_ARM.cpp             if (pattern.type == Pattern::Simple) {
Pattern           266 src/CodeGen_ARM.cpp             } else if (pattern.type == Pattern::NarrowArgs) {
Pattern           292 src/CodeGen_ARM.cpp                     if (target.bits == 32 && pattern.type == Pattern::RightShift) {
Pattern           298 src/CodeGen_ARM.cpp                     if (target.bits == 64 && pattern.type == Pattern::RightShift) {
Pattern           387 src/CodeGen_ARM.cpp             const Pattern &pattern = left_shifts[i];
Pattern           388 src/CodeGen_ARM.cpp             internal_assert(pattern.type == Pattern::LeftShift);
Pattern            52 src/CodeGen_ARM.h         Pattern() {}
Pattern            53 src/CodeGen_ARM.h         Pattern(const std::string &i32, const std::string &i64, int l, Expr p, PatternType t = Simple) :
Pattern            58 src/CodeGen_ARM.h     std::vector<Pattern> casts, left_shifts, averagings, negations;
Pattern            63 src/CodeGen_ARM.h     llvm::Value *call_pattern(const Pattern &p, Type t, const std::vector<Expr> &args);
Pattern            64 src/CodeGen_ARM.h     llvm::Value *call_pattern(const Pattern &p, llvm::Type *t, const std::vector<llvm::Value *> &args);
Pattern            60 src/CodeGen_PowerPC.cpp     static Pattern patterns[] = {
Pattern           100 src/CodeGen_PowerPC.cpp         const Pattern &pattern = patterns[i];
Pattern           221 src/CodeGen_X86.cpp     static Pattern patterns[] = {
Pattern           264 src/CodeGen_X86.cpp         const Pattern &pattern = patterns[i];
Pattern           149 src/HexagonOptimize.cpp     Pattern(const string &intrin, Expr p, int flags = 0)
Pattern           175 src/HexagonOptimize.cpp Expr apply_patterns(Expr x, const vector<Pattern> &patterns, const Target &target, IRMutator *op_mutator) {
Pattern           178 src/HexagonOptimize.cpp     for (const Pattern &p : patterns) {
Pattern           180 src/HexagonOptimize.cpp         if ((p.flags & (Pattern::v62)) && !target.has_feature(Target::HVX_v62))
Pattern           198 src/HexagonOptimize.cpp                 if (p.flags & (Pattern::NarrowOp0 << i)) {
Pattern           200 src/HexagonOptimize.cpp                 } else if (p.flags & (Pattern::NarrowUnsignedOp0 << i)) {
Pattern           207 src/HexagonOptimize.cpp             for (size_t i = Pattern::BeginExactLog2Op; i < Pattern::EndExactLog2Op && is_match; i++) {
Pattern           211 src/HexagonOptimize.cpp                 if (p.flags & (Pattern::ExactLog2Op1 << (i - Pattern::BeginExactLog2Op))) {
Pattern           222 src/HexagonOptimize.cpp             for (size_t i = Pattern::BeginDeinterleaveOp; i < Pattern::EndDeinterleaveOp; i++) {
Pattern           224 src/HexagonOptimize.cpp                     (Pattern::DeinterleaveOp0 << (i - Pattern::BeginDeinterleaveOp))) {
Pattern           229 src/HexagonOptimize.cpp             if (p.flags & Pattern::SwapOps01) {
Pattern           233 src/HexagonOptimize.cpp             if (p.flags & Pattern::SwapOps12) {
Pattern           242 src/HexagonOptimize.cpp             if (p.flags & Pattern::InterleaveResult) {
Pattern           274 src/HexagonOptimize.cpp Expr apply_commutative_patterns(const T *op, const vector<Pattern> &patterns, const Target &target, IRMutator *mutator) {
Pattern           295 src/HexagonOptimize.cpp         static const vector<Pattern> scalar_muls = {
Pattern           297 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vub.ub", wild_u16x*bc(wild_u16), Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           298 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vub.b",  wild_i16x*bc(wild_i16), Pattern::InterleaveResult | Pattern::NarrowUnsignedOp0 | Pattern::NarrowOp1 },
Pattern           299 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vuh.uh", wild_u32x*bc(wild_u32), Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           300 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vh.h",   wild_i32x*bc(wild_i32), Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           303 src/HexagonOptimize.cpp             { "halide.hexagon.shl.vub.ub", wild_u8x*bc(wild_u8), Pattern::ExactLog2Op1 },
Pattern           304 src/HexagonOptimize.cpp             { "halide.hexagon.shl.vuh.uh", wild_u16x*bc(wild_u16), Pattern::ExactLog2Op1 },
Pattern           305 src/HexagonOptimize.cpp             { "halide.hexagon.shl.vuw.uw", wild_u32x*bc(wild_u32), Pattern::ExactLog2Op1 },
Pattern           306 src/HexagonOptimize.cpp             { "halide.hexagon.shl.vb.b", wild_i8x*bc(wild_i8), Pattern::ExactLog2Op1 },
Pattern           307 src/HexagonOptimize.cpp             { "halide.hexagon.shl.vh.h", wild_i16x*bc(wild_i16), Pattern::ExactLog2Op1 },
Pattern           308 src/HexagonOptimize.cpp             { "halide.hexagon.shl.vw.w", wild_i32x*bc(wild_i32), Pattern::ExactLog2Op1 },
Pattern           311 src/HexagonOptimize.cpp             { "halide.hexagon.mul.vh.b", wild_i16x*bc(wild_i16), Pattern::NarrowOp1 },
Pattern           312 src/HexagonOptimize.cpp             { "halide.hexagon.mul.vw.h", wild_i32x*bc(wild_i32), Pattern::NarrowOp1 },
Pattern           319 src/HexagonOptimize.cpp         static const vector<Pattern> muls = {
Pattern           321 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vub.vub", wild_u16x*wild_u16x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           322 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vuh.vuh", wild_u32x*wild_u32x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           323 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vb.vb",   wild_i16x*wild_i16x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           324 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vh.vh",   wild_i32x*wild_i32x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           326 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vub.vb",  wild_i16x*wild_i16x, Pattern::InterleaveResult | Pattern::NarrowUnsignedOp0 | Pattern::NarrowOp1 },
Pattern           327 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vh.vuh",  wild_i32x*wild_i32x, Pattern::InterleaveResult | Pattern::NarrowOp0 | Pattern::NarrowUnsignedOp1 },
Pattern           333 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vub.vb",  wild_i16x*wild_i16x, Pattern::InterleaveResult | Pattern::NarrowOp0 | Pattern::NarrowUnsignedOp1 | Pattern::SwapOps01 },
Pattern           334 src/HexagonOptimize.cpp             { "halide.hexagon.mpy.vh.vuh",  wild_i32x*wild_i32x, Pattern::InterleaveResult | Pattern::NarrowUnsignedOp0 | Pattern::NarrowOp1 | Pattern::SwapOps01 },
Pattern           337 src/HexagonOptimize.cpp             { "halide.hexagon.mul.vw.vh", wild_i32x*wild_i32x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 },
Pattern           338 src/HexagonOptimize.cpp             { "halide.hexagon.mul.vw.vuh", wild_i32x*wild_i32x, Pattern::ReinterleaveOp0 | Pattern::NarrowUnsignedOp1 },
Pattern           339 src/HexagonOptimize.cpp             { "halide.hexagon.mul.vuw.vuh", wild_u32x*wild_u32x, Pattern::ReinterleaveOp0 | Pattern::NarrowUnsignedOp1 },
Pattern           597 src/HexagonOptimize.cpp         static const vector<Pattern> adds = {
Pattern           599 src/HexagonOptimize.cpp             { "halide.hexagon.acc_add_2mpy.vh.vub.vub.b.b", wild_i16x + halide_hexagon_add_2mpy(Int(16, 0),  ".vub.vub.b.b", wild_u8x, wild_u8x, wild_i8, wild_i8), Pattern::ReinterleaveOp0 },
Pattern           600 src/HexagonOptimize.cpp             { "halide.hexagon.acc_add_2mpy.vw.vh.vh.b.b",   wild_i32x + halide_hexagon_add_2mpy(Int(32, 0),  ".vh.vh.b.b", wild_i16x, wild_i16x, wild_i8, wild_i8), Pattern::ReinterleaveOp0 },
Pattern           611 src/HexagonOptimize.cpp             { "halide.hexagon.add_vuh.vub.vub", wild_u16x + wild_u16x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           612 src/HexagonOptimize.cpp             { "halide.hexagon.add_vuw.vuh.vuh", wild_u32x + wild_u32x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           613 src/HexagonOptimize.cpp             { "halide.hexagon.add_vw.vh.vh", wild_i32x + wild_i32x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           616 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vuh.vub.ub", wild_u16x + wild_u16x*bc(wild_u16), Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 },
Pattern           617 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vh.vub.b",   wild_i16x + wild_i16x*bc(wild_i16), Pattern::ReinterleaveOp0 | Pattern::NarrowUnsignedOp1 | Pattern::NarrowOp2 },
Pattern           618 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vuw.vuh.uh", wild_u32x + wild_u32x*bc(wild_u32), Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 },
Pattern           619 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vuh.vub.ub", wild_u16x + bc(wild_u16)*wild_u16x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 | Pattern::SwapOps12 },
Pattern           620 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vh.vub.b",   wild_i16x + bc(wild_i16)*wild_i16x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowUnsignedOp2 | Pattern::SwapOps12 },
Pattern           621 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vuw.vuh.uh", wild_u32x + bc(wild_u32)*wild_u32x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 | Pattern::SwapOps12 },
Pattern           628 src/HexagonOptimize.cpp             { "halide.hexagon.satw_add_mpy.vw.vh.h", wild_i32x + wild_i32x*bc(wild_i32), Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 },
Pattern           629 src/HexagonOptimize.cpp             { "halide.hexagon.satw_add_mpy.vw.vh.h", wild_i32x + bc(wild_i32)*wild_i32x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 | Pattern::SwapOps12 },
Pattern           632 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vuh.vub.vub", wild_u16x + wild_u16x*wild_u16x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 },
Pattern           633 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vuw.vuh.vuh", wild_u32x + wild_u32x*wild_u32x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 },
Pattern           634 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vh.vb.vb",    wild_i16x + wild_i16x*wild_i16x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 },
Pattern           635 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vw.vh.vh",    wild_i32x + wild_i32x*wild_i32x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowOp2 },
Pattern           637 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vh.vub.vb",   wild_i16x + wild_i16x*wild_i16x, Pattern::ReinterleaveOp0 | Pattern::NarrowUnsignedOp1 | Pattern::NarrowOp2 },
Pattern           638 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vw.vh.vuh",   wild_i32x + wild_i32x*wild_i32x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowUnsignedOp2 },
Pattern           639 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vh.vub.vb",   wild_i16x + wild_i16x*wild_i16x, Pattern::ReinterleaveOp0 | Pattern::NarrowOp1 | Pattern::NarrowUnsignedOp2 | Pattern::SwapOps12 },
Pattern           640 src/HexagonOptimize.cpp             { "halide.hexagon.add_mpy.vw.vh.vuh",   wild_i32x + wild_i32x*wild_i32x, Pattern::ReinterleaveOp0 | Pattern::NarrowUnsignedOp1 | Pattern::NarrowOp2 | Pattern::SwapOps12 },
Pattern           646 src/HexagonOptimize.cpp             { "halide.hexagon.add_shr.vw.vw.w", wild_i32x + (wild_i32x/bc(wild_i32)), Pattern::ExactLog2Op2 },
Pattern           647 src/HexagonOptimize.cpp             { "halide.hexagon.add_shl.vw.vw.w", wild_i32x + (wild_i32x*bc(wild_i32)), Pattern::ExactLog2Op2 },
Pattern           648 src/HexagonOptimize.cpp             { "halide.hexagon.add_shl.vw.vw.w", wild_u32x + (wild_u32x*bc(wild_u32)), Pattern::ExactLog2Op2 },
Pattern           649 src/HexagonOptimize.cpp             { "halide.hexagon.add_shl.vw.vw.w", wild_i32x + (bc(wild_i32)*wild_i32x), Pattern::ExactLog2Op1 | Pattern::SwapOps12 },
Pattern           650 src/HexagonOptimize.cpp             { "halide.hexagon.add_shl.vw.vw.w", wild_u32x + (bc(wild_u32)*wild_u32x), Pattern::ExactLog2Op1 | Pattern::SwapOps12 },
Pattern           653 src/HexagonOptimize.cpp             { "halide.hexagon.add_mul.vh.vh.b", wild_i16x + wild_i16x*bc(wild_i16), Pattern::NarrowOp2 },
Pattern           654 src/HexagonOptimize.cpp             { "halide.hexagon.add_mul.vw.vw.h", wild_i32x + wild_i32x*bc(wild_i32), Pattern::NarrowOp2 },
Pattern           655 src/HexagonOptimize.cpp             { "halide.hexagon.add_mul.vh.vh.b", wild_i16x + bc(wild_i16)*wild_i16x, Pattern::NarrowOp1 | Pattern::SwapOps12 },
Pattern           656 src/HexagonOptimize.cpp             { "halide.hexagon.add_mul.vw.vw.h", wild_i32x + bc(wild_i32)*wild_i32x, Pattern::NarrowOp1 | Pattern::SwapOps12 },
Pattern           681 src/HexagonOptimize.cpp                 static const vector<Pattern> subs = {
Pattern           684 src/HexagonOptimize.cpp                     { "halide.hexagon.sub_vuh.vub.vub", wild_u16x - wild_u16x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           685 src/HexagonOptimize.cpp                     { "halide.hexagon.sub_vuw.vuh.vuh", wild_u32x - wild_u32x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           686 src/HexagonOptimize.cpp                     { "halide.hexagon.sub_vw.vh.vh", wild_i32x - wild_i32x, Pattern::InterleaveResult | Pattern::NarrowOps },
Pattern           722 src/HexagonOptimize.cpp         static const vector<Pattern> casts = {
Pattern           724 src/HexagonOptimize.cpp             { "halide.hexagon.avg.vub.vub", u8((wild_u16x + wild_u16x)/2), Pattern::NarrowOps },
Pattern           725 src/HexagonOptimize.cpp             { "halide.hexagon.avg.vuh.vuh", u16((wild_u32x + wild_u32x)/2), Pattern::NarrowOps },
Pattern           726 src/HexagonOptimize.cpp             { "halide.hexagon.avg.vh.vh", i16((wild_i32x + wild_i32x)/2), Pattern::NarrowOps },
Pattern           727 src/HexagonOptimize.cpp             { "halide.hexagon.avg.vw.vw", i32((wild_i64x + wild_i64x)/2), Pattern::NarrowOps },
Pattern           729 src/HexagonOptimize.cpp             { "halide.hexagon.avg_rnd.vub.vub", u8((wild_u16x + wild_u16x + 1)/2), Pattern::NarrowOps },
Pattern           730 src/HexagonOptimize.cpp             { "halide.hexagon.avg_rnd.vuh.vuh", u16((wild_u32x + wild_u32x + 1)/2), Pattern::NarrowOps },
Pattern           731 src/HexagonOptimize.cpp             { "halide.hexagon.avg_rnd.vh.vh", i16((wild_i32x + wild_i32x + 1)/2), Pattern::NarrowOps },
Pattern           732 src/HexagonOptimize.cpp             { "halide.hexagon.avg_rnd.vw.vw", i32((wild_i64x + wild_i64x + 1)/2), Pattern::NarrowOps },
Pattern           734 src/HexagonOptimize.cpp             { "halide.hexagon.navg.vub.vub", i8_sat((wild_i16x - wild_i16x)/2), Pattern::NarrowUnsignedOps },
Pattern           735 src/HexagonOptimize.cpp             { "halide.hexagon.navg.vh.vh", i16_sat((wild_i32x - wild_i32x)/2), Pattern::NarrowOps },
Pattern           736 src/HexagonOptimize.cpp             { "halide.hexagon.navg.vw.vw", i32_sat((wild_i64x - wild_i64x)/2), Pattern::NarrowOps },
Pattern           740 src/HexagonOptimize.cpp             { "halide.hexagon.satub_add.vub.vub", u8_sat(wild_u16x + wild_u16x), Pattern::NarrowOps },
Pattern           741 src/HexagonOptimize.cpp             { "halide.hexagon.satuh_add.vuh.vuh", u16_sat(wild_u32x + wild_u32x), Pattern::NarrowOps },
Pattern           742 src/HexagonOptimize.cpp             { "halide.hexagon.satuw_add.vuw.vuw", u32_sat(wild_u64x + wild_u64x), Pattern::NarrowOps | Pattern::v62 },
Pattern           743 src/HexagonOptimize.cpp             { "halide.hexagon.sath_add.vh.vh", i16_sat(wild_i32x + wild_i32x), Pattern::NarrowOps },
Pattern           744 src/HexagonOptimize.cpp             { "halide.hexagon.satw_add.vw.vw", i32_sat(wild_i64x + wild_i64x), Pattern::NarrowOps },
Pattern           746 src/HexagonOptimize.cpp             { "halide.hexagon.satub_sub.vub.vub", u8_sat(wild_i16x - wild_i16x), Pattern::NarrowUnsignedOps },
Pattern           747 src/HexagonOptimize.cpp             { "halide.hexagon.satuh_sub.vuh.vuh", u16_sat(wild_i32x - wild_i32x), Pattern::NarrowUnsignedOps },
Pattern           748 src/HexagonOptimize.cpp             { "halide.hexagon.sath_sub.vh.vh", i16_sat(wild_i32x - wild_i32x), Pattern::NarrowOps },
Pattern           749 src/HexagonOptimize.cpp             { "halide.hexagon.satw_sub.vw.vw", i32_sat(wild_i64x - wild_i64x), Pattern::NarrowOps },
Pattern           752 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satub_rnd.vh", u8_sat((wild_i32x + 128)/256), Pattern::DeinterleaveOp0 | Pattern::NarrowOp0 },
Pattern           753 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satb_rnd.vh",  i8_sat((wild_i32x + 128)/256), Pattern::DeinterleaveOp0 | Pattern::NarrowOp0 },
Pattern           754 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satuh_rnd.vw", u16_sat((wild_i64x + 32768)/65536), Pattern::DeinterleaveOp0 | Pattern::NarrowOp0 },
Pattern           755 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_sath_rnd.vw",  i16_sat((wild_i64x + 32768)/65536), Pattern::DeinterleaveOp0 | Pattern::NarrowOp0 },
Pattern           758 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_mpy.vw.vw", i32((wild_i64x*wild_i64x)/Expr(static_cast<int64_t>(1) << 32)), Pattern::NarrowOps },
Pattern           761 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satw_mpy2.vh.h", i16_sat((wild_i32x*bc(wild_i32))/32768), Pattern::NarrowOps },
Pattern           762 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satw_mpy2.vh.h", i16_sat((bc(wild_i32)*wild_i32x)/32768), Pattern::NarrowOps | Pattern::SwapOps01 },
Pattern           763 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satw_mpy2_rnd.vh.h", i16_sat((wild_i32x*bc(wild_i32) + 16384)/32768), Pattern::NarrowOps },
Pattern           764 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satw_mpy2_rnd.vh.h", i16_sat((bc(wild_i32)*wild_i32x + 16384)/32768), Pattern::NarrowOps | Pattern::SwapOps01 },
Pattern           767 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satw_mpy2_rnd.vh.vh", i16_sat((wild_i32x*wild_i32x + 16384)/32768), Pattern::NarrowOps },
Pattern           768 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satdw_mpy2.vw.vw", i32_sat((wild_i64x*wild_i64x)/Expr(static_cast<int64_t>(1) << 31)), Pattern::NarrowOps },
Pattern           769 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satdw_mpy2_rnd.vw.vw", i32_sat((wild_i64x*wild_i64x + (1 << 30))/Expr(static_cast<int64_t>(1) << 31)), Pattern::NarrowOps },
Pattern           772 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satub_shr.vh.h", u8_sat(wild_i16x >> wild_i16), Pattern::DeinterleaveOp0 },
Pattern           773 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satuh_shr.vw.w", u16_sat(wild_i32x >> wild_i32), Pattern::DeinterleaveOp0 },
Pattern           774 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_sath_shr.vw.w",  i16_sat(wild_i32x >> wild_i32), Pattern::DeinterleaveOp0 },
Pattern           775 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satub_shr.vh.h", u8_sat(wild_i16x/wild_i16), Pattern::DeinterleaveOp0 | Pattern::ExactLog2Op1 },
Pattern           776 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satuh_shr.vw.w", u16_sat(wild_i32x/wild_i32), Pattern::DeinterleaveOp0 | Pattern::ExactLog2Op1 },
Pattern           777 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_sath_shr.vw.w",  i16_sat(wild_i32x/wild_i32), Pattern::DeinterleaveOp0 | Pattern::ExactLog2Op1 },
Pattern           792 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_satuh.vuw", u16_sat(wild_u32x), Pattern::DeinterleaveOp0 | Pattern::v62 },
Pattern           805 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_shr.vw.w",  i16(wild_i32x >> wild_i32), Pattern::DeinterleaveOp0 },
Pattern           806 src/HexagonOptimize.cpp             { "halide.hexagon.trunc_shr.vw.w",  i16(wild_i32x/wild_i32), Pattern::DeinterleaveOp0 | Pattern::ExactLog2Op1 },
Pattern           819 src/HexagonOptimize.cpp             { "halide.hexagon.zxt.vub", u16(wild_u8x), Pattern::InterleaveResult },
Pattern           820 src/HexagonOptimize.cpp             { "halide.hexagon.zxt.vub", i16(wild_u8x), Pattern::InterleaveResult },
Pattern           821 src/HexagonOptimize.cpp             { "halide.hexagon.zxt.vuh", u32(wild_u16x), Pattern::InterleaveResult },
Pattern           822 src/HexagonOptimize.cpp             { "halide.hexagon.zxt.vuh", i32(wild_u16x), Pattern::InterleaveResult },
Pattern           823 src/HexagonOptimize.cpp             { "halide.hexagon.sxt.vb", u16(wild_i8x), Pattern::InterleaveResult },
Pattern           824 src/HexagonOptimize.cpp             { "halide.hexagon.sxt.vb", i16(wild_i8x), Pattern::InterleaveResult },
Pattern           825 src/HexagonOptimize.cpp             { "halide.hexagon.sxt.vh", u32(wild_i16x), Pattern::InterleaveResult },
Pattern           826 src/HexagonOptimize.cpp             { "halide.hexagon.sxt.vh", i32(wild_i16x), Pattern::InterleaveResult },