This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Fwd: [lto]: Get SSA_NAME_DEF_STMT correct and fix VECTOR_CST.]



-------- Original Message --------
Subject: 	[lto]: Get SSA_NAME_DEF_STMT correct and fix VECTOR_CST.
Date: 	Tue, 13 Nov 2007 15:11:18 -0500
From: 	Kenneth Zadeck <zadeck@naturalbridge.com>
To: 	gcc-patches <gcc-patches@gcc.gnu.org>, Nathan Froyd
<froydnj@codesourcery.com>



Get the types correct on VECTOR_CST.
Get the SSA_NAME_DEF_STMT correct for gimple_modify_stmts inside
return_exprs.
Add some more dumping in *-verbose mode.

2007-11-13  Kenneth Zadeck <zadeck@naturalbridge.com>

    * lto-function-out.c (output_expr_operand): Get the types correct for
    vector-cst.
    * tree-cfg.c (dump_function_to_file): Print the function_decl in
verbose mode.

2007-11-13  Kenneth Zadeck <zadeck@naturalbridge.com>

    * lto-read.c (input_type_ref): Renamed from get_type_ref.
    (input_expr_operand, input_local_var): Renamed get_type_ref to
    input_type_ref.
    (input_expr_operand): Get the types correct for
    vector-cst.  Get SSA_NAME_DEF_STMT correct for return_exprs.
   
committed as revision 130156

kenny


Index: lto-function-out.c
===================================================================
--- lto-function-out.c	(revision 130142)
+++ lto-function-out.c	(working copy)
@@ -1271,23 +1271,24 @@ output_expr_operand (struct output_block
       {
 	tree t = TREE_VECTOR_CST_ELTS (expr);
 	int len = 1;
+
 	while ((t = TREE_CHAIN (t)) != NULL)
 	  len++;
 	t = TREE_VECTOR_CST_ELTS (expr);
 	if (TREE_CODE (TREE_VALUE(t)) == REAL_CST)
 	  {
-	    output_record_start (ob, expr, TREE_VALUE (t),
-				 LTO_vector_cst1);
+	    output_record_start (ob, expr, expr, LTO_vector_cst1);
 	    output_uleb128 (ob, len);
+	    output_type_ref (ob, TREE_TYPE (TREE_VALUE (t)));
 	    output_real (ob, TREE_VALUE (t));
 	    while ((t = TREE_CHAIN (t)) != NULL)
 	      output_real (ob, TREE_VALUE (t));
 	  }
 	else
 	  {
-	    output_record_start (ob, expr, TREE_VALUE (t),
-				 LTO_vector_cst0);
+	    output_record_start (ob, expr, expr, LTO_vector_cst0);
 	    output_uleb128 (ob, len);
+	    output_type_ref (ob, TREE_TYPE (TREE_VALUE (t)));
 	    output_integer (ob, TREE_VALUE (t));
 	    while ((t = TREE_CHAIN (t)) != NULL)
 	      output_integer (ob, TREE_VALUE (t));
Index: lto/lto-read.c
===================================================================
--- lto/lto-read.c	(revision 130142)
+++ lto/lto-read.c	(working copy)
@@ -342,7 +342,7 @@ get_label_decl (struct data_in *data_in,
 /* Get the type referenced by the next token in IB.  */
 
 static tree
-get_type_ref (struct data_in *data_in, struct input_block *ib)
+input_type_ref (struct data_in *data_in, struct input_block *ib)
 {
   int index;
 
@@ -581,7 +581,7 @@ input_expr_operand (struct input_block *
   tree result = NULL_TREE;
   
   if (TEST_BIT (lto_types_needed_for, code))
-    type = get_type_ref (data_in, ib);
+    type = input_type_ref (data_in, ib);
 
   flags = input_tree_flags (ib, code, false);
 
@@ -632,17 +632,18 @@ input_expr_operand (struct input_block *
       {
 	tree chain = NULL_TREE;
 	int len = input_uleb128 (ib);
+	tree elt_type = input_type_ref (data_in, ib);
 
 	if (len && tag == LTO_vector_cst1)
 	  {
 	    int i;
 	    tree last 
-	      = build_tree_list (NULL_TREE, input_real (ib, data_in, type));
+	      = build_tree_list (NULL_TREE, input_real (ib, data_in, elt_type));
 	    chain = last; 
 	    for (i = 1; i < len; i++)
 	      {
 		tree t 
-		  = build_tree_list (NULL_TREE, input_real (ib, data_in, type));
+		  = build_tree_list (NULL_TREE, input_real (ib, data_in, elt_type));
 		TREE_CHAIN (last) = t;
 		last = t;
 	      }
@@ -650,12 +651,12 @@ input_expr_operand (struct input_block *
 	else
 	  {
 	    int i;
-	    tree last = build_tree_list (NULL_TREE, input_integer (ib, type));
+	    tree last = build_tree_list (NULL_TREE, input_integer (ib, elt_type));
 	    chain = last; 
 	    for (i = 1; i < len; i++)
 	      {
 		tree t 
-		  = build_tree_list (NULL_TREE, input_integer (ib, type));
+		  = build_tree_list (NULL_TREE, input_integer (ib, elt_type));
 		TREE_CHAIN (last) = t;
 		last = t;
 	      }
@@ -942,6 +943,10 @@ input_expr_operand (struct input_block *
               op0 = DECL_RESULT (current_function_decl);
 
             result = build1 (code, type, op0);
+
+	    if ((TREE_CODE (op0) == GIMPLE_MODIFY_STMT)
+		&& (TREE_CODE (GIMPLE_STMT_OPERAND (op0, 0)) == SSA_NAME))
+		SSA_NAME_DEF_STMT (GIMPLE_STMT_OPERAND (op0, 0)) = result;
           }
 	  break;
 	  
@@ -963,8 +968,8 @@ input_expr_operand (struct input_block *
 
     case RANGE_EXPR:
       {
-	tree op0 = input_integer (ib, get_type_ref (data_in, ib));
-	tree op1 = input_integer (ib, get_type_ref (data_in, ib));
+	tree op0 = input_integer (ib, input_type_ref (data_in, ib));
+	tree op1 = input_integer (ib, input_type_ref (data_in, ib));
 	result = build2 (RANGE_EXPR, sizetype, op0, op1);
       }
       break;
@@ -1255,7 +1260,7 @@ input_local_var (struct input_block *ib,
   else 
     name = NULL_TREE;
   
-  type = get_type_ref (data_in, ib);
+  type = input_type_ref (data_in, ib);
   gcc_assert (type);
   
   if (is_var)
@@ -1266,7 +1271,7 @@ input_local_var (struct input_block *ib,
   data_in->local_decls[i] = result;
   
   if (!is_var)
-    DECL_ARG_TYPE (result) = get_type_ref (data_in, ib);
+    DECL_ARG_TYPE (result) = input_type_ref (data_in, ib);
 
   flags = input_tree_flags (ib, 0, true);
   input_line_info (ib, data_in, flags);
Index: tree-cfg.c
===================================================================
--- tree-cfg.c	(revision 130142)
+++ tree-cfg.c	(working copy)
@@ -6043,6 +6043,9 @@ dump_function_to_file (tree fn, FILE *fi
     }
   fprintf (file, ")\n");
 
+  if (flags && TDF_VERBOSE)
+    print_node (file, "", fn, 2);
+
   dsf = DECL_STRUCT_FUNCTION (fn);
   if (dsf && (flags & TDF_DETAILS))
     dump_eh_tree (file, dsf);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]