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:
parent
401fcd3b8f
commit
d32f725a65
6 changed files with 67 additions and 4 deletions
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
18
gcc/testsuite/gnat.dg/dse_step.adb
Normal file
18
gcc/testsuite/gnat.dg/dse_step.adb
Normal 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;
|
19
gcc/testsuite/gnat.dg/dse_step.ads
Normal file
19
gcc/testsuite/gnat.dg/dse_step.ads
Normal 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;
|
14
gcc/testsuite/gnat.dg/test_dse_step.adb
Normal file
14
gcc/testsuite/gnat.dg/test_dse_step.adb
Normal 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;
|
Loading…
Add table
Reference in a new issue