Skip to content

Commit

Permalink
[mlgo][aot] requrie the model is autogenerated for test determinism
Browse files Browse the repository at this point in the history
The tests that exercise the 'release' mode, where the model is AOT-ed,
check the output has certain properties, to validate that, indeed, a
different policy from the default one was exercised. For determinism, we
can't reliably check that output for an arbitrary learned policy, since
it could be that policy happens to mimic the default one in that
particular case.

This patch adds a requirement that those tests run only when the model
is autogenerated (e.g. on build bots).

Differential Revision: https://reviews.llvm.org/D111747
  • Loading branch information
mtrofin committed Oct 13, 2021
1 parent 8383e49 commit 6c76d01
Show file tree
Hide file tree
Showing 7 changed files with 16 additions and 8 deletions.
7 changes: 7 additions & 0 deletions llvm/CMakeLists.txt
Expand Up @@ -850,6 +850,13 @@ if (NOT TENSORFLOW_AOT_PATH STREQUAL "")
install(TARGETS tf_xla_runtime EXPORT LLVMExports
ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT tf_xla_runtime)
set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS tf_xla_runtime)
# Once we add more modules, we should handle this more automatically.
if (NOT DEFINED LLVM_INLINER_MODEL_PATH
OR "${LLVM_INLINER_MODEL_PATH}" STREQUAL ""
OR "${LLVM_INLINER_MODEL_PATH}" STREQUAL "autogenerate")
set(LLVM_INLINER_MODEL_PATH "autogenerate")
set(LLVM_INLINER_MODEL_AUTOGENERATED 1)
endif()
endif()

# Configure the three LLVM configuration header files.
Expand Down
6 changes: 0 additions & 6 deletions llvm/lib/Analysis/CMakeLists.txt
Expand Up @@ -8,12 +8,6 @@ if (DEFINED LLVM_HAVE_TF_AOT OR DEFINED LLVM_HAVE_TF_API)
set(LLVM_INLINER_MODEL_CURRENT_URL "https://github.com/google/ml-compiler-opt/releases/download/inlining-Oz-v1.1/inlining-Oz-99f0063-v1.1.tar.gz")

if (DEFINED LLVM_HAVE_TF_AOT)
# If the path is empty, autogenerate the model
if (NOT DEFINED LLVM_INLINER_MODEL_PATH OR "${LLVM_INLINER_MODEL_PATH}" STREQUAL "")
set(LLVM_INLINER_MODEL_PATH "autogenerate")
message(WARNING "LLVM_INLINER_MODEL_PATH was not set: autogenerating a model to finish the build.")
endif()

tf_find_and_compile(
${LLVM_INLINER_MODEL_PATH}
${LLVM_INLINER_MODEL_CURRENT_URL}
Expand Down
1 change: 1 addition & 0 deletions llvm/test/CMakeLists.txt
Expand Up @@ -17,6 +17,7 @@ llvm_canonicalize_cmake_booleans(
LLVM_BYE_LINK_INTO_TOOLS
LLVM_HAVE_TF_AOT
LLVM_HAVE_TF_API
LLVM_INLINER_MODEL_AUTOGENERATED
LLVM_ENABLE_EXPENSIVE_CHECKS
)

Expand Down
5 changes: 3 additions & 2 deletions llvm/test/Transforms/Inline/ML/bounds-checks.ll
@@ -1,8 +1,9 @@
; Test behavior when inlining policy grows size out of control.
; In all cases, the end result is the same: mandatory inlinings must happen.
; However, when we discover we 'trip' over the artificially-low size increase
; However, when we discover we 'trip' over the artificially-low size increase
; factor, we don't inline anymore.
; REQUIRES: have_tf_aot
; REQUIRES: llvm_inliner_model_autogenerated
; RUN: opt -passes=scc-oz-module-inliner -enable-ml-inliner=release -ml-advisor-size-increase-threshold=10.0 -S < %s 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=NOBOUNDS
; RUN: opt -passes=scc-oz-module-inliner -enable-ml-inliner=release -ml-advisor-size-increase-threshold=1.0 -S < %s 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=BOUNDS

Expand Down Expand Up @@ -38,4 +39,4 @@ attributes #0 = { alwaysinline }
; @some-function isn't mandatory, and when we set the increase threshold too low,
; it won't be inlined.
; NOBOUNDS-NOT: @some_function
; BOUNDS: call i64 @some_function
; BOUNDS: call i64 @some_function
1 change: 1 addition & 0 deletions llvm/test/Transforms/Inline/ML/ml-test-release-mode.ll
Expand Up @@ -6,5 +6,6 @@
; for the 'development' mode.
;
; REQUIRES: have_tf_aot
; REQUIRES: llvm_inliner_model_autogenerated
; RUN: opt -passes=scc-oz-module-inliner -enable-ml-inliner=release -S < %S/Inputs/test-module.ll 2>&1 | FileCheck %S/Inputs/test-module.ll --check-prefix=CHECK
; RUN: opt -passes=scc-oz-module-inliner -enable-ml-inliner=default -S < %S/Inputs/test-module.ll 2>&1 | FileCheck %S/Inputs/test-module.ll --check-prefix=DEFAULT
3 changes: 3 additions & 0 deletions llvm/test/lit.cfg.py
Expand Up @@ -254,6 +254,9 @@ def get_asan_rtlib():
if config.have_tf_api:
config.available_features.add("have_tf_api")

if config.llvm_inliner_model_autogenerated:
config.available_features.add("llvm_inliner_model_autogenerated")

def have_cxx_shared_library():
readobj_exe = lit.util.which('llvm-readobj', config.llvm_tools_dir)
if not readobj_exe:
Expand Down
1 change: 1 addition & 0 deletions llvm/test/lit.site.cfg.py.in
Expand Up @@ -54,6 +54,7 @@ config.has_plugins = @LLVM_ENABLE_PLUGINS@
config.linked_bye_extension = @LLVM_BYE_LINK_INTO_TOOLS@
config.have_tf_aot = @LLVM_HAVE_TF_AOT@
config.have_tf_api = @LLVM_HAVE_TF_API@
config.llvm_inliner_model_autogenerated = @LLVM_INLINER_MODEL_AUTOGENERATED@
config.expensive_checks = @LLVM_ENABLE_EXPENSIVE_CHECKS@

# Support substitution of the tools_dir with user parameters. This is
Expand Down

0 comments on commit 6c76d01

Please sign in to comment.