Minotaur is a superoptimizer for LLVM's intermediate representation that
focuses on integer SIMD instructions, both portable and specific to x86-64. We
created it to attack problems in finding missing peephole optimizations for
SIMD instructions-this is challenging because there are many such instructions
and they can be semantically complex. Minotaur runs a hybrid synthesis
algorithm where instructions are enumerated concretely, but literal constants
are generated by the solver. We use Alive2 as a verification engine; to do this
we modified it to support synthesis and also to support a large subset of
Intel's vector instruction sets (SSE, AVX, AVX2, and AVX-512). Minotaur finds
many profitable optimizations that are missing from LLVM. It achieves limited
speedups on the integer parts of SPEC CPU2017, around 1.3%, and it speeds up
the test suite for the libYUV library by 2.2%, on average, and by 1.64x
maximum, when targeting an Intel Cascade Lake processor