C-Breeze
C Compiler Infrastructure

[ Project home page]
Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

procedureDB Class Reference

Database of procedures. More...

#include <proceduredb.h>

Inheritance diagram for procedureDB:

Walker List of all members.

Public Types

enum  Order { Preorder, Postorder, Both }
 The order in which AST Nodes should be visited. More...

enum  Depth { Subtree, NodeOnly }
 Which Nodes in the AST tree should be visited. More...


Public Member Functions

 procedureDB ()
 Create a new procedureDB.

 ~procedureDB ()
 Destroy the procedure database.

void build (procNode *root, Linker &linker)
 Build database.

void clear ()
 Clear.

void add_procedure (procNode *proc)
 Add a procedure to the database.

procedureInfolookup (procNode *proc)
 Lookup procedure-specific information.

const procedurecall_stackcallstack () const
 Call stack.

bool is_recursive_call (procedureInfo *callee, int &num_instances)
 Is recursive call?

void setup_analysis ()
 Set up analysis.

procedureInfonext_procedure_on_worklist ()
 Next procedure.

bool is_procedure_on_worklist (procedureInfo *info)
 Is procedure on the worklist?

void add_procedure_to_worklist (procedureInfo *info)
 Add a procedure to the worklist.

void call_to (stmtLocation *callsite, procedureInfo *callee)
 Call a procedure.

void return_from ()
 Return from a procedure.

bool is_visible_to_caller (procedureInfo *info, memoryBlock *block)
 Is variable in the caller's scope.

bool is_visible_to (procedureInfo *info, memoryBlock *block)
 Is variable visible?

stmtLocationcurrent_callsite ()
 Return the current callsite.

procedureInfocurrent_caller ()
 Return the current caller.

void clear_call_stack ()
 Clear the call stack.

void print_call_stack (ostream &out)
 Print call stack.

void progress_meter (ostream &out)
 Progress meter.

void mark_for_reanalysis (procedureInfo *info, stmtLocation *callsite, bool include_self)
 Mark procedure for reanalysis.

void mark_one_for_reanalysis (procedureInfo *info)
 Mark one procedure for reanalysis.

bool is_reanalysis_required (procedureInfo *info)
 Has reanalysis been forced?

void print_leftovers ()
 Print left-overs.

int times_called (procedureInfo *info)
 Times called.

void stats (ostream &out)
 Print some statistics.

int size () const
 Return the number of procedures.

void number_of_procedures (int &total, int &analyzed, int &context_insensitive, int &recursive, int &unanalyzed, int &program_size)
 Get the number of procedures.

Accessors
Methods to get and set fields in the class.

Order order () const
 Return the order in which Nodes of an AST should be visited.

Depth depth () const
 Return which Nodes of an AST should be visited.

"at_" methods
These methods define the functions that should be performed when different classes of Nodes are encountered in the AST. The most specific "at_" method that matches a given Node's class will be called.

