Author: ctopper Date: Thu Oct 15 00:23:38 2015 New Revision: 250368 URL: http://llvm.org/viewvc/llvm-project?rev=250368&view=rev Log: [X86] Add command line switches for xsave/xsaveopt/xsavec/xsaves. Macro defines for the same. And add the flags to correct CPU names.
Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/test/CodeGen/attr-target-x86.c cfe/trunk/test/Preprocessor/predefined-arch-macros.c cfe/trunk/test/Preprocessor/x86_target_features.c Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=250368&r1=250367&r2=250368&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Thu Oct 15 00:23:38 2015 @@ -1321,6 +1321,10 @@ def mno_prfchw : Flag<["-"], "mno-prfchw def mno_rdseed : Flag<["-"], "mno-rdseed">, Group<m_x86_Features_Group>; def mno_adx : Flag<["-"], "mno-adx">, Group<m_x86_Features_Group>; def mno_sha : Flag<["-"], "mno-sha">, Group<m_x86_Features_Group>; +def mno_xsave : Flag<["-"], "mno-xsave">, Group<m_x86_Features_Group>; +def mno_xsaveopt : Flag<["-"], "mno-xsaveopt">, Group<m_x86_Features_Group>; +def mno_xsavec : Flag<["-"], "mno-xsavec">, Group<m_x86_Features_Group>; +def mno_xsaves : Flag<["-"], "mno-xsaves">, Group<m_x86_Features_Group>; def munaligned_access : Flag<["-"], "munaligned-access">, Group<m_arm_Features_Group>, HelpText<"Allow memory accesses to be unaligned (AArch32/AArch64 only)">; @@ -1468,6 +1472,10 @@ def mrdseed : Flag<["-"], "mrdseed">, Gr def madx : Flag<["-"], "madx">, Group<m_x86_Features_Group>; def msha : Flag<["-"], "msha">, Group<m_x86_Features_Group>; def mcx16 : Flag<["-"], "mcx16">, Group<m_x86_Features_Group>; +def mxsave : Flag<["-"], "mxsave">, Group<m_x86_Features_Group>; +def mxsaveopt : Flag<["-"], "mxsaveopt">, Group<m_x86_Features_Group>; +def mxsavec : Flag<["-"], "mxsavec">, Group<m_x86_Features_Group>; +def mxsaves : Flag<["-"], "mxsaves">, Group<m_x86_Features_Group>; def mips16 : Flag<["-"], "mips16">, Group<m_Group>; def mno_mips16 : Flag<["-"], "mno-mips16">, Group<m_Group>; def mmicromips : Flag<["-"], "mmicromips">, Group<m_Group>; Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=250368&r1=250367&r2=250368&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Thu Oct 15 00:23:38 2015 @@ -2094,6 +2094,10 @@ class X86TargetInfo : public TargetInfo bool HasAVX512VL = false; bool HasSHA = false; bool HasCX16 = false; + bool HasXSAVE = false; + bool HasXSAVEOPT = false; + bool HasXSAVEC = false; + bool HasXSAVES = false; /// \brief Enumeration of all of the X86 CPUs supported by Clang. /// @@ -2581,6 +2585,8 @@ bool X86TargetInfo::initFeatureMap( setFeatureEnabledImpl(Features, "avx512dq", true); setFeatureEnabledImpl(Features, "avx512bw", true); setFeatureEnabledImpl(Features, "avx512vl", true); + setFeatureEnabledImpl(Features, "xsavec", true); + setFeatureEnabledImpl(Features, "xsaves", true); // FALLTHROUGH case CK_Broadwell: setFeatureEnabledImpl(Features, "rdseed", true); @@ -2601,6 +2607,8 @@ bool X86TargetInfo::initFeatureMap( // FALLTHROUGH case CK_SandyBridge: setFeatureEnabledImpl(Features, "avx", true); + setFeatureEnabledImpl(Features, "xsave", true); + setFeatureEnabledImpl(Features, "xsaveopt", true); // FALLTHROUGH case CK_Westmere: case CK_Silvermont: @@ -2629,6 +2637,8 @@ bool X86TargetInfo::initFeatureMap( setFeatureEnabledImpl(Features, "aes", true); setFeatureEnabledImpl(Features, "pclmul", true); setFeatureEnabledImpl(Features, "cx16", true); + setFeatureEnabledImpl(Features, "xsaveopt", true); + setFeatureEnabledImpl(Features, "xsave", true); break; case CK_K6_2: case CK_K6_3: @@ -2671,6 +2681,7 @@ bool X86TargetInfo::initFeatureMap( setFeatureEnabledImpl(Features, "pclmul", true); setFeatureEnabledImpl(Features, "bmi", true); setFeatureEnabledImpl(Features, "f16c", true); + setFeatureEnabledImpl(Features, "xsaveopt", true); // FALLTHROUGH case CK_BTVER1: setFeatureEnabledImpl(Features, "ssse3", true); @@ -2679,6 +2690,7 @@ bool X86TargetInfo::initFeatureMap( setFeatureEnabledImpl(Features, "popcnt", true); setFeatureEnabledImpl(Features, "prfchw", true); setFeatureEnabledImpl(Features, "cx16", true); + setFeatureEnabledImpl(Features, "xsave", true); break; case CK_BDVER4: setFeatureEnabledImpl(Features, "avx2", true); @@ -2686,6 +2698,7 @@ bool X86TargetInfo::initFeatureMap( // FALLTHROUGH case CK_BDVER3: setFeatureEnabledImpl(Features, "fsgsbase", true); + setFeatureEnabledImpl(Features, "xsaveopt", true); // FALLTHROUGH case CK_BDVER2: setFeatureEnabledImpl(Features, "bmi", true); @@ -2701,6 +2714,7 @@ bool X86TargetInfo::initFeatureMap( setFeatureEnabledImpl(Features, "pclmul", true); setFeatureEnabledImpl(Features, "prfchw", true); setFeatureEnabledImpl(Features, "cx16", true); + setFeatureEnabledImpl(Features, "xsave", true); break; } if (!TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec)) @@ -2744,6 +2758,7 @@ void X86TargetInfo::setSSELevel(llvm::St Features["avx2"] = true; case AVX: Features["avx"] = true; + Features["xsave"] = true; case SSE42: Features["sse4.2"] = true; case SSE41: @@ -2779,7 +2794,8 @@ void X86TargetInfo::setSSELevel(llvm::St case SSE42: Features["sse4.2"] = false; case AVX: - Features["fma"] = Features["avx"] = Features["f16c"] = false; + Features["fma"] = Features["avx"] = Features["f16c"] = Features["xsave"] = + Features["xsaveopt"] = false; setXOPLevel(Features, FMA4, false); case AVX2: Features["avx2"] = false; @@ -2912,6 +2928,16 @@ void X86TargetInfo::setFeatureEnabledImp setSSELevel(Features, SSE42, Enabled); else setSSELevel(Features, SSE41, Enabled); + } else if (Name == "xsave") { + if (Enabled) + setSSELevel(Features, AVX, Enabled); + else + Features["xsaveopt"] = false; + } else if (Name == "xsaveopt" || Name == "xsavec" || Name == "xsaves") { + if (Enabled) { + Features["xsave"] = true; + setSSELevel(Features, AVX, Enabled); + } } } @@ -2969,6 +2995,14 @@ bool X86TargetInfo::handleTargetFeatures HasSHA = true; } else if (Feature == "+cx16") { HasCX16 = true; + } else if (Feature == "+xsave") { + HasXSAVE = true; + } else if (Feature == "+xsaveopt") { + HasXSAVEOPT = true; + } else if (Feature == "+xsavec") { + HasXSAVEC = true; + } else if (Feature == "+xsaves") { + HasXSAVES = true; } X86SSEEnum Level = llvm::StringSwitch<X86SSEEnum>(Feature) @@ -3261,6 +3295,15 @@ void X86TargetInfo::getTargetDefines(con if (HasSHA) Builder.defineMacro("__SHA__"); + if (HasXSAVE) + Builder.defineMacro("__XSAVE__"); + if (HasXSAVEOPT) + Builder.defineMacro("__XSAVEOPT__"); + if (HasXSAVEC) + Builder.defineMacro("__XSAVEC__"); + if (HasXSAVES) + Builder.defineMacro("__XSAVES__"); + if (HasCX16) Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16"); @@ -3373,6 +3416,10 @@ bool X86TargetInfo::hasFeature(StringRef .Case("x86_32", getTriple().getArch() == llvm::Triple::x86) .Case("x86_64", getTriple().getArch() == llvm::Triple::x86_64) .Case("xop", XOPLevel >= XOP) + .Case("xsave", HasXSAVE) + .Case("xsavec", HasXSAVEC) + .Case("xsaves", HasXSAVES) + .Case("xsaveopt", HasXSAVEOPT) .Default(false); } Modified: cfe/trunk/test/CodeGen/attr-target-x86.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/attr-target-x86.c?rev=250368&r1=250367&r2=250368&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/attr-target-x86.c (original) +++ cfe/trunk/test/CodeGen/attr-target-x86.c Thu Oct 15 00:23:38 2015 @@ -32,8 +32,8 @@ int __attribute__((target("no-mmx"))) qq // CHECK: qax{{.*}} #4 // CHECK: qq{{.*}} #5 // CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+mmx,+sse,+sse2" -// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop" +// CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+aes,+avx,+cx16,+f16c,+fsgsbase,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt" +// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+mmx,+sse,-aes,-avx,-avx2,-avx512bw,-avx512cd,-avx512dq,-avx512er,-avx512f,-avx512pf,-avx512vl,-f16c,-fma,-fma4,-pclmul,-sha,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-xop,-xsave,-xsaveopt" // CHECK: #3 = {{.*}}"target-cpu"="x86-64" "target-features"="+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3" -// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,-aes" +// CHECK: #4 = {{.*}}"target-cpu"="ivybridge" "target-features"="+avx,+cx16,+f16c,+fsgsbase,+mmx,+pclmul,+popcnt,+rdrnd,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+xsave,+xsaveopt,-aes" // CHECK: #5 = {{.*}}"target-cpu"="x86-64" "target-features"="+sse,+sse2,-3dnow,-3dnowa,-mmx" Modified: cfe/trunk/test/Preprocessor/predefined-arch-macros.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/predefined-arch-macros.c?rev=250368&r1=250367&r2=250368&view=diff ============================================================================== --- cfe/trunk/test/Preprocessor/predefined-arch-macros.c (original) +++ cfe/trunk/test/Preprocessor/predefined-arch-macros.c Thu Oct 15 00:23:38 2015 @@ -425,6 +425,8 @@ // CHECK_COREI7_AVX_M32: #define __SSE4_2__ 1 // CHECK_COREI7_AVX_M32: #define __SSE__ 1 // CHECK_COREI7_AVX_M32: #define __SSSE3__ 1 +// CHECK_COREI7_AVX_M32: #define __XSAVEOPT__ 1 +// CHECK_COREI7_AVX_M32: #define __XSAVE__ 1 // CHECK_COREI7_AVX_M32: #define __corei7 1 // CHECK_COREI7_AVX_M32: #define __corei7__ 1 // CHECK_COREI7_AVX_M32: #define __i386 1 @@ -448,6 +450,8 @@ // CHECK_COREI7_AVX_M64: #define __SSE_MATH__ 1 // CHECK_COREI7_AVX_M64: #define __SSE__ 1 // CHECK_COREI7_AVX_M64: #define __SSSE3__ 1 +// CHECK_COREI7_AVX_M64: #define __XSAVEOPT__ 1 +// CHECK_COREI7_AVX_M64: #define __XSAVE__ 1 // CHECK_COREI7_AVX_M64: #define __amd64 1 // CHECK_COREI7_AVX_M64: #define __amd64__ 1 // CHECK_COREI7_AVX_M64: #define __corei7 1 @@ -471,6 +475,8 @@ // CHECK_CORE_AVX_I_M32: #define __SSE4_2__ 1 // CHECK_CORE_AVX_I_M32: #define __SSE__ 1 // CHECK_CORE_AVX_I_M32: #define __SSSE3__ 1 +// CHECK_CORE_AVX_I_M32: #define __XSAVEOPT__ 1 +// CHECK_CORE_AVX_I_M32: #define __XSAVE__ 1 // CHECK_CORE_AVX_I_M32: #define __corei7 1 // CHECK_CORE_AVX_I_M32: #define __corei7__ 1 // CHECK_CORE_AVX_I_M32: #define __i386 1 @@ -494,6 +500,8 @@ // CHECK_CORE_AVX_I_M64: #define __SSE_MATH__ 1 // CHECK_CORE_AVX_I_M64: #define __SSE__ 1 // CHECK_CORE_AVX_I_M64: #define __SSSE3__ 1 +// CHECK_CORE_AVX_I_M64: #define __XSAVEOPT__ 1 +// CHECK_CORE_AVX_I_M64: #define __XSAVE__ 1 // CHECK_CORE_AVX_I_M64: #define __amd64 1 // CHECK_CORE_AVX_I_M64: #define __amd64__ 1 // CHECK_CORE_AVX_I_M64: #define __corei7 1 @@ -524,6 +532,8 @@ // CHECK_CORE_AVX2_M32: #define __SSE4_2__ 1 // CHECK_CORE_AVX2_M32: #define __SSE__ 1 // CHECK_CORE_AVX2_M32: #define __SSSE3__ 1 +// CHECK_CORE_AVX2_M32: #define __XSAVEOPT__ 1 +// CHECK_CORE_AVX2_M32: #define __XSAVE__ 1 // CHECK_CORE_AVX2_M32: #define __corei7 1 // CHECK_CORE_AVX2_M32: #define __corei7__ 1 // CHECK_CORE_AVX2_M32: #define __i386 1 @@ -554,6 +564,8 @@ // CHECK_CORE_AVX2_M64: #define __SSE_MATH__ 1 // CHECK_CORE_AVX2_M64: #define __SSE__ 1 // CHECK_CORE_AVX2_M64: #define __SSSE3__ 1 +// CHECK_CORE_AVX2_M64: #define __XSAVEOPT__ 1 +// CHECK_CORE_AVX2_M64: #define __XSAVE__ 1 // CHECK_CORE_AVX2_M64: #define __amd64 1 // CHECK_CORE_AVX2_M64: #define __amd64__ 1 // CHECK_CORE_AVX2_M64: #define __corei7 1 @@ -586,6 +598,8 @@ // CHECK_BROADWELL_M32: #define __SSE4_2__ 1 // CHECK_BROADWELL_M32: #define __SSE__ 1 // CHECK_BROADWELL_M32: #define __SSSE3__ 1 +// CHECK_BROADWELL_M32: #define __XSAVEOPT__ 1 +// CHECK_BROADWELL_M32: #define __XSAVE__ 1 // CHECK_BROADWELL_M32: #define __corei7 1 // CHECK_BROADWELL_M32: #define __corei7__ 1 // CHECK_BROADWELL_M32: #define __i386 1 @@ -618,6 +632,8 @@ // CHECK_BROADWELL_M64: #define __SSE_MATH__ 1 // CHECK_BROADWELL_M64: #define __SSE__ 1 // CHECK_BROADWELL_M64: #define __SSSE3__ 1 +// CHECK_BROADWELL_M64: #define __XSAVEOPT__ 1 +// CHECK_BROADWELL_M64: #define __XSAVE__ 1 // CHECK_BROADWELL_M64: #define __amd64 1 // CHECK_BROADWELL_M64: #define __amd64__ 1 // CHECK_BROADWELL_M64: #define __corei7 1 @@ -652,6 +668,8 @@ // CHECK_KNL_M32: #define __SSE4_2__ 1 // CHECK_KNL_M32: #define __SSE__ 1 // CHECK_KNL_M32: #define __SSSE3__ 1 +// CHECK_KNL_M32: #define __XSAVEOPT__ 1 +// CHECK_KNL_M32: #define __XSAVE__ 1 // CHECK_KNL_M32: #define __i386 1 // CHECK_KNL_M32: #define __i386__ 1 // CHECK_KNL_M32: #define __knl 1 @@ -687,6 +705,8 @@ // CHECK_KNL_M64: #define __SSE_MATH__ 1 // CHECK_KNL_M64: #define __SSE__ 1 // CHECK_KNL_M64: #define __SSSE3__ 1 +// CHECK_KNL_M64: #define __XSAVEOPT__ 1 +// CHECK_KNL_M64: #define __XSAVE__ 1 // CHECK_KNL_M64: #define __amd64 1 // CHECK_KNL_M64: #define __amd64__ 1 // CHECK_KNL_M64: #define __knl 1 @@ -722,6 +742,10 @@ // CHECK_SKX_M32: #define __SSE4_2__ 1 // CHECK_SKX_M32: #define __SSE__ 1 // CHECK_SKX_M32: #define __SSSE3__ 1 +// CHECK_SKX_M32: #define __XSAVEC__ 1 +// CHECK_SKX_M32: #define __XSAVEOPT__ 1 +// CHECK_SKX_M32: #define __XSAVES__ 1 +// CHECK_SKX_M32: #define __XSAVE__ 1 // CHECK_SKX_M32: #define __i386 1 // CHECK_SKX_M32: #define __i386__ 1 // CHECK_SKX_M32: #define __skx 1 @@ -758,6 +782,10 @@ // CHECK_SKX_M64: #define __SSE_MATH__ 1 // CHECK_SKX_M64: #define __SSE__ 1 // CHECK_SKX_M64: #define __SSSE3__ 1 +// CHECK_SKX_M64: #define __XSAVEC__ 1 +// CHECK_SKX_M64: #define __XSAVEOPT__ 1 +// CHECK_SKX_M64: #define __XSAVES__ 1 +// CHECK_SKX_M64: #define __XSAVE__ 1 // CHECK_SKX_M64: #define __amd64 1 // CHECK_SKX_M64: #define __amd64__ 1 // CHECK_SKX_M64: #define __skx 1 @@ -1307,6 +1335,7 @@ // CHECK_BTVER1_M32: #define __SSE_MATH__ 1 // CHECK_BTVER1_M32: #define __SSE__ 1 // CHECK_BTVER1_M32: #define __SSSE3__ 1 +// CHECK_BTVER1_M32: #define __XSAVE__ 1 // CHECK_BTVER1_M32: #define __btver1 1 // CHECK_BTVER1_M32: #define __btver1__ 1 // CHECK_BTVER1_M32: #define __i386 1 @@ -1328,6 +1357,7 @@ // CHECK_BTVER1_M64: #define __SSE_MATH__ 1 // CHECK_BTVER1_M64: #define __SSE__ 1 // CHECK_BTVER1_M64: #define __SSSE3__ 1 +// CHECK_BTVER1_M64: #define __XSAVE__ 1 // CHECK_BTVER1_M64: #define __amd64 1 // CHECK_BTVER1_M64: #define __amd64__ 1 // CHECK_BTVER1_M64: #define __btver1 1 @@ -1356,6 +1386,8 @@ // CHECK_BTVER2_M32: #define __SSE_MATH__ 1 // CHECK_BTVER2_M32: #define __SSE__ 1 // CHECK_BTVER2_M32: #define __SSSE3__ 1 +// CHECK_BTVER2_M32: #define __XSAVEOPT__ 1 +// CHECK_BTVER2_M32: #define __XSAVE__ 1 // CHECK_BTVER2_M32: #define __btver2 1 // CHECK_BTVER2_M32: #define __btver2__ 1 // CHECK_BTVER2_M32: #define __i386 1 @@ -1382,6 +1414,8 @@ // CHECK_BTVER2_M64: #define __SSE_MATH__ 1 // CHECK_BTVER2_M64: #define __SSE__ 1 // CHECK_BTVER2_M64: #define __SSSE3__ 1 +// CHECK_BTVER2_M64: #define __XSAVEOPT__ 1 +// CHECK_BTVER2_M64: #define __XSAVE__ 1 // CHECK_BTVER2_M64: #define __amd64 1 // CHECK_BTVER2_M64: #define __amd64__ 1 // CHECK_BTVER2_M64: #define __btver2 1 @@ -1412,6 +1446,7 @@ // CHECK_BDVER1_M32: #define __SSE__ 1 // CHECK_BDVER1_M32: #define __SSSE3__ 1 // CHECK_BDVER1_M32: #define __XOP__ 1 +// CHECK_BDVER1_M32: #define __XSAVE__ 1 // CHECK_BDVER1_M32: #define __bdver1 1 // CHECK_BDVER1_M32: #define __bdver1__ 1 // CHECK_BDVER1_M32: #define __i386 1 @@ -1440,6 +1475,7 @@ // CHECK_BDVER1_M64: #define __SSE__ 1 // CHECK_BDVER1_M64: #define __SSSE3__ 1 // CHECK_BDVER1_M64: #define __XOP__ 1 +// CHECK_BDVER1_M64: #define __XSAVE__ 1 // CHECK_BDVER1_M64: #define __amd64 1 // CHECK_BDVER1_M64: #define __amd64__ 1 // CHECK_BDVER1_M64: #define __bdver1 1 @@ -1474,6 +1510,7 @@ // CHECK_BDVER2_M32: #define __SSSE3__ 1 // CHECK_BDVER2_M32: #define __TBM__ 1 // CHECK_BDVER2_M32: #define __XOP__ 1 +// CHECK_BDVER2_M32: #define __XSAVE__ 1 // CHECK_BDVER2_M32: #define __bdver2 1 // CHECK_BDVER2_M32: #define __bdver2__ 1 // CHECK_BDVER2_M32: #define __i386 1 @@ -1506,6 +1543,7 @@ // CHECK_BDVER2_M64: #define __SSSE3__ 1 // CHECK_BDVER2_M64: #define __TBM__ 1 // CHECK_BDVER2_M64: #define __XOP__ 1 +// CHECK_BDVER2_M64: #define __XSAVE__ 1 // CHECK_BDVER2_M64: #define __amd64 1 // CHECK_BDVER2_M64: #define __amd64__ 1 // CHECK_BDVER2_M64: #define __bdver2 1 @@ -1541,6 +1579,8 @@ // CHECK_BDVER3_M32: #define __SSSE3__ 1 // CHECK_BDVER3_M32: #define __TBM__ 1 // CHECK_BDVER3_M32: #define __XOP__ 1 +// CHECK_BDVER3_M32: #define __XSAVEOPT__ 1 +// CHECK_BDVER3_M32: #define __XSAVE__ 1 // CHECK_BDVER3_M32: #define __bdver3 1 // CHECK_BDVER3_M32: #define __bdver3__ 1 // CHECK_BDVER3_M32: #define __i386 1 @@ -1574,6 +1614,8 @@ // CHECK_BDVER3_M64: #define __SSSE3__ 1 // CHECK_BDVER3_M64: #define __TBM__ 1 // CHECK_BDVER3_M64: #define __XOP__ 1 +// CHECK_BDVER3_M64: #define __XSAVEOPT__ 1 +// CHECK_BDVER3_M64: #define __XSAVE__ 1 // CHECK_BDVER3_M64: #define __amd64 1 // CHECK_BDVER3_M64: #define __amd64__ 1 // CHECK_BDVER3_M64: #define __bdver3 1 @@ -1611,6 +1653,7 @@ // CHECK_BDVER4_M32: #define __SSSE3__ 1 // CHECK_BDVER4_M32: #define __TBM__ 1 // CHECK_BDVER4_M32: #define __XOP__ 1 +// CHECK_BDVER4_M32: #define __XSAVE__ 1 // CHECK_BDVER4_M32: #define __bdver4 1 // CHECK_BDVER4_M32: #define __bdver4__ 1 // CHECK_BDVER4_M32: #define __i386 1 @@ -1646,6 +1689,7 @@ // CHECK_BDVER4_M64: #define __SSSE3__ 1 // CHECK_BDVER4_M64: #define __TBM__ 1 // CHECK_BDVER4_M64: #define __XOP__ 1 +// CHECK_BDVER4_M64: #define __XSAVE__ 1 // CHECK_BDVER4_M64: #define __amd64 1 // CHECK_BDVER4_M64: #define __amd64__ 1 // CHECK_BDVER4_M64: #define __bdver4 1 Modified: cfe/trunk/test/Preprocessor/x86_target_features.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/x86_target_features.c?rev=250368&r1=250367&r2=250368&view=diff ============================================================================== --- cfe/trunk/test/Preprocessor/x86_target_features.c (original) +++ cfe/trunk/test/Preprocessor/x86_target_features.c Thu Oct 15 00:23:38 2015 @@ -293,3 +293,26 @@ // RDSEED: #define __RDSEED__ 1 +// RUN: %clang -target i386-unknown-unknown -march=atom -mxsave -x c -E -dM -o - %s | FileCheck --check-prefix=XSAVE %s + +// XSAVE: #define __XSAVE__ 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -mxsaveopt -x c -E -dM -o - %s | FileCheck --check-prefix=XSAVEOPT %s + +// XSAVEOPT: #define __XSAVEOPT__ 1 +// XSAVEOPT: #define __XSAVE__ 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -mxsavec -x c -E -dM -o - %s | FileCheck --check-prefix=XSAVEC %s + +// XSAVEC: #define __XSAVEC__ 1 +// XSAVEC: #define __XSAVE__ 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -mxsaves -x c -E -dM -o - %s | FileCheck --check-prefix=XSAVES %s + +// XSAVES: #define __XSAVES__ 1 +// XSAVES: #define __XSAVE__ 1 + +// RUN: %clang -target i386-unknown-unknown -march=atom -mxsaveopt -mno-xsave -x c -E -dM -o - %s | FileCheck --check-prefix=NOXSAVE %s + +// NOXSAVE-NOT: #define __XSAVEOPT__ 1 +// NOXSAVE-NOT: #define __XSAVE__ 1 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits