|
LLVM 22.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... | |
| 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.