When rooted with PHIs, a vectorization tree may have another node with PHIs
which have roots as their operands. We cannot ignore ordering information
for root in such a case.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | ||
---|---|---|
4395–4398 | This was the very first thing I was considering. But call to the method is from outside of BoUpSLP. It means we either need to allow access to VectorizaableTree data or add a public method that checks just that. | |
llvm/test/Transforms/SLPVectorizer/X86/reorder-phi-operand.ll | ||
87 | It fails with assertion without the fix. It represents a stability issue. |
llvm/test/Transforms/SLPVectorizer/X86/reorder-phi-operand.ll | ||
---|---|---|
87 | Ah, I see |
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | ||
---|---|---|
4395–4398 | I can add this method and use it instead: bool isRootHasInTreeUses() const { return !VectorizableTree.empty() && !VectorizableTree.front()->UserTreeIndices.empty(); } Thoughts? |
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | ||
---|---|---|
4395–4398 | Go ahead with it. |
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | ||
---|---|---|
1041 | doesRootHave.... |
doesRootHave....