Skip to content
  • David Green's avatar
    [ARM] MVE interleaving load and stores. · 882f23ca
    David Green authored
    Now that we have the intrinsics, we can add VLD2/4 and VST2/4 lowering
    for MVE. This works the same way as Neon, recognising the load/shuffles
    combination and converting them into intrinsics in a pre-isel pass,
    which just calls getMaxSupportedInterleaveFactor, lowerInterleavedLoad
    and lowerInterleavedStore.
    
    The main difference to Neon is that we do not have a VLD3 instruction.
    Otherwise most of the code works very similarly, with just some minor
    differences in the form of the intrinsics to work around. VLD3 is
    disabled by making isLegalInterleavedAccessType return false for those
    cases.
    
    We may need some other future adjustments, such as VLD4 take up half the
    available registers so should maybe cost more. This patch should get the
    basics in though.
    
    Differential Revision: https://reviews.llvm.org/D69392
    882f23ca