Commit 144530cf by Martin Liska Committed by Martin Liska

Properly handly PHI stmts in later_of_the_two (PR

	PR middle-end/71898
	* graphite-isl-ast-to-gimple.c (later_of_the_two):
	Properly handly PHI stmts.
	* gfortran.dg/graphite/pr71898.f90: New test.

From-SVN: r238513
parent 04ac4afa
2016-07-20 Martin Liska <mliska@suse.cz>
PR middle-end/71898
* graphite-isl-ast-to-gimple.c (later_of_the_two):
Properly handly PHI stmts.
2016-07-20 Bin Cheng <bin.cheng@arm.com> 2016-07-20 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/71503 PR tree-optimization/71503
......
...@@ -1305,6 +1305,18 @@ later_of_the_two (gimple_stmt_iterator gsi1, gimple_stmt_iterator gsi2) ...@@ -1305,6 +1305,18 @@ later_of_the_two (gimple_stmt_iterator gsi1, gimple_stmt_iterator gsi2)
/* Find the iterator which is the latest. */ /* Find the iterator which is the latest. */
if (bb1 == bb2) if (bb1 == bb2)
{ {
gimple *stmt1 = gsi_stmt (gsi1);
gimple *stmt2 = gsi_stmt (gsi2);
if (stmt1 != NULL && stmt2 != NULL)
{
bool is_phi1 = gimple_code (stmt1) == GIMPLE_PHI;
bool is_phi2 = gimple_code (stmt2) == GIMPLE_PHI;
if (is_phi1 != is_phi2)
return is_phi1 ? gsi2 : gsi1;
}
/* For empty basic blocks gsis point to the end of the sequence. Since /* For empty basic blocks gsis point to the end of the sequence. Since
there is no operator== defined for gimple_stmt_iterator and for gsis there is no operator== defined for gimple_stmt_iterator and for gsis
not pointing to a valid statement gsi_next would assert. */ not pointing to a valid statement gsi_next would assert. */
......
2016-07-20 Martin Liska <mliska@suse.cz>
* gfortran.dg/graphite/pr71898.f90: New test.
2016-07-20 Bin Cheng <bin.cheng@arm.com> 2016-07-20 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/71503 PR tree-optimization/71503
......
! { dg-do compile }
! { dg-options "-floop-nest-optimize -O1" }
MODULE d3_poly
INTEGER, PUBLIC, PARAMETER :: max_grad2=5
INTEGER, PUBLIC, PARAMETER :: max_grad3=3
INTEGER, PUBLIC, PARAMETER :: cached_dim2=(max_grad2+1)*(max_grad2+2)/2
INTEGER, PUBLIC, PARAMETER :: cached_dim3=(max_grad3+1)*(max_grad3+2)*(max_grad3+3)/6
INTEGER, SAVE, DIMENSION(3,cached_dim3) :: a_mono_exp3
INTEGER, SAVE, DIMENSION(cached_dim2,cached_dim2) :: a_mono_mult2
INTEGER, SAVE, DIMENSION(cached_dim3,cached_dim3) :: a_mono_mult3
INTEGER, SAVE, DIMENSION(4,cached_dim3) :: a_mono_mult3a
CONTAINS
SUBROUTINE init_d3_poly_module()
INTEGER :: grad, i, ii, ij, j, subG
INTEGER, DIMENSION(3) :: monoRes3
DO grad=0,max_grad2
DO i=grad,0,-1
DO j=grad-i,0,-1
END DO
END DO
END DO
DO ii=1,cached_dim3
DO ij=ii,cached_dim2
a_mono_mult2(ij,ii)=a_mono_mult2(ii,ij)
END DO
END DO
DO ii=1,cached_dim3
DO ij=ii,cached_dim3
monoRes3=a_mono_exp3(:,ii)+a_mono_exp3(:,ij)
a_mono_mult3(ii,ij)=mono_index3(monoRes3(1),monoRes3(2),monoRes3(3))+1
a_mono_mult3(ij,ii)=a_mono_mult3(ii,ij)
END DO
END DO
DO i=1,cached_dim3
DO j=1,4
a_mono_mult3a(j,i)=a_mono_mult3(j,i)
END DO
END DO
END SUBROUTINE
PURE FUNCTION mono_index3(i,j,k) RESULT(res)
INTEGER, INTENT(in) :: i, j, k
res=grad*(grad+1)*(grad+2)/6+(sgrad)*(sgrad+1)/2+k
END FUNCTION
END MODULE d3_poly
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