virtual void at_node (Node *the_node, Order ord)
virtual void at_unit (unitNode *the_unit, Order ord)
virtual void at_def (defNode *the_def, Order ord)
virtual void at_decl (declNode *the_decl, Order ord)
virtual void at_subdecl (subdeclNode *the_subdecl, Order ord)
virtual void at_proc (procNode *the_proc, Order ord)
virtual void at_type (typeNode *the_type, Order ord)
virtual void at_prim (primNode *the_prim, Order ord)
virtual void at_tdef (tdefNode *the_tdef, Order ord)
virtual void at_ptr (ptrNode *the_ptr, Order ord)
virtual void at_array (arrayNode *the_array, Order ord)
virtual void at_func (funcNode *the_func, Order ord)
virtual void at_sue (sueNode *the_sue, Order ord)
virtual void at_struct (structNode *the_struct, Order ord)
virtual void at_union (unionNode *the_union, Order ord)
virtual void at_enum (enumNode *the_enum, Order ord)
virtual void at_suespec (suespecNode *the_suespec, Order ord)
virtual void at_expr (exprNode *the_expr, Order ord)
virtual void at_index (indexNode *the_index, Order ord)
virtual void at_const (constNode *the_const, Order ord)
virtual void at_id (idNode *the_id, Order ord)
virtual void at_binary (binaryNode *the_binary, Order ord)
virtual void at_unary (unaryNode *the_unary, Order ord)
virtual void at_cast (castNode *the_cast, Order ord)
virtual void at_comma (commaNode *the_comma, Order ord)
virtual void at_ternary (ternaryNode *the_ternary, Order ord)
virtual void at_call (callNode *the_call, Order ord)
virtual void at_initializer (initializerNode *the_initializer, Order ord)
virtual void at_stmt (stmtNode *the_stmt, Order ord)
virtual void at_block (blockNode *the_block, Order ord)
virtual void at_basicblock (basicblockNode *the_basicblock, Order ord)
virtual void at_exprstmt (exprstmtNode *the_exprstmt, Order ord)
virtual void at_target (targetNode *the_target, Order ord)
virtual void at_label (labelNode *the_label, Order ord)
virtual void at_case (caseNode *the_case, Order ord)
virtual void at_selection (selectionNode *the_selection, Order ord)
virtual void at_if (ifNode *the_if, Order ord)
virtual void at_switch (switchNode *the_switch, Order ord)
virtual void at_loop (loopNode *the_loop, Order ord)
virtual void at_while (whileNode *the_while, Order ord)
virtual void at_do (doNode *the_do, Order ord)
virtual void at_for (forNode *the_for, Order ord)
virtual void at_jump (jumpNode *the_jump, Order ord)
virtual void at_goto (gotoNode *the_goto, Order ord)
virtual void at_continue (continueNode *the_continue, Order ord)
virtual void at_break (breakNode *the_break, Order ord)
virtual void at_return (returnNode *the_return, Order ord)
virtual void at_attrib (attribNode *the_attrib, Order ord)
virtual void at_operand (operandNode *the_oper, Order ord)
virtual void at_conditiongoto (conditiongotoNode *the_condgoto, Order ord)
virtual void at_threeAddr (threeAddrNode *the_3addr, Order ord)
virtual void at_text (textNode *the_text, Order ord)

Private Attributes

proc_info_map _procedures
 All procedures.

callGraph_callgraph
 Call graph.

procedureinfo_set _need_reanalysis
 Need reanalysis.

procedureInfo_root
 Root procedure.

procedurecall_stack _callstack
 Call stack.

proc_info_list _worklist
 Procedure worklist.


Detailed Description

Database of procedures.

This class holds all of the procedureInfo instances. It also contains an instance of the Linker class, which connects up declarations across translation units. We also use it to look up procNodes given their declarations.

Definition at line 797 of file proceduredb.h.


Member Enumeration Documentation

enum Walker::Depth [inherited]
 

Which Nodes in the AST tree should be visited.

Enumeration values:
Subtree  The entire AST should be traversed.
NodeOnly  Only the root Node should be visited.

Definition at line 155 of file walker.h.

enum Walker::Order [inherited]
 

The order in which AST Nodes should be visited.

Enumeration values:
Preorder  Nodes should be visited before their children.
Postorder  Nodes should be visited after their children.
Both  Nodes should be visited both before and after their children.

Definition at line 147 of file walker.h.

Referenced by whileNode::walk(), unitNode::walk(), unionNode::walk(), unaryNode::walk(), threeAddrNode::walk(), textNode::walk(), ternaryNode::walk(), tdefNode::walk(), switchNode::walk(), suespecNode::walk(), subdeclNode::walk(), structNode::walk(), returnNode::walk(), ptrNode::walk(), procNode::walk(), primNode::walk(), operandNode::walk(), metastmtNode::walk(), metaexprNode::walk(), labelNode::walk(), initializerNode::walk(), ifNode::walk(), idNode::walk(), gotoNode::walk(), funcNode::walk(), forNode::walk(), exprstmtNode::walk(), enumNode::walk(), doNode::walk(), declNode::walk(), continueNode::walk(), constNode::walk(), conditiongotoNode::walk(), commaNode::walk(), castNode::walk(), caseNode::walk(), callNode::walk(), breakNode::walk(), blockNode::walk(), binaryNode::walk(), basicblockNode::walk(), attribNode::walk(), and arrayNode::walk().


Constructor & Destructor Documentation

procedureDB::procedureDB  
 

Create a new procedureDB.

The constructor does not create the database

Definition at line 44 of file proceduredb.cc.

procedureDB::~procedureDB  
 

Destroy the procedure database.

Definition at line 54 of file proceduredb.cc.

References clear().


Member Function Documentation

void procedureDB::add_procedure procNode   proc
 

Add a procedure to the database.

Definition at line 149 of file proceduredb.cc.

References _procedures, procNode::decl(), and declNode::name().

Referenced by build().

void procedureDB::add_procedure_to_worklist procedureInfo   info
 

Add a procedure to the worklist.

