Add OpName and debug symbols
This commit is contained in:
parent
abcc20748c
commit
acea9030c5
5 changed files with 33 additions and 5 deletions
|
@ -174,6 +174,11 @@ public:
|
||||||
/// Returns with no value from a function with void return type.
|
/// Returns with no value from a function with void return type.
|
||||||
Ref Return();
|
Ref Return();
|
||||||
|
|
||||||
|
// Debug
|
||||||
|
|
||||||
|
/// Assign a name string to a reference.
|
||||||
|
void Name(Ref target, const std::string& name);
|
||||||
|
|
||||||
// Literals
|
// Literals
|
||||||
static Operand* Literal(std::uint32_t value);
|
static Operand* Literal(std::uint32_t value);
|
||||||
static Operand* Literal(std::uint64_t value);
|
static Operand* Literal(std::uint64_t value);
|
||||||
|
|
|
@ -18,6 +18,7 @@ add_library(sirit
|
||||||
insts/constant.cpp
|
insts/constant.cpp
|
||||||
insts/function.cpp
|
insts/function.cpp
|
||||||
insts/flow.cpp
|
insts/flow.cpp
|
||||||
|
insts/debug.cpp
|
||||||
)
|
)
|
||||||
target_include_directories(sirit
|
target_include_directories(sirit
|
||||||
PUBLIC ../include
|
PUBLIC ../include
|
||||||
|
|
19
src/insts/debug.cpp
Normal file
19
src/insts/debug.cpp
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/* This file is part of the sirit project.
|
||||||
|
* Copyright (c) 2018 ReinUsesLisp
|
||||||
|
* This software may be used and distributed according to the terms of the GNU
|
||||||
|
* Lesser General Public License version 2.1 or any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sirit/sirit.h"
|
||||||
|
#include "insts.h"
|
||||||
|
|
||||||
|
namespace Sirit {
|
||||||
|
|
||||||
|
void Module::Name(Ref target, const std::string& name) {
|
||||||
|
Op* op{new Op(spv::Op::OpName)};
|
||||||
|
op->Add(target);
|
||||||
|
op->Add(name);
|
||||||
|
debug.push_back(std::unique_ptr<Op>(op));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Sirit
|
|
@ -53,7 +53,9 @@ std::vector<u8> Module::Assemble() const {
|
||||||
|
|
||||||
// TODO write execution mode
|
// TODO write execution mode
|
||||||
|
|
||||||
// TODO write debug symbols
|
for (const auto& debug_symbol : debug) {
|
||||||
|
debug_symbol->Write(stream);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO write annotations
|
// TODO write annotations
|
||||||
|
|
||||||
|
|
|
@ -51,15 +51,16 @@ public:
|
||||||
Constant(TypeFloat(32), Literal(50.0f))});
|
Constant(TypeFloat(32), Literal(50.0f))});
|
||||||
ConstantNull(TypeVector(TypeInt(64, false), 4));
|
ConstantNull(TypeVector(TypeInt(64, false), 4));
|
||||||
|
|
||||||
|
auto cont{Label()};
|
||||||
auto skip{Label()};
|
auto skip{Label()};
|
||||||
auto end{Label()};
|
Name(skip, "skip");
|
||||||
auto main_type{TypeFunction(TypeVoid())};
|
auto main_type{TypeFunction(TypeVoid())};
|
||||||
auto main_func{Emit(Function(TypeVoid(), spv::FunctionControlMask::MaskNone, main_type))};
|
auto main_func{Emit(Function(TypeVoid(), spv::FunctionControlMask::MaskNone, main_type))};
|
||||||
Emit(Label());
|
Emit(Label());
|
||||||
Emit(BranchConditional(ConstantTrue(TypeBool()), skip, end, 5, 0));
|
Emit(BranchConditional(ConstantTrue(TypeBool()), cont, skip, 5, 0));
|
||||||
|
Emit(cont);
|
||||||
|
Emit(Branch(skip));
|
||||||
Emit(skip);
|
Emit(skip);
|
||||||
Emit(Branch(end));
|
|
||||||
Emit(end);
|
|
||||||
Emit(Return());
|
Emit(Return());
|
||||||
Emit(FunctionEnd());
|
Emit(FunctionEnd());
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue