[VPlan] Add GraphTraits impl to traverse through VPRegionBlock.
authorFlorian Hahn <flo@fhahn.com>
Fri, 23 Apr 2021 10:33:38 +0000 (11:33 +0100)
committerFlorian Hahn <flo@fhahn.com>
Fri, 23 Apr 2021 16:26:47 +0000 (17:26 +0100)
commit89c4dda076e29bb085426a621ea5797ced599f03
treefc3455c298b18a5658821736a3418845a60ad9a3
parent17330a3cb13aed9743f3f60eb8310c06aa34f1ca
[VPlan] Add GraphTraits impl to traverse through VPRegionBlock.

This patch adds a new iterator to traverse through VPRegionBlocks and a
GraphTraits specialization using the iterator to traverse through
VPRegionBlocks.

Because there is already a GraphTraits specialization for VPBlockBase *
and co, a new VPBlockRecursiveTraversalWrapper helper is introduced.
This allows us to provide a new GraphTraits specialization for that
type. Users can use the new recursive traversal by using this wrapper.

The graph trait visits both the entry block of a region, as well as all
its successors. Exit blocks of a region implicitly have their parent
region's successors. This ensures all blocks in a region are visited
before any blocks in a successor region when doing a reverse post-order
traversal of the graph.

Reviewed By: a.elovikov

Differential Revision: https://reviews.llvm.org/D100175
llvm/lib/Transforms/Vectorize/VPlan.h
llvm/unittests/Transforms/Vectorize/VPlanTest.cpp