Commit d32f725a by Olivier Hainque Committed by Olivier Hainque

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
parent 401fcd3b
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))
......
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
......
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;
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;
-- { 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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment