/*! * \file tl/op/math.cc * \brief Math operations. * */ #include #include #include #include namespace tvm { namespace tl { using namespace tir; PrimExpr pow_of_int_op(PrimExpr args) { const CallNode *call = args.as(); CHECK(call != nullptr); const Array &arg = call->args; ICHECK_EQ(arg.size(), 2); PrimExpr base = arg[0]; PrimExpr exp = arg[1]; String pow_of_int_name = "tl::pow_of_int<" + std::to_string(exp.as()->value) + ">"; return tir::Call(base.dtype(), tir::builtin::call_extern(), {StringImm(pow_of_int_name), base}); } TVM_REGISTER_OP("tl.pow_of_int") .set_num_inputs(2) .set_attr("TCallEffectKind", Integer(CallEffectKind::kPure)) .set_attr("TScriptPrinterName", "pow_of_int") .set_attr("cuda.FLowerIntrinsic", pow_of_int_op); } // namespace tl } // namespace tvm