LLVM: include/llvm/FuzzMutate/Random.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_FUZZMUTATE_RANDOM_H

14#define LLVM_FUZZMUTATE_RANDOM_H

15

17#include

18namespace llvm {

19

20

21template <typename T, typename GenT> T uniform(GenT &Gen, T Min, T Max) {

22 return std::uniform_int_distribution(Min, Max)(Gen);

23}

24

25

26template <typename T, typename GenT> T uniform(GenT &Gen) {

27 return uniform(Gen, std::numeric_limits::min(),

28 std::numeric_limits::max());

29}

30

31

32

34 GenT &RandGen;

35 std::remove_const_t Selection = {};

37

38public:

40

42 bool isEmpty() const { return TotalWeight == 0; }

43

46 return Selection;

47 }

48

49 explicit operator bool() const { return isEmpty(); }

51

52

54 for (auto &I : Items)

56 return *this;

57 }

58

59

61 if (!Weight)

62

63 return *this;

64 TotalWeight += Weight;

65

67 Selection = Item;

68 return *this;

69 }

70};

71

72template <typename GenT, typename RangeT,

73 typename ElT = std::remove_reference_t<

74 decltype(*std::begin(std::declval()))>>

77 RS.sample(Items);

78 return RS;

79}

80

81template <typename GenT, typename T>

85 RS.sample(Item, Weight);

86 return RS;

87}

88

89template <typename T, typename GenT>

93

94}

95

96#endif

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

Randomly selects an item by sampling into a set with an unknown number of elements,...

Definition Random.h:33

ReservoirSampler & sample(const T &Item, uint64_t Weight)

Sample a single item with the given weight.

Definition Random.h:60

bool isEmpty() const

Definition Random.h:42

const T & operator*() const

Definition Random.h:50

ReservoirSampler & sample(RangeT &&Items)

Sample each item in Items with unit weight.

Definition Random.h:53

const T & getSelection() const

Definition Random.h:44

ReservoirSampler(GenT &RandGen)

Definition Random.h:39

uint64_t totalWeight() const

Definition Random.h:41

This is an optimization pass for GlobalISel generic memory operations.

ReservoirSampler< ElT, GenT > makeSampler(GenT &RandGen, RangeT &&Items)

Definition Random.h:75

T uniform(GenT &Gen, T Min, T Max)

Return a uniformly distributed random value between Min and Max.

Definition Random.h:21