Use IntEqClasses to compute connected components of live intervals.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122296 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jakob Stoklund Olesen
2010-12-21 00:48:17 +00:00
parent 2a6899c539
commit b907e8a2d4
4 changed files with 20 additions and 56 deletions

View File

@@ -39,13 +39,20 @@ class IntEqClasses {
public:
/// IntEqClasses - Create an equivalence class mapping for 0 .. N-1.
IntEqClasses(unsigned N) : NumClasses(0) { grow(N); }
IntEqClasses(unsigned N = 0) : NumClasses(0) { grow(N); }
/// grow - Increase capacity to hold 0 .. N-1, putting new integers in unique
/// equivalence classes.
/// This requires an uncompressed map.
void grow(unsigned N);
/// clear - Clear all classes so that grow() will assign a unique class to
/// every integer.
void clear() {
EC.clear();
NumClasses = 0;
}
/// join - Join the equivalence classes of a and b. After joining classes,
/// findLeader(a) == findLeader(b).
/// This requires an uncompressed map.

View File

@@ -21,7 +21,7 @@
#ifndef LLVM_CODEGEN_LIVEINTERVAL_H
#define LLVM_CODEGEN_LIVEINTERVAL_H
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/IntEqClasses.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/AlignOf.h"
#include "llvm/CodeGen/SlotIndexes.h"
@@ -561,11 +561,7 @@ namespace llvm {
class ConnectedVNInfoEqClasses {
LiveIntervals &lis_;
// Map each value number to its equivalence class.
// The invariant is that EqClass[x] <= x.
// Two values are connected iff EqClass[x] == EqClass[b].
SmallVector<unsigned, 8> eqClass_;
IntEqClasses eqClass_;
// Note that values a and b are connected.
void Connect(unsigned a, unsigned b);