Promote VMOVS to VMOVD when possible.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 9 Aug 2011 23:41:44 +0000 (23:41 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 9 Aug 2011 23:41:44 +0000 (23:41 +0000)
commitc70c2cafe19d90ee0230cc4257772fe68567f06e
treec82cb67c70772699ee214db6cd70ce81e749ce68
parentde317f40f7a9962372adea162a12ec35a628efa1
Promote VMOVS to VMOVD when possible.

On Cortex-A8, we use the NEON v2f32 instructions for f32 arithmetic. For
better latency, we also send D-register copies down the NEON pipeline by
translating them to vorr instructions.

This patch promotes even S-register copies to D-register copies when
possible so they can also go down the NEON pipeline.  Example:

        vldr.32 s0, LCPI0_0
    loop:
        vorr    d1, d0, d0
    loop2:
        ...
        vadd.f32        d1, d1, d16

The vorr instruction looked like this after regalloc:

    %S2<def> = COPY %S0, %D1<imp-def>

Copies involving odd S-registers, and copies that don't define the full
D-register are left alone.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137182 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMBaseInstrInfo.cpp