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
This commit is contained in:
Olivier Hainque 2010-08-27 10:48:32 +00:00 committed by Olivier Hainque
parent 401fcd3b8f
commit d32f725a65
6 changed files with 67 additions and 4 deletions

View file

@ -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

View file

@ -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))

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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;