ir/basic_block: Add FastDispatchHint to TerminalToString
Use a boost::static_visitor to ensure this is caught at compile-time in the future.
This commit is contained in:
parent
af3614553b
commit
e10985d179
1 changed files with 34 additions and 34 deletions
|
@ -123,40 +123,40 @@ const size_t& Block::CycleCount() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string TerminalToString(const Terminal& terminal_variant) {
|
static std::string TerminalToString(const Terminal& terminal_variant) {
|
||||||
switch (terminal_variant.which()) {
|
struct : boost::static_visitor<std::string> {
|
||||||
case 1: {
|
std::string operator()(const Term::Invalid&) const {
|
||||||
auto terminal = boost::get<IR::Term::Interpret>(terminal_variant);
|
|
||||||
return fmt::format("Interpret{{{}}}", terminal.next);
|
|
||||||
}
|
|
||||||
case 2: {
|
|
||||||
return "ReturnToDispatch{}";
|
|
||||||
}
|
|
||||||
case 3: {
|
|
||||||
auto terminal = boost::get<IR::Term::LinkBlock>(terminal_variant);
|
|
||||||
return fmt::format("LinkBlock{{{}}}", terminal.next);
|
|
||||||
}
|
|
||||||
case 4: {
|
|
||||||
auto terminal = boost::get<IR::Term::LinkBlockFast>(terminal_variant);
|
|
||||||
return fmt::format("LinkBlockFast{{{}}}", terminal.next);
|
|
||||||
}
|
|
||||||
case 5: {
|
|
||||||
return "PopRSBHint{}";
|
|
||||||
}
|
|
||||||
case 6: {
|
|
||||||
auto terminal = boost::get<IR::Term::If>(terminal_variant);
|
|
||||||
return fmt::format("If{{{}, {}, {}}}", A64::CondToString(terminal.if_), TerminalToString(terminal.then_), TerminalToString(terminal.else_));
|
|
||||||
}
|
|
||||||
case 7: {
|
|
||||||
auto terminal = boost::get<IR::Term::CheckBit>(terminal_variant);
|
|
||||||
return fmt::format("CheckBit{{{}, {}}}", TerminalToString(terminal.then_), TerminalToString(terminal.else_));
|
|
||||||
}
|
|
||||||
case 8: {
|
|
||||||
auto terminal = boost::get<IR::Term::CheckHalt>(terminal_variant);
|
|
||||||
return fmt::format("CheckHalt{{{}}}", TerminalToString(terminal.else_));
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return "<invalid terminal>";
|
return "<invalid terminal>";
|
||||||
}
|
}
|
||||||
|
std::string operator()(const Term::Interpret& terminal) const {
|
||||||
|
return fmt::format("Interpret{{{}}}", terminal.next);
|
||||||
|
}
|
||||||
|
std::string operator()(const Term::ReturnToDispatch&) const {
|
||||||
|
return "ReturnToDispatch{}";
|
||||||
|
}
|
||||||
|
std::string operator()(const Term::LinkBlock& terminal) const {
|
||||||
|
return fmt::format("LinkBlock{{{}}}", terminal.next);
|
||||||
|
}
|
||||||
|
std::string operator()(const Term::LinkBlockFast& terminal) const {
|
||||||
|
return fmt::format("LinkBlockFast{{{}}}", terminal.next);
|
||||||
|
}
|
||||||
|
std::string operator()(const Term::PopRSBHint&) const {
|
||||||
|
return "PopRSBHint{}";
|
||||||
|
}
|
||||||
|
std::string operator()(const Term::FastDispatchHint&) const {
|
||||||
|
return "FastDispatchHint{}";
|
||||||
|
}
|
||||||
|
std::string operator()(const Term::If& terminal) const {
|
||||||
|
return fmt::format("If{{{}, {}, {}}}", A64::CondToString(terminal.if_), TerminalToString(terminal.then_), TerminalToString(terminal.else_));
|
||||||
|
}
|
||||||
|
std::string operator()(const Term::CheckBit& terminal) const {
|
||||||
|
return fmt::format("CheckBit{{{}, {}}}", TerminalToString(terminal.then_), TerminalToString(terminal.else_));
|
||||||
|
}
|
||||||
|
std::string operator()(const Term::CheckHalt& terminal) const {
|
||||||
|
return fmt::format("CheckHalt{{{}}}", TerminalToString(terminal.else_));
|
||||||
|
}
|
||||||
|
} visitor;
|
||||||
|
|
||||||
|
return boost::apply_visitor(visitor, terminal_variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string DumpBlock(const IR::Block& block) {
|
std::string DumpBlock(const IR::Block& block) {
|
||||||
|
|
Loading…
Reference in a new issue