This is an archive of the discontinued LLVM Phabricator instance.

[ARM] Implement isExtractSubvectorCheap
ClosedPublic

Authored by efriedma on Dec 14 2016, 2:01 PM.

Details

Summary

See https://reviews.llvm.org/D6678 for the history of isExtractSubvectorCheap. Essentially the same considerations apply to ARM.

This temporarily breaks the formation of vpadd/vpaddl in certain cases; AddCombineToVPADDL essentially assumes that we won't form VUZP shuffles. This is mostly orthogonal, though, so I'll fix it in a followup.

Diff Detail

Repository
rL LLVM

Event Timeline

efriedma updated this revision to Diff 81461.Dec 14 2016, 2:01 PM
efriedma retitled this revision from to [ARM] Implement isExtractSubvectorCheap.
efriedma updated this object.
efriedma set the repository for this revision to rL LLVM.
efriedma added subscribers: mkuper, llvm-commits.
rengolin accepted this revision.Dec 20 2016, 3:38 AM
rengolin edited edge metadata.

Hi Eli,

Just making sure the vorr can't move past the vld1s, LGTM. Thanks!

Looking forward to the follow up to fix vpadd.

test/CodeGen/ARM/vext.ll
144 ↗(On Diff #81461)

Currently, the vmov.u16 gets moved in between the vld1s, so I worry that the compiler might try to do that again with the vorr and the CHECK-NEXT could fail.

This revision is now accepted and ready to land.Dec 20 2016, 3:38 AM
efriedma added inline comments.Dec 20 2016, 11:16 AM
test/CodeGen/ARM/vext.ll
144 ↗(On Diff #81461)

I think I'll just generate the checks using update_llc_test_checks.py to make it easy to regenerate if a scheduler change makes it move for some reason. (I think we really need exhaustive checks for shuffles; it can be hard to spot regressions otherwise.)

This revision was automatically updated to reflect the committed changes.