diff mbox

[2/3] canonicalize_loop_ivs should not generate unsigned types.

Message ID 1311492333-30309-3-git-send-email-sebpop@gmail.com
State New
Headers show

Commit Message

Sebastian Pop July 24, 2011, 7:25 a.m. UTC
2011-07-23  Sebastian Pop  <sebastian.pop@amd.com>

	* tree-ssa-loop-manip.c (canonicalize_loop_ivs): Build an unsigned
	iv only when the largest type is unsigned.  Do not call
	lang_hooks.types.type_for_size.

	* testsuite/libgomp.graphite/force-parallel-1.c: Un-xfail.
	* testsuite/libgomp.graphite/force-parallel-2.c: Adjust pattern.
---
 gcc/ChangeLog                                      |    6 ++++++
 gcc/tree-ssa-loop-manip.c                          |   14 +++++++++++---
 libgomp/ChangeLog                                  |    5 +++++
 .../testsuite/libgomp.graphite/force-parallel-1.c  |    2 +-
 .../testsuite/libgomp.graphite/force-parallel-2.c  |    2 +-
 5 files changed, 24 insertions(+), 5 deletions(-)

Comments

Richard Biener July 24, 2011, 10:59 a.m. UTC | #1
On Sun, Jul 24, 2011 at 9:25 AM, Sebastian Pop <sebpop@gmail.com> wrote:
> 2011-07-23  Sebastian Pop  <sebastian.pop@amd.com>
>
>        * tree-ssa-loop-manip.c (canonicalize_loop_ivs): Build an unsigned
>        iv only when the largest type is unsigned.  Do not call
>        lang_hooks.types.type_for_size.
>
>        * testsuite/libgomp.graphite/force-parallel-1.c: Un-xfail.
>        * testsuite/libgomp.graphite/force-parallel-2.c: Adjust pattern.
> ---
>  gcc/ChangeLog                                      |    6 ++++++
>  gcc/tree-ssa-loop-manip.c                          |   14 +++++++++++---
>  libgomp/ChangeLog                                  |    5 +++++
>  .../testsuite/libgomp.graphite/force-parallel-1.c  |    2 +-
>  .../testsuite/libgomp.graphite/force-parallel-2.c  |    2 +-
>  5 files changed, 24 insertions(+), 5 deletions(-)
>
> diff --git a/gcc/ChangeLog b/gcc/ChangeLog
> index 2d147b8..e32034f 100644
> --- a/gcc/ChangeLog
> +++ b/gcc/ChangeLog
> @@ -1,5 +1,11 @@
>  2011-07-23  Sebastian Pop  <sebastian.pop@amd.com>
>
> +       * tree-ssa-loop-manip.c (canonicalize_loop_ivs): Build an unsigned
> +       iv only when the largest type is unsigned.  Do not call
> +       lang_hooks.types.type_for_size.
> +
> +2011-07-23  Sebastian Pop  <sebastian.pop@amd.com>
> +
>        PR middle-end/47653
>        * graphite-scop-detection.c (graphite_can_represent_loop): Discard
>        loops using wrapping semantics.
> diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c
> index 8176ed8..2512269 100644
> --- a/gcc/tree-ssa-loop-manip.c
> +++ b/gcc/tree-ssa-loop-manip.c
> @@ -1200,6 +1200,8 @@ canonicalize_loop_ivs (struct loop *loop, tree *nit, bool bump_in_latch)
>   gimple stmt;
>   edge exit = single_dom_exit (loop);
>   gimple_seq stmts;
> +  enum machine_mode mode;
> +  bool unsigned_p = false;
>
>   for (psi = gsi_start_phis (loop->header);
>        !gsi_end_p (psi); gsi_next (&psi))
> @@ -1207,11 +1209,17 @@ canonicalize_loop_ivs (struct loop *loop, tree *nit, bool bump_in_latch)
>       gimple phi = gsi_stmt (psi);
>       tree res = PHI_RESULT (phi);
>
> -      if (is_gimple_reg (res) && TYPE_PRECISION (TREE_TYPE (res)) > precision)
> -       precision = TYPE_PRECISION (TREE_TYPE (res));
> +      type = TREE_TYPE (res);
> +      if (is_gimple_reg (res) && TYPE_PRECISION (type) > precision)
> +       {
> +         precision = TYPE_PRECISION (type);
> +         unsigned_p = TYPE_UNSIGNED (type);

For two IVs with the same precision, one signed and one unsigned you choose
signedness of the canonical IV based on the random order of PHIs - that doesn't
look correct.

I think what you should do here is use an unsigned type if any of the IVs with
the current max precision is unsigned.

Richard.

> +       }
>     }
>
> -  type = lang_hooks.types.type_for_size (precision, 1);
> +  mode = smallest_mode_for_size (precision, MODE_INT);
> +  precision = GET_MODE_PRECISION (mode);
> +  type = build_nonstandard_integer_type (precision, unsigned_p);
>
>   if (original_precision != precision)
>     {
> diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
> index 9225401..d5cd94d 100644
> --- a/libgomp/ChangeLog
> +++ b/libgomp/ChangeLog
> @@ -1,3 +1,8 @@
> +2011-07-23  Sebastian Pop  <sebastian.pop@amd.com>
> +
> +       * testsuite/libgomp.graphite/force-parallel-1.c: Un-xfail.
> +       * testsuite/libgomp.graphite/force-parallel-2.c: Adjust pattern.
> +
>  2011-07-18  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
>
>        PR target/49541
> diff --git a/libgomp/testsuite/libgomp.graphite/force-parallel-1.c b/libgomp/testsuite/libgomp.graphite/force-parallel-1.c
> index 71ed332..7f043d8 100644
> --- a/libgomp/testsuite/libgomp.graphite/force-parallel-1.c
> +++ b/libgomp/testsuite/libgomp.graphite/force-parallel-1.c
> @@ -23,7 +23,7 @@ int main(void)
>  }
>
>  /* Check that parallel code generation part make the right answer.  */
> -/* { dg-final { scan-tree-dump-times "1 loops carried no dependency" 2 "graphite" { xfail *-*-* } } } */
> +/* { dg-final { scan-tree-dump-times "1 loops carried no dependency" 2 "graphite" } } */
>  /* { dg-final { cleanup-tree-dump "graphite" } } */
>  /* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */
>  /* { dg-final { cleanup-tree-dump "parloops" } } */
> diff --git a/libgomp/testsuite/libgomp.graphite/force-parallel-2.c b/libgomp/testsuite/libgomp.graphite/force-parallel-2.c
> index 1ce0feb..03d8236 100644
> --- a/libgomp/testsuite/libgomp.graphite/force-parallel-2.c
> +++ b/libgomp/testsuite/libgomp.graphite/force-parallel-2.c
> @@ -23,7 +23,7 @@ int main(void)
>  }
>
>  /* Check that parallel code generation part make the right answer.  */
> -/* { dg-final { scan-tree-dump-times "2 loops carried no dependency" 1 "graphite" } } */
> +/* { dg-final { scan-tree-dump-times "2 loops carried no dependency" 2 "graphite" } } */
>  /* { dg-final { cleanup-tree-dump "graphite" } } */
>  /* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */
>  /* { dg-final { cleanup-tree-dump "parloops" } } */
> --
> 1.7.4.1
>
>
diff mbox

