[phc-internals] [phc commit] r1463 - in branches/dataflow: .
src/optimize test/framework
codesite-noreply at google.com
codesite-noreply at google.com
Wed Jul 23 16:14:47 IST 2008
Author: paul.biggar
Date: Wed Jul 23 08:13:01 2008
New Revision: 1463
Added:
branches/dataflow/src/optimize/Backwards_flow_visitor.cpp
branches/dataflow/src/optimize/Backwards_flow_visitor.h
Modified:
branches/dataflow/Makefile.am
branches/dataflow/Makefile.in
branches/dataflow/src/optimize/Basic_block.cpp
branches/dataflow/src/optimize/Basic_block.h
branches/dataflow/src/optimize/CFG.cpp
branches/dataflow/src/optimize/CFG.h
branches/dataflow/src/optimize/Live_variable_analysis.cpp
branches/dataflow/src/optimize/Live_variable_analysis.h
branches/dataflow/test/framework/compile_optimized.php
Log:
Add Backwards_flow_visitor, which is intended to be the base class for
liveness and other backwards-flow problems. It doesn't work yet, but it
compiles, which is good enough for now.
Modified: branches/dataflow/Makefile.am
==============================================================================
--- branches/dataflow/Makefile.am (original)
+++ branches/dataflow/Makefile.am Wed Jul 23 08:13:01 2008
@@ -40,8 +40,6 @@
# and we dont want this feature anyway
src_phc_LDADD = @gc_lib@ $(LIBLTDL) libphc.la
-src_phc_DEPENDENCIES = $(LIBLTDL)
-
bin_SCRIPTS = src/phc_compile_plugin
libexec_SCRIPTS = libtool
# pkgdata_DATA = phc-1.0.xsd
@@ -148,10 +146,12 @@
src/lib/Object.h \
src/lib/String.cpp \
src/lib/String.h \
+ src/optimize/Backwards_flow_visitor.cpp \
+ src/optimize/Backwards_flow_visitor.h \
src/optimize/Basic_block.cpp \
src/optimize/Basic_block.h \
- src/optimize/CFG.h \
src/optimize/CFG.cpp \
+ src/optimize/CFG.h \
src/optimize/Copy_propagation.cpp \
src/optimize/Copy_propagation.h \
src/optimize/Dead_code_elimination.cpp \
Modified: branches/dataflow/Makefile.in
==============================================================================
--- branches/dataflow/Makefile.in (original)
+++ branches/dataflow/Makefile.in Wed Jul 23 08:13:01 2008
@@ -98,8 +98,8 @@
MIR_transform.lo MIR_visitor.lo php_parser.tab.lo \
HIR_lower_expr.lo Lower_control_flow.lo AttrMap.lo base64.lo \
Boolean.lo demangle.lo error.lo Integer.lo Object.lo String.lo \
- Basic_block.lo CFG.lo Copy_propagation.lo \
- Dead_code_elimination.lo Fix_point.lo \
+ Backwards_flow_visitor.lo Basic_block.lo CFG.lo \
+ Copy_propagation.lo Dead_code_elimination.lo Fix_point.lo \
Live_variable_analysis.lo Prune_symbol_table.lo \
Use_def_counter.lo Parse_buffer.lo parse.lo PHP_context.lo \
XML_parser.lo Pass_manager.lo Plugin_pass.lo AST_unparser.lo \
@@ -304,6 +304,7 @@
am_src_phc_OBJECTS = phc.$(OBJEXT)
src_phc_OBJECTS = $(am_src_phc_OBJECTS)
am__DEPENDENCIES_1 =
+src_phc_DEPENDENCIES = $(am__DEPENDENCIES_1) libphc.la
src_phc_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
$(src_phc_LDFLAGS) $(LDFLAGS) -o $@
@@ -570,7 +571,6 @@
# We leave out -dlopen" self "-dlopen" since its built-in to later automakes,
# and we dont want this feature anyway
src_phc_LDADD = @gc_lib@ $(LIBLTDL) libphc.la
-src_phc_DEPENDENCIES = $(LIBLTDL)
bin_SCRIPTS = src/phc_compile_plugin
libexec_SCRIPTS = libtool
# pkgdata_DATA = phc-1.0.xsd
@@ -676,10 +676,12 @@
src/lib/Object.h \
src/lib/String.cpp \
src/lib/String.h \
+ src/optimize/Backwards_flow_visitor.cpp \
+ src/optimize/Backwards_flow_visitor.h \
src/optimize/Basic_block.cpp \
src/optimize/Basic_block.h \
- src/optimize/CFG.h \
src/optimize/CFG.cpp \
+ src/optimize/CFG.h \
src/optimize/Copy_propagation.cpp \
src/optimize/Copy_propagation.h \
src/optimize/Dead_code_elimination.cpp \
@@ -1197,6 +1199,7 @@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/AST_unparser.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/AST_visitor.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/AttrMap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Backwards_flow_visitor.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Basic_block.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Boolean.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CFG.Plo at am__quote@
@@ -1655,6 +1658,13 @@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/lib/String.cpp'
object='String.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS)
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES)
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o
String.lo `test -f 'src/lib/String.cpp' || echo '$(srcdir)/'`src/lib/String.cpp
+
+Backwards_flow_visitor.lo: src/optimize/Backwards_flow_visitor.cpp
+ at am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS)
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES)
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT
Backwards_flow_visitor.lo -MD -MP -MF
$(DEPDIR)/Backwards_flow_visitor.Tpo -c -o Backwards_flow_visitor.lo
`test -f 'src/optimize/Backwards_flow_visitor.cpp' || echo '$(srcdir)/'`src/optimize/Backwards_flow_visitor.cpp
+ at am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/Backwards_flow_visitor.Tpo $(DEPDIR)/Backwards_flow_visitor.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@
source='src/optimize/Backwards_flow_visitor.cpp'
object='Backwards_flow_visitor.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS)
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES)
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o
Backwards_flow_visitor.lo `test
-f 'src/optimize/Backwards_flow_visitor.cpp' || echo '$(srcdir)/'`src/optimize/Backwards_flow_visitor.cpp
Basic_block.lo: src/optimize/Basic_block.cpp
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS)
$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES)
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT
Basic_block.lo -MD -MP -MF $(DEPDIR)/Basic_block.Tpo -c -o
Basic_block.lo `test -f 'src/optimize/Basic_block.cpp' || echo '$(srcdir)/'`src/optimize/Basic_block.cpp
Added: branches/dataflow/src/optimize/Backwards_flow_visitor.cpp
==============================================================================
--- (empty file)
+++ branches/dataflow/src/optimize/Backwards_flow_visitor.cpp Wed Jul
23 08:13:01 2008
@@ -0,0 +1,85 @@
+#include "Backwards_flow_visitor.h"
+#include <boost/foreach.hpp>
+#include "MIR.h"
+
+using namespace MIR;
+
+void
+Backwards_flow_visitor::run (CFG* cfg)
+{
+ // Add the exit block the worklist
+ list<Basic_block*> worklist;
+ worklist.push_back (cfg->get_exit_bb ());
+
+ // iterate until the worklist is no more
+ while (not worklist.empty ())
+ {
+ // Process the front block
+ Basic_block* bb = worklist.front ();
+ worklist.pop_front ();
+
+ // if you return true, re-add the node to the worklist.
+ if (bb->process (this))
+ {
+ BOOST_FOREACH (Basic_block* pred, *cfg->get_predecessors (bb))
+ {
+ worklist.push_front (pred);
+ }
+ }
+ }
+}
+
+void
+Backwards_flow_visitor::process_bb (Basic_block* bb)
+{
+ if (Entry_block* eb = dynamic_cast<Entry_block*> (bb))
+ process_entry (eb);
+
+ else if (Empty_block* eb = dynamic_cast<Empty_block*> (bb))
+ process_empty (eb);
+
+ else if (Exit_block* eb = dynamic_cast<Exit_block*> (bb))
+ process_exit (eb);
+
+ else if (Branch_block* brb = dynamic_cast<Branch_block*> (bb))
+ process_branch (brb);
+
+ else if (Statement_block* sb = dynamic_cast<Statement_block*> (bb))
+ {
+ switch (sb->statement->classid ())
+ {
+ case Return::ID:
+ process_return(sb, dyc<Return>(sb->statement));
+ case Static_declaration::ID:
+ process_static_declaration(sb, dyc<Static_declaration>(sb->statement));
+ case Global::ID:
+ process_global(sb, dyc<Global>(sb->statement));
+ case Try::ID:
+ process_try(sb, dyc<Try>(sb->statement));
+ case Throw::ID:
+ process_throw(sb, dyc<Throw>(sb->statement));
+ case Foreach_next::ID:
+ process_foreach_next(sb, dyc<Foreach_next>(sb->statement));
+ case Foreach_reset::ID:
+ process_foreach_reset(sb, dyc<Foreach_reset>(sb->statement));
+ case Foreach_end::ID:
+ process_foreach_end(sb, dyc<Foreach_end>(sb->statement));
+ case Assign_var::ID:
+ process_assign_var(sb, dyc<Assign_var>(sb->statement));
+ case Assign_var_var::ID:
+ process_assign_var_var(sb, dyc<Assign_var_var>(sb->statement));
+ case Assign_array::ID:
+ process_assign_array(sb, dyc<Assign_array>(sb->statement));
+ case Push_array::ID:
+ process_push_array(sb, dyc<Push_array>(sb->statement));
+ case Assign_target::ID:
+ process_assign_target(sb, dyc<Assign_target>(sb->statement));
+ case Eval_expr::ID:
+ process_eval_expr(sb, dyc<Eval_expr>(sb->statement));
+ case Pre_op::ID:
+ process_pre_op(sb, dyc<Pre_op>(sb->statement));
+ default:
+ assert (0);
+ }
+ }
+}
Added: branches/dataflow/src/optimize/Backwards_flow_visitor.h
==============================================================================
--- (empty file)
+++ branches/dataflow/src/optimize/Backwards_flow_visitor.h Wed Jul 23
08:13:01 2008
@@ -0,0 +1,35 @@
+#ifndef PHC_BACKWARDS_FLOW_VISITOR
+#define PHC_BACKWARDS_FLOW_VISITOR
+
+#include "CFG.h"
+#include "Basic_block.h"
+
+class Backwards_flow_visitor
+{
+public:
+ void run (CFG* cfg);
+ void process_bb (Basic_block* bb);
+public:
+ virtual void process_entry (Entry_block*) = 0;
+ virtual void process_empty (Empty_block*) = 0;
+ virtual void process_exit (Exit_block*) = 0;
+ virtual void process_branch (Branch_block*) = 0;
+ virtual void process_return (Statement_block* sb, MIR::Return*) = 0;
+ virtual void process_static_declaration (Statement_block* sb,
MIR::Static_declaration*) = 0;
+ virtual void process_global (Statement_block* sb, MIR::Global*) = 0;
+ virtual void process_try (Statement_block* sb, MIR::Try*) = 0;
+ virtual void process_throw (Statement_block* sb, MIR::Throw*) = 0;
+ virtual void process_foreach_next (Statement_block* sb,
MIR::Foreach_next*) = 0;
+ virtual void process_foreach_reset (Statement_block* sb,
MIR::Foreach_reset*) = 0;
+ virtual void process_foreach_end (Statement_block* sb,
MIR::Foreach_end*) = 0;
+ virtual void process_assign_var (Statement_block* sb,
MIR::Assign_var*) = 0;
+ virtual void process_assign_var_var (Statement_block* sb,
MIR::Assign_var_var*) = 0;
+ virtual void process_assign_array (Statement_block* sb,
MIR::Assign_array*) = 0;
+ virtual void process_push_array (Statement_block* sb,
MIR::Push_array*) = 0;
+ virtual void process_assign_target (Statement_block* sb,
MIR::Assign_target*) = 0;
+ virtual void process_eval_expr (Statement_block* sb, MIR::Eval_expr*)
= 0;
+ virtual void process_pre_op (Statement_block* sb, MIR::Pre_op*) = 0;
+};
+
+
+#endif // PHC_BACKWARDS_FLOW_VISITOR
Modified: branches/dataflow/src/optimize/Basic_block.cpp
==============================================================================
--- branches/dataflow/src/optimize/Basic_block.cpp (original)
+++ branches/dataflow/src/optimize/Basic_block.cpp Wed Jul 23 08:13:01 2008
@@ -1,4 +1,6 @@
#include "Basic_block.h"
+#include "Backwards_flow_visitor.h"
+#include "process_ir/General.h"
Branch_block::Branch_block (MIR::Branch* b)
: branch (b)
@@ -51,4 +53,22 @@
Branch_block::get_graphviz_properties ()
{
return s("shape=\"rectangle\"");
+}
+
+
+bool
+Basic_block::process (Backwards_flow_visitor* analysis)
+{
+ bool changed;
+
+// old_solution = solution;
+ analysis->process_bb (this);
+
+ // We regard it to be changed the first time its run.
+// if (solution != old_solution || iteration_count == 0)
+// changed = true;
+
+ iteration_count++;
+
+ return changed;
}
Modified: branches/dataflow/src/optimize/Basic_block.h
==============================================================================
--- branches/dataflow/src/optimize/Basic_block.h (original)
+++ branches/dataflow/src/optimize/Basic_block.h Wed Jul 23 08:13:01 2008
@@ -1,7 +1,12 @@
+#ifndef PHC_BASIC_BLOCK
+#define PHC_BASIC_BLOCK
+
#include <boost/graph/properties.hpp>
#include "MIR.h"
-#include "process_ir/General.h"
+#include "CFG.h"
+
+class Backwards_flow_visitor;
/* Basic blocks */
class Basic_block
@@ -9,6 +14,7 @@
public:
// Indicate to BGL that this represents a vertex internal property.
typedef boost::vertex_property_tag kind;
+ vertex_t vertex;
// Labels for graphviz
virtual String* get_graphviz_label () = 0;
@@ -16,6 +22,14 @@
// Override if there are extra properties for this block.
virtual String* get_graphviz_properties ();
+ // Process this block using the passed analysis
+ bool process (Backwards_flow_visitor*);
+
+ // Dataflow solution
+public:
+ int iteration_count;
+
+
};
class Entry_block : public Basic_block
@@ -52,4 +66,4 @@
};
-
+#endif // PHC_BASIC_BLOCK
Modified: branches/dataflow/src/optimize/CFG.cpp
==============================================================================
--- branches/dataflow/src/optimize/CFG.cpp (original)
+++ branches/dataflow/src/optimize/CFG.cpp Wed Jul 23 08:13:01 2008
@@ -5,11 +5,12 @@
* Control-flow Graph
*/
-#include "CFG.h"
-#include "process_ir/General.h"
+#include "boost/foreach.hpp"
#include "boost/graph/graphviz.hpp"
+
+#include "CFG.h"
#include "process_ast/DOT_unparser.h"
-#include "boost/foreach.hpp"
+#include "process_ir/General.h"
using namespace boost;
using namespace std;
@@ -19,14 +20,18 @@
: bs()
{
bb = get(vertex_bb_t(), bs);
+
+ // Initialize the entry and exit blocks
+ entry = add_vertex (bs);
+ bb[entry] = new Entry_block;
+
+ exit = add_vertex (bs);
+ bb[exit] = new Exit_block;
}
void
CFG::add_statements (List<Statement*>* statements)
{
- vertex_t entry = add_vertex (bs);
- bb[entry] = new Entry_block;
-
// Keep track of labels, for edges between gotos and branches.
map <string, vertex_t> labels;
@@ -95,9 +100,6 @@
}
}
- vertex_t exit = add_vertex (bs);
- bb[exit] = new Exit_block;
-
assert (use_parent);
add_edge (parent, exit, bs);
@@ -109,6 +111,30 @@
}
}
+
+Basic_block*
+CFG::get_entry_bb ()
+{
+ return bb[entry];
+}
+
+Basic_block*
+CFG::get_exit_bb ()
+{
+ return bb[exit];
+}
+
+list<Basic_block*>*
+CFG::get_predecessors (Basic_block* bb)
+{
+ list<Basic_block*>* result = new list<Basic_block*>;
+
+ assert (0);
+ // TODO
+
+ return result;
+}
+
// Dump to graphviz
struct BB_property_functor
Modified: branches/dataflow/src/optimize/CFG.h
==============================================================================
--- branches/dataflow/src/optimize/CFG.h (original)
+++ branches/dataflow/src/optimize/CFG.h Wed Jul 23 08:13:01 2008
@@ -10,27 +10,24 @@
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
-#include "MIR.h"
-#include "Basic_block.h"
+class Basic_block;
/* Add a property for Basic blocks */
enum vertex_bb_t { vertex_bb };
-// TODO: Remove. If phc is beign used as a library, this isn't very polite,
+// TODO: Remove. If phc is being used as a library, this isn't very polite,
// and could lead to the same problems as monkey-patching in Ruby.
namespace boost {
BOOST_INSTALL_PROPERTY(vertex, bb);
}
-
typedef boost::property<vertex_bb_t, Basic_block*> BB;
-
-/* Internal properties for Graph */
+// Graph Internal properties
typedef boost::property<
- boost::vertex_index_t, int, // required for write_graphwiz
- BB // make BB an internal property
+ boost::vertex_index_t, int, // required for write_graphwiz
+ BB // make Basic_block an internal property
> Vertex_property;
typedef boost::adjacency_list<
@@ -40,10 +37,17 @@
Vertex_property
> Graph;
+
+// Vertex and Edge types
typedef Graph::vertex_descriptor vertex_t;
typedef Graph::edge_descriptor edge_t;
+
+class CFG;
+#include "Basic_block.h"
+#include "MIR.h"
+
/* Boost::Graph is a nice library for graphs, but a little difficult
to use,
* so we don't use it directly. */
class CFG
@@ -51,19 +55,25 @@
public:
// Accessor for bb property. Access using bb[vertex].
boost::property_map<Graph, vertex_bb_t>::type bb;
- static const int DEFAULT_SIZE = 50;
public:
CFG ();
void add_statements (List<MIR::Statement*>* statements);
- void add_block (MIR::Statement* statement);
public:
void dump_graphviz ();
+public:
+ Basic_block* get_entry_bb ();
+ Basic_block* get_exit_bb ();
+ list<Basic_block*>* get_predecessors (Basic_block*);
+ list<Basic_block*>* get_successors (Basic_block*);
+
private:
Graph bs; // backing store
+ vertex_t entry;
+ vertex_t exit;
};
#endif // PHC_CFG
Modified: branches/dataflow/src/optimize/Live_variable_analysis.cpp
==============================================================================
--- branches/dataflow/src/optimize/Live_variable_analysis.cpp (original)
+++ branches/dataflow/src/optimize/Live_variable_analysis.cpp Wed Jul
23 08:13:01 2008
@@ -35,8 +35,84 @@
Method* method = dyc<Method> (*i);
CFG* cfg = new CFG ();
cfg->add_statements (method->statements);
-// cfg->dump_graphviz ();
+ cfg->dump_graphviz ();
}
}
+void
+Live_variable_analysis::process_entry (Entry_block*)
+{
+}
+void
+Live_variable_analysis::process_empty (Empty_block*)
+{
+}
+void
+Live_variable_analysis::process_exit (Exit_block*)
+{
+}
+void
+Live_variable_analysis::process_branch (Branch_block*)
+{
+}
+void
+Live_variable_analysis::process_return (Statement_block* sb, MIR::Return*)
+{
+}
+void
+Live_variable_analysis::process_static_declaration (Statement_block*
sb, MIR::Static_declaration*)
+{
+}
+void
+Live_variable_analysis::process_global (Statement_block* sb, MIR::Global*)
+{
+}
+void
+Live_variable_analysis::process_try (Statement_block* sb, MIR::Try*)
+{
+}
+void
+Live_variable_analysis::process_throw (Statement_block* sb, MIR::Throw*)
+{
+}
+void
+Live_variable_analysis::process_foreach_next (Statement_block* sb, MIR::Foreach_next*)
+{
+}
+void
+Live_variable_analysis::process_foreach_reset (Statement_block* sb, MIR::Foreach_reset*)
+{
+}
+void
+Live_variable_analysis::process_foreach_end (Statement_block* sb, MIR::Foreach_end*)
+{
+}
+void
+Live_variable_analysis::process_assign_var (Statement_block* sb, MIR::Assign_var*)
+{
+}
+void
+Live_variable_analysis::process_assign_var_var (Statement_block* sb, MIR::Assign_var_var*)
+{
+}
+void
+Live_variable_analysis::process_assign_array (Statement_block* sb, MIR::Assign_array*)
+{
+}
+void
+Live_variable_analysis::process_push_array (Statement_block* sb, MIR::Push_array*)
+{
+}
+void
+Live_variable_analysis::process_assign_target (Statement_block* sb, MIR::Assign_target*)
+{
+}
+void
+Live_variable_analysis::process_eval_expr (Statement_block* sb, MIR::Eval_expr*)
+{
+}
+void
+Live_variable_analysis::process_pre_op (Statement_block* sb, MIR::Pre_op*)
+{
+}
Modified: branches/dataflow/src/optimize/Live_variable_analysis.h
==============================================================================
--- branches/dataflow/src/optimize/Live_variable_analysis.h (original)
+++ branches/dataflow/src/optimize/Live_variable_analysis.h Wed Jul 23
08:13:01 2008
@@ -6,13 +6,37 @@
*/
#include "pass_manager/Pass_manager.h"
+#include "Backwards_flow_visitor.h"
-class Live_variable_analysis : public Pass
+#ifndef LIVE_VARIABLE_ANALYSIS
+#define LIVE_VARIABLE_ANALYSIS
+
+class Live_variable_analysis : public Pass, public Backwards_flow_visitor
{
public:
Live_variable_analysis ();
bool pass_is_enabled (Pass_manager* pm);
void run (IR::PHP_script* ir_script, Pass_manager* pm);
+public:
+ void process_entry (Entry_block*);
+ void process_empty (Empty_block*);
+ void process_exit (Exit_block*);
+ void process_branch (Branch_block*);
+ void process_return (Statement_block* sb, MIR::Return*);
+ void process_static_declaration (Statement_block* sb, MIR::Static_declaration*);
+ void process_global (Statement_block* sb, MIR::Global*);
+ void process_try (Statement_block* sb, MIR::Try*);
+ void process_throw (Statement_block* sb, MIR::Throw*);
+ void process_foreach_next (Statement_block* sb, MIR::Foreach_next*);
+ void process_foreach_reset (Statement_block* sb, MIR::Foreach_reset*);
+ void process_foreach_end (Statement_block* sb, MIR::Foreach_end*);
+ void process_assign_var (Statement_block* sb, MIR::Assign_var*);
+ void process_assign_var_var (Statement_block* sb, MIR::Assign_var_var*);
+ void process_assign_array (Statement_block* sb, MIR::Assign_array*);
+ void process_push_array (Statement_block* sb, MIR::Push_array*);
+ void process_assign_target (Statement_block* sb, MIR::Assign_target*);
+ void process_eval_expr (Statement_block* sb, MIR::Eval_expr*);
+ void process_pre_op (Statement_block* sb, MIR::Pre_op*);
};
-
+#endif // LIVE_VARIABLE_ANALYSIS
Modified: branches/dataflow/test/framework/compile_optimized.php
==============================================================================
--- branches/dataflow/test/framework/compile_optimized.php (original)
+++ branches/dataflow/test/framework/compile_optimized.php Wed Jul 23
08:13:01 2008
@@ -20,13 +20,13 @@
function get_phc_command ($subject, $exe_name)
{
global $phc;
- return "$phc -c -O $subject -o $exe_name";
+ return "$phc -c -O0 $subject -o $exe_name";
}
function get_php_command ($subject)
{
global $phc;
- return "$phc -O --dump=sua $subject | ". get_php_command_line ("");
+ return "$phc -O0 --dump=sua $subject | ". get_php_command_line ("");
}
}
More information about the phc-internals
mailing list