Merging r325218:
------------------------------------------------------------------------
r325218 | hahnfeld | 2018-02-15 09:10:22 +0100 (Thu, 15 Feb 2018) | 10 lines

[CMake] Add -fno-experimental-isel for testing

GlobalISel doesn't yet implement blockaddress and falls back to
SelectionDAG. This results in additional branch instruction to
the next basic block which breaks the OMPT tests.
Disable GlobalISel for now when compiling the tests because fixing
them is not easily possible. See http://llvm.org/PR36313 for full
discussion history.

Differential Revision: https://reviews.llvm.org/D43195
------------------------------------------------------------------------


git-svn-id: https://llvm.org/svn/llvm-project/openmp/branches/release_60@325230 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/cmake/DetectTestCompiler/CMakeLists.txt b/cmake/DetectTestCompiler/CMakeLists.txt
index 82d287b..c2f408c 100644
--- a/cmake/DetectTestCompiler/CMakeLists.txt
+++ b/cmake/DetectTestCompiler/CMakeLists.txt
@@ -1,11 +1,14 @@
 cmake_minimum_required(VERSION 2.8)
 project(DetectTestCompiler C CXX)
 
+include(CheckCCompilerFlag)
+include(CheckCXXCompilerFlag)
+
 function(write_compiler_information lang)
   set(information "${CMAKE_${lang}_COMPILER}")
   set(information "${information}\\;${CMAKE_${lang}_COMPILER_ID}")
   set(information "${information}\\;${CMAKE_${lang}_COMPILER_VERSION}")
-  set(information "${information}\\;${OpenMP_${lang}_FLAGS}")
+  set(information "${information}\\;${${lang}_FLAGS}")
   file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${lang}CompilerInformation.txt ${information})
 endfunction(write_compiler_information)
 
@@ -15,5 +18,22 @@
   set(OpenMP_CXX_FLAGS "-fopenmp")
 endif()
 
+set(C_FLAGS ${flags} ${OpenMP_C_FLAGS})
+set(CXX_FLAGS ${flags} ${OpenMP_CXX_FLAGS})
+
+# TODO: Implement blockaddress in GlobalISel and remove this flag!
+if (CMAKE_C_COMPILER_ID STREQUAL "Clang")
+  check_c_compiler_flag("-fno-experimental-isel" C_HAS_EXPERIMENTAL_ISEL_FLAG)
+  check_cxx_compiler_flag("-fno-experimental-isel" CXX_HAS_EXPERIMENTAL_ISEL_FLAG)
+  macro(add_experimental_isel_flag lang)
+    if (${lang}_HAS_EXPERIMENTAL_ISEL_FLAG)
+      set(${lang}_FLAGS "-fno-experimental-isel ${${lang}_FLAGS}")
+    endif()
+  endmacro(add_experimental_isel_flag)
+
+  add_experimental_isel_flag(C)
+  add_experimental_isel_flag(CXX)
+endif()
+
 write_compiler_information(C)
 write_compiler_information(CXX)
diff --git a/cmake/OpenMPTesting.cmake b/cmake/OpenMPTesting.cmake
index 1cff9ec..165435f 100644
--- a/cmake/OpenMPTesting.cmake
+++ b/cmake/OpenMPTesting.cmake
@@ -117,7 +117,8 @@
   # Cannot use CLANG_VERSION because we are not guaranteed that this is already set.
   set(OPENMP_TEST_COMPILER_VERSION "${LLVM_VERSION}")
   set(OPENMP_TEST_COMPILER_VERSION_MAJOR "${LLVM_MAJOR_VERSION}")
-  set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "-fopenmp")
+  # TODO: Implement blockaddress in GlobalISel and remove this flag!
+  set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "-fopenmp -fno-experimental-isel")
 endif()
 
 # Function to set compiler features for use in lit.