LLVM: lib/Support/IntEqClasses.cpp Source File (original) (raw)
Go to the documentation of this file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
21#include
22
23using namespace llvm;
24
26 assert(NumClasses == 0 && "grow() called after compress().");
27 EC.reserve(N);
28 while (EC.size() < N)
29 EC.push_back(EC.size());
30}
31
33 assert(NumClasses == 0 && "join() called after compress().");
34 unsigned eca = EC[a];
35 unsigned ecb = EC[b];
36
37
38
39 while (eca != ecb)
40 if (eca < ecb) {
41 EC[b] = eca;
42 b = ecb;
43 ecb = EC[b];
44 } else {
45 EC[a] = ecb;
46 a = eca;
47 eca = EC[a];
48 }
49
50 return eca;
51}
52
54 assert(NumClasses == 0 && "findLeader() called after compress().");
55 while (a != EC[a])
56 a = EC[a];
57 return a;
58}
59
61 if (NumClasses)
62 return;
63 for (unsigned i = 0, e = EC.size(); i != e; ++i)
64 EC[i] = (EC[i] == i) ? NumClasses++ : EC[EC[i]];
65}
66
68 if (!NumClasses)
69 return;
71 for (unsigned i = 0, e = EC.size(); i != e; ++i)
72 if (EC[i] < Leader.size())
73 EC[i] = Leader[EC[i]];
74 else
76 NumClasses = 0;
77}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
Equivalence classes for small integers.
LLVM_ABI unsigned findLeader(unsigned a) const
findLeader - Compute the leader of a's equivalence class.
Definition IntEqClasses.cpp:53
LLVM_ABI void compress()
compress - Compress equivalence classes by numbering them 0 .
Definition IntEqClasses.cpp:60
LLVM_ABI void uncompress()
uncompress - Change back to the uncompressed representation that allows editing.
Definition IntEqClasses.cpp:67
LLVM_ABI unsigned join(unsigned a, unsigned b)
Join the equivalence classes of a and b.
Definition IntEqClasses.cpp:32
LLVM_ABI void grow(unsigned N)
grow - Increase capacity to hold 0 .
Definition IntEqClasses.cpp:25
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
This is an optimization pass for GlobalISel generic memory operations.