Hello world, the attached patch implements a blocked algorithm for improving the speed of cshift for dim > 1. It uses the fact that integer, dimension (n1,n2,n3) :: a, b b = cshift(a,shift,3) is identical, as far as the memory locations is concerned. integer, dimension (n1*n2*n3) :: c, d d = cshift(c, shift*n1*n2, 1) The speedup is quite large; from being really slow for dim > 1, this patch makes it go even faster. Below there are some comparisons for the attached benchmark, do-1.f90. gfortran-7 uses the old library version. Interestingly, the library version is also much faster than an implementation of straight DO loops. Regression-tested. OK for trunk? Regards Thomas $ gfortran-7 -static-libgfortran -O3 do-1.f90 && ./a.out Testing explicit DO loops Dim = 1 Elapsed CPU time = 5.71363878 Dim = 2 Elapsed CPU time = 5.40494061 Dim = 3 Elapsed CPU time = 5.40769291 Testing built-in cshift Dim = 1 Elapsed CPU time = 3.43479729 Dim = 2 Elapsed CPU time = 11.7110386 Dim = 3 Elapsed CPU time = 31.0966301 $ gfortran -static-libgfortran -O3 do-1.f90 && ./a.out Testing explicit DO loops Dim = 1 Elapsed CPU time = 5.73881340 Dim = 2 Elapsed CPU time = 5.38435745 Dim = 3 Elapsed CPU time = 5.38971329 Testing built-in cshift Dim = 1 Elapsed CPU time = 3.42018127 Dim = 2 Elapsed CPU time = 2.24075317 Dim = 3 Elapsed CPU time = 2.23136330 2017-06-14 Thomas Koenig PR fortran/52473 * m4/cshift0.m4: For arrays that are contiguous up to shift, implement blocked algorighm for cshift. * generated/cshift0_c10.c: Regenerated. * generated/cshift0_c16.c: Regenerated. * generated/cshift0_c4.c: Regenerated. * generated/cshift0_c8.c: Regenerated. * generated/cshift0_i1.c: Regenerated. * generated/cshift0_i16.c: Regenerated. * generated/cshift0_i2.c: Regenerated. * generated/cshift0_i4.c: Regenerated. * generated/cshift0_i8.c: Regenerated. * generated/cshift0_r10.c: Regenerated. * generated/cshift0_r16.c: Regenerated. * generated/cshift0_r4.c: Regenerated. * generated/cshift0_r8.c: Regenerated. 2017-06-14 Thomas Koenig PR fortran/52473 * gfortran.dg/cshift_1.f90: New test.