Use custom executable memory allocator. On Linux this enables using named memory maps to assist profiling. Change-Id: I96c36cf7b892237f4f7ed921d01f33454a9398f0 Reviewed-on: https://swiftshader-review.googlesource.com/20508 Tested-by: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Reactor/BUILD.gn b/src/Reactor/BUILD.gn index dca98e48..97446fc 100644 --- a/src/Reactor/BUILD.gn +++ b/src/Reactor/BUILD.gn
@@ -281,6 +281,10 @@ ":swiftshader_subzero_common_private_config", ":swiftshader_reactor_with_subzero_private_config", ] + + include_dirs = [ + "..", + ] } else { deps += [ "../../third_party/LLVM:swiftshader_llvm" ]
diff --git a/src/Reactor/Subzero.vcxproj b/src/Reactor/Subzero.vcxproj index 688e8399..51e0a62 100644 --- a/src/Reactor/Subzero.vcxproj +++ b/src/Reactor/Subzero.vcxproj
@@ -87,7 +87,7 @@ <Optimization>Disabled</Optimization> <PreprocessorDefinitions>SZTARGET=X8632;ALLOW_DUMP=0;ALLOW_TIMERS=0;ALLOW_LLVM_CL=0;ALLOW_LLVM_IR=0;ALLOW_LLVM_IR_AS_INPUT=0;ALLOW_MINIMAL_BUILD=0;ALLOW_WASM=0;ICE_THREAD_LOCAL_HACK=0;SUBZERO_USE_MICROSOFT_ABI;WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - <AdditionalIncludeDirectories>$(SolutionDir)third_party\subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;$(SolutionDir)third_party\subzero\pnacl-llvm\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)third_party\subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;$(SolutionDir)third_party\subzero\pnacl-llvm\include;$(SolutionDir)src\</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <ForcedIncludeFiles>src/IceTypes.h</ForcedIncludeFiles> <MultiProcessorCompilation>true</MultiProcessorCompilation> @@ -106,7 +106,7 @@ <Optimization>Disabled</Optimization> <PreprocessorDefinitions>SZTARGET=X8664;ALLOW_DUMP=0;ALLOW_TIMERS=0;ALLOW_LLVM_CL=0;ALLOW_LLVM_IR=0;ALLOW_LLVM_IR_AS_INPUT=0;ALLOW_MINIMAL_BUILD=0;ALLOW_WASM=0;ICE_THREAD_LOCAL_HACK=0;SUBZERO_USE_MICROSOFT_ABI;WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - <AdditionalIncludeDirectories>$(SolutionDir)third_party\subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;$(SolutionDir)third_party\subzero\pnacl-llvm\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)third_party\subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;$(SolutionDir)third_party\subzero\pnacl-llvm\include;$(SolutionDir)src\</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <ForcedIncludeFiles>src/IceTypes.h</ForcedIncludeFiles> <MultiProcessorCompilation>true</MultiProcessorCompilation> @@ -127,7 +127,7 @@ <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>SZTARGET=X8632;ALLOW_DUMP=0;ALLOW_TIMERS=0;ALLOW_LLVM_CL=0;ALLOW_LLVM_IR=0;ALLOW_LLVM_IR_AS_INPUT=0;ALLOW_MINIMAL_BUILD=0;ALLOW_WASM=0;ICE_THREAD_LOCAL_HACK=0;SUBZERO_USE_MICROSOFT_ABI;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - <AdditionalIncludeDirectories>$(SolutionDir)third_party\subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;$(SolutionDir)third_party\subzero\pnacl-llvm\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)third_party\subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;$(SolutionDir)third_party\subzero\pnacl-llvm\include;$(SolutionDir)src\</AdditionalIncludeDirectories> <ForcedIncludeFiles>src/IceTypes.h</ForcedIncludeFiles> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <MultiProcessorCompilation>true</MultiProcessorCompilation> @@ -150,7 +150,7 @@ <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>SZTARGET=X8664;ALLOW_DUMP=0;ALLOW_TIMERS=0;ALLOW_LLVM_CL=0;ALLOW_LLVM_IR=0;ALLOW_LLVM_IR_AS_INPUT=0;ALLOW_MINIMAL_BUILD=0;ALLOW_WASM=0;ICE_THREAD_LOCAL_HACK=0;SUBZERO_USE_MICROSOFT_ABI;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories> - <AdditionalIncludeDirectories>$(SolutionDir)third_party\subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;$(SolutionDir)third_party\subzero\pnacl-llvm\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)third_party\subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;$(SolutionDir)third_party\subzero\pnacl-llvm\include;$(SolutionDir)src\</AdditionalIncludeDirectories> <FavorSizeOrSpeed>Size</FavorSizeOrSpeed> <OmitFramePointers>true</OmitFramePointers> <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp index e499496..3d49658 100644 --- a/src/Reactor/SubzeroReactor.cpp +++ b/src/Reactor/SubzeroReactor.cpp
@@ -16,6 +16,8 @@ #include "Optimizer.hpp" +#include "Common/Memory.hpp" + #include "src/IceTypes.h" #include "src/IceCfg.h" #include "src/IceELFStreamer.h" @@ -423,20 +425,12 @@ T *allocate(size_type n) { - #if defined(_WIN32) - return (T*)VirtualAlloc(NULL, sizeof(T) * n, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); - #else - return (T*)mmap(nullptr, sizeof(T) * n, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - #endif + return (T*)allocateExecutable(sizeof(T) * n); } void deallocate(T *p, size_type n) { - #if defined(_WIN32) - VirtualFree(p, 0, MEM_RELEASE); - #else - munmap(p, sizeof(T) * n); - #endif + deallocateExecutable(p, sizeof(T) * n); } };