]> granicus.if.org Git - llvm/commitdiff
[cmake] Disable a GCC optimization when building LLVM for MIPS
authorSimon Atanasyan <simon@atanasyan.com>
Sat, 27 Apr 2019 09:28:54 +0000 (09:28 +0000)
committerSimon Atanasyan <simon@atanasyan.com>
Sat, 27 Apr 2019 09:28:54 +0000 (09:28 +0000)
GCC when compiling LLVM for MIPS can introduce a jump to an uninitialized
value when shrink wrapping is enabled. As shrink wrapping is enabled in
GCC at all optimization levels, it must be disabled. This bug exists for
all versions of GCC since 4.9.2.

This partially resolves PR37701 / GCC PR target/86069.

Patch by Simon Dardis.

Differential Revision: https://reviews.llvm.org/D48069

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359376 91177308-0d34-0410-b5e6-96231b3b80d8

cmake/modules/HandleLLVMOptions.cmake

index 15497d405e0d87938d48b78c13970b0bbba4b31e..88946aa107d70a433115f15ee4373eeb679a56d4 100644 (file)
@@ -248,6 +248,11 @@ if( LLVM_ENABLE_PIC )
   else()
     add_flag_or_print_warning("-fPIC" FPIC)
   endif()
+  # GCC for MIPS can miscompile LLVM due to PR37701.
+  if(CMAKE_COMPILER_IS_GNUCXX AND LLVM_NATIVE_ARCH STREQUAL "Mips" AND
+         NOT Uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
+    add_flag_or_print_warning("-fno-shrink-wrap" FNO_SHRINK_WRAP)
+  endif()
 endif()
 
 if(NOT WIN32 AND NOT CYGWIN AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))