[PATCH][ARM] Improve the instruction selection of vector loads.
Quentin Colombet
qcolombet at apple.com
Wed Jul 3 10:09:18 PDT 2013
Ping?
-Quentin
On Jul 1, 2013, at 5:42 PM, Quentin Colombet <qcolombet at apple.com> wrote:
> Hi,
>
> Here is a patch to improve the instruction selection of vector loads on ARM.
> Thanks for your review.
>
> ** Problematic **
> In the ARM back-end, build_vector nodes are lowered to a target specific build_vector that uses floating point type[1].
> This works well, unless the inserted bitcasts survive until instruction selection. In that case, they incur moves between integer unit and floating point unit that may result in inefficient code.
>
> In other words, this conversion may introduce artificial dependencies when the code leading to the build vector cannot be completed with a floating point type.
>
> In particular, this happens when loads are not aligned.
>
> In that case, the compiler generates general purpose loads and creates the floating point vector from them, instead of directly using the vector unit.
>
> <rdar://problem/14170854>
>
> [1] The rational is that floating point registers are aliases of vector registers.
>
> ** Motivating Example **
> The attached motivating_example.ll demonstrates that (also part of a test case in the proposed patch).
>
> To reproduce:
> llc -O3 -mtriple thumbv7-apple-ios3 motivating_example.ll -o -
> ldr r0, [r1]
> ldr r1, [r2]
> vmov s1, r1
> vmov s0, r0
> Here each ldr, vmov sequences could have been replaced by a simple vld1.32.
>
> ** Proposed Solution **
> Use a vector friendly sequence of code when the inserted bitcasts to floating point survived DAGCombine.
>
> Thanks for Eli Friedman for the direction!
>
> This is done by a target specific DAGCombine that changes the target specific build_vector into a sequence of insert_vector_elt that get rid of the bitcasts.
>
> Thanks for your review.
>
> Cheers,
>
> -Quentin
> <ARMISelLowering.patch> <motivating_example.ll> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130703/f771dc70/attachment.html>
More information about the llvm-commits
mailing list