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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16#ifndef LLVM_ADT_GENERICCONVERGENCEVERIFIER_H

17#define LLVM_ADT_GENERICCONVERGENCEVERIFIER_H

18

20

21namespace llvm {

22

24public:

25 using BlockT = typename ContextT::BlockT;

26 using FunctionT = typename ContextT::FunctionT;

27 using ValueRefT = typename ContextT::ValueRefT;

31 using CycleT = typename CycleInfoT::CycleT;

32

37 this->OS = OS;

38 this->FailureCB = FailureCB;

39 Context = ContextT(&F);

40 }

41

46

47 bool sawTokens() const { return ConvergenceKind == ControlledConvergence; }

48

49private:

51 std::function<void(const Twine &Message)> FailureCB;

54 ContextT Context;

55

56

57 enum {

58 ControlledConvergence,

59 UncontrolledConvergence,

60 NoConvergence

61 } ConvergenceKind = NoConvergence;

62

63

64

65 enum ConvOpKind { CONV_ANCHOR, CONV_ENTRY, CONV_LOOP, CONV_NONE };

66

67

68

69 DenseMap<const InstructionT *, const InstructionT *> Tokens;

70

71 bool SeenFirstConvOp = false;

72

73 static bool isInsideConvergentFunction(const InstructionT &I);

75 static ConvOpKind getConvOp(const InstructionT &I);

76 void checkConvergenceTokenProduced(const InstructionT &I);

78

80};

81

82}

83

84#endif

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

typename ContextT::InstructionT InstructionT

Definition GenericConvergenceVerifier.h:28

typename ContextT::DominatorTreeT DominatorTreeT

Definition GenericConvergenceVerifier.h:29

void initialize(raw_ostream *OS, function_ref< void(const Twine &Message)> FailureCB, const FunctionT &F)

Definition GenericConvergenceVerifier.h:33

typename ContextT::BlockT BlockT

Definition GenericConvergenceVerifier.h:25

typename CycleInfoT::CycleT CycleT

Definition GenericConvergenceVerifier.h:31

typename ContextT::FunctionT FunctionT

Definition GenericConvergenceVerifier.h:26

bool sawTokens() const

Definition GenericConvergenceVerifier.h:47

void verify(const DominatorTreeT &DT)

typename ContextT::ValueRefT ValueRefT

Definition GenericConvergenceVerifier.h:27

GenericCycleInfo< ContextT > CycleInfoT

Definition GenericConvergenceVerifier.h:30

void visit(const BlockT &BB)

void visit(const InstructionT &I)

Cycle information for a function.

Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...

An efficient, type-erasing, non-owning reference to a callable.

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.

ArrayRef(const T &OneElt) -> ArrayRef< T >