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;
