s390x: enable S/DGEMM block with explicit loop unrolling + interleaving with clang
authorMarius Hillenbrand <mhillen@linux.ibm.com>
Tue, 1 Sep 2020 14:16:53 +0000 (16:16 +0200)
committerMarius Hillenbrand <mhillen@linux.ibm.com>
Wed, 2 Sep 2020 11:49:31 +0000 (13:49 +0200)
The code for SGEMM 16x4 and DGEMM 8x4 blocks on z14 and z15 uses
explicit unrolling and interleaving to improve performance. The code
employs an empty inline asm statement with operands that constrain the
compiler's instruction scheduling and thereby enforce proper overlapping
of load and compute phases. Fix an ifdef to apply that for clang builds,
as well.

Signed-off-by: Marius Hillenbrand <mhillen@linux.ibm.com>
kernel/zarch/gemm_vec.c

index b7d7cc0..ef0b1d1 100644 (file)
@@ -393,7 +393,7 @@ static inline void GEBP_block_16_4(
                         * Note that we need to massage this particular "barrier"
                         * depending on the gcc version.
                         */
-#if __GNUC__ > 7
+#if __GNUC__ > 7 || defined(__clang__)
 #define BARRIER_READ_BEFORE_COMPUTE(SUFFIX)                                    \
     do {                                                                       \
        asm(""                                                                 \