[phc-internals] [phc commit] r1823 - in branches/dataflow/src: lib optimize optimize/ssa

codesite-noreply at google.com codesite-noreply at google.com
Sun Oct 26 21:21:21 GMT 2008


Author: paul.biggar
Date: Sun Oct 26 14:18:03 2008
New Revision: 1823

Modified:
    branches/dataflow/src/lib/AttrMap.h
    branches/dataflow/src/lib/List.h
    branches/dataflow/src/lib/error.h
    branches/dataflow/src/optimize/Basic_block.cpp
    branches/dataflow/src/optimize/Basic_block.h
    branches/dataflow/src/optimize/CFG.cpp
    branches/dataflow/src/optimize/ssa/Dominance.h

Log:
Convert std::lists to Lists, using the recent change from trunk (not merged  
using svnmerge, but it should be fine).


Modified: branches/dataflow/src/lib/AttrMap.h
==============================================================================
--- branches/dataflow/src/lib/AttrMap.h	(original)
+++ branches/dataflow/src/lib/AttrMap.h	Sun Oct 26 14:18:03 2008
@@ -36,6 +36,7 @@
  public:
  	void erase_with_prefix (std::string key_prefix);

+public:
  	AttrMap* clone();
  	void clone_all_from(AttrMap* other);
  };

Modified: branches/dataflow/src/lib/List.h
==============================================================================
--- branches/dataflow/src/lib/List.h	(original)
+++ branches/dataflow/src/lib/List.h	Sun Oct 26 14:18:03 2008
@@ -12,6 +12,30 @@
  #include "lib/Object.h"
  #include "process_ir/Foreach.h"

