LLVM: include/llvm/ADT/GenericUniformityInfo.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9#ifndef LLVM_ADT_GENERICUNIFORMITYINFO_H

10#define LLVM_ADT_GENERICUNIFORMITYINFO_H

11

14

15namespace llvm {

16

18

28

30public:

31 using BlockT = typename ContextT::BlockT;

32 using FunctionT = typename ContextT::FunctionT;

33 using ValueRefT = typename ContextT::ValueRefT;

35 using UseT = typename ContextT::UseT;

39

41 using CycleT = typename CycleInfoT::CycleT;

42

44 std::tuple<ConstValueRefT, InstructionT *, const CycleT *>;

45

51

53 DA->initialize();

54 DA->compute();

55 }

56

57

59

60

62

63

65

66

68

69

70

71

72

75

76

77

79

81

83

85

86private:

88

89 std::unique_ptr<ImplT, GenericUniformityAnalysisImplDeleter> DA;

90

93};

94

95}

96

97#endif

static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")

Find all cycles in a control-flow graph, including irreducible loops.

Cycle information for a function.

Analysis that identifies uniform values in a data-parallel execution.

bool hasDivergentTerminator(const BlockT &B)

bool isDivergentUse(const UseT &U) const

Whether U is divergent.

typename ContextT::ValueRefT ValueRefT

Definition GenericUniformityInfo.h:33

typename ContextT::FunctionT FunctionT

Definition GenericUniformityInfo.h:32

bool isDivergent(ConstValueRefT V) const

Whether V is divergent at its definition.

void print(raw_ostream &Out) const

T helper function for printing.

std::tuple< ConstValueRefT, InstructionT *, const CycleT * > TemporalDivergenceTuple

Definition GenericUniformityInfo.h:43

bool isUniform(ConstValueRefT V) const

Whether V is uniform/non-divergent.

Definition GenericUniformityInfo.h:67

typename CycleInfoT::CycleT CycleT

Definition GenericUniformityInfo.h:41

bool isUniform(const InstructionT *I) const

Definition GenericUniformityInfo.h:73

typename ContextT::ConstValueRefT ConstValueRefT

Definition GenericUniformityInfo.h:34

typename ContextT::BlockT BlockT

Definition GenericUniformityInfo.h:31

typename ContextT::InstructionT InstructionT

Definition GenericUniformityInfo.h:36

typename ContextT::UseT UseT

Definition GenericUniformityInfo.h:35

bool hasDivergence() const

Whether any divergence was detected.

GenericUniformityInfo & operator=(GenericUniformityInfo &&)=default

const FunctionT & getFunction() const

The GPU kernel this analysis result is for.

void compute()

Definition GenericUniformityInfo.h:52

GenericUniformityInfo(const DominatorTreeT &DT, const CycleInfoT &CI, const TargetTransformInfo *TTI=nullptr)

bool isDivergent(const InstructionT *I) const

GenericUniformityInfo()=default

GenericCycleInfo< ContextT > CycleInfoT

Definition GenericUniformityInfo.h:40

typename ContextT::DominatorTreeT DominatorTreeT

Definition GenericUniformityInfo.h:37

GenericUniformityInfo< ContextT > ThisT

Definition GenericUniformityInfo.h:38

iterator_range< TemporalDivergenceTuple * > getTemporalDivergenceList() const

GenericUniformityInfo(GenericUniformityInfo &&)=default

This pass provides access to the codegen interfaces that are needed for IR-level transformations.

A range adaptor for a pair of iterators.

This class implements an extremely fast bulk output stream that can only output to a stream.

This is an optimization pass for GlobalISel generic memory operations.

ImplT * pointer

Definition GenericUniformityInfo.h:25

void operator()(ImplT *Impl)