virtual void Walker::at_array arrayNode   the_array,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, TreeChecker, and print_walker.

Definition at line 254 of file walker.h.

References Walker::at_type().

Referenced by arrayNode::walk().

virtual void Walker::at_attrib attribNode   the_attrib,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, and print_walker.

Definition at line 365 of file walker.h.

References Walker::at_stmt().

Referenced by attribNode::walk().

virtual void Walker::at_basicblock basicblockNode   the_basicblock,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in print_walker, fixPointerWalker, DefUseWalker, LivenessWalker, LivenessComments, reachingGenKillWalker, and reachingDefinitionsWalker.

Definition at line 314 of file walker.h.

References Walker::at_block().

Referenced by basicblockNode::walk().

virtual void Walker::at_binary binaryNode   the_binary,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, gcWalker, id_lookup_walker, TreeChecker, print_walker, and Assignment_walker.

Definition at line 287 of file walker.h.

References Walker::at_expr().

Referenced by binaryNode::walk().

virtual void Walker::at_block blockNode   the_block,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, scope_walker, and print_walker.

Definition at line 311 of file walker.h.

References Walker::at_stmt().

Referenced by Walker::at_basicblock(), and blockNode::walk().

virtual void Walker::at_break breakNode   the_break,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, ref_fix_walker, set_container_walker, TreeChecker, and print_walker.

Definition at line 359 of file walker.h.

References Walker::at_jump().

Referenced by breakNode::walk().

virtual void Walker::at_call callNode   the_call,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in NodeLocator, W, vcgASTWalker, vcgCCGWalker, id_lookup_walker, Linker, ref_fix_walker, TreeChecker, and print_walker.

Definition at line 302 of file walker.h.

References Walker::at_expr().

Referenced by callNode::walk().

virtual void Walker::at_case caseNode   the_case,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, ref_fix_walker, semcheck_walker, set_container_walker, TreeChecker, and print_walker.

Definition at line 326 of file walker.h.

References Walker::at_target().

Referenced by caseNode::walk().

virtual void Walker::at_cast castNode   the_cast,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, TreeChecker, and print_walker.

Definition at line 293 of file walker.h.

References Walker::at_expr().

Referenced by castNode::walk().

virtual void Walker::at_comma commaNode   the_comma,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, TreeChecker, and print_walker.

Definition at line 296 of file walker.h.

References Walker::at_expr().

Referenced by commaNode::walk().

virtual void Walker::at_conditiongoto conditiongotoNode   the_condgoto,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in lir_gen_walker, vcgASTWalker, TreeChecker, print_walker, LivenessWalker, LivenessComments, and findVarAssign.

Definition at line 371 of file walker.h.

References Walker::at_goto().

Referenced by conditiongotoNode::walk().

virtual void Walker::at_const constNode   the_const,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, TreeChecker, print_walker, and count_walker.

Definition at line 281 of file walker.h.

References Walker::at_index().

Referenced by constNode::walk().

virtual void Walker::at_continue continueNode   the_continue,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, ref_fix_walker, set_container_walker, TreeChecker, and print_walker.

Definition at line 356 of file walker.h.

References Walker::at_jump().

Referenced by continueNode::walk().

virtual void Walker::at_decl declNode   the_decl,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in AllocToMemWalker, NodeLocator, W, vcgASTWalker, id_lookup_walker, name_mangle_walker, semcheck_walker, TreeChecker, ProcWalker, print_walker, has_struct_walker, and UnificationBasedPtr.

Definition at line 233 of file walker.h.

References Walker::at_def().

Referenced by Walker::at_subdecl(), and declNode::walk().

virtual void Walker::at_def defNode   the_def,
Order    ord
[inline, virtual, inherited]
 

Definition at line 230 of file walker.h.

References Walker::at_node().

Referenced by Walker::at_decl(), and Walker::at_proc().

virtual void Walker::at_do doNode   the_do,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, and print_walker.

Definition at line 344 of file walker.h.

References Walker::at_loop().

Referenced by doNode::walk().

virtual void Walker::at_enum enumNode   the_enum,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in enum_value_walker.

Definition at line 269 of file walker.h.

References Walker::at_sue().

Referenced by enumNode::walk().

virtual void Walker::at_expr exprNode   the_expr,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in NodeLocator, and remove_stale_type_walker.

Definition at line 275 of file walker.h.

References Walker::at_node().

Referenced by Walker::at_binary(), Walker::at_call(), Walker::at_cast(), Walker::at_comma(), Walker::at_index(), Walker::at_initializer(), Walker::at_operand(), Walker::at_ternary(), Walker::at_unary(), and metaexprNode::walk().

