From: Craig Topper Date: Wed, 8 Feb 2017 06:48:58 +0000 (+0000) Subject: [X86] Add -mclflushopt/-mno-clflushopt command line support and __CLFLUSHOPT__ define... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c190c647b46af1107555b436d912539bafd09c28;p=clang [X86] Add -mclflushopt/-mno-clflushopt command line support and __CLFLUSHOPT__ define to match gcc. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@294411 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/docs/ClangCommandLineReference.rst b/docs/ClangCommandLineReference.rst index 7d4cc5d2c1..b8b3407bfe 100644 --- a/docs/ClangCommandLineReference.rst +++ b/docs/ClangCommandLineReference.rst @@ -2163,6 +2163,8 @@ X86 .. option:: -mbmi2, -mno-bmi2 +.. option:: -mclflushopt, -mno-clflushopt + .. option:: -mcx16, -mno-cx16 .. option:: -mf16c, -mno-f16c diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index fe70a41054..83d7beaee8 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -1715,6 +1715,7 @@ def mno_xsavec : Flag<["-"], "mno-xsavec">, Group; def mno_xsaves : Flag<["-"], "mno-xsaves">, Group; def mno_mwaitx : Flag<["-"], "mno-mwaitx">, Group; def mno_pku : Flag<["-"], "mno-pku">, Group; +def mno_clflushopt : Flag<["-"], "mno-clflushopt">, Group; def munaligned_access : Flag<["-"], "munaligned-access">, Group, HelpText<"Allow memory accesses to be unaligned (AArch32/AArch64 only)">; @@ -1907,6 +1908,7 @@ def mxsaveopt : Flag<["-"], "mxsaveopt">, Group; def mxsavec : Flag<["-"], "mxsavec">, Group; def mxsaves : Flag<["-"], "mxsaves">, Group; def mmwaitx : Flag<["-"], "mmwaitx">, Group; +def mclflushopt : Flag<["-"], "mclflushopt">, Group; def mips16 : Flag<["-"], "mips16">, Group; def mno_mips16 : Flag<["-"], "mno-mips16">, Group; def mmicromips : Flag<["-"], "mmicromips">, Group; diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 851d3f606c..c0473a5376 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -3881,6 +3881,8 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("__PKU__"); if (HasCX16) Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16"); + if (HasCLFLUSHOPT) + Builder.defineMacro("__CLFLUSHOPT__"); // Each case falls through to the previous one here. switch (SSELevel) { diff --git a/test/Driver/x86-target-features.c b/test/Driver/x86-target-features.c index ce35b2cfd0..c254efe57a 100644 --- a/test/Driver/x86-target-features.c +++ b/test/Driver/x86-target-features.c @@ -49,3 +49,8 @@ // RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-xsave -mno-xsaveopt -mno-xsavec -mno-xsaves %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-XSAVE %s // XSAVE: "-target-feature" "+xsave" "-target-feature" "+xsaveopt" "-target-feature" "+xsavec" "-target-feature" "+xsaves" // NO-XSAVE: "-target-feature" "-xsave" "-target-feature" "-xsaveopt" "-target-feature" "-xsavec" "-target-feature" "-xsaves" + +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mclflushopt %s -### -o %t.o 2>&1 | FileCheck -check-prefix=CLFLUSHOPT %s +// RUN: %clang -target i386-unknown-linux-gnu -march=i386 -mno-clflushopt %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-CLFLUSHOPT %s +// CLFLUSHOPT: "-target-feature" "+clflushopt" +// NO-CLFLUSHOPT: "-target-feature" "-clflushopt" diff --git a/test/Preprocessor/predefined-arch-macros.c b/test/Preprocessor/predefined-arch-macros.c index 1e3d5c175c..66a5e62aa9 100644 --- a/test/Preprocessor/predefined-arch-macros.c +++ b/test/Preprocessor/predefined-arch-macros.c @@ -651,6 +651,7 @@ // CHECK_SKL_M32: #define __AVX__ 1 // CHECK_SKL_M32: #define __BMI2__ 1 // CHECK_SKL_M32: #define __BMI__ 1 +// CHECK_SKL_M32: #define __CLFLUSHOPT__ 1 // CHECK_SKL_M32: #define __F16C__ 1 // CHECK_SKL_M32: #define __FMA__ 1 // CHECK_SKL_M32: #define __LZCNT__ 1 @@ -681,6 +682,7 @@ // CHECK_SKL_M64: #define __AVX__ 1 // CHECK_SKL_M64: #define __BMI2__ 1 // CHECK_SKL_M64: #define __BMI__ 1 +// CHECK_SKL_M64: #define __CLFLUSHOPT__ 1 // CHECK_SKL_M64: #define __F16C__ 1 // CHECK_SKL_M64: #define __FMA__ 1 // CHECK_SKL_M64: #define __LZCNT__ 1 @@ -793,6 +795,7 @@ // CHECK_SKX_M32: #define __AVX__ 1 // CHECK_SKX_M32: #define __BMI2__ 1 // CHECK_SKX_M32: #define __BMI__ 1 +// CHECK_SKX_M32: #define __CLFLUSHOPT__ 1 // CHECK_SKX_M32: #define __F16C__ 1 // CHECK_SKX_M32: #define __FMA__ 1 // CHECK_SKX_M32: #define __LZCNT__ 1 @@ -831,6 +834,7 @@ // CHECK_SKX_M64: #define __AVX__ 1 // CHECK_SKX_M64: #define __BMI2__ 1 // CHECK_SKX_M64: #define __BMI__ 1 +// CHECK_SKX_M64: #define __CLFLUSHOPT__ 1 // CHECK_SKX_M64: #define __F16C__ 1 // CHECK_SKX_M64: #define __FMA__ 1 // CHECK_SKX_M64: #define __LZCNT__ 1 @@ -874,6 +878,7 @@ // CHECK_CNL_M32: #define __AVX__ 1 // CHECK_CNL_M32: #define __BMI2__ 1 // CHECK_CNL_M32: #define __BMI__ 1 +// CHECK_CNL_M32: #define __CLFLUSHOPT__ 1 // CHECK_CNL_M32: #define __F16C__ 1 // CHECK_CNL_M32: #define __FMA__ 1 // CHECK_CNL_M32: #define __LZCNT__ 1 @@ -912,6 +917,7 @@ // CHECK_CNL_M64: #define __AVX__ 1 // CHECK_CNL_M64: #define __BMI2__ 1 // CHECK_CNL_M64: #define __BMI__ 1 +// CHECK_CNL_M64: #define __CLFLUSHOPT__ 1 // CHECK_CNL_M64: #define __F16C__ 1 // CHECK_CNL_M64: #define __FMA__ 1 // CHECK_CNL_M64: #define __LZCNT__ 1 @@ -1860,6 +1866,7 @@ // CHECK_ZNVER1_M32: #define __AVX__ 1 // CHECK_ZNVER1_M32: #define __BMI2__ 1 // CHECK_ZNVER1_M32: #define __BMI__ 1 +// CHECK_ZNVER1_M32: #define __CLFLUSHOPT__ 1 // CHECK_ZNVER1_M32: #define __F16C__ 1 // CHECK_ZNVER1_M32: #define __FMA__ 1 // CHECK_ZNVER1_M32: #define __FSGSBASE__ 1 @@ -1900,6 +1907,7 @@ // CHECK_ZNVER1_M64: #define __AVX__ 1 // CHECK_ZNVER1_M64: #define __BMI2__ 1 // CHECK_ZNVER1_M64: #define __BMI__ 1 +// CHECK_ZNVER1_M64: #define __CLFLUSHOPT__ 1 // CHECK_ZNVER1_M64: #define __F16C__ 1 // CHECK_ZNVER1_M64: #define __FMA__ 1 // CHECK_ZNVER1_M64: #define __FSGSBASE__ 1 diff --git a/test/Preprocessor/x86_target_features.c b/test/Preprocessor/x86_target_features.c index 43cf615546..a201900ba7 100644 --- a/test/Preprocessor/x86_target_features.c +++ b/test/Preprocessor/x86_target_features.c @@ -352,3 +352,7 @@ // NOXSAVE-NOT: #define __XSAVEOPT__ 1 // NOXSAVE-NOT: #define __XSAVE__ 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -mclflushopt -x c -E -dM -o - %s | FileCheck -match-full-lines --check-prefix=CLFLUSHOPT %s + +// CLFLUSHOPT: #define __CLFLUSHOPT__ 1