  The resurgence of machine learning has increased the demand for
high-performance basic linear algebra subroutines (BLAS), which have long
depended on libraries to achieve peak performance on commodity hardware.
High-performance BLAS implementations rely on a layered approach that consists
of tiling and packing layers, for data (re)organization, and micro kernels that
perform the actual computations. The creation of high-performance micro kernels
requires significant development effort to write tailored assembly code for
each architecture. This hand optimization task is complicated by the recent
introduction of matrix engines by IBM's POWER10 MMA, Intel AMX, and Arm ME to
deliver high-performance matrix operations. This paper presents a compiler-only
alternative to the use of high-performance libraries by incorporating, to the
best of our knowledge and for the first time, the automatic generation of the
layered approach into LLVM, a production compiler. Modular design of the
algorithm, such as the use of LLVM's matrix-multiply intrinsic for a clear
interface between the tiling and packing layers and the micro kernel, makes it
easy to retarget the code generation to multiple accelerators. The use of
intrinsics enables a comprehensive performance study. In processors without
hardware matrix engines, the tiling and packing delivers performance up to 22x
(Intel), for small matrices, and more than 6x (POWER9), for large matrices,
faster than PLuTo, a widely used polyhedral optimizer. The performance also
approaches high-performance libraries and is only 34% slower than OpenBLAS and
on-par with Eigen for large matrices. With MMA in POWER10 this solution is, for
large matrices, over 2.6x faster than the vector-extension solution, matches
Eigen performance, and achieves up to 96% of BLAS peak performance.