virtual void Walker::at_exprstmt exprstmtNode   the_exprstmt,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, semcheck_walker, and print_walker.

Definition at line 317 of file walker.h.

References Walker::at_stmt().

Referenced by exprstmtNode::walk().

virtual void Walker::at_for forNode   the_for,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, semcheck_walker, TreeChecker, and print_walker.

Definition at line 347 of file walker.h.

References Walker::at_loop().

Referenced by forNode::walk().

virtual void Walker::at_func funcNode   the_func,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, scope_walker, TreeChecker, print_walker, and has_struct_walker.

Definition at line 257 of file walker.h.

References Walker::at_type().

Referenced by funcNode::walk().

virtual void Walker::at_goto gotoNode   the_goto,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in lir_gen_walker, vcgASTWalker, goto_label_walker, fix_goto_walker, ref_fix_walker, TreeChecker, ProcWalker, and print_walker.

Definition at line 353 of file walker.h.

References Walker::at_jump().

Referenced by Walker::at_conditiongoto(), and gotoNode::walk().

virtual void Walker::at_id idNode   the_id,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, callGraph, RequiresGatherer, clear_ids_walker, id_lookup_walker, Linker, name_mangle_walker, ref_fix_walker, TreeChecker, print_walker, renumber_walker, and count_walker.

Definition at line 284 of file walker.h.

References Walker::at_index().

Referenced by idNode::walk().

virtual void Walker::at_if ifNode   the_if,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, TreeChecker, and print_walker.

Definition at line 332 of file walker.h.

References Walker::at_selection().

Referenced by ifNode::walk().

virtual void Walker::at_index indexNode   the_index,
Order    ord
[inline, virtual, inherited]
 

Definition at line 278 of file walker.h.

References Walker::at_expr().

Referenced by Walker::at_const(), and Walker::at_id().

virtual void Walker::at_initializer initializerNode   the_initializer,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, TreeChecker, and print_walker.

Definition at line 305 of file walker.h.

References Walker::at_expr().

Referenced by initializerNode::walk().

virtual void Walker::at_jump jumpNode   the_jump,
Order    ord
[inline, virtual, inherited]
 

Definition at line 350 of file walker.h.

References Walker::at_stmt().

Referenced by Walker::at_break(), Walker::at_continue(), Walker::at_goto(), and Walker::at_return().

virtual void Walker::at_label labelNode   the_label,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in lir_gen_walker, vcgASTWalker, goto_label_walker, name_mangle_walker, TreeChecker, ProcWalker, and print_walker.

Definition at line 323 of file walker.h.

References Walker::at_target().

Referenced by labelNode::walk().

virtual void Walker::at_loop loopNode   the_loop,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in semcheck_walker, set_container_walker, TreeChecker, and init_flowproblem_walker.

Definition at line 338 of file walker.h.

References Walker::at_stmt().

Referenced by Walker::at_do(), Walker::at_for(), and Walker::at_while().

virtual void Walker::at_node Node   the_node,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in gcWalker, goto_label_walker, set_container_walker, sue_complete_walker, TreeChecker, and df_number_walker.

Definition at line 223 of file walker.h.

Referenced by Walker::at_def(), Walker::at_expr(), Walker::at_stmt(), Walker::at_text(), Walker::at_type(), and Walker::at_unit().

virtual void Walker::at_operand operandNode   the_oper,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in AllocToMemWalker, vcgASTWalker, TreeChecker, print_walker, and findVarAssign.

Definition at line 368 of file walker.h.

References Walker::at_expr().

Referenced by operandNode::walk().

virtual void Walker::at_prim primNode   the_prim,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, and print_walker.

Definition at line 245 of file walker.h.

References Walker::at_type().

Referenced by primNode::walk().

virtual void Walker::at_proc procNode   the_proc,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in asm_gen_walker, RegAllocWalker, dummy_reg_alloc_walker, lir_flow_walker, lir_gen_walker, W, vcgWalker, vcgASTWalker, vcgCCGWalker, id_lookup_walker, name_mangle_walker, ref_fix_walker, set_container_walker, TreeChecker, UnitWalker, print_walker, unreachableCodeRemover, DefUseWalker, init_flowproblem_walker, LivenessWalker, LivenessComments, reachingGenKillWalker, reachingDefinitionsWalker, and UnificationBasedPtr.

Definition at line 239 of file walker.h.

