mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-11 03:50:27 +08:00
re PR rtl-optimization/24257 (ICE: in extract_insn with -O -fgcse -fgcse-sm)
2006-01-14 Steven Bosscher <stevenb.gcc@gmail.com> Richard Guenther <rguenther@suse.de> PR rtl-optimization/24257 * gcse.c (find_moveable_store): Only consider a store movable when the SET_SRC of the insn can be assigned to a register. * gcc.dg/torture/pr24257.c: New testcase. Co-Authored-By: Richard Guenther <rguenther@suse.de> From-SVN: r109701
This commit is contained in:
parent
2482200f02
commit
26fb114d13
@ -1,3 +1,10 @@
|
||||
2006-01-14 Steven Bosscher <stevenb.gcc@gmail.com>
|
||||
Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR rtl-optimization/24257
|
||||
* gcse.c (find_moveable_store): Only consider a store movable
|
||||
when the SET_SRC of the insn can be assigned to a register.
|
||||
|
||||
2006-01-14 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* tree.c (tree_not_class_check_failed): New function.
|
||||
|
@ -5664,6 +5664,14 @@ find_moveable_store (rtx insn, int *regs_set_before, int *regs_set_after)
|
||||
if (find_reg_note (insn, REG_EH_REGION, NULL_RTX))
|
||||
return;
|
||||
|
||||
/* Make sure that the SET_SRC of this store insns can be assigned to
|
||||
a register, or we will fail later on in replace_store_insn, which
|
||||
assumes that we can do this. But sometimes the target machine has
|
||||
oddities like MEM read-modify-write instruction. See for example
|
||||
PR24257. */
|
||||
if (!can_assign_to_reg_p (SET_SRC (set)))
|
||||
return;
|
||||
|
||||
ptr = ldst_entry (dest);
|
||||
if (!ptr->pattern_regs)
|
||||
ptr->pattern_regs = extract_mentioned_regs (dest);
|
||||
|
@ -1,3 +1,9 @@
|
||||
2006-01-14 Steven Bosscher <stevenb.gcc@gmail.com>
|
||||
Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR rtl-optimization/24257
|
||||
* gcc.dg/torture/pr24257.c: New testcase.
|
||||
|
||||
2006-01-13 Adam Nemet <anemet@caviumnetworks.com>
|
||||
|
||||
* gcc.c-torture/execute/20060110-1.c: New test.
|
||||
|
26
gcc/testsuite/gcc.dg/torture/pr24257.c
Normal file
26
gcc/testsuite/gcc.dg/torture/pr24257.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O -fgcse -fgcse-sm" } */
|
||||
|
||||
typedef struct A {
|
||||
int buf, left;
|
||||
} A;
|
||||
|
||||
static void flush(A *s, int n)
|
||||
{
|
||||
s->buf <<= n;
|
||||
|
||||
while (s->left < 32) {
|
||||
s->buf <<= 8;
|
||||
s->left += 8;
|
||||
}
|
||||
|
||||
s->buf=0;
|
||||
}
|
||||
|
||||
void oof(A *s, int n)
|
||||
{
|
||||
s->buf = n;
|
||||
s->left = n;
|
||||
|
||||
flush(s, n);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user