Improve extraction of double vectors from quad vectors

Registered by Richard Sandiford

There are NEON patterns to extrract one half of a quad vector. These are
presented at the rtl level as instructions with arbitrary quad sources and
arbitrary double destinations. If the register allocators happen to assign
a good combination, the patterns expand to nothing, otherwise they
expand to a vector move. However, there is nothing to tell the register
allocator what is required here.

In principle, we should be able to use a plain subreg move instead.
That seems to trigger some latent middle-end bugs though.

Fixing this removes several vmovs from some libav loops.

Status:

Patch merged to 4.6.

Blueprint information

Status:
Complete
Approver:
Michael Hope
Priority:
Medium
Drafter:
Richard Sandiford
Direction:
Approved
Assignee:
Richard Sandiford
Definition:
Approved
Series goal:
Accepted for 4.6
Implementation:
Implemented
Milestone target:
milestone icon 4.6-2011.10
Started by
Michael Hope
Completed by
Richard Sandiford

Related branches

Sprints

Whiteboard

Headline: Improved performance by recognising NEON half vector moves and treating them as no-operation sub register moves
Acceptance: https://wiki.linaro.org/WorkingGroups/ToolChain/std-performance-acceptance

(?)

Work Items

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.