References Walker::at_def().

Referenced by procNode::walk().

virtual void Walker::at_ptr ptrNode   the_ptr,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, and print_walker.

Definition at line 251 of file walker.h.

References Walker::at_type().

Referenced by ptrNode::walk().

virtual void Walker::at_return returnNode   the_return,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, ref_fix_walker, semcheck_walker, set_container_walker, TreeChecker, print_walker, LivenessWalker, and LivenessComments.

Definition at line 362 of file walker.h.

References Walker::at_jump().

Referenced by returnNode::walk().

virtual void Walker::at_selection selectionNode   the_selection,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in semcheck_walker.

Definition at line 329 of file walker.h.

References Walker::at_stmt().

Referenced by Walker::at_if(), and Walker::at_switch().

virtual void Walker::at_stmt stmtNode   the_stmt,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in NodeLocator, W, init_flowproblem_walker, and LivenessWalker.

Definition at line 308 of file walker.h.

References Walker::at_node().

Referenced by Walker::at_attrib(), Walker::at_block(), Walker::at_exprstmt(), Walker::at_jump(), Walker::at_loop(), Walker::at_selection(), Walker::at_target(), Walker::at_threeAddr(), and metastmtNode::walk().

virtual void Walker::at_struct structNode   the_struct,
Order    ord
[inline, virtual, inherited]
 

Definition at line 263 of file walker.h.

References Walker::at_sue().

Referenced by structNode::walk().

virtual void Walker::at_subdecl subdeclNode   the_subdecl,
Order    ord
[inline, virtual, inherited]
 

Definition at line 236 of file walker.h.

References Walker::at_decl().

Referenced by subdeclNode::walk().

virtual void Walker::at_sue sueNode   the_sue,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, RequiresGatherer, print_walker, and has_struct_walker.

Definition at line 260 of file walker.h.

References Walker::at_type().

Referenced by Walker::at_enum(), Walker::at_struct(), and Walker::at_union().

virtual void Walker::at_suespec suespecNode   the_suespec,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, scope_walker, semcheck_walker, sue_complete_walker, print_walker, and UnificationBasedPtr.

Definition at line 272 of file walker.h.

References Walker::at_type().

Referenced by suespecNode::walk().

virtual void Walker::at_switch switchNode   the_switch,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, set_container_walker, TreeChecker, ProcWalker, print_walker, and init_flowproblem_walker.

Definition at line 335 of file walker.h.

References Walker::at_selection().

Referenced by switchNode::walk().

virtual void Walker::at_target targetNode   the_target,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in init_flowproblem_walker.

Definition at line 320 of file walker.h.

References Walker::at_stmt().

Referenced by Walker::at_case(), and Walker::at_label().

virtual void Walker::at_tdef tdefNode   the_tdef,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, RequiresGatherer, clear_ids_walker, id_lookup_walker, ref_fix_walker, TreeChecker, and print_walker.

Definition at line 248 of file walker.h.

References Walker::at_type().

Referenced by tdefNode::walk().

virtual void Walker::at_ternary ternaryNode   the_ternary,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, TreeChecker, and print_walker.

Definition at line 299 of file walker.h.

References Walker::at_expr().

Referenced by ternaryNode::walk().

virtual void Walker::at_text textNode   the_text,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, and print_walker.

Definition at line 377 of file walker.h.

References Walker::at_node().

Referenced by textNode::walk().

virtual void Walker::at_threeAddr threeAddrNode   the_3addr,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in lir_gen_walker, vcgASTWalker, vcgCCGWalker, identify_inlinees, Linker, TreeChecker, print_walker, GetDefsWalker, LivenessWalker, LivenessComments, GetDefsWalker, findVarAssign, and UnificationBasedPtr.

Definition at line 374 of file walker.h.

References Walker::at_stmt().

Referenced by threeAddrNode::walk().

virtual void Walker::at_type typeNode   the_type,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in W, and TreeChecker.

Definition at line 242 of file walker.h.

References Walker::at_node().

Referenced by Walker::at_array(), Walker::at_func(), Walker::at_prim(), Walker::at_ptr(), Walker::at_sue(), Walker::at_suespec(), and Walker::at_tdef().

virtual void Walker::at_unary unaryNode   the_unary,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, TreeChecker, print_walker, and fixPointerWalker.

Definition at line 290 of file walker.h.

References Walker::at_expr().

Referenced by unaryNode::walk().

virtual void Walker::at_union unionNode   the_union,
Order    ord
[inline, virtual, inherited]
 

