Using a deque to manage the stack of nodes is faster here.

Vector is slow due to many reallocations as the size regularly changes in
  unpredictable ways. See the investigation provided on the mailing list for
  more information:

http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20120116/135228.html


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218182 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Lenny Maiorani 2014-09-20 13:29:20 +00:00
parent 3f34ae97b9
commit 31235e5b94

View File

@ -26,7 +26,7 @@
#include "llvm/Support/RecyclingAllocator.h"
#include "llvm/Target/TargetLibraryInfo.h"
#include "llvm/Transforms/Utils/Local.h"
#include <vector>
#include <deque>
using namespace llvm;
#define DEBUG_TYPE "early-cse"
@ -560,7 +560,11 @@ bool EarlyCSE::runOnFunction(Function &F) {
if (skipOptnoneFunction(F))
return false;
std::vector<StackNode *> nodesToProcess;
// Note, deque is being used here because there is significant performance gains
// over vector when the container becomes very large due to the specific access
// patterns. For more information see the mailing list discussion on this:
// http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20120116/135228.html
std::deque<StackNode *> nodesToProcess;
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
DL = DLP ? &DLP->getDataLayout() : nullptr;