+// XXX HACK
+/* The implementation of List requires a clone() method, because it was
+ * originally designed for the maketea derived clone() methods. But we  
want to
+ * use List instead of std::list to make sure garbage collection is used
+ * everywhere.  This "hack" allows us to call Object::clone(), and fail if
+ * clone() is called for classes that don't support it (all other classes).
+ */
+template<Object*>
+Object* phc_clone (Object* object)
+{
+	if (object == NULL)
+		return NULL;
+
+	return object->clone ();
+}
+
+template<typename T>
+T phc_clone (T object)
+{
+	assert (0);
+}
+
+
+
  template<typename _Tp, typename _Alloc = phc_allocator<_Tp> >
  class List : public std::list<_Tp, _Alloc>, virtual public Object
  {
@@ -57,17 +81,14 @@
  	// shallow copy (or call a copy-constructor, which?) if not. I think that
  	// checking for a clonable trait of _Tp might do that (involves adding  
such
  	// a trait to Object, which is OK).
+	//
  	List* clone()
  	{
  		List* result = new List<_Tp, _Alloc>;

-		typename List<_Tp, _Alloc>::const_iterator i;
-		for(i = begin(); i != end(); i++)
+		foreach (_Tp elem, *this)
  		{
-			if(*i)
-				result->push_back((*i)->clone());
-			else
-				result->push_back(NULL);
+			result->push_back (phc_clone (elem));
  		}
  	
  		return result;

Modified: branches/dataflow/src/lib/error.h
==============================================================================
--- branches/dataflow/src/lib/error.h	(original)
+++ branches/dataflow/src/lib/error.h	Sun Oct 26 14:18:03 2008
@@ -9,7 +9,6 @@
  #define PHC_ERROR_H

  #include <stdarg.h>
-#include <stddef.h>

  class String;


Modified: branches/dataflow/src/optimize/Basic_block.cpp
==============================================================================
--- branches/dataflow/src/optimize/Basic_block.cpp	(original)
+++ branches/dataflow/src/optimize/Basic_block.cpp	Sun Oct 26 14:18:03 2008
@@ -18,7 +18,7 @@
  {
  	phi_lhss = new VARIABLE_NAME_list;
  	mus = new VARIABLE_NAME_list;
-	chis = new list<pair<MIR::VARIABLE_NAME*, MIR::VARIABLE_NAME*> >;
+	chis = new List<pair<MIR::VARIABLE_NAME*, MIR::VARIABLE_NAME*> >;
  }

  Branch_block::Branch_block (CFG* cfg, MIR::Branch* b)
@@ -50,10 +50,10 @@
  {
  }

-list<pair<String*,String*> >*
+List<pair<String*,String*> >*
  Basic_block::get_graphviz_properties ()
  {
-	list<pair<String*,String*> >* result = new list<pair<String*,String*> >;
+	List<pair<String*,String*> >* result = new List<pair<String*,String*> >;
  	result->push_back (make_pair (s("shape"), s("box")));
  	return result;
  }
@@ -100,10 +100,10 @@
  	return s(ss.str());
  }

-list<pair<String*,String*> >*
+List<pair<String*,String*> >*
  Branch_block::get_graphviz_properties ()
  {
-	list<pair<String*,String*> >* result =
+	List<pair<String*,String*> >* result =
  		Basic_block::get_graphviz_properties ();

  	result->push_back (make_pair (s("shape"), s("diamond")));
@@ -112,10 +112,10 @@
  }


-list<pair<String*,String_list> >*
+List<pair<String*,String_list> >*
  Basic_block::get_graphviz_bb_properties ()
  {
-	list<pair<String*,String_list> >* result = new  
list<pair<String*,String_list> >;
+	List<pair<String*,String_list> >* result = new  
List<pair<String*,String_list> >;
  //	if (defs)
  //		result->push_back (pair<String*, Set*> (s("defs"), defs));
  //	if (uses)
@@ -125,10 +125,10 @@
  	return result;
  }

-list<pair<String*,String_list> >*
+List<pair<String*,String_list> >*
  Basic_block::get_graphviz_head_properties ()
  {
-	list<pair<String*,String_list> >* result = new  
list<pair<String*,String_list> >;
+	List<pair<String*,String_list> >* result = new  
List<pair<String*,String_list> >;
  	// Phi nodes
  	foreach (VARIABLE_NAME* phi_lhs, *get_phi_lhss ())
  	{
@@ -177,10 +177,10 @@
  	return result;
  }

-list<pair<String*,String_list> >*
+List<pair<String*,String_list> >*
  Basic_block::get_graphviz_tail_properties ()
  {
-	list<pair<String*,String_list> >* result = new  
list<pair<String*,String_list> >;
+	List<pair<String*,String_list> >* result = new  
List<pair<String*,String_list> >;

  	// Add chis:
  	VARIABLE_NAME* lhs;

Modified: branches/dataflow/src/optimize/Basic_block.h
==============================================================================
--- branches/dataflow/src/optimize/Basic_block.h	(original)
+++ branches/dataflow/src/optimize/Basic_block.h	Sun Oct 26 14:18:03 2008
@@ -36,12 +36,12 @@

  	// Override if there are extra properties for this block.
  	// Returns a list of (name,value) pairs
-	virtual std::list<std::pair<String*,String*> >* get_graphviz_properties  
();
+	virtual List<std::pair<String*,String*> >* get_graphviz_properties ();

  	// Returns a list of (name, list[values]) pairs
-	virtual std::list<std::pair<String*,String_list> >*  
get_graphviz_bb_properties ();
-	virtual std::list<std::pair<String*,String_list> >*  
get_graphviz_head_properties ();
-	virtual std::list<std::pair<String*,String_list> >*  
get_graphviz_tail_properties ();
+	virtual List<std::pair<String*,String_list> >* get_graphviz_bb_properties  
();
+	virtual List<std::pair<String*,String_list> >*  
get_graphviz_head_properties ();
+	virtual List<std::pair<String*,String_list> >*  
get_graphviz_tail_properties ();

  public:
  	/*
@@ -139,7 +139,7 @@
  	// arguments in edges. Then they can be updated all-at-once.
  	MIR::VARIABLE_NAME_list* phi_lhss;
  	MIR::VARIABLE_NAME_list* mus;
-	std::list<std::pair<MIR::VARIABLE_NAME*, MIR::VARIABLE_NAME*> >* chis;
+	List<std::pair<MIR::VARIABLE_NAME*, MIR::VARIABLE_NAME*> >* chis;

  public:
  	/*
@@ -198,7 +198,7 @@
  	 * Graphviz
  	 */
  	String* get_graphviz_label ();
-	std::list<std::pair<String*,String*> >* get_graphviz_properties ();
+	List<std::pair<String*,String*> >* get_graphviz_properties ();

  	// Assert a block has a two successors, representing true and false
  	// branches, and return the true branch.

Modified: branches/dataflow/src/optimize/CFG.cpp
==============================================================================
--- branches/dataflow/src/optimize/CFG.cpp	(original)
+++ branches/dataflow/src/optimize/CFG.cpp	Sun Oct 26 14:18:03 2008
@@ -290,7 +290,7 @@
  	}

  #define LINE_LENGTH 30
-	static String* unparse_properties (list<pair<String*, String_list> >*  
properties)
+	static String* unparse_properties (List<pair<String*, String_list> >*  
properties)
  	{
  		stringstream ss;
  		pair<String*, String_list> props;

Modified: branches/dataflow/src/optimize/ssa/Dominance.h
==============================================================================
--- branches/dataflow/src/optimize/ssa/Dominance.h	(original)
+++ branches/dataflow/src/optimize/ssa/Dominance.h	Sun Oct 26 14:18:03 2008
@@ -14,10 +14,10 @@
  	// invalidating the dominance information.

  	// Forward dominance frontier
-	Map <vertex_t, std::list<vertex_t> > df;
+	Map <vertex_t, List<vertex_t> > df;

  	// BB -> blocks dominated by BB
-	Map <vertex_t, std::list<vertex_t> > idominated;
+	Map <vertex_t, List<vertex_t> > idominated;

  	// BB -> BB's dominator
  	Map <vertex_t, vertex_t> idominator;


More information about the phc-internals mailing list