This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR50561


This patch by Tobias fixes PR50561.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2012-02-15  Tobias Grosser <grosser@fim.uni-passau.de>

	PR tree-optimization/50561
	* graphite-flattening.c (lst_project_loop): Do not
	remove old scattering dimensions after flattening.
	(lst_do_flatten): Likewise.

	* gcc.dg/graphite/pr50561.c: New testcase.

Index: gcc/graphite-flattening.c
===================================================================
*** gcc/graphite-flattening.c	(revision 184259)
--- gcc/graphite-flattening.c	(working copy)
*************** lst_project_loop (lst_p outer, lst_p inn
*** 277,288 ****
        ppl_delete_Linear_Expression (expr);
  
        /* Remove inner loop and the static schedule of its body.  */
!       ds = XNEWVEC (ppl_dimension_type, 2);
!       ds[0] = inner_dim;
!       ds[1] = inner_dim + 1;
!       ppl_Polyhedron_remove_space_dimensions (poly, ds, 2);
!       PBB_NB_SCATTERING_TRANSFORM (pbb) -= 2;
!       free (ds);
      }
  
    mpz_clear (x);
--- 277,302 ----
        ppl_delete_Linear_Expression (expr);
  
        /* Remove inner loop and the static schedule of its body.  */
!       /* FIXME: As long as we use PPL we are not able to remove the old
! 	 scattering dimensions.  The reason is that these dimensions are not
! 	 entirely unused.  They are not necessary as part of the scheduling
! 	 vector, as the earlier dimensions already unambiguously define the
! 	 execution time, however they may still be needed to carry modulo
! 	 constraints as introduced e.g. by strip mining.  The correct solution
! 	 would be to project these dimensions out of the scattering polyhedra.
! 	 In case they are still required to carry modulo constraints they should be kept
! 	 internally as existentially quantified dimensions.  PPL does only support
!          projection of rational polyhedra, however in this case we need an integer
! 	 projection. With isl this will be trivial to implement.  For now we just
! 	 leave the dimensions. This is a little ugly, but should be correct.  */
!       if (0) {
! 	ds = XNEWVEC (ppl_dimension_type, 2);
! 	ds[0] = inner_dim;
! 	ds[1] = inner_dim + 1;
! 	ppl_Polyhedron_remove_space_dimensions (poly, ds, 2);
! 	PBB_NB_SCATTERING_TRANSFORM (pbb) -= 2;
! 	free (ds);
!       }
      }
  
    mpz_clear (x);
*************** lst_do_flatten (lst_p lst)
*** 412,418 ****
      if (LST_LOOP_P (l))
        {
  	res |= lst_flatten_loop (l, zero);
! 	remove_unused_scattering_dimensions (l);
        }
  
    lst_update_scattering (lst);
--- 426,446 ----
      if (LST_LOOP_P (l))
        {
  	res |= lst_flatten_loop (l, zero);
! 
! 	/* FIXME: As long as we use PPL we are not able to remove the old
! 	   scattering dimensions.  The reason is that these dimensions are not
! 	   entirely unused.  They are not necessary as part of the scheduling
! 	   vector, as the earlier dimensions already unambiguously define the
! 	   execution time, however they may still be needed to carry modulo
! 	   constraints as introduced e.g. by strip mining.  The correct solution
! 	   would be to project these dimensions out of the scattering polyhedra.
! 	   In case they are still required to carry modulo constraints they should be kept
! 	   internally as existentially quantified dimensions.  PPL does only support
!            projection of rational polyhedra, however in this case we need an integer
! 	   projection. With isl this will be trivial to implement.  For now we just
! 	   leave the dimensions. This is a little ugly, but should be correct.  */
! 	if (0)
! 	  remove_unused_scattering_dimensions (l);
        }
  
    lst_update_scattering (lst);
Index: gcc/testsuite/gcc.dg/graphite/pr50561.c
===================================================================
*** gcc/testsuite/gcc.dg/graphite/pr50561.c	(revision 0)
--- gcc/testsuite/gcc.dg/graphite/pr50561.c	(revision 0)
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -floop-flatten -floop-strip-mine" } */
+ 
+ void f (unsigned *s)
+ {
+   int n;
+   for (n = 0; n < 256; n++)
+     s[n] = 0;
+ }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]