Page MenuHomePhabricator

[Power9] Add additional patterns to recognize and transform insertelt/extractelt to vinsert[h|b]/vextractu[h|b] instructions.

Authored by gyiu on Jun 26 2017, 9:59 AM.


  • Added code to recognize insertelement on v8i16/v16i8 vectors and transform to use vinserth/vinsertb instructions.
  • Added code to recognize extractelement on v8i16/v16i8 vectors, specifically extracting the elements from doubleword element 1 of a VSR, to use vextractuh/vextractub instructions. The normal code-gen requires an extra xxswapd instruction to get the elements into the proper half of the register before a mfvsrd.
  • Added LIT tests for above patterns.

Diff Detail


Event Timeline

gyiu created this revision.Jun 26 2017, 9:59 AM
nemanjai edited edge metadata.Jun 29 2017, 1:09 AM

I think the vector extract portion of this interacts with We should figure out which of the two sequences is optimal and settle on that.

kbarton requested changes to this revision.Aug 22 2017, 1:36 PM

Did @nemanjai comment about the vector extracts get addressed?

This revision now requires changes to proceed.Aug 22 2017, 1:36 PM
gyiu added a comment.EditedAug 23 2017, 11:32 AM

@nemanjai @kbarton I believe the code sequences that '' generate have equal or less than the number of cycles these 'vextractu[h|b] + mfvsrd' sequences. Also, they are more general and can handle more cases. Therefore I don't think the extract portion of this patch is useful anymore. However, the insertelement patterns are still good to have IMO.

gyiu updated this revision to Diff 113263.Aug 30 2017, 7:59 AM
gyiu edited edge metadata.
  • Removed extract element patterns as changes from '' generate better code in terms of total cycles. Also it catches more cases than the vextractu[hb] instructions, as it's only beneficial when operating on dword[1] of the vector register.
kbarton accepted this revision.Oct 23 2017, 8:06 PM


This revision is now accepted and ready to land.Oct 23 2017, 8:06 PM
This revision was automatically updated to reflect the committed changes.