C++14: Use enum class builtin hashing
Instead of casting to int for a map key.
Bug: b/147359661
Change-Id: Id777f7285f9349e7ab855c4a5a26d6a2aa4c02ba
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/39953
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index d5244a8..99c43de 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -192,10 +192,7 @@
const llvm::DataLayout &dataLayout);
JITGlobals(const JITGlobals &) = default;
- // The cache key here is actually a rr::Optimization::Level. We use int
- // as 'enum class' types do not provide builtin hash functions until
- // C++14. See: https://stackoverflow.com/a/29618545.
- Cache<int, TargetMachineSPtr> targetMachines;
+ Cache<rr::Optimization::Level, TargetMachineSPtr> targetMachines;
};
JITGlobals *JITGlobals::get()
@@ -206,13 +203,15 @@
JITGlobals::TargetMachineSPtr JITGlobals::getTargetMachine(rr::Optimization::Level optlevel)
{
- return targetMachines.getOrCreate(static_cast<int>(optlevel), [&]() {
- return TargetMachineSPtr(llvm::EngineBuilder()
#ifdef ENABLE_RR_DEBUG_INFO
- .setOptLevel(toLLVM(rr::Optimization::Level::None))
-#else
- .setOptLevel(toLLVM(optlevel))
+ auto llvmOptLevel = toLLVM(rr::Optimization::Level::None);
+#else // ENABLE_RR_DEBUG_INFO
+ auto llvmOptLevel = toLLVM(optlevel);
#endif // ENABLE_RR_DEBUG_INFO
+
+ return targetMachines.getOrCreate(optlevel, [&]() {
+ return TargetMachineSPtr(llvm::EngineBuilder()
+ .setOptLevel(llvmOptLevel)
.setMCPU(mcpu)
.setMArch(march)
.setMAttrs(mattrs)