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);

Reply via email to