mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-29 22:30:33 +00:00
Completely eliminate VNInfo flags.
The 'unused' state of a value number can be represented as an invalid def SlotIndex. This also exposed code that shouldn't have been looking at unused value VNInfos. llvm-svn: 161258
This commit is contained in:
parent
9af03604de
commit
bf7a000191
@ -40,13 +40,6 @@ namespace llvm {
|
||||
/// definition and use points.
|
||||
///
|
||||
class VNInfo {
|
||||
private:
|
||||
enum {
|
||||
IS_UNUSED = 1
|
||||
};
|
||||
|
||||
unsigned char flags;
|
||||
|
||||
public:
|
||||
typedef BumpPtrAllocator Allocator;
|
||||
|
||||
@ -58,29 +51,19 @@ namespace llvm {
|
||||
|
||||
/// VNInfo constructor.
|
||||
VNInfo(unsigned i, SlotIndex d)
|
||||
: flags(0), id(i), def(d)
|
||||
: id(i), def(d)
|
||||
{ }
|
||||
|
||||
/// VNInfo construtor, copies values from orig, except for the value number.
|
||||
VNInfo(unsigned i, const VNInfo &orig)
|
||||
: flags(orig.flags), id(i), def(orig.def)
|
||||
: id(i), def(orig.def)
|
||||
{ }
|
||||
|
||||
/// Copy from the parameter into this VNInfo.
|
||||
void copyFrom(VNInfo &src) {
|
||||
flags = src.flags;
|
||||
def = src.def;
|
||||
}
|
||||
|
||||
/// Used for copying value number info.
|
||||
unsigned getFlags() const { return flags; }
|
||||
void setFlags(unsigned flags) { this->flags = flags; }
|
||||
|
||||
/// Merge flags from another VNInfo
|
||||
void mergeFlags(const VNInfo *VNI) {
|
||||
flags = (flags | VNI->flags) & ~IS_UNUSED;
|
||||
}
|
||||
|
||||
/// Returns true if this value is defined by a PHI instruction (or was,
|
||||
/// PHI instrucions may have been eliminated).
|
||||
/// PHI-defs begin at a block boundary, all other defs begin at register or
|
||||
@ -88,14 +71,10 @@ namespace llvm {
|
||||
bool isPHIDef() const { return def.isBlock(); }
|
||||
|
||||
/// Returns true if this value is unused.
|
||||
bool isUnused() const { return flags & IS_UNUSED; }
|
||||
/// Set the "is unused" flag on this value.
|
||||
void setIsUnused(bool unused) {
|
||||
if (unused)
|
||||
flags |= IS_UNUSED;
|
||||
else
|
||||
flags &= ~IS_UNUSED;
|
||||
}
|
||||
bool isUnused() const { return !def.isValid(); }
|
||||
|
||||
/// Mark this value as unused.
|
||||
void markUnused() { def = SlotIndex(); }
|
||||
};
|
||||
|
||||
/// LiveRange structure - This represents a simple register range in the
|
||||
|
@ -160,7 +160,7 @@ void LiveInterval::markValNoForDeletion(VNInfo *ValNo) {
|
||||
valnos.pop_back();
|
||||
} while (!valnos.empty() && valnos.back()->isUnused());
|
||||
} else {
|
||||
ValNo->setIsUnused(true);
|
||||
ValNo->markUnused();
|
||||
}
|
||||
}
|
||||
|
||||
@ -667,9 +667,6 @@ VNInfo* LiveInterval::MergeValueNumberInto(VNInfo *V1, VNInfo *V2) {
|
||||
}
|
||||
}
|
||||
|
||||
// Merge the relevant flags.
|
||||
V2->mergeFlags(V1);
|
||||
|
||||
// Now that V1 is dead, remove it.
|
||||
markValNoForDeletion(V1);
|
||||
|
||||
|
@ -706,7 +706,7 @@ bool LiveIntervals::shrinkToUses(LiveInterval *li,
|
||||
continue;
|
||||
if (VNI->isPHIDef()) {
|
||||
// This is a dead PHI. Remove it.
|
||||
VNI->setIsUnused(true);
|
||||
VNI->markUnused();
|
||||
NewLI.removeRange(*LII);
|
||||
DEBUG(dbgs() << "Dead PHI at " << VNI->def << " may separate interval\n");
|
||||
CanSeparate = true;
|
||||
|
Loading…
Reference in New Issue
Block a user