Add REACTOR_DEFAULT_OPT_LEVEL macro
Allows us to configure Reactor backend optimization level via
preprocessor macro. Can be set via CMake arg.
Bug: b/145685985
Change-Id: I27a80b15846a8b43be5bff0505632213852a5dc6
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/39168
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Tested-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 61f8090..6d4bb75 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -116,6 +116,11 @@
set(REACTOR_BACKEND ${DEFAULT_REACTOR_BACKEND} CACHE STRING "JIT compiler back-end used by Reactor")
set_property(CACHE REACTOR_BACKEND PROPERTY STRINGS LLVM Subzero)
+# If defined, overrides the default optimization level of the current reactor backend.
+# Set to one of the rr::Optimization::Level enum values.
+set(REACTOR_DEFAULT_OPT_LEVEL "Default" CACHE STRING "Reactor default optimization level")
+set_property(CACHE REACTOR_DEFAULT_OPT_LEVEL PROPERTY STRINGS "None" "Less" "Default" "Aggressive")
+
# LLVM disallows calling cmake . from the main LLVM dir, the reason is that
# it builds header files that could overwrite the orignal ones. Here we
# want to include LLVM as a subdirectory and even though it wouldn't cause
@@ -492,6 +497,10 @@
list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DENABLE_RR_LLVM_IR_VERIFICATION")
endif()
+if(REACTOR_DEFAULT_OPT_LEVEL)
+ list(APPEND SWIFTSHADER_COMPILE_OPTIONS "-DREACTOR_DEFAULT_OPT_LEVEL=${REACTOR_DEFAULT_OPT_LEVEL}")
+endif()
+
if(WIN32)
add_definitions(-DWINVER=0x501 -DNOMINMAX -DSTRICT)
set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "" "lib")
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 05d4b42..af39027 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -121,7 +121,6 @@
// This uses a static in a function to avoid the cost of a global static
// initializer. See http://neugierig.org/software/chromium/notes/2011/08/static-initializers.html
static rr::Config config = rr::Config::Edit()
- .set(rr::Optimization::Level::Default)
.add(rr::Optimization::Pass::ScalarReplAggregates)
.add(rr::Optimization::Pass::InstructionCombining)
.apply({});
diff --git a/src/Reactor/Nucleus.hpp b/src/Reactor/Nucleus.hpp
index 25c933d..fd202a3 100644
--- a/src/Reactor/Nucleus.hpp
+++ b/src/Reactor/Nucleus.hpp
@@ -68,8 +68,15 @@
using Passes = std::vector<Pass>;
- Optimization() = default;
- Optimization(Level level, const Passes & passes) : level(level), passes(passes) {}
+ Optimization(Level level = Level::Default, const Passes& passes = {})
+ : level(level), passes(passes)
+ {
+ #if defined(REACTOR_DEFAULT_OPT_LEVEL)
+ {
+ level = Level::REACTOR_DEFAULT_OPT_LEVEL;
+ }
+ #endif
+ }
Level getLevel() const { return level; }
const Passes & getPasses() const { return passes; }
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index 81409c8..552b80e 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -68,7 +68,6 @@
// This uses a static in a function to avoid the cost of a global static
// initializer. See http://neugierig.org/software/chromium/notes/2011/08/static-initializers.html
static rr::Config config = rr::Config::Edit()
- .set(rr::Optimization::Level::Default)
.apply({});
return config;
}