From 6ac719d38e35eb21551a5e006d11fb7e71a97260 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 28 Oct 2009 15:39:06 +0100 Subject: 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 --- gcc/ChangeLog | 4 ++++ gcc/config/i386/i386.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr41762.c | 31 +++++++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr41762.c (limited to 'gcc') 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 * 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 + + PR target/41762 + * gcc.dg/pr41762.c: New test. + 2009-10-28 Richard Guenther 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 (); +} -- cgit v1.1