Make fixups reference any constant (allow const float/double pool literals).
This avoids doing getConstantSym to avoid hitting the global
context's getConstantSym during emitIAS(), which may be desirable for
multi-threading, since each function's emitIAS() should be able to happen
on a separate thread.
The stringification is moved till later, so it still happens, just without
creating a constant relocatable w/ offset of 0.
This ends up tickling an issue where -O0 on 252.eon now gets 2x as many
page faults, and I'm not sure exactly why. This makes the overall time
higher, though emit time is lower.
When translating with -O2 # of page faults is about the same before/after,
so that oddness is restricted to O0.
Before this change, tweaking the slab size at O0 doesn't
seem to affect as drastically as 2x swings either.
To work around this, I turned the slab size of the assembler down to 32KB.
===
Move all the .L$type$poolid into a function (replacing getPoolEntryID).
BUG=none
R=stichnot@chromium.org
Review URL: https://codereview.chromium.org/837553009
diff --git a/src/IceDefs.h b/src/IceDefs.h
index f5147c6..584e059 100644
--- a/src/IceDefs.h
+++ b/src/IceDefs.h
@@ -58,10 +58,11 @@
class VariableDeclaration;
class VariablesMetadata;
-typedef llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 1024 * 1024>
-ArenaAllocator;
+template <size_t SlabSize = 1024 * 1024>
+using ArenaAllocator =
+ llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, SlabSize>;
-ArenaAllocator *getCurrentCfgAllocator();
+ArenaAllocator<> *getCurrentCfgAllocator();
template <typename T> struct CfgLocalAllocator {
using value_type = T;