|
LLVM 24.0.0git
|
#include "llvm/Transforms/Scalar/StructurizeCFG.h"#include "ScalarOptions.h"#include "llvm/ADT/DenseMap.h"#include "llvm/ADT/EquivalenceClasses.h"#include "llvm/ADT/MapVector.h"#include "llvm/ADT/SCCIterator.h"#include "llvm/ADT/STLExtras.h"#include "llvm/ADT/SmallPtrSet.h"#include "llvm/ADT/SmallVector.h"#include "llvm/Analysis/InstructionSimplify.h"#include "llvm/Analysis/RegionInfo.h"#include "llvm/Analysis/RegionIterator.h"#include "llvm/Analysis/TargetTransformInfo.h"#include "llvm/Analysis/UniformityAnalysis.h"#include "llvm/IR/BasicBlock.h"#include "llvm/IR/CFG.h"#include "llvm/IR/Constants.h"#include "llvm/IR/Dominators.h"#include "llvm/IR/Function.h"#include "llvm/IR/InstrTypes.h"#include "llvm/IR/Instruction.h"#include "llvm/IR/Instructions.h"#include "llvm/IR/Metadata.h"#include "llvm/IR/PassManager.h"#include "llvm/IR/PatternMatch.h"#include "llvm/IR/ProfDataUtils.h"#include "llvm/IR/Type.h"#include "llvm/IR/Use.h"#include "llvm/IR/Value.h"#include "llvm/IR/ValueHandle.h"#include "llvm/InitializePasses.h"#include "llvm/Pass.h"#include "llvm/Support/Casting.h"#include "llvm/Support/Debug.h"#include "llvm/Support/raw_ostream.h"#include "llvm/Transforms/Scalar.h"#include "llvm/Transforms/Utils.h"#include "llvm/Transforms/Utils/BasicBlockUtils.h"#include "llvm/Transforms/Utils/Local.h"#include "llvm/Transforms/Utils/SSAUpdater.h"#include "llvm/Transforms/Utils/SSAUpdaterBulk.h"#include <cassert>#include <utility>Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "structurizecfg" |
Functions | |
| INITIALIZE_PASS_BEGIN (StructurizeCFGLegacyPass, "structurizecfg", "Structurize the CFG", false, false) INITIALIZE_PASS_END(StructurizeCFGLegacyPass | |
| static bool | hasOnlyUniformBranches (Region *R, const UniformityInfo &UA) |
Can region R be left unstructurized because all of its own control flow is uniform? | |
| static void | addRegionIntoQueue (Region &R, std::vector< Region * > &Regions) |
| static bool | runImpl (DominatorTree &DT, RegionInfo &RI, const TargetTransformInfo &TTI, UniformityInfo *UI) |
Structurize every region in RI, processing inner regions before the regions that contain them. | |
Variables | |
| const char | FlowBlockName [] = "Flow" |
| structurizecfg | |
| Structurize the | CFG |
| Structurize the | false |
| #define DEBUG_TYPE "structurizecfg" |
Definition at line 56 of file StructurizeCFG.cpp.
Definition at line 1376 of file StructurizeCFG.cpp.
References addRegionIntoQueue(), and E().
Referenced by addRegionIntoQueue(), and runImpl().
|
static |
Can region R be left unstructurized because all of its own control flow is uniform?
Only the terminators of direct child blocks are checked. Sub-regions are processed before their parent, so any divergent control flow inside a sub-region has already been structurized and is self-contained: it is entered only through the sub-region's entry, and it rejoins either at Flow blocks inside the sub-region or, if the sub-region's entry dominates its exit, at the exit block itself. Uniform control flow around a sub-region therefore does not need structurizing, whatever the sub-region contains. (The branches inside sub-regions could not be checked anyway, because they may have been removed and re-created since UniformityAnalysis ran.)
FIXME: This does not hold for a sub-region whose entry block ends in a callbr, because run() leaves such regions unstructurized.
Definition at line 1277 of file StructurizeCFG.cpp.
References E(), and llvm::none_of().
| INITIALIZE_PASS_BEGIN | ( | StructurizeCFGLegacyPass | , |
| "structurizecfg" | , | ||
| "Structurize the CFG" | , | ||
| false | , | ||
| false | ) |
References INITIALIZE_PASS_DEPENDENCY.
|
static |
Structurize every region in RI, processing inner regions before the regions that contain them.
If UI is non-null, skip uniform regions.
Definition at line 1395 of file StructurizeCFG.cpp.
References addRegionIntoQueue(), Changed, and llvm::RegionInfoBase< Tr >::getTopLevelRegion().
| Structurize the CFG |
Definition at line 398 of file StructurizeCFG.cpp.
| Structurize the false |
Definition at line 398 of file StructurizeCFG.cpp.
Definition at line 59 of file StructurizeCFG.cpp.
| structurizecfg |
Definition at line 397 of file StructurizeCFG.cpp.