fwprop.c (forward_propagate_and_simplify): Only attach a REG_EQUAL note to an insn if the destination is a register.
* fwprop.c (forward_propagate_and_simplify): Only attach a REG_EQUAL note to an insn if the destination is a register. * gcse.c (try_replace_reg): Likewise. testsuite/ * gnat.dg/memtrap.adb: New test. From-SVN: r164245
This commit is contained in:
parent
654a61fb34
commit
2f434b97f1
5 changed files with 49 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
|||
2010-09-13 Olivier Hainque <hainque@adacore.com>
|
||||
|
||||
* fwprop.c (forward_propagate_and_simplify): Only attach a
|
||||
REG_EQUAL note to an insn if the destination is a register.
|
||||
* gcse.c (try_replace_reg): Likewise.
|
||||
|
||||
2010-09-13 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/45611
|
||||
|
|
|
@ -1294,10 +1294,11 @@ forward_propagate_and_simplify (df_ref use, rtx def_insn, rtx def_set)
|
|||
loc = &SET_SRC (use_set);
|
||||
|
||||
/* Do not replace an existing REG_EQUAL note if the insn is not
|
||||
recognized. Either we're already replacing in the note, or
|
||||
we'll separately try plugging the definition in the note and
|
||||
simplifying. */
|
||||
set_reg_equal = (note == NULL_RTX);
|
||||
recognized. Either we're already replacing in the note, or we'll
|
||||
separately try plugging the definition in the note and simplifying.
|
||||
And only install a REQ_EQUAL note when the destination is a REG,
|
||||
as the note would be invalid otherwise. */
|
||||
set_reg_equal = (note == NULL_RTX && REG_P (SET_DEST (use_set)));
|
||||
}
|
||||
|
||||
if (GET_MODE (*loc) == VOIDmode)
|
||||
|
|
10
gcc/gcse.c
10
gcc/gcse.c
|
@ -2351,12 +2351,10 @@ try_replace_reg (rtx from, rtx to, rtx insn)
|
|||
&& validate_change (insn, &SET_SRC (set), src, 0))
|
||||
success = 1;
|
||||
|
||||
/* If we've failed to do replacement, have a single SET, don't already
|
||||
have a note, and have no special SET, add a REG_EQUAL note to not
|
||||
lose information. */
|
||||
if (!success && note == 0 && set != 0
|
||||
&& GET_CODE (SET_DEST (set)) != ZERO_EXTRACT
|
||||
&& GET_CODE (SET_DEST (set)) != STRICT_LOW_PART)
|
||||
/* If we've failed perform the replacement, have a single SET to
|
||||
a REG destination and don't yet have a note, add a REG_EQUAL note
|
||||
to not lose information. */
|
||||
if (!success && note == 0 && set != 0 && REG_P (SET_DEST (set)))
|
||||
note = set_unique_reg_note (insn, REG_EQUAL, copy_rtx (src));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2010-09-12 Olivier Hainque <hainque@adacore.com>
|
||||
|
||||
* gnat.dg/memtrap.adb: New test.
|
||||
|
||||
2010-09-11 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||
|
||||
* gfortran.dg/promotion.f90: Fix options.
|
||||
|
|
30
gcc/testsuite/gnat.dg/memtrap.adb
Normal file
30
gcc/testsuite/gnat.dg/memtrap.adb
Normal file
|
@ -0,0 +1,30 @@
|
|||
-- { dg-do compile }
|
||||
-- { dg-options "-O2" }
|
||||
|
||||
with System;
|
||||
|
||||
procedure Memtrap is
|
||||
X : integer;
|
||||
for X'address use System.Null_Address;
|
||||
begin
|
||||
X := 12;
|
||||
exception
|
||||
when others => null;
|
||||
end;
|
||||
|
||||
-- { dg-final { scan-assembler "__gnat_begin_handler" } }
|
||||
-- { dg-do compile }
|
||||
-- { dg-options "-O2" }
|
||||
|
||||
with System;
|
||||
|
||||
procedure Memtrap is
|
||||
X : integer;
|
||||
for X'address use System.Null_Address;
|
||||
begin
|
||||
X := 12;
|
||||
exception
|
||||
when others => null;
|
||||
end;
|
||||
|
||||
-- { dg-final { scan-assembler "__gnat_begin_handler|__gnat_raise_nodefer" } }
|
Loading…
Add table
Reference in a new issue