diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-10-30 13:49:31 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-10-30 13:49:31 +0100 |
commit | 723a7cedae9574c8158bcf9e0c563ebb72a6e28c (patch) | |
tree | d8370185571c475f94b776bd2fda5cbcb22ceca6 /gcc | |
parent | 8ec6daa568f5f3d0ded34dc69905e9ee9e241a3e (diff) | |
download | gcc-723a7cedae9574c8158bcf9e0c563ebb72a6e28c.zip gcc-723a7cedae9574c8158bcf9e0c563ebb72a6e28c.tar.gz gcc-723a7cedae9574c8158bcf9e0c563ebb72a6e28c.tar.bz2 |
re PR middle-end/37730 (gcc.c-torture/compile/pr37713.c ICEs at -O3 -msse2)
PR middle-end/37730
* expr.c (store_constructor): For vectors, if target is a MEM, use
target's MEM_ALIAS_SET instead of elttype alias set.
* gcc.dg/vect/pr37730.c: New test.
From-SVN: r141461
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/expr.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr37730.c | 16 |
4 files changed, 33 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 725df9d..b7b8523 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-10-30 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/37730 + * expr.c (store_constructor): For vectors, if target is a MEM, use + target's MEM_ALIAS_SET instead of elttype alias set. + 2008-10-29 Kaz Kojima <kkojima@gcc.gnu.org> PR target/37909 @@ -5579,6 +5579,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size) HOST_WIDE_INT bitpos; rtvec vector = NULL; unsigned n_elts; + alias_set_type alias; gcc_assert (eltmode != BLKmode); @@ -5630,7 +5631,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size) if (need_to_clear && size > 0 && !vector) { if (REG_P (target)) - emit_move_insn (target, CONST0_RTX (GET_MODE (target))); + emit_move_insn (target, CONST0_RTX (GET_MODE (target))); else clear_storage (target, GEN_INT (size), BLOCK_OP_NORMAL); cleared = 1; @@ -5640,6 +5641,11 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size) if (!cleared && !vector && REG_P (target)) emit_move_insn (target, CONST0_RTX (GET_MODE (target))); + if (MEM_P (target)) + alias = MEM_ALIAS_SET (target); + else + alias = get_alias_set (elttype); + /* Store each element of the constructor into the corresponding element of TARGET, determined by counting the elements. */ for (idx = 0, i = 0; @@ -5675,7 +5681,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size) bitpos = eltpos * elt_size; store_constructor_field (target, bitsize, bitpos, value_mode, value, type, - cleared, get_alias_set (elttype)); + cleared, alias); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 295f8de..bd10cc9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2008-10-30 Jakub Jelinek <jakub@redhat.com> + PR middle-end/37730 + * gcc.dg/vect/pr37730.c: New test. + PR debug/36668 * g++.dg/other/PR23205.C: Allow foobar to be defined as variable. * g++.dg/other/pr23205-2.C: New test. diff --git a/gcc/testsuite/gcc.dg/vect/pr37730.c b/gcc/testsuite/gcc.dg/vect/pr37730.c new file mode 100644 index 0000000..876f549 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr37730.c @@ -0,0 +1,16 @@ +/* PR middle-end/37730 */ +/* { dg-do compile } */ + +void +add_opush (void) +{ + unsigned char formats[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff }; + void *dtds[sizeof (formats)]; + unsigned int i; + unsigned char dtd = 0x08; + for (i = 0; i < sizeof (formats); i++) + dtds[i] = &dtd; + sdp_seq_alloc (dtds); +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ |