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)