mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[StructurizeCFG] Make hasOnlyUniformBranches a non-member function.
Summary: Lets us get rid of one member variable too. Reviewers: arsenm Subscribers: wdng, llvm-commits Differential Revision: https://reviews.llvm.org/D26992 llvm-svn: 287716
This commit is contained in:
parent
4e42ce7138
commit
c229bf7dc3
@ -163,7 +163,6 @@ public:
|
||||
/// breaks and the false values expresses continue states.
|
||||
class StructurizeCFG : public RegionPass {
|
||||
bool SkipUniformRegions;
|
||||
DivergenceAnalysis *DA;
|
||||
|
||||
Type *Boolean;
|
||||
ConstantInt *BoolTrue;
|
||||
@ -236,8 +235,6 @@ class StructurizeCFG : public RegionPass {
|
||||
|
||||
void rebuildSSA();
|
||||
|
||||
bool hasOnlyUniformBranches(const Region *R);
|
||||
|
||||
public:
|
||||
static char ID;
|
||||
|
||||
@ -912,13 +909,14 @@ void StructurizeCFG::rebuildSSA() {
|
||||
}
|
||||
}
|
||||
|
||||
bool StructurizeCFG::hasOnlyUniformBranches(const Region *R) {
|
||||
static bool hasOnlyUniformBranches(const Region *R,
|
||||
const DivergenceAnalysis &DA) {
|
||||
for (const BasicBlock *BB : R->blocks()) {
|
||||
const BranchInst *Br = dyn_cast<BranchInst>(BB->getTerminator());
|
||||
if (!Br || !Br->isConditional())
|
||||
continue;
|
||||
|
||||
if (!DA->isUniform(Br->getCondition()))
|
||||
if (!DA.isUniform(Br->getCondition()))
|
||||
return false;
|
||||
DEBUG(dbgs() << "BB: " << BB->getName() << " has uniform terminator\n");
|
||||
}
|
||||
@ -931,9 +929,9 @@ bool StructurizeCFG::runOnRegion(Region *R, RGPassManager &RGM) {
|
||||
return false;
|
||||
|
||||
if (SkipUniformRegions) {
|
||||
DA = &getAnalysis<DivergenceAnalysis>();
|
||||
// TODO: We could probably be smarter here with how we handle sub-regions.
|
||||
if (hasOnlyUniformBranches(R)) {
|
||||
auto &DA = getAnalysis<DivergenceAnalysis>();
|
||||
if (hasOnlyUniformBranches(R, DA)) {
|
||||
DEBUG(dbgs() << "Skipping region with uniform control flow: " << *R << '\n');
|
||||
|
||||
// Mark all direct child block terminators as having been treated as
|
||||
|
Loading…
Reference in New Issue
Block a user