It's not really clear to me (or to Gil, who suggested the fix) why this was restricted to single-entry blocks to begin with.
This fixes PR30172.
Paths
| Differential D24009
[LoopVectorizer] Support predicating instructions in blocks with several input edges ClosedPublic Authored by mkuper on Aug 29 2016, 3:32 PM.
Details Summary It's not really clear to me (or to Gil, who suggested the fix) why this was restricted to single-entry blocks to begin with. This fixes PR30172.
Diff Detail Event TimelineComment Actions This looks reasonable to me, but I have a question about the test case (see the inline comment). I too cannot say why the original conditional stores patch limited this to single-predecessor blocks.
This revision is now accepted and ready to land.Aug 30 2016, 11:16 AM Closed by commit rL280148: [LoopVectorizer] Predicate instructions in blocks with several incoming edges (authored by mkuper). · Explain WhyAug 30 2016, 1:30 PM This revision was automatically updated to reflect the committed changes.
Revision Contents
Diff 69625 lib/Transforms/Vectorize/LoopVectorize.cpp
test/Transforms/LoopVectorize/if-pred-non-void.ll
test/Transforms/LoopVectorize/if-pred-stores.ll
|
It might make the test a bit more future-proof to base the branch on a non loop-invariant condition - make it more resistant to versioning/unswitching.