diff options
author | Zdenek Dvorak <dvorakz@suse.cz> | 2006-06-08 10:17:05 +0200 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2006-06-08 08:17:05 +0000 |
commit | 136778e9b41c1d1d095f9e2e74b7255c7ce4f415 (patch) | |
tree | 0e96cb17f5cc87934c7398356043594977cc1ab6 /gcc | |
parent | 4b5e2dbc974abfe763a79e37ec7f37993a306d94 (diff) | |
download | gcc-136778e9b41c1d1d095f9e2e74b7255c7ce4f415.zip gcc-136778e9b41c1d1d095f9e2e74b7255c7ce4f415.tar.gz gcc-136778e9b41c1d1d095f9e2e74b7255c7ce4f415.tar.bz2 |
re PR rtl-optimization/26449 (ICE in loop invariant motion)
PR rtl-optimization/26449
* loop-invariant.c (move_invariant_reg): Fail if force_operand fails.
* gcc.dg/pr26449.c: New test.
From-SVN: r114481
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/loop-invariant.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr26449.c | 15 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6a44f7d..237393d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-06-07 Zdenek Dvorak <dvorakz@suse.cz> + + PR rtl-optimization/26449 + * loop-invariant.c (move_invariant_reg): Fail if force_operand fails. + 2006-06-07 Andrew MacLeod <amacleod@redhat.com> PR middle-end/27793 diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c index 026af40..cf22949 100644 --- a/gcc/loop-invariant.c +++ b/gcc/loop-invariant.c @@ -1178,6 +1178,11 @@ move_invariant_reg (struct loop *loop, unsigned invno) { start_sequence (); op = force_operand (SET_SRC (set), reg); + if (!op) + { + end_sequence (); + goto fail; + } if (op != reg) emit_move_insn (reg, op); seq = get_insns (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3e03145..78cbebc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-06-07 Zdenek Dvorak <dvorakz@suse.cz> + + PR rtl-optimization/26449 + * gcc.dg/pr26449.c: New test. + 2006-06-07 Volker Reichelt <reichelt@igpm.rwth-aachen.de> PR c++/27601 diff --git a/gcc/testsuite/gcc.dg/pr26449.c b/gcc/testsuite/gcc.dg/pr26449.c new file mode 100644 index 0000000..1a0bdad --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr26449.c @@ -0,0 +1,15 @@ +/* { dg-do compile { target i?86-*-* } } */ +/* { dg-options "-O1 -ftree-vectorize -march=pentium4 -std=c99" } */ + +void matmul_i4 (int bbase_yn, int xcount) +{ + int x; + int * restrict dest_y; + const int * abase_n; + + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } +} + |