LRDE Tiger Compiler  1.34a $Id: 7fef12e1f5fa43449d667a0eec1d837c40fc1202 $
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
tree::Jump Class Reference

#include <jump.hh>

Inheritance diagram for tree::Jump:
Collaboration diagram for tree::Jump:

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_typechildren_get ()
const tree_list_typechildren_get () const
rTree & child_get (int nth)
rTree child_get (int nth) const
rTree & left_get ()
rTree & right_get ()
void parent_get_assert () const
Treeparent_get ()
const Treeparent_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::Tempasm_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.
Treeparent_ = nullptr
 The Tree instruction this is a child from.
temp::Temptemp_ = nullptr
 The Temp for asm output.
void * state_ = nullptr
 The state for asm output.
bool reducible_ = true
 Tell if the tree is reducible.

Detailed Description

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.

Member Enumeration Documentation

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<>().

Enumerator:
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 

Constructor & Destructor Documentation

tree::Jump::Jump ( const rExp &  exp)
inline

Member Function Documentation

temp::Temp & tree::Tree::asm_get ( )
inlineinherited

References tree::Tree::temp_.

void tree::Tree::asm_set ( const temp::Temp temp)
inlineinherited

References tree::Tree::temp_.

rTree tree::Tree::child_get ( int  nth) const
inlineinherited
void tree::Tree::child_push_back ( const rTree &  tree)
inlineinherited
tree_list_type & tree::Tree::children_get ( )
inlineinherited
const tree_list_type & tree::Tree::children_get ( ) const
inlineinherited

References tree::Tree::children_.

std::ostream & tree::Tree::dump ( std::ostream &  o) const
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<<().

rExp tree::Jump::exp_get ( ) const
inline

The destination.

References tree::Tree::child_get().

Tree::kind_tree_type tree::Jump::kind_get ( ) const
overridevirtual

jump_kind.

Implements tree::Tree.

References tree::Tree::jump_kind.

temp::label_list_type tree::Jump::label_get ( ) const
inline

The list of destination labels.

References tree::Tree::child_get().

Referenced by canon::BasicBlock::labels_out_get().

rTree & tree::Tree::left_get ( )
inlineinherited
Tree * tree::Tree::parent_get ( )
inlineinherited

References tree::Tree::parent_.

const Tree * tree::Tree::parent_get ( ) const
inlineinherited

References tree::Tree::parent_.

void tree::Tree::parent_get_assert ( ) const
inherited
void tree::Tree::parent_set ( Tree parent)
inlineinherited

References tree::Tree::parent_.

bool tree::Tree::reducible_get ( ) const
inlineinherited
void tree::Tree::reducible_set ( bool  b)
inlineinherited
void tree::Tree::replace_by ( const rTree &  tree)
inherited
rTree & tree::Tree::right_get ( )
inlineinherited
void * tree::Tree::state_get ( ) const
inlineinherited

References tree::Tree::state_.

void *& tree::Tree::state_get ( )
inlineinherited

References tree::Tree::state_.

std::ostream & tree::Jump::tag_print ( std::ostream &  ostr) const
overridevirtual

Print JUMP.

Implements tree::Tree.

Member Data Documentation

Tree* tree::Tree::parent_ = nullptr
protectedinherited
bool tree::Tree::reducible_ = true
protectedinherited

Tell if the tree is reducible.

Referenced by tree::Tree::reducible_get(), and tree::Tree::reducible_set().

void* tree::Tree::state_ = nullptr
protectedinherited

The state for asm output.

Referenced by tree::Tree::state_get().

temp::Temp* tree::Tree::temp_ = nullptr
protectedinherited

The Temp for asm output.

Referenced by tree::Tree::asm_get(), tree::Tree::asm_set(), and tree::Tree::~Tree().


The documentation for this class was generated from the following files: