[patch, fortran] Speed up cshift with array shift

Thomas Koenig tkoenig@netcologne.de
Thu Jun 22 17:46:00 GMT 2017


Hello world,

the attached patch speeds up the cshift intrinsic with an array
shift. With this patch, the speed of the library version matches
a straigtforward DO loop implementaion pretty closely in speed.
This should be good enough for government work.

Regression-tested. OK for trunk?

Regards

	Thomas

2017-06-22  Thomas Koenig  <tkoenig@gcc.gnu.org>

         PR fortran/52473
         * Makefile.am:  Add i_cshift1a_c.  Add rules to generate files
         from cshift1a.m4.
         * Makefile.in: Regenerated.
         * m4/cshift1a.m4: New file.
         * m4/cshift.m4 (cshift1): Split up inner loop by removing
         condition. Use memcpy where possible.  Call helper functions
         based on dtype.
         * libgfortran.h: Add prototypes for cshift1_16_c10,
         cshift1_16_c16, cshift1_16_c4, cshift1_16_c8, cshift1_16_i1,
         cshift1_16_i16, cshift1_16_i2, cshift1_16_i4, cshift1_16_i8,
         cshift1_16_r10, cshift1_16_r16, cshift1_16_r4, cshift1_16_r8,
         cshift1_4_c10, cshift1_4_c16, cshift1_4_c4, cshift1_4_c8,
         cshift1_4_i1, cshift1_4_i16, cshift1_4_i2, cshift1_4_i4,
         cshift1_4_i8, cshift1_4_r10, cshift1_4_r16, cshift1_4_r4,
         cshift1_4_r8, cshift1_8_c10, cshift1_8_c16, cshift1_8_c4,
         cshift1_8_c8, cshift1_8_i1, cshift1_8_i16, cshift1_8_i2,
         cshift1_8_i4, cshift1_8_i8, cshift1_8_r10, cshift1_8_r16,
         cshift1_8_r4 and cshift1_8_r8.
         * generated/cshift1_16_c10.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_c16.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_c4.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_c8.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_i1.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_i16.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_i2.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_i4.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_i8.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_r10.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_r16.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_r4.c: New file, generated from cshift1a.m4.
         * generated/cshift1_16_r8.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_c10.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_c16.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_c4.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_c8.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_i1.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_i16.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_i2.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_i4.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_i8.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_r10.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_r16.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_r4.c: New file, generated from cshift1a.m4.
         * generated/cshift1_4_r8.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_c10.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_c16.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_c4.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_c8.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_i1.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_i16.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_i2.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_i4.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_i8.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_r10.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_r16.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_r4.c: New file, generated from cshift1a.m4.
         * generated/cshift1_8_r8.c: New file, generated from cshift1a.m4.

2017-06-22  Thomas Koenig  <tkoenig@gcc.gnu.org>

         PR fortran/52473
         * gfortran.dg/cshift_2.f90:  New test.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: p7.diff
Type: text/x-patch
Size: 310970 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20170622/0f483d24/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cshift_2.f90
Type: text/x-fortran
Size: 3473 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20170622/0f483d24/attachment-0001.bin>


More information about the Fortran mailing list