This is an automated email from the ASF dual-hosted git repository.

tqchen pushed a commit to branch refactor-s1
in repository https://gitbox.apache.org/repos/asf/tvm.git

commit afe55be2164fac1d05372f8e11ff60b3e98bb709
Author: tqchen <[email protected]>
AuthorDate: Mon Apr 14 11:35:45 2025 -0400

    [CODEGEN] handle_byte_offset
---
 src/target/llvm/codegen_cpu.cc  |  4 ++--
 src/target/llvm/codegen_llvm.cc |  4 ++++
 src/target/source/codegen_c.cc  | 11 +++++++++--
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/target/llvm/codegen_cpu.cc b/src/target/llvm/codegen_cpu.cc
index ded7b91566..0bc40a306f 100644
--- a/src/target/llvm/codegen_cpu.cc
+++ b/src/target/llvm/codegen_cpu.cc
@@ -1068,8 +1068,8 @@ llvm::Value* CodeGenCPU::CreateIntrinsic(const CallNode* 
op) {
       // when we set any union value, we need to be careful to
       // clear off the union value to zero if the set size is less than 64 bits
       if (data_layout_->getTypeAllocSize(ref.type) != 8) {
-        llvm::Value* i64_addr = builder_->CreatePointerCast(
-            ref.addr, llvmGetPointerTo(t_int64_, 0));
+        llvm::Value* i64_addr =
+            builder_->CreatePointerCast(ref.addr, llvmGetPointerTo(t_int64_, 
0));
         builder_->CreateStore(ConstInt64(0), i64_addr);
       }
     }
diff --git a/src/target/llvm/codegen_llvm.cc b/src/target/llvm/codegen_llvm.cc
index 5a2fb86311..c2ea454064 100644
--- a/src/target/llvm/codegen_llvm.cc
+++ b/src/target/llvm/codegen_llvm.cc
@@ -1418,6 +1418,10 @@ llvm::Value* CodeGenLLVM::CreateIntrinsic(const 
CallNode* op) {
     return llvm::Constant::getNullValue(t_void_p_);
   } else if (op->op.same_as(builtin::isnullptr())) {
     return builder_->CreateIsNull(MakeValue(op->args[0]));
+  } else if (op->op.same_as(builtin::handle_add_byte_offset())) {
+    llvm::Value* ptr = MakeValue(op->args[0]);
+    llvm::Value* offset = MakeValue(op->args[1]);
+    return builder_->CreateInBoundsGEP(t_int8_, ptr, offset);
   } else if (op->op.same_as(builtin::large_uint_imm())) {
     ICHECK_EQ(op->args.size(), 2U);
     uint64_t low = static_cast<uint64_t>(Downcast<IntImm>(op->args[0])->value);
diff --git a/src/target/source/codegen_c.cc b/src/target/source/codegen_c.cc
index 2d05414f80..db5eaac50b 100644
--- a/src/target/source/codegen_c.cc
+++ b/src/target/source/codegen_c.cc
@@ -321,8 +321,8 @@ std::string CodeGenC::GetStructRef(DataType t, const 
PrimExpr& buffer, const Pri
     this->PrintExpr(buffer, os);
     os << ")[" << index << "].type_index)";
     return os.str();
-   } else if (kind == builtin::kTVMFFIAnyUnionValue) {
-   std::ostringstream os;
+  } else if (kind == builtin::kTVMFFIAnyUnionValue) {
+    std::ostringstream os;
     os << "(((TVMFFIAny*)";
     this->PrintExpr(buffer, os);
     os << ")[" << index << "].";
@@ -693,6 +693,13 @@ void CodeGenC::VisitExpr_(const CallNode* op, 
std::ostream& os) {  // NOLINT(*)
       os << "(";
       this->PrintExpr(op->args[0], os);
       os << " == NULL)";
+    } else if (op->op.same_as(builtin::handle_add_byte_offset())) {
+      ICHECK_EQ(op->args.size(), 2U);
+      os << "((void*)((char*)";
+      this->PrintExpr(op->args[0], os);
+      os << " + ";
+      this->PrintExpr(op->args[1], os);
+      os << "))";
     } else if (op->op.same_as(builtin::reinterpret())) {
       auto target_dtype = op->dtype;
       auto source_dtype = op->args[0]->dtype;

Reply via email to