1! { dg-do run } 2! { dg-options "-O -fdump-tree-optimized -finline-matmul-limit=1000" } 3module x 4 implicit none 5contains 6 function afunc() 7 real, dimension(3,3) :: afunc 8 afunc = reshape([ 2., 3., 5., 7., 11., 13., 17., 19., 23. ], [3,3]) 9 end function afunc 10 11 function bfunc() 12 real, dimension(3,3) :: bfunc 13 bfunc = reshape([29., 31., 37., 41., 43., 47., 53., 59., 61., 67.],[3,3]) 14 end function bfunc 15end module x 16 17program main 18 use x 19 implicit none 20 real, dimension(3,3), parameter :: & 21 & aval = reshape([ 2., 3., 5., 7., 11., 13., 17., 19., 23. ], [3,3]), & 22 & bval = reshape([29., 31., 37., 41., 43., 47., 53., 59., 61., 67.],[3,3]) 23 integer, dimension(3) :: ind 24 real, dimension(3,3) :: a, b,c,d, ri 25 data ri /120430., 187861., 151737., 161022., 251139., 202847., 212566., 331537., 267781./ 26 data d/904., 1131., 1399., 1182., 1489., 1845., 1556., 1967., 2435. / 27 a = aval 28 b = bval 29 c = matmul(a,b) 30 a = matmul(a,b) 31 if (any(a-c /= 0)) STOP 1 32 a = aval 33 b = bval 34 b = matmul(a,b) 35 if (any(b-c /= 0)) STOP 2 36 b = bval 37 a = matmul(aval, b) 38 if (any(a-c /= 0)) STOP 3 39 ind = [1, 3, 2] 40 c = matmul(a(ind,:),b) 41 if (any(c-ri /= 0)) STOP 4 42 c = matmul(afunc(),b) 43 if (any(c-d /= 0)) STOP 5 44 a = afunc() 45 c = matmul(a, bfunc()) 46 if (any(c-d /= 0)) STOP 6 47end program main 48! { dg-final { scan-tree-dump-times "matmul_r4" 2 "optimized" } } 49