This is an archive of the discontinued LLVM Phabricator instance.

[ARM] Combines for VMOVN
ClosedPublic

Authored by dmgreen on Apr 8 2020, 4:45 AM.

Details

Summary

This adds two combines for VMOVN, one to fold VMOVN[tb](c, VQMOVNb(a, b)) => VQMOVN[tb](c, b), the other to perform demand bits analysis on the lanes of a VMOVN. We know that only the bottom lanes of the second operand and the top or bottom lanes of the Qd operand are needed in the result, depending on if the VMOVN is bottom or top.

Diff Detail

Event Timeline

dmgreen created this revision.Apr 8 2020, 4:45 AM
samparker added inline comments.Apr 14 2020, 3:02 AM
llvm/lib/Target/ARM/ARMISelLowering.cpp
14442

Would it be possible to use APInt::getSplat() instead? This is looking a bit cryptic.

ctetreau added inline comments.Apr 14 2020, 1:37 PM
llvm/lib/Target/ARM/ARMISelLowering.cpp
14441

getVectorNumElements is going away soon. Please do the cast.

See: D77278

efriedma added inline comments.
llvm/lib/Target/ARM/ARMISelLowering.cpp
14441

This is EVT::getVectorNumElements(); that's not going away, and there is no such cast.

ctetreau marked an inline comment as done.Apr 14 2020, 3:26 PM
ctetreau added inline comments.
llvm/lib/Target/ARM/ARMISelLowering.cpp
14441

Ahh, EVT... My old nemesis...

Please disregard.

dmgreen updated this revision to Diff 260864.Apr 29 2020, 1:57 AM

Updated to use Splat's

Herald added a project: Restricted Project. · View Herald TranscriptApr 29 2020, 1:57 AM
This revision is now accepted and ready to land.May 14 2020, 6:25 AM
This revision was automatically updated to reflect the committed changes.