]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR bootstrap/36864 (Yet another bootstrap failure on i686-apple-darwin9)
authorRichard Guenther <rguenther@suse.de>
Sat, 19 Jul 2008 20:02:29 +0000 (20:02 +0000)
committerAndreas Tobler <andreast@gcc.gnu.org>
Sat, 19 Jul 2008 20:02:29 +0000 (22:02 +0200)
2008-07-19  Richard Guenther  <rguenther@suse.de>

PR bootstrap/36864
* tree-ssa-sccvn.h (get_constant_value_id): Declare.
* tree-ssa-sccvn.c (get_constant_value_id): New function.
* tree-ssa-pre.c (get_expr_value_id): For newly created
constant value-ids make sure to add the expression to its
expression-set.

From-SVN: r137991

gcc/ChangeLog
gcc/tree-ssa-pre.c
gcc/tree-ssa-sccvn.c
gcc/tree-ssa-sccvn.h

index 701b25f787e0e2d185c033080f50062d89f28d5b..50edf353df9a2772c942722612ee9e2d259706cd 100644 (file)
@@ -1,3 +1,12 @@
+2008-07-19  Richard Guenther  <rguenther@suse.de>
+
+       PR bootstrap/36864
+       * tree-ssa-sccvn.h (get_constant_value_id): Declare.
+       * tree-ssa-sccvn.c (get_constant_value_id): New function.
+       * tree-ssa-pre.c (get_expr_value_id): For newly created
+       constant value-ids make sure to add the expression to its
+       expression-set.
+
 2008-07-19  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/36877
index efa934fb85329ceabb17cc84c2cdce3ef62fa7d0..ed337a39c46a1577a53fa4a6991fe3e36555fe06 100644 (file)
@@ -599,7 +599,16 @@ get_expr_value_id (pre_expr expr)
   switch (expr->kind)
     {
     case CONSTANT:
-      return get_or_alloc_constant_value_id (PRE_EXPR_CONSTANT (expr));
+      {
+       unsigned int id;
+       id = get_constant_value_id (PRE_EXPR_CONSTANT (expr));
+       if (id == 0)
+         {
+           id = get_or_alloc_constant_value_id (PRE_EXPR_CONSTANT (expr));
+           add_to_value (id, expr);
+         }
+       return id;
+      }
     case NAME:
       return VN_INFO (PRE_EXPR_NAME (expr))->value_id;
     case NARY:
index 69945a5c3c74666fe468db7ea3e1454fca19b9a8..48b5297b4d80d9a3bf1d4f6bc067077658ed4fad 100644 (file)
@@ -248,6 +248,24 @@ vn_constant_hash (const void *p1)
   return vc1->hashcode;
 }
 
+/* Lookup a value id for CONSTANT and return it.  If it does not
+   exist returns 0.  */
+
+unsigned int
+get_constant_value_id (tree constant)
+{
+  void **slot;
+  struct vn_constant_s vc;
+  
+  vc.hashcode = iterative_hash_expr (constant, 0);
+  vc.constant = constant;
+  slot = htab_find_slot_with_hash (constant_to_value_id, &vc,
+                                  vc.hashcode, NO_INSERT);
+  if (slot)
+    return ((vn_constant_t)*slot)->value_id;
+  return 0;
+}
+
 /* Lookup a value id for CONSTANT, and if it does not exist, create a
    new one and return it.  If it does exist, return it.  */
 
index 9f391af43aa5c79f20aa24572a832f8715231576..314cf8f8c9b63f423dd563e2a5828152dafbf061 100644 (file)
@@ -163,6 +163,7 @@ hashval_t vn_reference_compute_hash (const vn_reference_t);
 int vn_reference_eq (const void *, const void *);
 unsigned int get_max_value_id (void);
 unsigned int get_next_value_id (void);
+unsigned int get_constant_value_id (tree);
 unsigned int get_or_alloc_constant_value_id (tree);
 bool value_id_constant_p (unsigned int);
 VEC (tree, gc) *shared_vuses_from_stmt (tree);