mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-27 00:21:03 +00:00
Fix integer overflow in instruction scheduling. This can happen if we have
basic blocks that are so long that their size overflows a short. Also assert that overflow does not happen in the future, as requested by Evan. This fixes PR4401. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83159 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -82,13 +82,19 @@ void SUnit::addPred(const SDep &D) {
|
||||
SUnit *N = D.getSUnit();
|
||||
// Update the bookkeeping.
|
||||
if (D.getKind() == SDep::Data) {
|
||||
assert(NumPreds < UINT_MAX && "NumPreds will overflow!");
|
||||
assert(N->NumSuccs < UINT_MAX && "NumSuccs will overflow!");
|
||||
++NumPreds;
|
||||
++N->NumSuccs;
|
||||
}
|
||||
if (!N->isScheduled)
|
||||
if (!N->isScheduled) {
|
||||
assert(NumPredsLeft < UINT_MAX && "NumPredsLeft will overflow!");
|
||||
++NumPredsLeft;
|
||||
if (!isScheduled)
|
||||
}
|
||||
if (!isScheduled) {
|
||||
assert(N->NumSuccsLeft < UINT_MAX && "NumSuccsLeft will overflow!");
|
||||
++N->NumSuccsLeft;
|
||||
}
|
||||
Preds.push_back(D);
|
||||
N->Succs.push_back(P);
|
||||
if (P.getLatency() != 0) {
|
||||
@@ -121,13 +127,19 @@ void SUnit::removePred(const SDep &D) {
|
||||
Preds.erase(I);
|
||||
// Update the bookkeeping.
|
||||
if (P.getKind() == SDep::Data) {
|
||||
assert(NumPreds > 0 && "NumPreds will underflow!");
|
||||
assert(N->NumSuccs > 0 && "NumSuccs will underflow!");
|
||||
--NumPreds;
|
||||
--N->NumSuccs;
|
||||
}
|
||||
if (!N->isScheduled)
|
||||
if (!N->isScheduled) {
|
||||
assert(NumPredsLeft > 0 && "NumPredsLeft will underflow!");
|
||||
--NumPredsLeft;
|
||||
if (!isScheduled)
|
||||
}
|
||||
if (!isScheduled) {
|
||||
assert(N->NumSuccsLeft > 0 && "NumSuccsLeft will underflow!");
|
||||
--N->NumSuccsLeft;
|
||||
}
|
||||
if (P.getLatency() != 0) {
|
||||
this->setDepthDirty();
|
||||
N->setHeightDirty();
|
||||
|
Reference in New Issue
Block a user