[polly] r279734 - Introduce unittests.
Tobias Grosser via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 25 06:24:07 PDT 2016
This seems to have triggered a problem due to missing libraries:
http://lab.llvm.org:8011/builders/perf-x86_64-penryn-O3-polly-parallel-fast/builds/23099
Best,
Tobias
On Thu, Aug 25, 2016, at 02:36 PM, Michael Kruse via llvm-commits wrote:
> Author: meinersbur
> Date: Thu Aug 25 07:36:15 2016
> New Revision: 279734
>
> URL: http://llvm.org/viewvc/llvm-project?rev=279734&view=rev
> Log:
> Introduce unittests.
>
> Add the infrastructure for unittests to Polly and two simple tests for
> conversion between isl_val and APInt. In addition, a build target
> check-polly-unittests is added to run only the unittests but not the
> regression
> tests.
>
> Clang's unittest mechanism served as as a blueprint which then was
> adapted to
> Polly.
>
> Differential Revision: https://reviews.llvm.org/D23833
>
> Added:
> polly/trunk/test/Unit/
> polly/trunk/test/Unit/lit.cfg
> polly/trunk/test/Unit/lit.site.cfg.in
> polly/trunk/unittests/
> polly/trunk/unittests/CMakeLists.txt
> polly/trunk/unittests/Isl/
> polly/trunk/unittests/Isl/CMakeLists.txt
> polly/trunk/unittests/Isl/IslTest.cpp
> Modified:
> polly/trunk/CMakeLists.txt
> polly/trunk/test/CMakeLists.txt
>
> Modified: polly/trunk/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/CMakeLists.txt?rev=279734&r1=279733&r2=279734&view=diff
> ==============================================================================
> --- polly/trunk/CMakeLists.txt (original)
> +++ polly/trunk/CMakeLists.txt Thu Aug 25 07:36:15 2016
> @@ -88,9 +88,33 @@ if (NOT DEFINED LLVM_MAIN_SRC_DIR)
> endif()
> endif()
>
> + # Sources available, too?
> + execute_process(COMMAND "${LLVM_INSTALL_ROOT}/bin/llvm-config"
> --src-root
> + OUTPUT_VARIABLE MAIN_SRC_DIR
> + OUTPUT_STRIP_TRAILING_WHITESPACE)
> + set(LLVM_SOURCE_ROOT ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source
> tree")
> +
> + # Enable unit tests if available.
> + set(UNITTEST_DIR ${LLVM_SOURCE_ROOT}/utils/unittest)
> + if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h)
> + add_library(gtest ${UNITTEST_DIR}/googletest/src/gtest-all.cc)
> + target_include_directories(gtest PUBLIC
> "${UNITTEST_DIR}/googletest/include" PRIVATE
> "${UNITTEST_DIR}/googletest")
> + if( NOT MSVC )
> + target_link_libraries(gtest pthread tinfo dl)
> + endif ()
> +
> + add_library(gtest_main ${UNITTEST_DIR}/UnitTestMain/TestMain.cpp)
> + target_link_libraries(gtest_main gtest)
> +
> + set(POLLY_GTEST_AVAIL 1)
> + endif()
> +
> # Make sure the isl c files are built as fPIC
> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
> -endif(NOT DEFINED LLVM_MAIN_SRC_DIR)
> +else ()
> + set(LLVM_SOURCE_ROOT "${LLVM_MAIN_SRC_DIR}")
> + set(POLLY_GTEST_AVAIL 1)
> +endif ()
>
> set(POLLY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
> set(POLLY_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
> @@ -169,6 +193,9 @@ add_definitions( -D_GNU_SOURCE )
> add_subdirectory(docs)
> add_subdirectory(lib)
> add_subdirectory(test)
> +if (POLLY_GTEST_AVAIL)
> + add_subdirectory(unittests)
> +endif ()
> add_subdirectory(tools)
> # TODO: docs.
>
> @@ -177,7 +204,7 @@ configure_file( ${CMAKE_CURRENT_SOURCE_D
> ${POLLY_BINARY_DIR}/include/polly/Config/config.h )
>
> # Add target to check formatting of polly files
> -file( GLOB_RECURSE files *.h lib/*.cpp lib/*.c tools/*.cpp tools/*.c
> tools/*.h)
> +file( GLOB_RECURSE files *.h lib/*.cpp lib/*.c tools/*.cpp tools/*.c
> tools/*.h unittests/*.cpp)
> file( GLOB_RECURSE jsonfiles lib/JSON/*.h lib/JSON/*.cpp)
> file( GLOB_RECURSE external lib/External/*.h lib/External/*.c)
> list( REMOVE_ITEM files ${jsonfiles} ${external})
>
> Modified: polly/trunk/test/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/test/CMakeLists.txt?rev=279734&r1=279733&r2=279734&view=diff
> ==============================================================================
> --- polly/trunk/test/CMakeLists.txt (original)
> +++ polly/trunk/test/CMakeLists.txt Thu Aug 25 07:36:15 2016
> @@ -18,6 +18,9 @@ if (NOT DEFINED LLVM_MAIN_SRC_DIR)
> # FIXME: FileCheck is not available in llvm install directory at the
> moment.
> set(LLVM_LIT ${LLVM_INSTALL_ROOT}/bin/llvm-lit)
> set(POLLY_TEST_DEPS LLVMPolly)
> + if (POLLY_GTEST_AVAIL)
> + list(APPEND POLLY_TEST_DEPS PollyUnitTests)
> + endif ()
>
> set(LLVM_BINARY_DIR "${LLVM_INSTALL_ROOT}")
> set(LLVM_TOOLS_DIR "${LLVM_INSTALL_ROOT}/bin")
> @@ -67,18 +70,38 @@ if (NOT DEFINED LLVM_MAIN_SRC_DIR)
> add_custom_target(check-polly
> COMMAND ${LLVM_LIT}
> --param
> polly_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
> + --param
> polly_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
> --param build_config=${CMAKE_CFG_INTDIR}
> -sv ${POLLY_TEST_EXTRA_ARGS}
> ${CMAKE_CURRENT_BINARY_DIR}
> DEPENDS ${POLLY_TEST_DEPS}
> - COMMENT "Running Polly regression tests")
> + COMMENT "Running Polly regression/unit tests")
> set_target_properties(check-polly PROPERTIES FOLDER "Polly")
> +
> + if (POLLY_GTEST_AVAIL)
> + configure_file(
> + ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.in
> + ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg)
> +
> + add_custom_target(check-polly-unittests
> + COMMAND ${LLVM_LIT}
> + --param
> polly_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
> + --param build_config=${CMAKE_CFG_INTDIR}
> + -sv ${POLLY_TEST_EXTRA_ARGS}
> + ${CMAKE_CURRENT_BINARY_DIR}/Unit
> + DEPENDS PollyUnitTests
> + COMMENT "Running Polly unit tests")
> + set_target_properties(check-polly-unittests PROPERTIES FOLDER
> "Polly")
> + endif ()
> endif()
>
> else (NOT DEFINED LLVM_MAIN_SRC_DIR)
>
> set(LLVM_LIT ${LLVM_TOOLS_BINARY_DIR}/llvm-lit)
> set(POLLY_TEST_DEPS llvm-config opt LLVMPolly FileCheck not)
> + if (POLLY_GTEST_AVAIL)
> + list(APPEND POLLY_TEST_DEPS PollyUnitTests)
> + endif ()
>
> set(LLVM_BINARY_DIR "${LLVM_BINARY_DIR}")
> set(LLVM_TOOLS_DIR "${LLVM_TOOLS_BINARY_DIR}")
> @@ -89,14 +112,31 @@ else (NOT DEFINED LLVM_MAIN_SRC_DIR)
> ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
> ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)
>
> + # Run regression and unit tests
> add_lit_testsuite(check-polly "Running polly regression tests"
> ${CMAKE_CURRENT_BINARY_DIR}
> PARAMS polly_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
> +
> polly_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
> DEPENDS ${POLLY_TEST_DEPS}
> )
>
> set_target_properties(check-polly PROPERTIES FOLDER "Polly")
>
> + if (POLLY_GTEST_AVAIL)
> + configure_lit_site_cfg(
> + ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.in
> + ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
> + )
> +
> + # Run only unit tests
> + add_lit_testsuite(check-polly-unittests "Running polly unit tests
> only"
> + ${CMAKE_CURRENT_BINARY_DIR}/Unit
> + PARAMS
> polly_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
> + DEPENDS PollyUnitTests
> + )
> + set_target_properties(check-polly-unittests PROPERTIES FOLDER
> "Polly")
> + endif ()
> +
> # Run polly-check-format as part of polly-check only if we are
> compiling with
> # clang, so clang-format is availbale.
> # if (TARGET clang-format) would be preferable, but this target is
> only added
>
> Added: polly/trunk/test/Unit/lit.cfg
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/test/Unit/lit.cfg?rev=279734&view=auto
> ==============================================================================
> --- polly/trunk/test/Unit/lit.cfg (added)
> +++ polly/trunk/test/Unit/lit.cfg Thu Aug 25 07:36:15 2016
> @@ -0,0 +1,108 @@
> +# -*- Python -*-
> +
> +# Configuration file for the 'lit' test runner.
> +
> +import os
> +import platform
> +
> +import lit.formats
> +import lit.util
> +
> +# name: The name of this test suite.
> +config.name = 'Polly-Unit'
> +
> +# suffixes: A list of file extensions to treat as test files.
> +config.suffixes = []
> +
> +# test_source_root: The root path where tests are located.
> +# test_exec_root: The root path where tests should be run.
> +polly_obj_root = getattr(config, 'polly_obj_root', None)
> +if polly_obj_root is not None:
> + config.test_exec_root = os.path.join(polly_obj_root, 'unittests')
> + config.test_source_root = config.test_exec_root
> +
> +# testFormat: The test format to use to interpret tests.
> +llvm_build_mode = getattr(config, 'llvm_build_mode', "Debug")
> +config.test_format = lit.formats.GoogleTest(llvm_build_mode, 'Tests')
> +
> +# Propagate the temp directory. Windows requires this because it uses
> \Windows\
> +# if none of these are present.
> +if 'TMP' in os.environ:
> + config.environment['TMP'] = os.environ['TMP']
> +if 'TEMP' in os.environ:
> + config.environment['TEMP'] = os.environ['TEMP']
> +
> +# Propagate path to symbolizer for ASan/MSan.
> +for symbolizer in ['ASAN_SYMBOLIZER_PATH', 'MSAN_SYMBOLIZER_PATH']:
> + if symbolizer in os.environ:
> + config.environment[symbolizer] = os.environ[symbolizer]
> +
> +###
> +
> +# Check that the object root is known.
> +if config.test_exec_root is None:
> + # Otherwise, we haven't loaded the site specific configuration (the
> user is
> + # probably trying to run on a test file directly, and either the
> site
> + # configuration hasn't been created by the build system, or we are
> in an
> + # out-of-tree build situation).
> +
> + # Check for 'polly_unit_site_config' user parameter, and use that if
> available.
> + site_cfg = lit_config.params.get('polly_unit_site_config', None)
> + if site_cfg and os.path.exists(site_cfg):
> + lit_config.load_config(config, site_cfg)
> + raise SystemExit
> +
> + # Try to detect the situation where we are using an out-of-tree
> build by
> + # looking for 'llvm-config'.
> + #
> + # FIXME: I debated (i.e., wrote and threw away) adding logic to
> + # automagically generate the lit.site.cfg if we are in some kind of
> fresh
> + # build situation. This means knowing how to invoke the build system
> + # though, and I decided it was too much magic.
> +
> + llvm_config = lit.util.which('llvm-config',
> config.environment['PATH'])
> + if not llvm_config:
> + lit_config.fatal('No site specific configuration available!')
> +
> + # Get the source and object roots.
> + llvm_src_root = lit.util.capture(['llvm-config',
> '--src-root']).strip()
> + llvm_obj_root = lit.util.capture(['llvm-config',
> '--obj-root']).strip()
> + polly_src_root = os.path.join(llvm_src_root, "tools", "polly")
> + polly_obj_root = os.path.join(llvm_obj_root, "tools", "polly")
> +
> + # Validate that we got a tree which points to here, using the
> standard
> + # tools/clang layout.
> + this_src_root = os.path.join(os.path.dirname(__file__),'..','..')
> + if os.path.realpath(polly_src_root) !=
> os.path.realpath(this_src_root):
> + lit_config.fatal('No site specific configuration available!')
> +
> + # Check that the site specific configuration exists.
> + site_cfg = os.path.join(polly_obj_root, 'test', 'Unit',
> 'lit.site.cfg')
> + if not os.path.exists(site_cfg):
> + lit_config.fatal('No site specific configuration available!')
> +
> + # Okay, that worked. Notify the user of the automagic, and
> reconfigure.
> + lit_config.note('using out-of-tree build at %r' % polly_obj_root)
> + lit_config.load_config(config, site_cfg)
> + raise SystemExit
> +
> +shlibpath_var = ''
> +if platform.system() == 'Linux':
> + shlibpath_var = 'LD_LIBRARY_PATH'
> +elif platform.system() == 'Darwin':
> + shlibpath_var = 'DYLD_LIBRARY_PATH'
> +elif platform.system() == 'Windows':
> + shlibpath_var = 'PATH'
> +
> +# Point the dynamic loader at dynamic libraries in 'lib'.
> +llvm_libs_dir = getattr(config, 'llvm_libs_dir', None)
> +if not llvm_libs_dir:
> + lit_config.fatal('No LLVM libs dir set!')
> +shlibpath = os.path.pathsep.join((llvm_libs_dir,
> +
> config.environment.get(shlibpath_var,'')))
> +
> +# Win32 seeks DLLs along %PATH%.
> +if sys.platform in ['win32', 'cygwin'] and
> os.path.isdir(config.shlibdir):
> + shlibpath = os.path.pathsep.join((config.shlibdir, shlibpath))
> +
> +config.environment[shlibpath_var] = shlibpath
>
> Added: polly/trunk/test/Unit/lit.site.cfg.in
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/test/Unit/lit.site.cfg.in?rev=279734&view=auto
> ==============================================================================
> --- polly/trunk/test/Unit/lit.site.cfg.in (added)
> +++ polly/trunk/test/Unit/lit.site.cfg.in Thu Aug 25 07:36:15 2016
> @@ -0,0 +1,31 @@
> + at LIT_SITE_CFG_IN_HEADER@
> +
> +import sys
> +
> +config.llvm_src_root = "@LLVM_SOURCE_DIR@"
> +config.llvm_obj_root = "@LLVM_BINARY_DIR@"
> +config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
> +config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
> +config.llvm_build_mode = "@LLVM_BUILD_MODE@"
> +config.polly_obj_root = "@POLLY_BINARY_DIR@"
> +config.polly_lib_dir = "@POLLY_LIB_DIR@"
> +config.enable_shared = @ENABLE_SHARED@
> +config.shlibdir = "@SHLIBDIR@"
> +config.target_triple = "@TARGET_TRIPLE@"
> +config.enable_gpgpu_codegen = "@GPU_CODEGEN@"
> +config.link_polly_into_tools = "@LINK_POLLY_INTO_TOOLS@"
> +
> +# Support substitution of the tools_dir, libs_dirs, and build_mode with
> user
> +# parameters. This is used when we can't determine the tool dir at
> +# configuration time.
> +try:
> + config.llvm_tools_dir = config.llvm_tools_dir % lit_config.params
> + config.llvm_libs_dir = config.llvm_libs_dir % lit_config.params
> + config.llvm_build_mode = config.llvm_build_mode % lit_config.params
> +except KeyError:
> + e = sys.exc_info()[1]
> + key, = e.args
> + lit_config.fatal("unable to find %r parameter, use
> '--param=%s=VALUE'" % (key,key))
> +
> +# Let the main config do the real work.
> +lit_config.load_config(config, "@POLLY_SOURCE_DIR@/test/Unit/lit.cfg")
>
> Added: polly/trunk/unittests/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/unittests/CMakeLists.txt?rev=279734&view=auto
> ==============================================================================
> --- polly/trunk/unittests/CMakeLists.txt (added)
> +++ polly/trunk/unittests/CMakeLists.txt Thu Aug 25 07:36:15 2016
> @@ -0,0 +1,22 @@
> +add_custom_target(PollyUnitTests)
> +set_target_properties(PollyUnitTests PROPERTIES FOLDER "Polly")
> +
> +# add_polly_unittest(test_dirname file1.cpp file2.cpp)
> +#
> +# Will compile the list of files together and link against Polly and its
> dependences.
> +function(add_polly_unittest test_name)
> + if(COMMAND add_unittest)
> + add_unittest(PollyUnitTests ${test_name} ${ARGN})
> + else()
> + add_executable(${test_name} ${ARGN})
> + set_target_properties(${test_name} PROPERTIES
> RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
> +
> + target_link_libraries(${test_name} gtest_main gtest)
> + add_dependencies(PollyUnitTests ${test_name})
> +
> + set_property(TARGET ${test_name} PROPERTY FOLDER "Polly")
> + endif()
> + target_link_libraries(${test_name} Polly LLVMCore LLVMSupport)
> +endfunction()
> +
> +add_subdirectory(Isl)
>
> Added: polly/trunk/unittests/Isl/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/unittests/Isl/CMakeLists.txt?rev=279734&view=auto
> ==============================================================================
> --- polly/trunk/unittests/Isl/CMakeLists.txt (added)
> +++ polly/trunk/unittests/Isl/CMakeLists.txt Thu Aug 25 07:36:15 2016
> @@ -0,0 +1,3 @@
> +add_polly_unittest(IslTests
> + IslTest.cpp
> + )
>
> Added: polly/trunk/unittests/Isl/IslTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/polly/trunk/unittests/Isl/IslTest.cpp?rev=279734&view=auto
> ==============================================================================
> --- polly/trunk/unittests/Isl/IslTest.cpp (added)
> +++ polly/trunk/unittests/Isl/IslTest.cpp Thu Aug 25 07:36:15 2016
> @@ -0,0 +1,101 @@
> +//===- IslTest.cpp
> ----------------------------------------------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "polly/Support/GICHelper.h"
> +#include "gtest/gtest.h"
> +#include "isl/val.h"
> +
> +using namespace llvm;
> +using namespace polly;
> +
> +namespace {
> +
> +TEST(Isl, APIntToIslVal) {
> + isl_ctx *IslCtx = isl_ctx_alloc();
> +
> + {
> + APInt APNOne(32, -1, true);
> + auto *IslNOne = isl_valFromAPInt(IslCtx, APNOne, true);
> + EXPECT_EQ(isl_bool_true, isl_val_is_negone(IslNOne));
> + isl_val_free(IslNOne);
> + }
> +
> + {
> + APInt APZero(32, 0, false);
> + auto *IslZero = isl_valFromAPInt(IslCtx, APZero, false);
> + EXPECT_EQ(isl_val_is_zero(IslZero), isl_bool_true);
> + isl_val_free(IslZero);
> + }
> +
> + {
> + APInt APOne(32, 1, false);
> + auto *IslOne = isl_valFromAPInt(IslCtx, APOne, false);
> + EXPECT_EQ(isl_val_is_one(IslOne), isl_bool_true);
> + isl_val_free(IslOne);
> + }
> +
> + {
> + APInt APTwo(32, 2, false);
> + auto *IslTwo = isl_valFromAPInt(IslCtx, APTwo, false);
> + EXPECT_EQ(isl_val_cmp_si(IslTwo, 2), 0);
> + isl_val_free(IslTwo);
> + }
> +
> + {
> + APInt APNOne(32, (1ull << 32) - 1, false);
> + auto *IslNOne = isl_valFromAPInt(IslCtx, APNOne, false);
> + auto *IslRef = isl_val_int_from_ui(IslCtx, (1ull << 32) - 1);
> + EXPECT_EQ(isl_val_eq(IslNOne, IslRef), isl_bool_true);
> + isl_val_free(IslNOne);
> + isl_val_free(IslRef);
> + }
> +
> + isl_ctx_free(IslCtx);
> +}
> +
> +TEST(Isl, IslValToAPInt) {
> + isl_ctx *IslCtx = isl_ctx_alloc();
> +
> + {
> + auto *IslNOne = isl_val_int_from_si(IslCtx, -1);
> + auto APNOne = APIntFromVal(IslNOne);
> + // APInt has no sign bit, so never equals to a negative number.
> + // FIXME: The canonical representation of a negative APInt is two's
> + // complement.
> + EXPECT_EQ(APNOne, 1);
> + }
> +
> + {
> + auto *IslZero = isl_val_int_from_ui(IslCtx, 0);
> + auto APZero = APIntFromVal(IslZero);
> + EXPECT_EQ(APZero, 0);
> + }
> +
> + {
> + auto *IslOne = isl_val_int_from_ui(IslCtx, 1);
> + auto APOne = APIntFromVal(IslOne);
> + EXPECT_EQ(APOne, 1);
> + }
> +
> + {
> + auto *IslTwo = isl_val_int_from_ui(IslCtx, 2);
> + auto APTwo = APIntFromVal(IslTwo);
> + EXPECT_EQ(APTwo, 2);
> + }
> +
> + {
> + auto *IslNOne = isl_val_int_from_ui(IslCtx, (1ull << 32) - 1);
> + auto APNOne = APIntFromVal(IslNOne);
> + EXPECT_EQ(APNOne, (1ull << 32) - 1);
> + }
> +
> + isl_ctx_free(IslCtx);
> +}
> +
> +} // anonymous namespace
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list