Patch

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2d147b8..e32034f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@ 
 2011-07-23  Sebastian Pop  <sebastian.pop@amd.com>
 
+	* tree-ssa-loop-manip.c (canonicalize_loop_ivs): Build an unsigned
+	iv only when the largest type is unsigned.  Do not call
+	lang_hooks.types.type_for_size.
+
+2011-07-23  Sebastian Pop  <sebastian.pop@amd.com>
+
 	PR middle-end/47653
 	* graphite-scop-detection.c (graphite_can_represent_loop): Discard
 	loops using wrapping semantics.
diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c
index 8176ed8..2512269 100644
--- a/gcc/tree-ssa-loop-manip.c
+++ b/gcc/tree-ssa-loop-manip.c
@@ -1200,6 +1200,8 @@  canonicalize_loop_ivs (struct loop *loop, tree *nit, bool bump_in_latch)
   gimple stmt;
   edge exit = single_dom_exit (loop);
   gimple_seq stmts;
+  enum machine_mode mode;
+  bool unsigned_p = false;
 
   for (psi = gsi_start_phis (loop->header);
        !gsi_end_p (psi); gsi_next (&psi))
@@ -1207,11 +1209,17 @@  canonicalize_loop_ivs (struct loop *loop, tree *nit, bool bump_in_latch)
       gimple phi = gsi_stmt (psi);
       tree res = PHI_RESULT (phi);
 