Definition at line 266 of file walker.h.

References Walker::at_sue().

Referenced by unionNode::walk().

virtual void Walker::at_unit unitNode   the_unit,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in asm_gen_walker, dummy_reg_alloc_walker, lir_gen_walker, vcgASTWalker, gcWalker, TreeChecker, print_walker, reachingGenKillWalker, and UnificationBasedPtr.

Definition at line 227 of file walker.h.

References Walker::at_node().

Referenced by unitNode::walk().

virtual void Walker::at_while whileNode   the_while,
Order    ord
[inline, virtual, inherited]
 

Reimplemented in vcgASTWalker, and print_walker.

Definition at line 341 of file walker.h.

References Walker::at_loop().

Referenced by whileNode::walk().

void procedureDB::build procNode   root,
Linker   linker
 

Build database.

This method first visits all the procedures currently parsed and builds a procedureInfo object for each. It uses the Linker object, which has already traversed the entire system and fixed the linkages between symbol references and externally defined symbols.

Definition at line 59 of file proceduredb.cc.

References _callgraph, _procedures, _root, procedureInfo::add_ancestor_set(), add_procedure(), callGraphNode::ancestors(), callgraph_node_set, callgraph_node_set_p, procNode::decl(), lookup(), callGraph::lookup(), declNode::name(), callGraphNode::proc(), proc_decl_map, proc_decl_map_cp, proc_info_map_p, procedureinfo_set, Linker::procedures(), procedureInfo::qualified_name(), and procedureInfo::set_recursive().

Referenced by Pointers::analyze().

void procedureDB::call_to stmtLocation   callsite,
procedureInfo   callee
 

Call a procedure.

This method is called when analysis is entering a new procedure. It pushes the procedure on the stack and sets up the procedure for analysis.

Definition at line 218 of file proceduredb.cc.

References _callstack, and procedurecall_pair.

Referenced by Pointers::analyze(), and Pointers::analyze_procedure_at().

const procedurecall_stack& procedureDB::callstack   const [inline]
 

Call stack.

Return a const reference to the call stack.

Definition at line 877 of file proceduredb.h.

References procedurecall_stack.

Referenced by Pointers::nearest_def_at().

void procedureDB::clear  
 

Clear.

Remove all procedureInfo objects and delete them.

Definition at line 130 of file proceduredb.cc.

References _callgraph, _procedures, and proc_info_map_p.

Referenced by ~procedureDB().

void procedureDB::clear_call_stack  
 

Clear the call stack.

WARNING: Only use this routine at the end of an analysis pass.

Definition at line 397 of file proceduredb.cc.

References _callstack, and procedurecall_pair.

procedureInfo * procedureDB::current_caller  
 

Return the current caller.

Return the caller of the current procedure in the call stack.

Definition at line 375 of file proceduredb.cc.

References _callstack.

Referenced by Pointers::pass_external_inputs(), Pointers::pass_parameters(), and Pointers::record_external_inputs_and_outputs().

stmtLocation* procedureDB::current_callsite   [inline]
 

Return the current callsite.

Definition at line 945 of file proceduredb.h.

Referenced by Pointers::record_external_inputs_and_outputs().

Depth Walker::depth   const [inline, inherited]
 

Return which Nodes of an AST should be visited.

A value of SubTree specifies that the entire AST should be traversed. A value of NodeOnly specifies that only the root Node in the AST should be visited.

Definition at line 211 of file walker.h.

Referenced by whileNode::walk(), unitNode::walk(), unionNode::walk(), unaryNode::walk(), threeAddrNode::walk(), ternaryNode::walk(), switchNode::walk(), suespecNode::walk(), subdeclNode::walk(), structNode::walk(), returnNode::walk(), ptrNode::walk(), procNode::walk(), operandNode::walk(), metastmtNode::walk(), metaexprNode::walk(), labelNode::walk(), initializerNode::walk(), ifNode::walk(), idNode::walk(), funcNode::walk(), forNode::walk(), exprstmtNode::walk(), enumNode::walk(), doNode::walk(), declNode::walk(), constNode::walk(), conditiongotoNode::walk(), commaNode::walk(), castNode::walk(), caseNode::walk(), callNode::walk(), blockNode::walk(), binaryNode::walk(), basicblockNode::walk(), attribNode::walk(), arrayNode::walk(), and Walker::Walker().

bool procedureDB::is_procedure_on_worklist procedureInfo   info
 

Is procedure on the worklist?

If so, remove it and return true.

