Commit 062dc18c by Antonio Maiorano

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/+/39168Reviewed-by: 's avatarBen Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarAntonio Maiorano <amaiorano@google.com>
parent 84571ac2
......@@ -116,6 +116,11 @@ set(DEFAULT_REACTOR_BACKEND "LLVM")
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 @@ if(REACTOR_VERIFY_LLVM_IR)
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")
......
......@@ -121,7 +121,6 @@ namespace
// 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({});
......
......@@ -68,8 +68,15 @@ namespace rr
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; }
......
......@@ -68,7 +68,6 @@ namespace
// 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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment