This is an archive of the discontinued LLVM Phabricator instance.

[LV] Vectorize (some) early and multiple exit loops w/tail folding
AbandonedPublic

Authored by reames on Dec 28 2020, 10:36 AM.

Details

Reviewers
Ayal
fhahn
Summary

This is a follow up to e4df6a. As noted in my last comment on the review, I realized that supporting tail folding of multiple exit loops was much more straight forward than I first realized. The hard part is forming the predicate masks, and the code already knows how to do that.

The only slightly tricky bit here is getting the conditions right (e.g. using the proper form requiresScalarEpilogue() vs foldTailByMasking in each place since this is effectively a three way decision)

This should be entirely orthogonal to D93725 and can landed in either order.

Diff Detail

Event Timeline

reames created this revision.Dec 28 2020, 10:36 AM
reames requested review of this revision.Dec 28 2020, 10:36 AM
Herald added a project: Restricted Project. · View Herald TranscriptDec 28 2020, 10:36 AM
reames updated this revision to Diff 316205.Jan 12 2021, 12:47 PM

rebase and ping

reames planned changes to this revision.Jan 17 2021, 8:13 PM

Realized while working on another patch that this one is incomplete.

Problematic case: exit block is reachable from 2 or more exiting blocks with the values reaching along exit edges being different along each. Need to determine correct exit value along the middle to unique exit block edge which is unhandled in this patch. Value chosen here would likely be the value along the latch exit (ignoring early exit) if present and a crash if not.

reames abandoned this revision.Jul 12 2021, 7:31 AM