This is an archive of the discontinued LLVM Phabricator instance.

[VE] LVLGen and vreg-to-vreg copy
AbandonedPublic

Authored by simoll on Nov 5 2020, 6:22 AM.

Details

Reviewers
kaz7
k-ishizaka
Summary

This patch implements two things to have one testable unit:

  1. LVLGen inserts 'lvl' instructions to set the VL register.
  2. vreg-to-vreg copy uses vector instructions.

The VE backend represents vector instructions with an explicit 'i32'
vector length operand. In the VE ISA, the vector length is always read
from the VL hardware register. The LVLGen pass makes sure that the VL
register always holds the right value before each vector instruction.

We add tests for the 'fastcc', which passes vector operands in registers.
This triggers the vreg-to-vreg copy path, which requires code to set the
VL register, which in turn is inserted by the LVLGen pass.

Diff Detail

Event Timeline

simoll created this revision.Nov 5 2020, 6:22 AM
Herald added a project: Restricted Project. · View Herald TranscriptNov 5 2020, 6:22 AM
simoll requested review of this revision.Nov 5 2020, 6:22 AM
simoll planned changes to this revision.EditedNov 13 2020, 6:12 AM

Largely superseded by D91416 - the LVLGen patch.
I'll shrink this down/rename to just the vreg-to-vreg move change.

simoll abandoned this revision.Nov 13 2020, 7:59 AM

Split up into:

  • D91416 - the LVLGen patch
  • D90842 - the fastcc and vreg-to-vreg copy patch (requires LVLGen).