bool procedureDB::is_reanalysis_required procedureInfo   info
 

Has reanalysis been forced?

At a procedure call, check to see if this particular procedure is on the _needs_reanalysis list, indicating that we cannot skip analyzing it, even if the inputs appear not to have changed.

Definition at line 525 of file proceduredb.cc.

References _need_reanalysis, procedureInfo::name(), and procedureinfo_set_p.

Referenced by Pointers::analyze(), and Pointers::analyze_procedure_at().

bool procedureDB::is_recursive_call procedureInfo   callee,
int &    num_instances
 

Is recursive call?

Return true if calling the given procedure would create a recursive cycle in the call stack.

Definition at line 173 of file proceduredb.cc.

References _callstack, procedureInfo::is_recursive(), procedurecall_stack_p, and procedureInfo::set_recursive().

Referenced by Pointers::analyze_procedure_at(), and Pointers::procedure_call().

bool procedureDB::is_visible_to procedureInfo   info,
memoryBlock   block
 

Is variable visible?

Check to see if the given variable could be accessed in the given procedure, or in any of its ancestors in the callgraph. If it is, then we need to pass it as an external output.

Definition at line 336 of file proceduredb.cc.

References procedureInfo::ancestors(), memoryBlock::local_to(), lookup(), procedureInfo::proc(), procedureinfo_set, and procedureinfo_set_cp.

Referenced by Pointers::pass_one_external_output(), and Pointers::record_external_inputs_and_outputs().

bool procedureDB::is_visible_to_caller procedureInfo   info,
memoryBlock   block
 

Is variable in the caller's scope.

Check to see if the variable is visible to procedures earlier in the call stack.

Definition at line 255 of file proceduredb.cc.

References _callstack, memoryBlock::local_to(), lookup(), procedureInfo::proc(), and procedurecall_stack_p.

Referenced by Pointers::pass_one_external_input().

procedureInfo * procedureDB::lookup procNode   proc
 

Lookup procedure-specific information.

Definition at line 159 of file proceduredb.cc.

References _procedures, and proc_info_map_p.

Referenced by Pointers::analyze(), Pointers::analyze_procedure(), build(), mergePoints::find_merge_points(), is_visible_to(), is_visible_to_caller(), Pointers::lookup_procedure(), and Pointers::procedure_call().

void procedureDB::mark_for_reanalysis procedureInfo   info,
stmtLocation   callsite,
bool    include_self
 

Mark procedure for reanalysis.

Record that particular procedure needs to be reanalyzed. Add all of it's ancestors to the list as well to ensure that we actually reach it again. This method does not add the given procedure itself unless the include_self flag is true.

Definition at line 451 of file proceduredb.cc.

References _need_reanalysis, procedureInfo::first_caller(), and procedureInfo::name().

Referenced by Pointers::pass_one_external_output(), and Pointers::process_local_changes().

void procedureDB::mark_one_for_reanalysis procedureInfo   info
 

Mark one procedure for reanalysis.

Add the given procedure to the list of those needing reanalysis.

Definition at line 512 of file proceduredb.cc.

References _need_reanalysis.

procedureInfo* procedureDB::next_procedure_on_worklist  
 

Next procedure.

Grab the next procedure from the work-list.

void procedureDB::number_of_procedures int &    total,
int &    analyzed,
int &    context_insensitive,
int &    recursive,
int &    unanalyzed,
int &    program_size
 

Get the number of procedures.

This version only counts procedures that have been analyzed.

Definition at line 655 of file proceduredb.cc.

References _procedures, procedureInfo::analysis_count(), procedureInfo::is_context_insensitive(), procedureInfo::is_library_routine(), procedureInfo::is_recursive(), proc_info_map_p, and procedureInfo::procedure_size().

Order Walker::order   const [inline, inherited]
 

Return the order in which Nodes of an AST should be visited.

Nodes can be visited before their children (Preorder), after their children (Postorder), or both (Both).

Definition at line 203 of file walker.h.

Referenced by df_number_walker::at_node(), whileNode::walk(), unitNode::walk(), unionNode::walk(), unaryNode::walk(), threeAddrNode::walk(), textNode::walk(), ternaryNode::walk(), tdefNode::walk(), switchNode::walk(), suespecNode::walk(), subdeclNode::walk(), structNode::walk(), returnNode::walk(), ptrNode::walk(), procNode::walk(), primNode::walk(), operandNode::walk(), metastmtNode::walk(), metaexprNode::walk(), labelNode::walk(), initializerNode::walk(), ifNode::walk(), idNode::walk(), gotoNode::walk(), funcNode::walk(), forNode::walk(), exprstmtNode::walk(), enumNode::walk(), doNode::walk(), declNode::walk(), continueNode::walk(), constNode::walk(), conditiongotoNode::walk(), commaNode::walk(), castNode::walk(), caseNode::walk(), callNode::walk(), breakNode::walk(), blockNode::walk(), binaryNode::walk(), basicblockNode::walk(), attribNode::walk(), and arrayNode::walk().

