re PR rtl-optimization/51374 ([avr] insn combine reorders volatile memory accesses)
gcc/ PR rtl-optimization/51374 * combine.c (can_combine_p): Don't allow volatile_refs_p insns to cross other volatile_refs_p insns. gcc/testsuite/ PR rtl-optimization/51374 * testsuite/gcc.target/avr/torture/pr51374-1.c: New. From-SVN: r183796
This commit is contained in:
parent
76a3962fe9
commit
07ad5438a1
@ -1,3 +1,9 @@
|
||||
2012-02-01 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
PR rtl-optimization/51374
|
||||
* combine.c (can_combine_p): Don't allow volatile_refs_p insns
|
||||
to cross other volatile_refs_p insns.
|
||||
|
||||
2012-02-01 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* doc/invoke.texi (fno-inline): Clarify documentation.
|
||||
|
@ -1700,6 +1700,7 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED,
|
||||
rtx link;
|
||||
#endif
|
||||
bool all_adjacent = true;
|
||||
int (*is_volatile_p) (const_rtx);
|
||||
|
||||
if (succ)
|
||||
{
|
||||
@ -1948,11 +1949,17 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED,
|
||||
&& REG_P (dest) && REGNO (dest) < FIRST_PSEUDO_REGISTER)
|
||||
return 0;
|
||||
|
||||
/* If there are any volatile insns between INSN and I3, reject, because
|
||||
they might affect machine state. */
|
||||
/* If INSN contains volatile references (specifically volatile MEMs),
|
||||
we cannot combine across any other volatile references.
|
||||
Even if INSN doesn't contain volatile references, any intervening
|
||||
volatile insn might affect machine state. */
|
||||
|
||||
is_volatile_p = volatile_refs_p (PATTERN (insn))
|
||||
? volatile_refs_p
|
||||
: volatile_insn_p;
|
||||
|
||||
for (p = NEXT_INSN (insn); p != i3; p = NEXT_INSN (p))
|
||||
if (INSN_P (p) && p != succ && p != succ2 && volatile_insn_p (PATTERN (p)))
|
||||
if (INSN_P (p) && p != succ && p != succ2 && is_volatile_p (PATTERN (p)))
|
||||
return 0;
|
||||
|
||||
/* If INSN contains an autoincrement or autodecrement, make sure that
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-02-01 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
PR rtl-optimization/51374
|
||||
* testsuite/gcc.target/avr/torture/pr51374-1.c: New.
|
||||
|
||||
2012-01-31 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/52024
|
||||
|
14
gcc/testsuite/gcc.target/avr/torture/pr51374-1.c
Normal file
14
gcc/testsuite/gcc.target/avr/torture/pr51374-1.c
Normal file
@ -0,0 +1,14 @@
|
||||
/* PR rtl-optimization/51374 */
|
||||
/* { dg-do compile } */
|
||||
|
||||
void vector_18 (void)
|
||||
{
|
||||
extern char slot;
|
||||
unsigned char status = (*(volatile unsigned char*) 0x2B);
|
||||
unsigned char data = (*(volatile unsigned char*) 0x2C);
|
||||
|
||||
if (status & 0x10)
|
||||
slot = 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "\tsbic " } } */
|
Loading…
x
Reference in New Issue
Block a user