bool is_two(Expr e) { if (const IntImm *int_imm = e.as<IntImm>()) return int_imm->value == 2; if (const FloatImm *float_imm = e.as<FloatImm>()) return float_imm->value == 2.0f; if (const Cast *c = e.as<Cast>()) return is_two(c->value); if (const Broadcast *b = e.as<Broadcast>()) return is_two(b->value); return false; }
bool is_two(const Expr &e) { if (e.type().bits() < 2) return false; if (const IntImm *int_imm = e.as<IntImm>()) return int_imm->value == 2; if (const UIntImm *uint_imm = e.as<UIntImm>()) return uint_imm->value == 2; if (const FloatImm *float_imm = e.as<FloatImm>()) return float_imm->value == 2.0; if (const Cast *c = e.as<Cast>()) return is_two(c->value); if (const Broadcast *b = e.as<Broadcast>()) return is_two(b->value); return false; }