aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorOlivier Hainque <hainque@adacore.com>2010-08-27 10:48:32 +0000
committerOlivier Hainque <hainque@gcc.gnu.org>2010-08-27 10:48:32 +0000
commitd32f725a65e4af3eccb7192b3be7662123df5280 (patch)
tree19db1f26d8d334badf53e2e36df8a12d40ac9c4b /gcc
parent401fcd3b8fd7158703263fd4de33a23faa7a2738 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/dse.c9
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/dse_step.adb18
-rw-r--r--gcc/testsuite/gnat.dg/dse_step.ads19
-rw-r--r--gcc/testsuite/gnat.dg/test_dse_step.adb14
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
diff --git a/gcc/dse.c b/gcc/dse.c
index 5dd7bd6..1debafc 100644
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -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;