blob: f90e1442fca55c1a7ddf255d72e1a939e9d1c40e [file] [log] [blame]
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef IREE_HAL_INTERPRETER_BYTECODE_EXECUTABLE_H_
#define IREE_HAL_INTERPRETER_BYTECODE_EXECUTABLE_H_
#include <vector>
#include "absl/types/span.h"
#include "base/status.h"
#include "hal/allocator.h"
#include "hal/executable.h"
#include "hal/executable_spec.h"
#include "rt/context.h"
#include "rt/instance.h"
#include "rt/module.h"
namespace iree {
namespace hal {
class BytecodeExecutable final : public Executable {
public:
static StatusOr<ref_ptr<BytecodeExecutable>> Load(
ref_ptr<rt::Instance> instance, hal::Allocator* allocator,
ExecutableSpec spec, bool allow_aliasing_data);
BytecodeExecutable(ref_ptr<rt::Instance> instance, hal::Allocator* allocator,
ExecutableSpec spec, bool allow_aliasing_data);
~BytecodeExecutable() override;
bool supports_debugging() const override { return false; }
// Reference to the bytecode blob contents.
absl::Span<const uint8_t> executable_data() const {
return spec_.executable_data;
}
// VM context with the executable registered.
const ref_ptr<rt::Context>& context() const { return context_; }
// VM module representing the executable.
// Note that there may be more than one module in the Context and only this
// module can be used to lookup executable exports.
const ref_ptr<rt::Module>& module() const { return module_; }
private:
ExecutableSpec spec_;
std::vector<uint8_t> cloned_executable_data_;
ref_ptr<rt::Context> context_;
ref_ptr<rt::Module> module_;
};
} // namespace hal
} // namespace iree
#endif // IREE_HAL_INTERPRETER_BYTECODE_EXECUTABLE_H_