LRDE Tiger Compiler
1.34a $Id: 7fef12e1f5fa43449d667a0eec1d837c40fc1202 $
|
#include <jump.hh>
Public Types | |
Kinds of Tree nodes. | |
enum | kind_tree_type { const_kind, name_kind, temp_kind, binop_kind, mem_kind, call_kind, eseq_kind, move_kind, sxp_kind, jump_kind, cjump_kind, seq_kind, label_kind } |
The kinds of Tree instuctions. More... |
Public Member Functions | |
Jump (const rExp &exp) | |
void | child_push_back (const rTree &tree) |
tree_list_type & | children_get () |
const tree_list_type & | children_get () const |
rTree & | child_get (int nth) |
rTree | child_get (int nth) const |
rTree & | left_get () |
rTree & | right_get () |
void | parent_get_assert () const |
Tree * | parent_get () |
const Tree * | parent_get () const |
void | parent_set (Tree *parent) |
void | replace_by (const rTree &tree) |
virtual std::ostream & | dump (std::ostream &o) const |
Report this instruction on o. | |
temp::Temp & | asm_get () |
void | asm_set (const temp::Temp &temp) |
void * | state_get () const |
void *& | state_get () |
bool | reducible_get () const |
void | reducible_set (bool b) |
Accessors. | |
rExp | exp_get () const |
The destination. | |
temp::label_list_type | label_get () const |
The list of destination labels. | |
virtual kind_tree_type | kind_get () const override |
jump_kind. | |
Printing. | |
virtual std::ostream & | tag_print (std::ostream &ostr) const override |
Print JUMP. |
Protected Attributes | |
tree_list_type | children_ |
The arguments. | |
Tree * | parent_ = nullptr |
The Tree instruction this is a child from. | |
temp::Temp * | temp_ = nullptr |
The Temp for asm output. | |
void * | state_ = nullptr |
The state for asm output. | |
bool | reducible_ = true |
Tell if the tree is reducible. |
Inconditional branching.
Our tree::Jump instruction is simpler than Appel's, which requires a list of all the possible destinations (for later dataflow analysis). Our implementation assumes the expression used as a destination is always a tree::Name. Therefore, tree::Name::label_get always returns a singleton list.
|
inherited |
The kinds of Tree instuctions.
These flags are used to facilitate the pattern matching during instruction selection. This method is not very clean nevertheless this way is cleaner and more efficient than the use of dynamic_cast<>().
|
inline |
References tree::Tree::child_push_back().
|
inlineinherited |
References tree::Tree::temp_.
|
inlineinherited |
References tree::Tree::temp_.
|
inlineinherited |
References tree::Tree::children_, and postcondition.
Referenced by tree::Move::dst_get(), tree::Sxp::exp_get(), exp_get(), tree::Mem::exp_get(), tree::Eseq::exp_get(), tree::Cjump::flip(), tree::Cjump::label_false_get(), label_get(), tree::Cjump::label_true_get(), tree::Binop::left_get(), tree::Cjump::left_get(), tree::Tree::left_get(), tree::Binop::right_get(), tree::Cjump::right_get(), tree::Tree::right_get(), tree::Move::src_get(), and tree::Eseq::stm_get().
|
inlineinherited |
References tree::Tree::children_, and postcondition.
|
inlineinherited |
References tree::Tree::children_.
Referenced by tree::Binop::Binop(), tree::Call::Call(), tree::Cjump::Cjump(), tree::Eseq::Eseq(), Jump(), tree::Mem::Mem(), tree::Move::Move(), tree::Seq::push_back(), and tree::Sxp::Sxp().
|
inlineinherited |
References tree::Tree::children_.
Referenced by canon::Canon::assemble_stm(), tree::Call::dump(), and tree::Seq::dump().
|
inlineinherited |
References tree::Tree::children_.
|
virtualinherited |
Report this instruction on o.
Reimplemented in tree::Seq, tree::Eseq, and tree::Call.
References tree::Tree::children_, misc::decindent(), misc::incendl(), and tree::Tree::tag_print().
Referenced by tree::operator<<().
|
inline |
The destination.
References tree::Tree::child_get().
|
overridevirtual |
|
inline |
The list of destination labels.
References tree::Tree::child_get().
Referenced by canon::BasicBlock::labels_out_get().
|
inlineinherited |
References tree::Tree::child_get().
|
inlineinherited |
References tree::Tree::parent_.
|
inlineinherited |
References tree::Tree::parent_.
|
inherited |
References misc::decindent(), misc::incendl(), tree::Tree::parent_, and precondition.
Referenced by tree::Tree::replace_by().
|
inlineinherited |
References tree::Tree::parent_.
|
inlineinherited |
References tree::Tree::reducible_.
|
inlineinherited |
References tree::Tree::children_, and tree::Tree::reducible_.
|
inherited |
|
inlineinherited |
References tree::Tree::child_get().
|
inlineinherited |
References tree::Tree::state_.
|
inlineinherited |
References tree::Tree::state_.
|
overridevirtual |
Print JUMP.
Implements tree::Tree.
|
protectedinherited |
|
protectedinherited |
The Tree instruction this is a child from.
Referenced by tree::Tree::parent_get(), tree::Tree::parent_get_assert(), tree::Tree::parent_set(), and tree::Tree::replace_by().
|
protectedinherited |
Tell if the tree is reducible.
Referenced by tree::Tree::reducible_get(), and tree::Tree::reducible_set().
|
protectedinherited |
The state for asm output.
Referenced by tree::Tree::state_get().
|
protectedinherited |
The Temp for asm output.
Referenced by tree::Tree::asm_get(), tree::Tree::asm_set(), and tree::Tree::~Tree().