[llvm-bugs] [Bug 37252] New: Incorrect removal of entries in PressureDiff::addPressureChange
via llvm-bugs
llvm-bugs at lists.llvm.org
Thu Apr 26 02:38:09 PDT 2018
https://bugs.llvm.org/show_bug.cgi?id=37252
Bug ID: 37252
Summary: Incorrect removal of entries in
PressureDiff::addPressureChange
Product: libraries
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: Common Code Generator Code
Assignee: unassignedbugs at nondot.org
Reporter: tetra2005 at gmail.com
CC: llvm-bugs at lists.llvm.org
I've recently came across a weird behavior in addPressureChange function. The
problematic commit is r250595:
+ // Remove entry
+ PressureDiff::iterator J;
+ for (J = std::next(I); J != E && J->isValid(); ++J, ++I)
+ *I = *J;
+ if (J != E)
+ *I = *J;
This code is that it fails to reset isValid() status on last element of
PressureDiff::PressureChanges i.e. if J == E (and thus I == E – 1). In such
case the last two elements of PressureChanges hold
the same PSetID:
...
+ [13] {PSetID=242 UnitInc=-6 } llvm::PressureChange
+ [14] {PSetID=249 UnitInc=-6 } llvm::PressureChange
+ [15] {PSetID=249 UnitInc=-6 } llvm::PressureChange
Apart from making debug output in updatePressureDiffs weird (as it prints these
trailing duplicate elements) this effectively steals 1 location in
PressureChange because now PSetIDs which are greater than 249 will not be
stored there.
Maybe the last 2 lines should instead be changed to
*I = PressureChange();
?
I'm on a private branch so don't have a ready-made reproducer but hopefully
description above makes sense as is...
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180426/1d6c7a3c/attachment.html>
More information about the llvm-bugs
mailing list