LLVM 20.0.0git
Classes | Public Types | Public Member Functions | List of all members
llvm::GenericSyncDependenceAnalysis< ContextT > Class Template Reference

Locate join blocks for disjoint paths starting at a divergent branch. More...

#include "llvm/ADT/GenericUniformityImpl.h"

Classes

struct  DivergenceDescriptor
 Information discovered by the sync dependence analysis for each divergent branch. More...
 

Public Types

using BlockT = typename ContextT::BlockT
 
using DominatorTreeT = typename ContextT::DominatorTreeT
 
using FunctionT = typename ContextT::FunctionT
 
using ValueRefT = typename ContextT::ValueRefT
 
using InstructionT = typename ContextT::InstructionT
 
using CycleInfoT = GenericCycleInfo< ContextT >
 
using CycleT = typename CycleInfoT::CycleT
 
using ConstBlockSet = SmallPtrSet< const BlockT *, 4 >
 
using ModifiedPO = ModifiedPostOrder< ContextT >
 
using BlockLabelMap = DenseMap< const BlockT *, const BlockT * >
 
using DivergencePropagatorT = DivergencePropagator< ContextT >
 

Public Member Functions

 GenericSyncDependenceAnalysis (const ContextT &Context, const DominatorTreeT &DT, const CycleInfoT &CI)
 
const DivergenceDescriptorgetJoinBlocks (const BlockT *DivTermBlock)
 Computes divergent join points and cycle exits caused by branch divergence in Term.
 

Detailed Description

template<typename ContextT>
class llvm::GenericSyncDependenceAnalysis< ContextT >

Locate join blocks for disjoint paths starting at a divergent branch.

An analysis per divergent branch that returns the set of basic blocks whose phi nodes become divergent due to divergent control. These are the blocks that are reachable by two disjoint paths from the branch, or cycle exits reachable along a path that is disjoint from a path to the cycle latch.

Definition at line 259 of file GenericUniformityImpl.h.

Member Typedef Documentation

◆ BlockLabelMap

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::BlockLabelMap = DenseMap<const BlockT *, const BlockT *>

Definition at line 280 of file GenericUniformityImpl.h.

◆ BlockT

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::BlockT = typename ContextT::BlockT

Definition at line 261 of file GenericUniformityImpl.h.

◆ ConstBlockSet

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::ConstBlockSet = SmallPtrSet<const BlockT *, 4>

Definition at line 270 of file GenericUniformityImpl.h.

◆ CycleInfoT

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::CycleInfoT = GenericCycleInfo<ContextT>

Definition at line 267 of file GenericUniformityImpl.h.

◆ CycleT

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::CycleT = typename CycleInfoT::CycleT

Definition at line 268 of file GenericUniformityImpl.h.

◆ DivergencePropagatorT

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::DivergencePropagatorT = DivergencePropagator<ContextT>

Definition at line 293 of file GenericUniformityImpl.h.

◆ DominatorTreeT

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::DominatorTreeT = typename ContextT::DominatorTreeT

Definition at line 262 of file GenericUniformityImpl.h.

◆ FunctionT

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::FunctionT = typename ContextT::FunctionT

Definition at line 263 of file GenericUniformityImpl.h.

◆ InstructionT

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::InstructionT = typename ContextT::InstructionT

Definition at line 265 of file GenericUniformityImpl.h.

◆ ModifiedPO

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::ModifiedPO = ModifiedPostOrder<ContextT>

Definition at line 271 of file GenericUniformityImpl.h.

◆ ValueRefT

template<typename ContextT >
using llvm::GenericSyncDependenceAnalysis< ContextT >::ValueRefT = typename ContextT::ValueRefT

Definition at line 264 of file GenericUniformityImpl.h.

Constructor & Destructor Documentation

◆ GenericSyncDependenceAnalysis()

template<typename ContextT >
llvm::GenericSyncDependenceAnalysis< ContextT >::GenericSyncDependenceAnalysis ( const ContextT &  Context,
const DominatorTreeT DT,
const CycleInfoT CI 
)

Definition at line 733 of file GenericUniformityImpl.h.

Member Function Documentation

◆ getJoinBlocks()

template<typename ContextT >
auto llvm::GenericSyncDependenceAnalysis< ContextT >::getJoinBlocks ( const BlockT DivTermBlock)

Computes divergent join points and cycle exits caused by branch divergence in Term.

This returns a pair of sets:

  • The set of blocks which are reachable by disjoint paths from Term.
  • The set also contains cycle exits if there two disjoint paths: one from Term to the cycle exit and another from Term to the cycle header.

Definition at line 740 of file GenericUniformityImpl.h.

References assert(), Blocks, llvm::DivergencePropagator< ContextT >::computeJoinPoints(), llvm::dbgs(), LLVM_DEBUG, llvm::print(), and llvm::succ_size().


The documentation for this class was generated from the following file: