diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-10-28 15:39:06 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-10-28 15:39:06 +0100 |
commit | 6ac719d38e35eb21551a5e006d11fb7e71a97260 (patch) | |
tree | 2754d749ae2b5710f854d75ce64c3fde226dc702 /gcc | |
parent | 7cf720118defe3f5a2aa7dd646b562c12d81a614 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr41762.c | 31 |
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 (); +} |