]> granicus.if.org Git - clang/commit
[CUDA/OpenMP] Define only some host macros during device compilation
authorJonas Hahnfeld <hahnjo@hahnjo.de>
Sat, 25 Aug 2018 13:42:40 +0000 (13:42 +0000)
committerJonas Hahnfeld <hahnjo@hahnjo.de>
Sat, 25 Aug 2018 13:42:40 +0000 (13:42 +0000)
commit1bdec838c54117d9befe6dfcd3336a0ba5de9e0d
treefa324d9ddc435b9b528d083456032c1807bc36f6
parent905c589291a16bf29189507e0ff468e0eb0f97b0
[CUDA/OpenMP] Define only some host macros during device compilation

When compiling CUDA or OpenMP device code Clang parses header files
that expect certain predefined macros from the host architecture. To
make this work the compiler passes the host triple via the -aux-triple
argument and (until now) pulls in all macros for that "auxiliary triple"
unconditionally.

However this results in defines like __SSE_MATH__ that will trigger
inline assembly making use of the "advertised" target features. See
the discussion of D47849 and PR38464 for a detailed explanation of
the encountered problems.

Instead of blacklisting "known bad" examples this patch starts adding
defines that are needed for certain headers like bits/wordsize.h and
bits/mathinline.h.
The disadvantage of this approach is that it decouples the definitions
from their target toolchain. However in my opinion it's more important
to keep definitions for one header close together. For one this will
include a clear documentation why these particular defines are needed.
Furthermore it simplifies maintenance because adding defines for a new
header or support for a new aux-triple only needs to touch one piece
of code.

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@340681 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Frontend/InitPreprocessor.cpp
test/Preprocessor/aux-triple.c [new file with mode: 0644]
test/SemaCUDA/builtins.cu