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> 2010-08-26 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/44485 PR tree-optimization/44485
......
...@@ -473,8 +473,9 @@ struct group_info ...@@ -473,8 +473,9 @@ struct group_info
hard_frame_pointer. */ hard_frame_pointer. */
bool frame_related; bool frame_related;
/* A mem wrapped around the base pointer for the group in order to /* A mem wrapped around the base pointer for the group in order to do
do read dependency. */ read dependency. It must be given BLKmode in order to encompass all
the possible offsets from the base. */
rtx base_mem; rtx base_mem;
/* Canonized version of base_mem's address. */ /* Canonized version of base_mem's address. */
...@@ -705,7 +706,7 @@ get_group_info (rtx base) ...@@ -705,7 +706,7 @@ get_group_info (rtx base)
*slot = gi = (group_info_t) pool_alloc (rtx_group_info_pool); *slot = gi = (group_info_t) pool_alloc (rtx_group_info_pool);
gi->rtx_base = base; gi->rtx_base = base;
gi->id = rtx_group_next_id++; 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->canon_base_addr = canon_rtx (base);
gi->store1_n = BITMAP_ALLOC (NULL); gi->store1_n = BITMAP_ALLOC (NULL);
gi->store1_p = 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) ...@@ -3118,7 +3119,7 @@ scan_reads_nospill (insn_info_t insn_info, bitmap gen, bitmap kill)
base. */ base. */
if ((read_info->group_id < 0) if ((read_info->group_id < 0)
&& canon_true_dependence (group->base_mem, && canon_true_dependence (group->base_mem,
QImode, GET_MODE (group->base_mem),
group->canon_base_addr, group->canon_base_addr,
read_info->mem, NULL_RTX, read_info->mem, NULL_RTX,
rtx_varies_p)) 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> 2010-08-26 Daniel Kraft <d@domob.eu>
PR fortran/38936 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