xref: /freebsd/contrib/llvm-project/llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/RegionsFromBBs.cpp (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===- RegionsFromBBs.cpp - A helper to test RegionPasses -----------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "llvm/Transforms/Vectorize/SandboxVectorizer/Passes/RegionsFromBBs.h"
10 #include "llvm/SandboxIR/Function.h"
11 #include "llvm/SandboxIR/Region.h"
12 #include "llvm/Transforms/Vectorize/SandboxVectorizer/SandboxVectorizerPassBuilder.h"
13 
14 namespace llvm::sandboxir {
15 
RegionsFromBBs(StringRef Pipeline)16 RegionsFromBBs::RegionsFromBBs(StringRef Pipeline)
17     : FunctionPass("regions-from-bbs"),
18       RPM("rpm", Pipeline, SandboxVectorizerPassBuilder::createRegionPass) {}
19 
runOnFunction(Function & F,const Analyses & A)20 bool RegionsFromBBs::runOnFunction(Function &F, const Analyses &A) {
21   SmallVector<std::unique_ptr<Region>, 16> Regions;
22   // Create a region for each BB.
23   for (BasicBlock &BB : F) {
24     Regions.push_back(std::make_unique<Region>(F.getContext(), A.getTTI()));
25     auto &RgnPtr = Regions.back();
26     for (Instruction &I : BB)
27       RgnPtr->add(&I);
28   }
29   // For each region run the region pass pipeline.
30   for (auto &RgnPtr : Regions)
31     RPM.runOnRegion(*RgnPtr, A);
32   return false;
33 }
34 
35 } // namespace llvm::sandboxir
36