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 },