2 ! { dg-options "-O3 -finline-matmul-limit=10 -fdump-tree-optimized -fdump-tree-original" }
3 ! PR 37131 - all calls to matmul should be optimized away with -O3
6 real, dimension(3,2) :: a
7 real, dimension(2,4) :: b
8 real, dimension(3,4) :: c
9 real, dimension(3,4) :: cres
10 real, dimension(:,:), allocatable
:: calloc
11 integer :: a1
= size(a
,1), a2
= size(a
,2)
12 integer :: b1
= size(b
,1), b2
= size(b
,2)
13 integer :: c1
= size(c
,1), c2
= size(c
,2)
15 data a
/ 2., -3., 5., -7., 11., -13./
16 data b
/17., -23., 29., -31., 37., -39., 41., -47./
17 data cres
/195., -304., 384., 275., -428., 548., 347., -540., 692., 411., -640., 816./
19 if (sum(c
-cres
)>1e-4) call abort
22 if (sum(calloc
-cres
)>1e-4) call abort
23 if (any([size(calloc
,1), size(calloc
,2)] /= [3,4])) call abort
28 if (sum(calloc
-cres
)>1e-4) call abort
29 if (any([size(calloc
,1), size(calloc
,2)] /= [3,4])) call abort
34 if (sum(calloc
-cres
)>1e-4) call abort
35 if (any([size(calloc
,1), size(calloc
,2)] /= [3,4])) call abort
39 real :: aa(a1
, a2
), bb(b1
, b2
), cc(c1
, c2
)
44 if (sum(cc
-cres
)>1e-4) call abort
45 calloc
= matmul(aa
,bb
)
46 if (sum(calloc
-cres
)>1e-4) call abort
47 if (any([size(calloc
,1), size(calloc
,2)] /= [3,4])) call abort
52 calloc
= matmul(aa
,bb
)
53 if (sum(calloc
-cres
)>1e-4) call abort
54 if (any([size(calloc
,1), size(calloc
,2)] /= [3,4])) call abort
58 calloc
= matmul(aa
,bb
)
59 if (sum(calloc
-cres
)>1e-4) call abort
60 if (any([size(calloc
,1), size(calloc
,2)] /= [3,4])) call abort
65 ! { dg-final { scan-tree-dump-times "_gfortran_matmul" 4 "original" } }
66 ! { dg-final { scan-tree-dump-times "_gfortran_matmul" 0 "optimized" } }
67 ! { dg-final { cleanup-tree-dump "original" } }
68 ! { dg-final { cleanup-tree-dump "optimized" } }