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]

[PATCH]: Fix m68k bootstrap failure caused by GVNPRE


I apologize that it took me so long.

2004-06-16 Daniel Berlin <dberlin@dberlin.org>

	* tree-ssa-pre.c (compute_avail): Value number and inserts uses as well.
	Strip useless type conversions.
	Casts have to be treated slightly different than normal unaries.
Index: tree-ssa-pre.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-pre.c,v
retrieving revision 2.9
diff -u -3 -p -r2.9 tree-ssa-pre.c
--- tree-ssa-pre.c	14 Jun 2004 01:27:57 -0000	2.9
+++ tree-ssa-pre.c	17 Jun 2004 01:50:25 -0000
@@ -1637,6 +1720,16 @@ compute_avail (basic_block block)
 		  insert_into_set (TMP_GEN (block), def);
 		  value_insert_into_set (AVAIL_OUT (block), def);
 		}
+	      for (j = 0; j < NUM_USES (STMT_USE_OPS (stmt)); j++)
+		{
+		  tree use = USE_OP (STMT_USE_OPS (stmt), j);
+		  if (TREE_CODE (use) == SSA_NAME)
+		    {
+		      lookup_or_add (value_table, use);
+		      insert_into_set (TMP_GEN (block), use);
+		      value_insert_into_set (AVAIL_OUT (block), use);
+		    }
+		}
 	      continue;
 	    }
 	  else if (TREE_CODE (stmt) == RETURN_EXPR
@@ -1652,6 +1745,7 @@ compute_avail (basic_block block)
 	      if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0))
 		continue;
 	      op1 = TREE_OPERAND (stmt, 1);
+	      STRIP_USELESS_TYPE_CONVERSION (op1);
 	      if (TREE_CODE_CLASS (TREE_CODE (op1)) == 'c')
 		{
 		  add (value_table, op0, lookup_or_add (value_table, op1));
@@ -1682,7 +1776,8 @@ compute_avail (basic_block block)
 		  insert_into_set (TMP_GEN (block), op0);
 		  value_insert_into_set (AVAIL_OUT (block), op0);
 		}
-	      else if (TREE_CODE_CLASS (TREE_CODE (op1)) == '1')
+	      else if (TREE_CODE_CLASS (TREE_CODE (op1)) == '1'
+		       && !is_gimple_cast (op1))
 		{
 		  tree uop;
 		  tree val, val1;
@@ -1718,7 +1813,18 @@ compute_avail (basic_block block)
 		      lookup_or_add (value_table, def);
 		      insert_into_set (TMP_GEN (block), def);
 		      value_insert_into_set (AVAIL_OUT (block), def);
-		      value_insert_into_set (AVAIL_OUT (block), op0);
+		      if (def != op0)
+			abort ();
+		    }
+		  for (j = 0; j < NUM_USES (STMT_USE_OPS (stmt)); j++)
+		    {
+		      tree use = USE_OP (STMT_USE_OPS (stmt), j);
+		      if (TREE_CODE (use) == SSA_NAME)
+			{
+			  lookup_or_add (value_table, use);
+			  insert_into_set (TMP_GEN (block), use);
+			  value_insert_into_set (AVAIL_OUT (block), use);
+			}
 		    }
 		}
 	    }
@@ -1732,6 +1838,16 @@ compute_avail (basic_block block)
 		  insert_into_set (TMP_GEN (block), def);
 		  value_insert_into_set (AVAIL_OUT (block), def);
 		}
+	      for (j = 0; j < NUM_USES (STMT_USE_OPS (stmt)); j++)
+		{
+		  tree use = USE_OP (STMT_USE_OPS (stmt), j);
+		  if (TREE_CODE (use) == SSA_NAME)
+		    {
+		      lookup_or_add (value_table, use);
+		      insert_into_set (TMP_GEN (block), use);
+		      value_insert_into_set (AVAIL_OUT (block), use);
+		    }
+		}
 	    }
 	}
     }


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