LLVM 20.0.0git
|
Implementation of uniformity analysis. More...
#include "llvm/ADT/GenericUniformityInfo.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SparseBitVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/raw_ostream.h"
Go to the source code of this file.
Classes | |
class | llvm::ModifiedPostOrder< ContextT > |
Construct a specially modified post-order traversal of cycles. More... | |
class | llvm::GenericSyncDependenceAnalysis< ContextT > |
Locate join blocks for disjoint paths starting at a divergent branch. More... | |
struct | llvm::GenericSyncDependenceAnalysis< ContextT >::DivergenceDescriptor |
Information discovered by the sync dependence analysis for each divergent branch. More... | |
class | llvm::GenericUniformityAnalysisImpl< ContextT > |
Analysis that identifies uniform values in a data-parallel execution. More... | |
struct | llvm::GenericUniformityAnalysisImpl< ContextT >::PhiInput |
Value/block pair representing a single phi input. More... | |
class | llvm::DivergencePropagator< ContextT > |
Compute divergence starting with a divergent branch. More... | |
Namespaces | |
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
Macros | |
#define | DEBUG_TYPE "uniformity" |
Functions | |
template<typename CycleT > | |
static bool | llvm::insertIfNotContained (SmallVector< CycleT * > &Cycles, CycleT *Candidate) |
Add Candidate to Cycles if it is not already contained in Cycles . | |
template<typename CycleT , typename BlockT > | |
static const CycleT * | llvm::getExtDivCycle (const CycleT *Cycle, const BlockT *DivTermBlock, const BlockT *JoinBlock) |
Return the outermost cycle made divergent by branch outside it. | |
template<typename ContextT , typename CycleT , typename BlockT , typename DominatorTreeT > | |
static const CycleT * | llvm::getIntDivCycle (const CycleT *Cycle, const BlockT *DivTermBlock, const BlockT *JoinBlock, const DominatorTreeT &DT, ContextT &Context) |
Return the outermost cycle made divergent by branch inside it. | |
template<typename ContextT , typename CycleT , typename BlockT , typename DominatorTreeT > | |
static const CycleT * | llvm::getOutermostDivergentCycle (const CycleT *Cycle, const BlockT *DivTermBlock, const BlockT *JoinBlock, const DominatorTreeT &DT, ContextT &Context) |
Implementation of uniformity analysis.
The algorithm is a fixed point iteration that starts with the assumption that all control flow and all values are uniform. Starting from sources of divergence (whose discovery must be implemented by a CFG- or even target-specific derived class), divergence of values is propagated from definition to uses in a straight-forward way. The main complexity lies in the propagation of the impact of divergent control flow on the divergence of values (sync dependencies).
NOTE: In general, no interface exists for a transform to update (Machine)UniformityInfo. Additionally, (Machine)CycleAnalysis is a transitive dependence, but it also does not provide an interface for updating itself. Given that, transforms should not preserve uniformity in their getAnalysisUsage() callback.
Definition in file GenericUniformityImpl.h.
#define DEBUG_TYPE "uniformity" |
Definition at line 56 of file GenericUniformityImpl.h.