aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-10-28 15:39:06 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2009-10-28 15:39:06 +0100
commit6ac719d38e35eb21551a5e006d11fb7e71a97260 (patch)
tree2754d749ae2b5710f854d75ce64c3fde226dc702 /gcc
parent7cf720118defe3f5a2aa7dd646b562c12d81a614 (diff)
downloadgcc-6ac719d38e35eb21551a5e006d11fb7e71a97260.zip
gcc-6ac719d38e35eb21551a5e006d11fb7e71a97260.tar.gz
gcc-6ac719d38e35eb21551a5e006d11fb7e71a97260.tar.bz2
re PR target/41762 (internal compiler error when compiling xorg-server)
PR target/41762 * config/i386/i386.c (ix86_pic_register_p): Don't call rtx_equal_for_cselib_p for VALUEs discarded as useless. * gcc.dg/pr41762.c: New test. From-SVN: r153667
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr41762.c31
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fe877c5..e6cb0ee 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -4,6 +4,10 @@
vt_expand_loc unnecessarily when location is not a register nor
memory.
+ PR target/41762
+ * config/i386/i386.c (ix86_pic_register_p): Don't call
+ rtx_equal_for_cselib_p for VALUEs discarded as useless.
+
2009-10-28 Richard Sandiford <rdsandiford@googlemail.com>
* var-tracking.c (emit_note_insn_var_location): Get the mode of
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index a4e51af..fd1dad6 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -10794,7 +10794,7 @@ i386_output_dwarf_dtprel (FILE *file, int size, rtx x)
static bool
ix86_pic_register_p (rtx x)
{
- if (GET_CODE (x) == VALUE)
+ if (GET_CODE (x) == VALUE && CSELIB_VAL_PTR (x))
return (pic_offset_table_rtx
&& rtx_equal_for_cselib_p (x, pic_offset_table_rtx));
else
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9311bac..a1e4668 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/41762
+ * gcc.dg/pr41762.c: New test.
+
2009-10-28 Richard Guenther <rguenther@suse.de>
PR middle-end/41855
diff --git a/gcc/testsuite/gcc.dg/pr41762.c b/gcc/testsuite/gcc.dg/pr41762.c
new file mode 100644
index 0000000..88d8172
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr41762.c
@@ -0,0 +1,31 @@
+/* PR target/41762 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftracer -fsched2-use-superblocks" } */
+/* { dg-options "-O2 -ftracer -fsched2-use-superblocks -fpic" { target fpic } } */
+
+extern __SIZE_TYPE__ strlen (const char *);
+extern int f1 (void *);
+extern char *f2 (void);
+extern void f3 (int, int);
+static char *a;
+char *b, *c, *d, *e;
+
+void
+foo (void)
+{
+ int f, g, h;
+ f = (a ? strlen (a) : strlen ("abcde"));
+ f += (b ? strlen (b) : 0);
+ f += (c ? strlen (c) : 0);
+ f += (d ? strlen (d) : 0);
+ f += (e ? strlen (e) : 0);
+ h = f1 (strlen);
+ g = strlen (a);
+ f3 (g, f);
+}
+
+void
+bar (void)
+{
+ a = f2 ();
+}