Am 10.01.2016 um 12:55 schrieb Thomas Koenig:
Hello world,
the attached patch fixes the regression. Before this, front-end
optimization would have tried to put a DO loop inside a WHERE construct,
leading to an ICE.
The updated test case demonstrates that matmul inlining is done even
after not doing it inside a WHERE.
OK for trunk with that change?
Thomas
! { dg-do compile }
! { dg-options "-ffrontend-optimize -fdump-tree-original" }
! PR 69154 - inlined matmul used to cause an ICE inside a WHERE.
MODULE m_numeric_tools
INTEGER, PARAMETER :: dp=8
CONTAINS
subroutine llsfit_svd(xx,yy,sigma,nfuncs,funcs,chisq,par,var,cov,info)
real(dp),intent(in) :: xx(:),yy(:),sigma(:)
real(dp),dimension(SIZE(xx)) :: bb,sigm1
real(dp) :: tmp(nfuncs)
real(dp),allocatable :: work(:),Vt(:,:),U(:,:),S(:)
real(dp),dimension(3,3) :: a, b, c
WHERE (S>TOL_*MAXVAL(S))
tmp=MATMUL(bb,U)/S
END WHERE
call random_number(a)
call random_number(b)
c = matmul(a,b)
end subroutine llsfit_svd
END MODULE m_numeric_tools
! { dg-final { scan-tree-dump-times "matmul_r8" 1 "original" } }