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

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)
 

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

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.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "uniformity"

Definition at line 56 of file GenericUniformityImpl.h.