mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 04:33:05 +00:00
Fix NASTY N^2 behavior that was causing the gzip benchmark to take forever to
assemble. Now we scan the use-list from the back when removing users instead of from the front. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4086 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d43c7d2077
commit
d1c657e2c7
@ -77,12 +77,18 @@ void Value::refineAbstractType(const DerivedType *OldTy, const Type *NewTy) {
|
||||
Ty = NewTy;
|
||||
}
|
||||
|
||||
void Value::killUse(User *i) {
|
||||
if (i == 0) return;
|
||||
use_iterator I = find(Uses.begin(), Uses.end(), i);
|
||||
void Value::killUse(User *U) {
|
||||
if (U == 0) return;
|
||||
unsigned i;
|
||||
|
||||
assert(I != Uses.end() && "Use not in uses list!!");
|
||||
Uses.erase(I);
|
||||
// Scan backwards through the uses list looking for the user. We do this
|
||||
// because vectors like to be accessed on the end. This is incredibly
|
||||
// important from a performance perspective.
|
||||
for (i = Uses.size()-1; Uses[i] != U; --i)
|
||||
/* empty */;
|
||||
|
||||
assert(i < Uses.size() && "Use not in uses list!!");
|
||||
Uses.erase(Uses.begin()+i);
|
||||
}
|
||||
|
||||
User *Value::use_remove(use_iterator &I) {
|
||||
|
Loading…
Reference in New Issue
Block a user