Subzero. Moar performance tweaks.
1) Clones llvm::BitVector, and makes it Allocator aware (using the
CfgLocalAllocator<>)
2) Uses mallopt to set the malloc granularity. The default granularity
is too small, which forces too many mmap calls.
BUG=
R=sehr@chromium.org, stichnot@chromium.org
Review URL: https://codereview.chromium.org/1738683003 .
diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp
index 2c80e0b..c959784 100644
--- a/src/IceCfg.cpp
+++ b/src/IceCfg.cpp
@@ -15,6 +15,7 @@
#include "IceCfg.h"
#include "IceAssembler.h"
+#include "IceBitVector.h"
#include "IceCfgNode.h"
#include "IceClFlags.h"
#include "IceDefs.h"
@@ -237,8 +238,8 @@
// Prune any unreachable nodes before computing in-edges.
SizeT NumNodes = getNumNodes();
- llvm::BitVector Reachable(NumNodes);
- llvm::BitVector Pending(NumNodes);
+ BitVector Reachable(NumNodes);
+ BitVector Pending(NumNodes);
Pending.set(getEntryNode()->getIndex());
while (true) {
int Index = Pending.find_first();
@@ -427,7 +428,7 @@
}
namespace {
-void getRandomPostOrder(CfgNode *Node, llvm::BitVector &ToVisit,
+void getRandomPostOrder(CfgNode *Node, BitVector &ToVisit,
Ice::NodeList &PostOrder,
Ice::RandomNumberGenerator *RNG) {
assert(ToVisit[Node->getIndex()]);
@@ -449,7 +450,7 @@
NodeList ReversedReachable;
NodeList Unreachable;
- llvm::BitVector ToVisit(Nodes.size(), true);
+ BitVector ToVisit(Nodes.size(), true);
// Create Random number generator for function reordering
RandomNumberGenerator RNG(Ctx->getFlags().getRandomSeed(),
RPE_BasicBlockReordering, SequenceNumber);
@@ -813,7 +814,7 @@
getVMetadata()->init(VMK_Uses);
Live->init();
// Initialize with all nodes needing to be processed.
- llvm::BitVector NeedToProcess(Nodes.size(), true);
+ BitVector NeedToProcess(Nodes.size(), true);
while (NeedToProcess.any()) {
// Iterate in reverse topological order to speed up convergence.
for (CfgNode *Node : reverse_range(Nodes)) {