re PR tree-optimization/39204 (ICE in compute_antic)
authorRichard Guenther <rguenther@suse.de>
Tue, 17 Feb 2009 15:01:40 +0000 (15:01 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 17 Feb 2009 15:01:40 +0000 (15:01 +0000)
2009-02-17  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/39204
* tree-ssa-pre.c (phi_translate_1): Lookup the value-number
of the PHI arg.

* gcc.dg/torture/pr39204.c: New testcase.

From-SVN: r144233

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr39204.c [new file with mode: 0644]
gcc/tree-ssa-pre.c

index 0c0c9f0..ef11604 100644 (file)
@@ -1,3 +1,9 @@
+2009-02-17  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/39204
+       * tree-ssa-pre.c (phi_translate_1): Lookup the value-number
+       of the PHI arg.
+
 2009-02-17  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/soft-fp/double.h: Update from glibc CVS.
index cafb71f..bf7b705 100644 (file)
@@ -1,3 +1,8 @@
+2009-02-17  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/39204
+       * gcc.dg/torture/pr39204.c: New testcase.
+
 2009-02-17  Bingfeng Mei <bmei@broadcom.com>
 
        * gcc.dg/vect/vect-outer-5.c: Require vect_float support.
diff --git a/gcc/testsuite/gcc.dg/torture/pr39204.c b/gcc/testsuite/gcc.dg/torture/pr39204.c
new file mode 100644 (file)
index 0000000..4604b70
--- /dev/null
@@ -0,0 +1,131 @@
+/* { dg-do compile } */
+/* { dg-options "-w" } */
+
+typedef unsigned int size_t;
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+__extension__ typedef signed long long int __int64_t;
+__extension__ typedef unsigned long long int __uint64_t;
+__extension__ typedef long long int __quad_t;
+__extension__ typedef unsigned long long int __u_quad_t;
+__extension__ typedef __u_quad_t __dev_t;
+__extension__ typedef unsigned int __uid_t;
+__extension__ typedef unsigned int __gid_t;
+__extension__ typedef unsigned long int __ino_t;
+__extension__ typedef __u_quad_t __ino64_t;
+__extension__ typedef unsigned int __mode_t;
+__extension__ typedef unsigned int __nlink_t;
+__extension__ typedef long int __off_t;
+__extension__ typedef __quad_t __off64_t;
+__extension__ typedef int __pid_t;
+__extension__ typedef struct {
+    int __val[2];
+} __fsid_t;
+__extension__ typedef long int __clock_t;
+__extension__ typedef unsigned int __id_t;
+typedef struct _IO_FILE FILE;
+typedef struct _IO_FILE __FILE;
+typedef struct {
+    int __count;
+    union   {
+       unsigned int __wch;
+       char __wchb[4];
+    }
+    __value;
+} __mbstate_t;
+typedef struct {
+    __off_t __pos;
+    __mbstate_t __state;
+} _G_fpos_t;
+typedef struct {
+    __off64_t __pos;
+    __mbstate_t __state;
+} _G_fpos64_t;
+typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
+typedef struct _IO_FILE _IO_FILE;
+extern struct _IO_FILE_plus _IO_2_1_stderr_;
+extern int fputs (__const char *__restrict __s, FILE * __restrict __stream);
+extern char *strstr (__const char *__haystack, __const char *__needle)
+     __attribute__ ((__nonnull__ (1, 2)));
+     extern char *rindex (__const char *__s, int __c)   __attribute__ ((__nonnull__ (1)));
+extern size_t strlen (__const char *__s) __attribute__ ((__nothrow__))
+     __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+     char *mystrlwr (char *string);
+     char *m_replace_filename (const char *path, const char *filename);
+     typedef struct LINE {
+        char *text;
+        struct LINE *next;
+        int flags;
+     } LINE;
+typedef struct TOC {
+    char *text;
+    char *alt;
+    struct TOC *next;
+    int root;
+    int texinfoable;
+    int htmlable;
+    int otherfile;
+} TOC;
+static int _empty_count;
+extern char *_word_substitution[256];
+static void _output_sorted_nested_toc (TOC ** list, unsigned int num_items);
+static char *_do_text_substitution (char *input);
+static int _toc_scmp (const void *e1, const void *e2)
+{
+  TOC *t1 = *((TOC **) e1);
+  TOC *t2 = *((TOC **) e2);
+  return mystricmp (t1->text, t2->text);
+}
+static void _output_buffered_text (void) { if (_empty_count) ; }
+void _post_process_filename (char *filename)
+{
+  int code_scanning = 0;
+  char *new_filename, *p;
+  char *line;
+  FILE *f1 = 0, *f2 = 0;
+  if (!new_filename || strlen (new_filename) < 2)
+    new_filename[strlen (filename) - 1] = 'x';
+  if (!f1 || !f2)
+    while ((line = m_fgets (f1)))
+      {
+       line = _do_text_substitution (line);
+       fputs (line, f2);
+      }
+  if (remove (filename))
+    cancel:
+       if (f1)
+         if (f2)
+           if (new_filename)
+             ;
+}
+static void _close_html_file (FILE * file)
+{
+  int f;
+  for (f = 0; _word_substitution[f]; f++)
+    ;
+}
+static __attribute__((always_inline))
+char * _do_text_substitution (char *input)
+{
+  int start, end, middle, f;
+  char *temp, *found, *reader;
+  for (f = 0; _word_substitution[f]; f++)
+    {
+      reader = input;
+      while ((found = strstr (reader, _word_substitution[f])))
+       {
+         start = found - input;
+         input = temp;
+         reader = temp + start + middle;
+       }
+    }
+  return input;
+}
index 32c557c..0238d23 100644 (file)
@@ -1707,6 +1707,9 @@ phi_translate_1 (pre_expr expr, bitmap_set_t set1, bitmap_set_t set2,
            tree def = PHI_ARG_DEF (phi, e->dest_idx);
            pre_expr newexpr;
 
+           if (TREE_CODE (def) == SSA_NAME)
+             def = VN_INFO (def)->valnum;
+
            /* Handle constant. */
            if (is_gimple_min_invariant (def))
              return get_or_alloc_expr_for_constant (def);