[LLVMdev] Possible LiveInterval Bug
David Greene
dag at cray.com
Tue Jan 29 15:08:56 PST 2008
I just ran into a problem here. I'm in SimpleRegisterCoalescing at the point
where EXTRACT_SUBREG coalescing updates live ranges of aliased
registers (around line 473 of SimpleRegisterCoalescing.cpp).
There's a call to MergeValueInAsValue at line 50. MergeValueInAsValue has
this code:
void LiveInterval::MergeValueInAsValue(const LiveInterval &RHS,
const VNInfo *RHSValNo, VNInfo *LHSValNo)
{
SmallVector<VNInfo*, 4> ReplacedValNos;
iterator IP = begin();
for (const_iterator I = RHS.begin(), E = RHS.end(); I != E; ++I) {
if (I->valno != RHSValNo)
continue;
unsigned Start = I->start, End = I->end;
IP = std::upper_bound(IP, end(), Start);
// If the start of this range overlaps with an existing liverange, trim
it.
if (IP != begin() && IP[-1].end > Start) {
if (IP->valno != LHSValNo) {
ReplacedValNos.push_back(IP->valno);
What happens if IP == end()? We're pushing bogus information onto
ReplacedvalNos (IP->valno is not valid).
Is this a bug or should IP never be end() at this point? If the latter is
true then I've got a bug somewhere else I need to hunt down.
-Dave
More information about the llvm-dev
mailing list