public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PR debug/41343] introduce debug expr temps
@ 2009-09-22 19:51 Alexandre Oliva
  2009-09-23  8:42 ` Richard Guenther
  0 siblings, 1 reply; 25+ messages in thread
From: Alexandre Oliva @ 2009-09-22 19:51 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 3126 bytes --]

This patch enables VTA to assign debug-only names to expressions
formerly computed at a certain point in the code stream, and then use
these names to replace the removed/modified identifiers, instead of
substituting the identifiers for the assigned expression.

IOW, if we start from:

foo_3 = a_1 + b_2;
...
# DEBUG x => foo_3 + bar_4

if we remove the DEF of foo_3, we should get:

# DEBUG D#1 => a_1 + b_2
...
# DEBUG x => D#1 + bar_4

D# are names for debug temps, represented as another kind of
declaration, that never appears in expressions other than debug stmts,
and with counters that don't interfere with the regular declaration
counters (messing with the would cause codegen differences).

This idea came out of Andrew Macleod's debug locus specification.  The
exponential growth of expressions in debug stmts, reported in PR 41343,
made it obvious that we needed something along these lines sooner rather
than later.


I'm not entirely happy with this patch, but it might serve as a stopgap
for the time being.  Some of the points that could be improved are:

- use something smaller than a DECL structure for DEBUG_EXPR_DECLs.  We
don't need all the stuff in a DECL, just a uid, a TYPE, a MODE (could be
inferred from the TYPE), and an RTL expansion

- avoid emitting multiple redundant copies of the same debug bind stmt
when removing an SSA DEF (*)

- maybe linking VALUEs of DEBUG_EXPR_DECL and the corresponding
expression by VALUE equivalence, rather than handling DECL_EXPR_DECLs as
another kind of variable in var-tracking

- use the explicit presence of DEBUG_EXPR_DECLs to decide whether to use
DW_OP_calls for complex sub-expressions, or inline the subexpressions in
location encoding

- use tuple assign-like forms for debug bind stmts, now possible because
the expression forms are simpler

(*)

ATM we decide to propagate the DEF into debug stmts, we no longer know
even in which block it used to be.  If it has already been unlinked, we
can't even emit the debug bind stmt right before or right after it.

I ended up implementing code to emit multiple copies of the debug bind
stmt, right before each USE.

We could do much better, emitting always a single copy of the debug bind
stmt, say at the block that dominates all USEs, right before the
earliest USE in that block, if there is any, or at the end of the block
otherwise.

But it would be much simpler to just emit the DEBUG use when unlinking
the DEF, so that it remains in the right place.  Failing that, we might
have to be concerned about expressions that vary between the DEF point
and the USE point, say references to global variables or memory
locations.  Code that was in place before simply disregarded that, but
introducing debug temps always at the def point would be a simple and
clean way to fix this, for var-tracking already takes care of noticing
changes and dropping equivalences.


In spite of all these shortcomings, I'd like to propose that we put this
patch in now, while I (we?) work on other urgent issues, and then on
making the improvements mentioned above.

This was regstrapped on x86_64-linux-gnu.  Ok to install?


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: vta-temp-values-pr41343.patch --]
[-- Type: text/x-diff, Size: 15823 bytes --]

for  gcc/ChangeLog
from  Alexandre Oliva  <aoliva@redhat.com>

	PR debug/41343
	* tree.def (DEBUG_EXPR_DECL): New.
	* rtl.def (DEBUG_EXPR): New.
	* gengtype.c (adjust_field_rtx_def): Handle it.
	* tree-ssa.c (insert_debug_temp_before): New.
	(propagate_var_def_into_debug_stmts): Emit debug temps.
	* tree.c (next_debug_decl_uid): New.
	(make_node_stat): Count debug decls separately.
	(copy_node_stat): Likewise.
	* cfgexpand.c (expand_debug_expr): Handle DEBUG_EXPR_DECL.
	* var-tracking.c (dv_is_decl_p): Recognize it.
	(VALUE_RECURSED_INTO): Apply to DEBUG_EXPRs too.
	(track_expr_p): Track expanded DEBUG_EXPR_DECLs.
	(vt_expand_loc_callback): Expand DEBUG_EXPRs.
	(emit_note_insn_var_location): Don't emit notes for DEBUG_EXPR_DECLs.
	* cselib.c (cselib_expand_value_rtx_1): Use callback for DEBUG_EXPR.
	* tree-ssa-operands.c (get_expr_operands): Skip DEBUG_EXPR_DECLs in
	debug bind stmts.
	* emit-rtl.c (verify_rtx_sharing): Handle DEBUG_EXPR and VALUE.
	(copy_rtx_if_shared_1, reset_used_flags, set_used_flags): Likewise.
	* rtl.c (copy_rtx): Likewise.
	(rtx_equal_p_cb, rtx_equal_p): Handle DEBUG_EXPR.
	* print-rtl.c (print_rtx): Likewise.
	* sched-vis.c (print_value): Likewise.
	(print_insn): Handle DEBUG_EXPR_DECL.
	* tree-dump.c (dequeue_and_dump): Likewise.
	* tree-pretty-print.c (dump_generic_node): Likewise.

Index: gcc/tree.def
===================================================================
--- gcc/tree.def.orig	2009-09-22 15:27:27.000000000 -0300
+++ gcc/tree.def	2009-09-22 15:37:13.000000000 -0300
@@ -351,6 +351,10 @@ DEFTREECODE (PARM_DECL, "parm_decl", tcc
 DEFTREECODE (TYPE_DECL, "type_decl", tcc_declaration, 0)
 DEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0)
 
+/* A "declaration" of a debug temporary.  It should only appear in
+   DEBUG stmts.  */
+DEFTREECODE (DEBUG_EXPR_DECL, "debug_expr_decl", tcc_declaration, 0)
+
 /* A namespace declaration.  Namespaces appear in DECL_CONTEXT of other
    _DECLs, providing a hierarchy of names.  */
 DEFTREECODE (NAMESPACE_DECL, "namespace_decl", tcc_declaration, 0)
Index: gcc/rtl.def
===================================================================
--- gcc/rtl.def.orig	2009-09-22 15:27:26.000000000 -0300
+++ gcc/rtl.def	2009-09-22 15:37:13.000000000 -0300
@@ -88,6 +88,10 @@ DEF_RTL_EXPR(UNKNOWN, "UnKnown", "*", RT
    DECL codes in trees.  */
 DEF_RTL_EXPR(VALUE, "value", "0", RTX_OBJ)
 
+/* The RTL generated for a DEBUG_EXPR_DECL.  It links back to the
+   DEBUG_EXPR_DECL in the first operand.  */
+DEF_RTL_EXPR(DEBUG_EXPR, "debug_expr", "0", RTX_OBJ)
+
 /* ---------------------------------------------------------------------
    Expressions used in constructing lists.
    --------------------------------------------------------------------- */
Index: gcc/gengtype.c
===================================================================
--- gcc/gengtype.c.orig	2009-09-22 15:27:27.000000000 -0300
+++ gcc/gengtype.c	2009-09-22 15:37:13.000000000 -0300
@@ -1116,6 +1116,8 @@ adjust_field_rtx_def (type_p t, options_
 		t = scalar_tp, subname = "rt_int";
 	      else if (i == VALUE && aindex == 0)
 		t = scalar_tp, subname = "rt_int";
+	      else if (i == DEBUG_EXPR && aindex == 0)
+		t = tree_tp, subname = "rt_tree";
 	      else if (i == REG && aindex == 1)
 		t = scalar_tp, subname = "rt_int";
 	      else if (i == REG && aindex == 2)
Index: gcc/tree-ssa.c
===================================================================
--- gcc/tree-ssa.c.orig	2009-09-22 15:27:26.000000000 -0300
+++ gcc/tree-ssa.c	2009-09-22 15:39:55.000000000 -0300
@@ -295,6 +295,16 @@ find_released_ssa_name (tree *tp, int *w
   return NULL_TREE;
 }
 
+/* Insert DEF_TEMP before STMT.  */
+
+static void
+insert_debug_temp_before (gimple def_temp, gimple stmt)
+{
+  gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
+
+  gsi_insert_before (&gsi, def_temp, GSI_SAME_STMT);
+}
+
 /* Given a VAR whose definition STMT is to be moved to the iterator
    position TOGSIP in the TOBB basic block, verify whether we're
    moving it across any of the debug statements that use it, and
@@ -306,10 +316,11 @@ propagate_var_def_into_debug_stmts (tree
 				    const gimple_stmt_iterator *togsip)
 {
   imm_use_iterator imm_iter;
-  gimple stmt;
+  gimple stmt, def_temp = NULL;
   use_operand_p use_p;
   tree value = NULL;
   bool no_value = false;
+  bool first = true;
 
   if (!MAY_HAVE_DEBUG_STMTS)
     return;
@@ -405,13 +416,45 @@ propagate_var_def_into_debug_stmts (tree
 
 	  if (!value)
 	    no_value = true;
+	  else
+	    {
+	      tree temp = make_node (DEBUG_EXPR_DECL);
+
+	      def_temp = gimple_build_debug_bind (temp, unshare_expr (value),
+						  def_stmt);
+
+	      DECL_ARTIFICIAL (temp) = 1;
+	      TREE_TYPE (temp) = TREE_TYPE (value);
+	      if (DECL_P (value))
+		DECL_MODE (temp) = DECL_MODE (value);
+	      else
+		DECL_MODE (temp) = TYPE_MODE (TREE_TYPE (value));
+
+	      value = temp;
+
+	      if (gimple_bb (def_stmt))
+		{
+		  insert_debug_temp_before (def_temp, def_stmt);
+		  def_temp = NULL;
+		}
+	    }
 	}
 
       if (no_value)
 	gimple_debug_bind_reset_value (stmt);
       else
-	FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
-	  SET_USE (use_p, unshare_expr (value));
+	{
+	  if (def_temp)
+	    {
+	      if (!first)
+		def_temp = gimple_copy (def_temp);
+	      first = false;
+	      insert_debug_temp_before (def_temp, stmt);
+	    }
+
+	  FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
+	    SET_USE (use_p, value);
+	}
 
       update_stmt (stmt);
     }
Index: gcc/tree.c
===================================================================
--- gcc/tree.c.orig	2009-09-22 15:27:27.000000000 -0300
+++ gcc/tree.c	2009-09-22 15:37:13.000000000 -0300
@@ -152,6 +152,8 @@ static const char * const tree_node_kind
 static GTY(()) int next_decl_uid;
 /* Unique id for next type created.  */
 static GTY(()) int next_type_uid = 1;
+/* Unique id for next debug decl created.  */
+static GTY(()) int next_debug_decl_uid;
 
 /* Since we cannot rehash a type after it is in the table, we have to
    keep the hash code.  */
@@ -872,7 +874,10 @@ make_node_stat (enum tree_code code MEM_
 	    DECL_ALIGN (t) = 1;
 	}
       DECL_SOURCE_LOCATION (t) = input_location;
-      DECL_UID (t) = next_decl_uid++;
+      if (TREE_CODE (t) == DEBUG_EXPR_DECL)
+	DECL_UID (t) = --next_debug_decl_uid;
+      else
+	DECL_UID (t) = next_decl_uid++;
       if (TREE_CODE (t) == LABEL_DECL)
 	LABEL_DECL_UID (t) = -1;
 
@@ -948,7 +953,10 @@ copy_node_stat (tree node MEM_STAT_DECL)
 
   if (TREE_CODE_CLASS (code) == tcc_declaration)
     {
-      DECL_UID (t) = next_decl_uid++;
+      if (code == DEBUG_EXPR_DECL)
+	DECL_UID (t) = --next_debug_decl_uid;
+      else
+	DECL_UID (t) = next_decl_uid++;
       if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
 	  && DECL_HAS_VALUE_EXPR_P (node))
 	{
Index: gcc/cfgexpand.c
===================================================================
--- gcc/cfgexpand.c.orig	2009-09-22 15:37:08.000000000 -0300
+++ gcc/cfgexpand.c	2009-09-22 15:37:13.000000000 -0300
@@ -2358,6 +2358,18 @@ expand_debug_expr (tree exp)
       op1 = wrap_constant (GET_MODE_INNER (mode), op1);
       return gen_rtx_CONCAT (mode, op0, op1);
 
+    case DEBUG_EXPR_DECL:
+      op0 = DECL_RTL_IF_SET (exp);
+
+      if (op0)
+	return op0;
+
+      op0 = gen_rtx_DEBUG_EXPR (mode);
+      XTREE (op0, 0) = exp;
+      SET_DECL_RTL (exp, op0);
+
+      return op0;
+
     case VAR_DECL:
     case PARM_DECL:
     case FUNCTION_DECL:
Index: gcc/var-tracking.c
===================================================================
--- gcc/var-tracking.c.orig	2009-09-22 15:27:27.000000000 -0300
+++ gcc/var-tracking.c	2009-09-22 15:37:13.000000000 -0300
@@ -732,6 +732,7 @@ dv_is_decl_p (decl_or_value dv)
     case (int)PARM_DECL:
     case (int)RESULT_DECL:
     case (int)FUNCTION_DECL:
+    case (int)DEBUG_EXPR_DECL:
     case (int)COMPONENT_REF:
       return true;
 
@@ -2222,7 +2223,7 @@ dataflow_set_union (dataflow_set *dst, d
 
 /* Whether the value is currently being expanded.  */
 #define VALUE_RECURSED_INTO(x) \
-  (RTL_FLAG_CHECK1 ("VALUE_RECURSED_INTO", (x), VALUE)->used)
+  (RTL_FLAG_CHECK2 ("VALUE_RECURSED_INTO", (x), VALUE, DEBUG_EXPR)->used)
 /* Whether the value is in changed_variables hash table.  */
 #define VALUE_CHANGED(x) \
   (RTL_FLAG_CHECK1 ("VALUE_CHANGED", (x), VALUE)->frame_related)
@@ -4112,6 +4113,9 @@ track_expr_p (tree expr, bool need_rtl)
   rtx decl_rtl;
   tree realdecl;
 
+  if (TREE_CODE (expr) == DEBUG_EXPR_DECL)
+    return DECL_RTL_SET_P (expr);
+
   /* If EXPR is not a parameter or a variable do not track it.  */
   if (TREE_CODE (expr) != VAR_DECL && TREE_CODE (expr) != PARM_DECL)
     return 0;
@@ -6253,11 +6257,12 @@ vt_expand_loc_callback (rtx x, bitmap re
   decl_or_value dv;
   variable var;
   location_chain loc;
-  rtx result;
+  rtx result, subreg, xret;
 
-  if (GET_CODE (x) == SUBREG)
+  switch (GET_CODE (x))
     {
-      rtx subreg = SUBREG_REG (x);
+    case SUBREG:
+      subreg = SUBREG_REG (x);
 
       if (GET_CODE (SUBREG_REG (x)) != VALUE)
 	return x;
@@ -6279,22 +6284,31 @@ vt_expand_loc_callback (rtx x, bitmap re
 	result = gen_rtx_raw_SUBREG (GET_MODE (x), subreg, SUBREG_BYTE (x));
 
       return result;
-    }
 
-  if (GET_CODE (x) != VALUE)
-    return x;
+    case DEBUG_EXPR:
+      dv = dv_from_decl (XTREE (x, 0));
+      xret = NULL;
+      break;
+
+    case VALUE:
+      dv = dv_from_value (x);
+      xret = x;
+      break;
+
+    default:
+      return x;
+    }
 
   if (VALUE_RECURSED_INTO (x))
-    return x;
+    return NULL;
 
-  dv = dv_from_value (x);
   var = (variable) htab_find_with_hash (vars, dv, dv_htab_hash (dv));
 
   if (!var)
-    return x;
+    return xret;
 
   if (var->n_var_parts == 0)
-    return x;
+    return xret;
 
   gcc_assert (var->n_var_parts == 1);
 
@@ -6314,7 +6328,7 @@ vt_expand_loc_callback (rtx x, bitmap re
   if (result)
     return result;
   else
-    return x;
+    return xret;
 }
 
 /* Expand VALUEs in LOC, using VARS as well as cselib's equivalence
@@ -6364,6 +6378,9 @@ emit_note_insn_var_location (void **varp
 
   decl = dv_as_decl (var->dv);
 
+  if (TREE_CODE (decl) == DEBUG_EXPR_DECL)
+    goto clear;
+
   gcc_assert (decl);
 
   complete = true;
Index: gcc/cselib.c
===================================================================
--- gcc/cselib.c.orig	2009-09-22 15:27:26.000000000 -0300
+++ gcc/cselib.c	2009-09-22 15:50:35.000000000 -0300
@@ -1213,6 +1213,13 @@ cselib_expand_value_rtx_1 (rtx orig, str
 	result = expand_loc (CSELIB_VAL_PTR (orig)->locs, evd, max_depth);
 	return result;
       }
+
+    case DEBUG_EXPR:
+      if (evd->callback)
+	return evd->callback (orig, evd->regs_active, max_depth,
+			      evd->callback_arg);
+      return orig;
+
     default:
       break;
     }
Index: gcc/tree-ssa-operands.c
===================================================================
--- gcc/tree-ssa-operands.c.orig	2009-09-22 15:27:27.000000000 -0300
+++ gcc/tree-ssa-operands.c	2009-09-22 15:37:13.000000000 -0300
@@ -894,6 +894,10 @@ get_expr_operands (gimple stmt, tree *ex
       add_stmt_operand (expr_p, stmt, flags);
       return;
 
+    case DEBUG_EXPR_DECL:
+      gcc_assert (gimple_debug_bind_p (stmt));
+      return;
+
     case MISALIGNED_INDIRECT_REF:
       get_expr_operands (stmt, &TREE_OPERAND (expr, 1), flags);
       /* fall through */
Index: gcc/emit-rtl.c
===================================================================
--- gcc/emit-rtl.c.orig	2009-09-22 15:27:28.000000000 -0300
+++ gcc/emit-rtl.c	2009-09-22 15:37:13.000000000 -0300
@@ -2393,6 +2393,8 @@ verify_rtx_sharing (rtx orig, rtx insn)
   switch (code)
     {
     case REG:
+    case DEBUG_EXPR:
+    case VALUE:
     case CONST_INT:
     case CONST_DOUBLE:
     case CONST_FIXED:
@@ -2593,6 +2595,8 @@ repeat:
   switch (code)
     {
     case REG:
+    case DEBUG_EXPR:
+    case VALUE:
     case CONST_INT:
     case CONST_DOUBLE:
     case CONST_FIXED:
@@ -2712,6 +2716,8 @@ repeat:
   switch (code)
     {
     case REG:
+    case DEBUG_EXPR:
+    case VALUE:
     case CONST_INT:
     case CONST_DOUBLE:
     case CONST_FIXED:
@@ -2783,6 +2789,8 @@ set_used_flags (rtx x)
   switch (code)
     {
     case REG:
+    case DEBUG_EXPR:
+    case VALUE:
     case CONST_INT:
     case CONST_DOUBLE:
     case CONST_FIXED:
Index: gcc/rtl.c
===================================================================
--- gcc/rtl.c.orig	2009-09-22 15:27:27.000000000 -0300
+++ gcc/rtl.c	2009-09-22 15:47:37.000000000 -0300
@@ -232,6 +232,8 @@ copy_rtx (rtx orig)
   switch (code)
     {
     case REG:
+    case DEBUG_EXPR:
+    case VALUE:
     case CONST_INT:
     case CONST_DOUBLE:
     case CONST_FIXED:
@@ -381,6 +383,7 @@ rtx_equal_p_cb (const_rtx x, const_rtx y
     case SYMBOL_REF:
       return XSTR (x, 0) == XSTR (y, 0);
 
+    case DEBUG_EXPR:
     case VALUE:
     case SCRATCH:
     case CONST_DOUBLE:
@@ -496,6 +499,7 @@ rtx_equal_p (const_rtx x, const_rtx y)
     case SYMBOL_REF:
       return XSTR (x, 0) == XSTR (y, 0);
 
+    case DEBUG_EXPR:
     case VALUE:
     case SCRATCH:
     case CONST_DOUBLE:
Index: gcc/print-rtl.c
===================================================================
--- gcc/print-rtl.c.orig	2009-09-22 15:27:28.000000000 -0300
+++ gcc/print-rtl.c	2009-09-22 15:37:13.000000000 -0300
@@ -318,6 +318,12 @@ print_rtx (const_rtx in_rtx)
 	    dump_addr (outfile, "/", (void*)val);
 #endif
 	  }
+	else if (i == 0 && GET_CODE (in_rtx) == DEBUG_EXPR)
+	  {
+#ifndef GENERATOR_FILE
+	    fprintf (outfile, " D#%i", -DECL_UID (XTREE (in_rtx, 0)));
+#endif
+	  }
 	break;
 
       case 'e':
Index: gcc/sched-vis.c
===================================================================
--- gcc/sched-vis.c.orig	2009-09-22 15:27:27.000000000 -0300
+++ gcc/sched-vis.c	2009-09-22 15:37:13.000000000 -0300
@@ -521,6 +521,10 @@ print_value (char *buf, const_rtx x, int
       cur = safe_concat (buf, cur, t);
       cur = safe_concat (buf, cur, "]");
       break;
+    case DEBUG_EXPR:
+      sprintf (t, "D#%i", -DECL_UID (XTREE (x, 0)));
+      cur = safe_concat (buf, cur, t);
+      break;
     default:
       print_exp (t, x, verbose);
       cur = safe_concat (buf, cur, t);
@@ -670,11 +674,18 @@ print_insn (char *buf, const_rtx x, int 
 	if (DECL_P (INSN_VAR_LOCATION_DECL (insn)))
 	  {
 	    tree id = DECL_NAME (INSN_VAR_LOCATION_DECL (insn));
+	    char idbuf[32];
 	    if (id)
 	      name = IDENTIFIER_POINTER (id);
+	    else if (TREE_CODE (INSN_VAR_LOCATION_DECL (insn))
+		     == DEBUG_EXPR_DECL)
+	      {
+		sprintf (idbuf, "D#%i",
+			 -DECL_UID (INSN_VAR_LOCATION_DECL (insn)));
+		name = idbuf;
+	      }
 	    else
 	      {
-		char idbuf[32];
 		sprintf (idbuf, "D.%i",
 			 DECL_UID (INSN_VAR_LOCATION_DECL (insn)));
 		name = idbuf;
Index: gcc/tree-dump.c
===================================================================
--- gcc/tree-dump.c.orig	2009-09-22 15:27:28.000000000 -0300
+++ gcc/tree-dump.c	2009-09-22 15:37:13.000000000 -0300
@@ -511,6 +511,10 @@ dequeue_and_dump (dump_info_p di)
       dump_child ("cnst", DECL_INITIAL (t));
       break;
 
+    case DEBUG_EXPR_DECL:
+      dump_int (di, "-uid", -DECL_UID (t));
+      /* Fall through.  */
+
     case VAR_DECL:
     case PARM_DECL:
     case FIELD_DECL:
Index: gcc/tree-pretty-print.c
===================================================================
--- gcc/tree-pretty-print.c.orig	2009-09-22 15:27:26.000000000 -0300
+++ gcc/tree-pretty-print.c	2009-09-22 15:37:13.000000000 -0300
@@ -1059,6 +1059,10 @@ dump_generic_node (pretty_printer *buffe
       pp_string (buffer, "<retval>");
       break;
 
+    case DEBUG_EXPR_DECL:
+      pp_printf (buffer, "D#%i", -DECL_UID (node));
+      break;
+
     case COMPONENT_REF:
       op0 = TREE_OPERAND (node, 0);
       str = ".";

[-- Attachment #3: Type: text/plain, Size: 257 bytes --]


-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist      Red Hat Brazil Compiler Engineer

^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2009-10-13 20:59 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-22 19:51 [PR debug/41343] introduce debug expr temps Alexandre Oliva
2009-09-23  8:42 ` Richard Guenther
2009-09-23 11:54   ` Richard Guenther
2009-09-23 12:02     ` Richard Guenther
2009-09-30  8:24       ` Alexandre Oliva
2009-09-30  9:54         ` Richard Guenther
2009-10-02  6:06           ` Alexandre Oliva
2009-10-02  7:10   ` Alexandre Oliva
2009-10-03 15:02     ` Richard Guenther
2009-10-06  6:43       ` Alexandre Oliva
2009-10-06 10:30         ` Richard Guenther
2009-10-07  8:35           ` Alexandre Oliva
2009-10-07 10:24             ` Richard Guenther
2009-10-08 19:48               ` Alexandre Oliva
2009-10-09  7:48             ` Alexandre Oliva
2009-10-09 11:29               ` Richard Guenther
2009-10-11 13:05                 ` Alexandre Oliva
2009-10-11 14:26                   ` Richard Guenther
2009-10-12  6:36                     ` Alexandre Oliva
2009-10-12  8:58                       ` Richard Guenther
2009-10-12 19:01                         ` Alexandre Oliva
2009-10-13  6:02                           ` Eric Botcazou
2009-10-13  6:41                             ` Jakub Jelinek
2009-10-13  9:38                               ` Richard Guenther
2009-10-13 21:01                           ` Alexandre Oliva

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).