LLVM 17.0.0git
Classes | Namespaces | Macros | Functions
GenericUniformityImpl.h File Reference

Implementation of uniformity analysis. More...

#include "llvm/ADT/GenericUniformityInfo.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SparseBitVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/raw_ostream.h"
#include <set>

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 Range >
auto llvm::unique (Range &&R)
 
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)
 

Detailed Description

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).

Definition in file GenericUniformityImpl.h.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "uniformity"

Definition at line 50 of file GenericUniformityImpl.h.