This is an automated email from the ASF dual-hosted git repository.
syfeng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new 68dd534a0a Add registion for the operator asinh, acosh, atanh in llvm
(#17969)
68dd534a0a is described below
commit 68dd534a0ab57dcee3ca1c0759da38cb2fc68b29
Author: Qingchao Shen <[email protected]>
AuthorDate: Thu May 15 10:55:36 2025 +0800
Add registion for the operator asinh, acosh, atanh in llvm (#17969)
* Update intrin_rule_llvm.cc
* Update intrin_rule_llvm.cc
---
src/target/llvm/intrin_rule_llvm.cc | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/src/target/llvm/intrin_rule_llvm.cc
b/src/target/llvm/intrin_rule_llvm.cc
index 0f05ff8fda..eefa547efd 100644
--- a/src/target/llvm/intrin_rule_llvm.cc
+++ b/src/target/llvm/intrin_rule_llvm.cc
@@ -200,6 +200,38 @@ TVM_REGISTER_OP("tir.atan")
return asin(x / denom);
});
+TVM_REGISTER_OP("tir.asinh")
+ .set_attr<FLegalize>("llvm.FLegalize", [](const PrimExpr& e) -> PrimExpr {
+ using tir::make_const;
+ const tir::CallNode* call = e.as<tir::CallNode>();
+ ICHECK(call != nullptr) << "Invalid call node in asinh legalization";
+ const PrimExpr& x = call->args[0];
+ PrimExpr one = make_const(x.dtype(), 1.0);
+ PrimExpr sqrt_val = sqrt(x * x + one);
+ return log(x + sqrt_val);
+ });
+
+TVM_REGISTER_OP("tir.acosh")
+ .set_attr<FLegalize>("llvm.FLegalize", [](const PrimExpr& e) -> PrimExpr {
+ using tir::make_const;
+ const tir::CallNode* call = e.as<tir::CallNode>();
+ ICHECK(call != nullptr) << "Invalid call node in acosh legalization";
+ const PrimExpr& x = call->args[0];
+ PrimExpr one = make_const(x.dtype(), 1.0);
+ PrimExpr sqrt_val = sqrt(x * x - one);
+ return log(x + sqrt_val);
+ });
+
+TVM_REGISTER_OP("tir.atanh")
+ .set_attr<FLegalize>("llvm.FLegalize", [](const PrimExpr& e) -> PrimExpr {
+ using tir::make_const;
+ const tir::CallNode* call = e.as<tir::CallNode>();
+ ICHECK(call != nullptr) << "Invalid call node in atanh legalization";
+ const PrimExpr& x = call->args[0];
+ PrimExpr one = make_const(x.dtype(), 1.0);
+ return (log(one + x) - log(one - x)) * make_const(x.dtype(), 0.5);
+ });
+
TVM_REGISTER_OP("tir.clz").set_attr<FLegalize>("llvm.FLegalize", [](const
PrimExpr& e) -> PrimExpr {
const tir::CallNode* call = e.as<tir::CallNode>();
ICHECK(call != nullptr);