[llvm-commits] [PATCH] Execution domain support for VMOV and VLDR

Tim Northover t.p.northover at gmail.com
Fri Aug 31 06:58:39 PDT 2012


Hi,

> The transformation is safe if you can establish that the original instruction is already reading or writing the other lane. This will often be the case when feeding NEON instructions, since coalescing has folded an INSERT_SUBREG into the instruction. From you own test:
>
>         %S2<def> = VMOVS %S0<kill>, pred:14, pred:%noreg, %D1<imp-def>
>
> The %D1<imp-def> operand tells you that any data dependencies on the other lane are already threaded through this instruction.

I've not been able to come up with an entirely satisfactory solution
to this. If I understand correctly, the above instruction wouldn't be
eligible because D0 is not an implicit-use. I've got a patch that I
believe is correct. Unfortunately with the patch in place I've been
unable to get any domain switching to trigger for VMOVS (VMOVSR and
VMOVRS conversions are still possible, and presumably VLDR though I
haven't checked yet).

For now I'd suggest we revert the VMOVS change and apply the fix
(assuming you find no problems with it) to VMOVRS and VMOVSR. I've
attached the diffs to do this.

Let me know what you think.

Tim.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Revert-Add-support-for-moving-pure-S-register-to-NEO.patch
Type: application/octet-stream
Size: 6931 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120831/ffe2995d/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-Only-perform-domain-conversion-when-it-won-t-break-l.patch
Type: application/octet-stream
Size: 6890 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120831/ffe2995d/attachment-0001.obj>


More information about the llvm-commits mailing list