From d90f13b7fd15b688f03fd8f1dad481d2f2236a59 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 14 Sep 2016 20:38:16 -0700 Subject: allocate newCopies on demand in coalesce-locals, to avoid n^2 allocation when in practice we need a lot less (and on e.g. sqlite, n^2 is very large) --- src/passes/CoalesceLocals.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/passes/CoalesceLocals.cpp b/src/passes/CoalesceLocals.cpp index 503b7ad2a..d74500bb5 100644 --- a/src/passes/CoalesceLocals.cpp +++ b/src/passes/CoalesceLocals.cpp @@ -440,7 +440,7 @@ void CoalesceLocals::pickIndicesFromOrder(std::vector& order, std::vector newInterferences.resize(numLocals * numLocals); std::fill(newInterferences.begin(), newInterferences.end(), 0); auto numParams = getFunction()->getNumParams(); - newCopies.resize(numLocals * numLocals); + newCopies.resize(numParams * numLocals); // start with enough room for the params std::fill(newCopies.begin(), newCopies.end(), 0); Index nextFree = 0; removedCopies = 0; @@ -476,6 +476,7 @@ void CoalesceLocals::pickIndicesFromOrder(std::vector& order, std::vector types[found] = getFunction()->getLocalType(actual); nextFree++; removedCopies += getCopies(found, actual); + newCopies.resize(nextFree * numLocals); } else { removedCopies += foundCopies; } -- cgit v1.2.3