Skip to content

[LV][EVL] Support interleaved accesses for EVL tail folding. #123201

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Mel-Chen opened this issue Jan 16, 2025 · 0 comments
Open

[LV][EVL] Support interleaved accesses for EVL tail folding. #123201

Mel-Chen opened this issue Jan 16, 2025 · 0 comments
Assignees

Comments

@Mel-Chen
Copy link
Contributor

The motivation for this issue is to provide better support for RVV unit-strided segment load/store.
The following scenarios need to be supported:

  • Interleaved load (vp.load + interleave)
  • Interleaved load with tail gaps (Requires scalar epilogue to run the last iteration)
  • Fully interleaved store (deinterleave + vp.store)
  • Interleaved store with gaps (This can not emit unit-strided segment store. We can only emit a wide masked store for that)

Due to the high complexity of VPInterleaveRecipe::execute(), creating a new recipe or converting it into VPWidenIntrinsicRecipe does not seem like a wise approach.
A tentative approach I have in mind is to first split VPInterleaveRecipe into VPWidenLoad + VPDeinterleave and VPInterleave + VPWidenStore. During the EVL lowering phase, we would only need to transform VPWidenLoad/VPWidenStore into VPWidenLoadEVL/VPWidenStoreEVL.
For now, the focus will be on supporting factor 2 (interleave2/deinterleave2) as the initial target, with support for factors 3 to 8 planned after test results are stable.
Related IAP support: #120490 .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant