Add OpName and debug symbols

This commit is contained in:
ReinUsesLisp 2018-08-31 04:40:15 -03:00
parent abcc20748c
commit acea9030c5
5 changed files with 33 additions and 5 deletions

View file

@ -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);

View file

@ -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
View 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

View file

@ -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

View file

@ -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());