1#pragma once
2#include "taichi/util/lang_util.h"
3#include "taichi/aot/graph_data.h"
4#include "taichi/aot/module_loader.h"
5
6namespace taichi::lang {
7namespace llvm_aot {
8
9class KernelImpl : public aot::Kernel {
10 public:
11 explicit KernelImpl(FunctionType fn,
12 LlvmOfflineCache::KernelCacheData &&kernel_data)
13 : kernel_data_(std::move(kernel_data)), fn_(fn) {
14 }
15
16 void launch(RuntimeContext *ctx) override {
17 fn_(*ctx);
18 }
19
20 LlvmOfflineCache::KernelCacheData kernel_data_;
21
22 private:
23 FunctionType fn_;
24};
25
26class FieldImpl : public aot::Field {
27 public:
28 explicit FieldImpl(const LlvmOfflineCache::FieldCacheData &field)
29 : field_(field) {
30 }
31
32 explicit FieldImpl(LlvmOfflineCache::FieldCacheData &&field)
33 : field_(std::move(field)) {
34 }
35
36 LlvmOfflineCache::FieldCacheData get_snode_tree_cache() const {
37 return field_;
38 }
39
40 private:
41 LlvmOfflineCache::FieldCacheData field_;
42};
43
44} // namespace llvm_aot
45} // namespace taichi::lang
46