diff options
author | Olivier Hainque <hainque@adacore.com> | 2010-08-27 10:48:32 +0000 |
---|---|---|
committer | Olivier Hainque <hainque@gcc.gnu.org> | 2010-08-27 10:48:32 +0000 |
commit | d32f725a65e4af3eccb7192b3be7662123df5280 (patch) | |
tree | 19db1f26d8d334badf53e2e36df8a12d40ac9c4b /gcc | |
parent | 401fcd3b8fd7158703263fd4de33a23faa7a2738 (diff) | |
download | gcc-d32f725a65e4af3eccb7192b3be7662123df5280.zip gcc-d32f725a65e4af3eccb7192b3be7662123df5280.tar.gz gcc-d32f725a65e4af3eccb7192b3be7662123df5280.tar.bz2 |
dse.c (group_info.base_mem, [...]): Use BLKmode to cover all the possible offsets from this base.
* dse.c (group_info.base_mem, get_group_info): Use BLKmode to
cover all the possible offsets from this base.
(scan_reads_nospill): Pass base_mem's mode to canon_true_dependence.
testsuite/
* gnat.dg/dse_step.ads, dse_step.adb, test_dse_step.adb: New test.
Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com>
From-SVN: r163582
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/dse.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/dse_step.adb | 18 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/dse_step.ads | 19 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/test_dse_step.adb | 14 |
6 files changed, 67 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3609760..edd3c4c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-08-27 Olivier Hainque <hainque@adacore.com> + Eric Botcazou <ebotcazou@adacore.com> + + * dse.c (group_info.base_mem, get_group_info): Use BLKmode to + cover all the possible offsets from this base. + (scan_reads_nospill): Pass base_mem's mode to canon_true_dependence. + 2010-08-26 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/44485 @@ -473,8 +473,9 @@ struct group_info hard_frame_pointer. */ bool frame_related; - /* A mem wrapped around the base pointer for the group in order to - do read dependency. */ + /* A mem wrapped around the base pointer for the group in order to do + read dependency. It must be given BLKmode in order to encompass all + the possible offsets from the base. */ rtx base_mem; /* Canonized version of base_mem's address. */ @@ -705,7 +706,7 @@ get_group_info (rtx base) *slot = gi = (group_info_t) pool_alloc (rtx_group_info_pool); gi->rtx_base = base; gi->id = rtx_group_next_id++; - gi->base_mem = gen_rtx_MEM (QImode, base); + gi->base_mem = gen_rtx_MEM (BLKmode, base); gi->canon_base_addr = canon_rtx (base); gi->store1_n = BITMAP_ALLOC (NULL); gi->store1_p = BITMAP_ALLOC (NULL); @@ -3118,7 +3119,7 @@ scan_reads_nospill (insn_info_t insn_info, bitmap gen, bitmap kill) base. */ if ((read_info->group_id < 0) && canon_true_dependence (group->base_mem, - QImode, + GET_MODE (group->base_mem), group->canon_base_addr, read_info->mem, NULL_RTX, rtx_varies_p)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5da1f90..ebf6039 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-08-27 Olivier Hainque <hainque@adacore.com> + + * gnat.dg/dse_step.ads, dse_step.adb, test_dse_step.adb: New test. + 2010-08-26 Daniel Kraft <d@domob.eu> PR fortran/38936 diff --git a/gcc/testsuite/gnat.dg/dse_step.adb b/gcc/testsuite/gnat.dg/dse_step.adb new file mode 100644 index 0000000..040bcb7 --- /dev/null +++ b/gcc/testsuite/gnat.dg/dse_step.adb @@ -0,0 +1,18 @@ +package body Dse_Step is + + procedure Do_Step (This : in out Counter) is + begin + This.Value := This.Value + This.Step; + end; + + procedure Step_From (Start : in My_Counter) is + Lc : My_Counter := Start; + begin + while Nsteps > 0 loop + Do_Step (Lc); + Nsteps := Nsteps - 1; + end loop; + Mv := Lc.Value; + end; + +end; diff --git a/gcc/testsuite/gnat.dg/dse_step.ads b/gcc/testsuite/gnat.dg/dse_step.ads new file mode 100644 index 0000000..8cf0c74 --- /dev/null +++ b/gcc/testsuite/gnat.dg/dse_step.ads @@ -0,0 +1,19 @@ +package Dse_Step is + + type Counter is record + Value : Natural; + Step : Natural; + end record; + pragma Suppress_Initialization (Counter); + + procedure Do_Step (This : in out Counter); + pragma Inline (Do_Step); + + type My_Counter is new Counter; + pragma Suppress_Initialization (My_Counter); + + procedure Step_From (Start : in My_Counter); + + Nsteps : Natural := 12; + Mv : Natural; +end; diff --git a/gcc/testsuite/gnat.dg/test_dse_step.adb b/gcc/testsuite/gnat.dg/test_dse_step.adb new file mode 100644 index 0000000..77652b4 --- /dev/null +++ b/gcc/testsuite/gnat.dg/test_dse_step.adb @@ -0,0 +1,14 @@ +-- { dg-do compile } +-- { dg-options "-O1 -gnatp -gnatn" } + +with Dse_Step; use Dse_Step; + +procedure Test_Dse_Step is + Start : My_Counter := (Value => 0, Step => 1); + Steps : Natural := Nsteps; +begin + Step_From (Start); + if Mv /= Steps then + raise Program_Error; + end if; +end; |