/*! * \file tl/op/logical.cc * \brief Logical operations. * */ #include #include #include #include namespace tvm { namespace tl { using namespace tir; PrimExpr any_of_op(PrimExpr args) { const CallNode *call = args.as(); CHECK(call != nullptr); const Array &arg = call->args; ICHECK_EQ(arg.size(), 2); PrimExpr buffer_address = arg[0]; PrimExpr elems = arg[1]; return tir::Call(DataType::Bool(), tir::builtin::call_extern(), {StringImm("tl::Any"), buffer_address, elems}); } PrimExpr all_of_op(PrimExpr args) { const CallNode *call = args.as(); CHECK(call != nullptr); const Array &arg = call->args; ICHECK_EQ(arg.size(), 2); PrimExpr buffer_address = arg[0]; PrimExpr elems = arg[1]; return tir::Call(DataType::Bool(), tir::builtin::call_extern(), {StringImm("tl::All"), buffer_address, elems}); } TVM_REGISTER_OP("tl.any_of") .set_num_inputs(1) .set_attr("TCallEffectKind", Integer(CallEffectKind::kPure)) .set_attr("TScriptPrinterName", "any_of") .set_attr("cuda.FLowerIntrinsic", any_of_op); TVM_REGISTER_OP("tl.all_of") .set_num_inputs(1) .set_attr("TCallEffectKind", Integer(CallEffectKind::kPure)) .set_attr("TScriptPrinterName", "all_of") .set_attr("cuda.FLowerIntrinsic", all_of_op); } // namespace tl } // namespace tvm