-      if (is_gimple_reg (res) && TYPE_PRECISION (TREE_TYPE (res)) > precision)
-	precision = TYPE_PRECISION (TREE_TYPE (res));
+      type = TREE_TYPE (res);
+      if (is_gimple_reg (res) && TYPE_PRECISION (type) > precision)
+	{
+	  precision = TYPE_PRECISION (type);
+	  unsigned_p = TYPE_UNSIGNED (type);
+	}
     }
 
-  type = lang_hooks.types.type_for_size (precision, 1);
+  mode = smallest_mode_for_size (precision, MODE_INT);
+  precision = GET_MODE_PRECISION (mode);
+  type = build_nonstandard_integer_type (precision, unsigned_p);
 
   if (original_precision != precision)
     {
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 9225401..d5cd94d 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,8 @@ 
+2011-07-23  Sebastian Pop  <sebastian.pop@amd.com>
+
+	* testsuite/libgomp.graphite/force-parallel-1.c: Un-xfail.
+	* testsuite/libgomp.graphite/force-parallel-2.c: Adjust pattern.
+
 2011-07-18  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
 	PR target/49541
diff --git a/libgomp/testsuite/libgomp.graphite/force-parallel-1.c b/libgomp/testsuite/libgomp.graphite/force-parallel-1.c
index 71ed332..7f043d8 100644
--- a/libgomp/testsuite/libgomp.graphite/force-parallel-1.c
+++ b/libgomp/testsuite/libgomp.graphite/force-parallel-1.c
@@ -23,7 +23,7 @@  int main(void)
 }
 
 /* Check that parallel code generation part make the right answer.  */
-/* { dg-final { scan-tree-dump-times "1 loops carried no dependency" 2 "graphite" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "1 loops carried no dependency" 2 "graphite" } } */
 /* { dg-final { cleanup-tree-dump "graphite" } } */
 /* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */
 /* { dg-final { cleanup-tree-dump "parloops" } } */
diff --git a/libgomp/testsuite/libgomp.graphite/force-parallel-2.c b/libgomp/testsuite/libgomp.graphite/force-parallel-2.c
index 1ce0feb..03d8236 100644
--- a/libgomp/testsuite/libgomp.graphite/force-parallel-2.c
+++ b/libgomp/testsuite/libgomp.graphite/force-parallel-2.c
@@ -23,7 +23,7 @@  int main(void)
 }
 
 /* Check that parallel code generation part make the right answer.  */
-/* { dg-final { scan-tree-dump-times "2 loops carried no dependency" 1 "graphite" } } */
+/* { dg-final { scan-tree-dump-times "2 loops carried no dependency" 2 "graphite" } } */
 /* { dg-final { cleanup-tree-dump "graphite" } } */
 /* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */
 /* { dg-final { cleanup-tree-dump "parloops" } } */