void procedureDB::print_call_stack ostream &    out
 

Print call stack.

Definition at line 408 of file proceduredb.cc.

References _callstack, procedureInfo::name(), stmtLocation::print_callsite(), and procedurecall_stack_p.

Referenced by Pointers::analyze_procedure_at(), Pointers::assignment_operator(), Pointers::merge_operator(), Pointers::record_external_inputs_and_outputs(), and Pointers::self_assignment().

void procedureDB::print_leftovers  
 

Print left-overs.

Definition at line 578 of file proceduredb.cc.

References _need_reanalysis, and procedureinfo_set_p.

Referenced by Pointers::analyze().

void procedureDB::progress_meter ostream &    out
 

Progress meter.

Definition at line 433 of file proceduredb.cc.

References _callstack, procedurecall_stack_p, and procedureInfo::qualified_name().

Referenced by Pointers::progress_meter().

void procedureDB::return_from  
 

Return from a procedure.

This method is called when analysis of a procedure is complete. It just pops the current procedure off the stack.

Definition at line 232 of file proceduredb.cc.

References _callstack.

Referenced by Pointers::analyze(), and Pointers::analyze_procedure_at().

void procedureDB::setup_analysis  
 

Set up analysis.

Add all procedures to the _needs_analysis list.

Definition at line 243 of file proceduredb.cc.

References _need_reanalysis, _procedures, _root, and proc_info_map_p.

Referenced by Pointers::analyze().

int procedureDB::size void    const [inline]
 

Return the number of procedures.

Definition at line 1011 of file proceduredb.h.

void procedureDB::stats ostream &    out
 

Print some statistics.

Definition at line 596 of file proceduredb.cc.

References _procedures, procedureInfo::is_library_routine(), proc_info_map_p, and procedureInfo::stats().

Referenced by Pointers::analyze(), and Pointers::stats().

int procedureDB::times_called procedureInfo   info
 

Times called.

Use the callgraph to estimate the number of paths from main down to the given procedure. We'll use this to decide when to make a procedure context insensitive. The basic heuristic is that if a procedure is small, and called in many places, then leave it context sensitive.

Definition at line 590 of file proceduredb.cc.

References _callgraph, callGraph::lookup(), procedureInfo::proc(), and callGraphNode::times_called().


Member Data Documentation

callGraph* procedureDB::_callgraph [private]
 

Call graph.

Definition at line 809 of file proceduredb.h.

Referenced by build(), clear(), and times_called().

procedurecall_stack procedureDB::_callstack [private]
 

Call stack.

Maintain a call stack during interprocedural analysis. Each entry consists of a callsite and a called procedure.

Definition at line 829 of file proceduredb.h.

Referenced by call_to(), clear_call_stack(), current_caller(), is_recursive_call(), is_visible_to_caller(), print_call_stack(), progress_meter(), and return_from().

procedureinfo_set procedureDB::_need_reanalysis [private]
 

Need reanalysis.

In context-insensitive mode, we may need to revisit procedures because of changes in other calling contexts. Whenever a non-local change occurs, we add the procedure and all of it's ancestors back on this list. This ensures that we will revisit the procedure at some point.

Definition at line 818 of file proceduredb.h.

Referenced by is_reanalysis_required(), mark_for_reanalysis(), mark_one_for_reanalysis(), print_leftovers(), and setup_analysis().

proc_info_map procedureDB::_procedures [private]
 

All procedures.

A mapping from procedure definitions to procedure info objects

Definition at line 805 of file proceduredb.h.

Referenced by add_procedure(), build(), clear(), lookup(), number_of_procedures(), setup_analysis(), and stats().

procedureInfo* procedureDB::_root [private]
 

Root procedure.

Definition at line 822 of file proceduredb.h.

Referenced by build(), and setup_analysis().

proc_info_list procedureDB::_worklist [private]
 

Procedure worklist.

Definition at line 835 of file proceduredb.h.


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

Generated on August 27, 2003
Back to the C-Breeze home page