From 26a3914eeda65e0dd6b55899f6d76ef99fc021c6 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Wed, 28 Sep 2011 09:45:08 +0000 Subject: [PATCH] Teach Clang to reject 32-bit only CPUs when compiling in 64-bit mode. Add 64-bit preprocessor macro tests. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140688 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 61 +++++- test/Preprocessor/predefined-arch-macros.c | 206 +++++++++++++++++++++ 2 files changed, 265 insertions(+), 2 deletions(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index b8a242bd0d..acf54b7334 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -1378,8 +1378,65 @@ public: .Case("geode", CK_Geode) .Default(CK_Generic); - // FIXME: When in 64-bit mode, reject 32-bit only CPUs. - return CPU != CK_Generic; + // Perform any per-CPU checks necessary to determine if this CPU is + // acceptable. + // FIXME: This results in terrible diagnostics. Clang just says the CPU is + // invalid without explaining *why*. + switch (CPU) { + case CK_Generic: + // No processor selected! + return false; + + case CK_i386: + case CK_i486: + case CK_WinChipC6: + case CK_WinChip2: + case CK_C3: + case CK_i586: + case CK_Pentium: + case CK_PentiumMMX: + case CK_i686: + case CK_PentiumPro: + case CK_Pentium2: + case CK_Pentium3: + case CK_Pentium3M: + case CK_PentiumM: + case CK_Yonah: + case CK_C3_2: + case CK_Pentium4: + case CK_Pentium4M: + case CK_Prescott: + case CK_K6: + case CK_K6_2: + case CK_K6_3: + case CK_Athlon: + case CK_AthlonThunderbird: + case CK_Athlon4: + case CK_AthlonXP: + case CK_AthlonMP: + case CK_Geode: + // Only accept certain architectures when compiling in 32-bit mode. + if (PointerWidth != 32) + return false; + + // Fallthrough + case CK_Nocona: + case CK_Core2: + case CK_Penryn: + case CK_Atom: + case CK_Corei7: + case CK_Corei7AVX: + case CK_CoreAVXi: + case CK_Athlon64: + case CK_Athlon64SSE3: + case CK_AthlonFX: + case CK_K8: + case CK_K8SSE3: + case CK_Opteron: + case CK_OpteronSSE3: + case CK_x86_64: + return true; + } } }; diff --git a/test/Preprocessor/predefined-arch-macros.c b/test/Preprocessor/predefined-arch-macros.c index 6cf7e71dcd..c59a08104f 100644 --- a/test/Preprocessor/predefined-arch-macros.c +++ b/test/Preprocessor/predefined-arch-macros.c @@ -7,6 +7,9 @@ // CHECK_I386_M32: #define __i386__ 1 // CHECK_I386_M32: #define __tune_i386__ 1 // CHECK_I386_M32: #define i386 1 +// RUN: %clang -march=i386 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_I386_M64 +// CHECK_I386_M64: error: // // RUN: %clang -march=i486 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_I486_M32 @@ -16,6 +19,9 @@ // CHECK_I486_M32: #define __i486__ 1 // CHECK_I486_M32: #define __tune_i486__ 1 // CHECK_I486_M32: #define i386 1 +// RUN: %clang -march=i486 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_I486_M64 +// CHECK_I486_M64: error: // // RUN: %clang -march=i586 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_I586_M32 @@ -28,6 +34,9 @@ // CHECK_I586_M32: #define __tune_i586__ 1 // CHECK_I586_M32: #define __tune_pentium__ 1 // CHECK_I586_M32: #define i386 1 +// RUN: %clang -march=i586 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_I586_M64 +// CHECK_I586_M64: error: // // RUN: %clang -march=pentium -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM_M32 @@ -40,6 +49,9 @@ // CHECK_PENTIUM_M32: #define __tune_i586__ 1 // CHECK_PENTIUM_M32: #define __tune_pentium__ 1 // CHECK_PENTIUM_M32: #define i386 1 +// RUN: %clang -march=pentium -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM_M64 +// CHECK_PENTIUM_M64: error: // // RUN: %clang -march=pentium-mmx -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM_MMX_M32 @@ -54,6 +66,9 @@ // CHECK_PENTIUM_MMX_M32: #define __tune_pentium__ 1 // CHECK_PENTIUM_MMX_M32: #define __tune_pentium_mmx__ 1 // CHECK_PENTIUM_MMX_M32: #define i386 1 +// RUN: %clang -march=pentium-mmx -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM_MMX_M64 +// CHECK_PENTIUM_MMX_M64: error: // // RUN: %clang -march=winchip-c6 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_WINCHIP_C6_M32 @@ -63,6 +78,9 @@ // CHECK_WINCHIP_C6_M32: #define __i486__ 1 // CHECK_WINCHIP_C6_M32: #define __tune_i486__ 1 // CHECK_WINCHIP_C6_M32: #define i386 1 +// RUN: %clang -march=winchip-c6 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_WINCHIP_C6_M64 +// CHECK_WINCHIP_C6_M64: error: // // RUN: %clang -march=winchip2 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_WINCHIP2_M32 @@ -72,6 +90,9 @@ // CHECK_WINCHIP2_M32: #define __i486__ 1 // CHECK_WINCHIP2_M32: #define __tune_i486__ 1 // CHECK_WINCHIP2_M32: #define i386 1 +// RUN: %clang -march=winchip2 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_WINCHIP2_M64 +// CHECK_WINCHIP2_M64: error: // // RUN: %clang -march=c3 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_C3_M32 @@ -81,6 +102,9 @@ // CHECK_C3_M32: #define __i486__ 1 // CHECK_C3_M32: #define __tune_i486__ 1 // CHECK_C3_M32: #define i386 1 +// RUN: %clang -march=c3 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_C3_M64 +// CHECK_C3_M64: error: // // RUN: %clang -march=c3-2 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_C3_2_M32 @@ -94,6 +118,9 @@ // CHECK_C3_2_M32: #define __tune_pentium2__ 1 // CHECK_C3_2_M32: #define __tune_pentiumpro__ 1 // CHECK_C3_2_M32: #define i386 1 +// RUN: %clang -march=c3-2 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_C3_2_M64 +// CHECK_C3_2_M64: error: // // RUN: %clang -march=i686 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_I686_M32 @@ -104,6 +131,9 @@ // CHECK_I686_M32: #define __pentiumpro 1 // CHECK_I686_M32: #define __pentiumpro__ 1 // CHECK_I686_M32: #define i386 1 +// RUN: %clang -march=i686 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_I686_M64 +// CHECK_I686_M64: error: // // RUN: %clang -march=pentiumpro -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PENTIUMPRO_M32 @@ -116,6 +146,9 @@ // CHECK_PENTIUMPRO_M32: #define __tune_i686__ 1 // CHECK_PENTIUMPRO_M32: #define __tune_pentiumpro__ 1 // CHECK_PENTIUMPRO_M32: #define i386 1 +// RUN: %clang -march=pentiumpro -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PENTIUMPRO_M64 +// CHECK_PENTIUMPRO_M64: error: // // RUN: %clang -march=pentium2 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM2_M32 @@ -129,6 +162,9 @@ // CHECK_PENTIUM2_M32: #define __tune_pentium2__ 1 // CHECK_PENTIUM2_M32: #define __tune_pentiumpro__ 1 // CHECK_PENTIUM2_M32: #define i386 1 +// RUN: %clang -march=pentium2 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM2_M64 +// CHECK_PENTIUM2_M64: error: // // RUN: %clang -march=pentium3 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM3_M32 @@ -143,6 +179,9 @@ // CHECK_PENTIUM3_M32: #define __tune_pentium3__ 1 // CHECK_PENTIUM3_M32: #define __tune_pentiumpro__ 1 // CHECK_PENTIUM3_M32: #define i386 1 +// RUN: %clang -march=pentium3 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM3_M64 +// CHECK_PENTIUM3_M64: error: // // RUN: %clang -march=pentium3m -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM3M_M32 @@ -155,6 +194,9 @@ // CHECK_PENTIUM3M_M32: #define __tune_i686__ 1 // CHECK_PENTIUM3M_M32: #define __tune_pentiumpro__ 1 // CHECK_PENTIUM3M_M32: #define i386 1 +// RUN: %clang -march=pentium3m -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM3M_M64 +// CHECK_PENTIUM3M_M64: error: // // RUN: %clang -march=pentium-m -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM_M_M32 @@ -167,6 +209,9 @@ // CHECK_PENTIUM_M_M32: #define __tune_i686__ 1 // CHECK_PENTIUM_M_M32: #define __tune_pentiumpro__ 1 // CHECK_PENTIUM_M_M32: #define i386 1 +// RUN: %clang -march=pentium-m -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM_M_M64 +// CHECK_PENTIUM_M_M64: error: // // RUN: %clang -march=pentium4 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM4_M32 @@ -176,6 +221,9 @@ // CHECK_PENTIUM4_M32: #define __pentium4__ 1 // CHECK_PENTIUM4_M32: #define __tune_pentium4__ 1 // CHECK_PENTIUM4_M32: #define i386 1 +// RUN: %clang -march=pentium4 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM4_M64 +// CHECK_PENTIUM4_M64: error: // // RUN: %clang -march=pentium4m -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM4M_M32 @@ -185,6 +233,9 @@ // CHECK_PENTIUM4M_M32: #define __pentium4__ 1 // CHECK_PENTIUM4M_M32: #define __tune_pentium4__ 1 // CHECK_PENTIUM4M_M32: #define i386 1 +// RUN: %clang -march=pentium4m -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PENTIUM4M_M64 +// CHECK_PENTIUM4M_M64: error: // // RUN: %clang -march=prescott -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_PRESCOTT_M32 @@ -194,6 +245,9 @@ // CHECK_PRESCOTT_M32: #define __nocona__ 1 // CHECK_PRESCOTT_M32: #define __tune_nocona__ 1 // CHECK_PRESCOTT_M32: #define i386 1 +// RUN: %clang -march=prescott -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_PRESCOTT_M64 +// CHECK_PRESCOTT_M64: error: // // RUN: %clang -march=nocona -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_NOCONA_M32 @@ -203,6 +257,15 @@ // CHECK_NOCONA_M32: #define __nocona__ 1 // CHECK_NOCONA_M32: #define __tune_nocona__ 1 // CHECK_NOCONA_M32: #define i386 1 +// RUN: %clang -march=nocona -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_NOCONA_M64 +// CHECK_NOCONA_M64: #define __amd64 1 +// CHECK_NOCONA_M64: #define __amd64__ 1 +// CHECK_NOCONA_M64: #define __nocona 1 +// CHECK_NOCONA_M64: #define __nocona__ 1 +// CHECK_NOCONA_M64: #define __tune_nocona__ 1 +// CHECK_NOCONA_M64: #define __x86_64 1 +// CHECK_NOCONA_M64: #define __x86_64__ 1 // // RUN: %clang -march=core2 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_CORE2_M32 @@ -212,6 +275,15 @@ // CHECK_CORE2_M32: #define __i386__ 1 // CHECK_CORE2_M32: #define __tune_core2__ 1 // CHECK_CORE2_M32: #define i386 1 +// RUN: %clang -march=core2 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_CORE2_M64 +// CHECK_CORE2_M64: #define __amd64 1 +// CHECK_CORE2_M64: #define __amd64__ 1 +// CHECK_CORE2_M64: #define __core2 1 +// CHECK_CORE2_M64: #define __core2__ 1 +// CHECK_CORE2_M64: #define __tune_core2__ 1 +// CHECK_CORE2_M64: #define __x86_64 1 +// CHECK_CORE2_M64: #define __x86_64__ 1 // // RUN: %clang -march=corei7 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_COREI7_M32 @@ -221,6 +293,15 @@ // CHECK_COREI7_M32: #define __i386__ 1 // CHECK_COREI7_M32: #define __tune_corei7__ 1 // CHECK_COREI7_M32: #define i386 1 +// RUN: %clang -march=corei7 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_COREI7_M64 +// CHECK_COREI7_M64: #define __amd64 1 +// CHECK_COREI7_M64: #define __amd64__ 1 +// CHECK_COREI7_M64: #define __corei7 1 +// CHECK_COREI7_M64: #define __corei7__ 1 +// CHECK_COREI7_M64: #define __tune_corei7__ 1 +// CHECK_COREI7_M64: #define __x86_64 1 +// CHECK_COREI7_M64: #define __x86_64__ 1 // // RUN: %clang -march=corei7-avx -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_COREI7_AVX_M32 @@ -230,6 +311,15 @@ // CHECK_COREI7_AVX_M32: #define __i386__ 1 // CHECK_COREI7_AVX_M32: #define __tune_corei7__ 1 // CHECK_COREI7_AVX_M32: #define i386 1 +// RUN: %clang -march=corei7-avx -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_COREI7_AVX_M64 +// CHECK_COREI7_AVX_M64: #define __amd64 1 +// CHECK_COREI7_AVX_M64: #define __amd64__ 1 +// CHECK_COREI7_AVX_M64: #define __corei7 1 +// CHECK_COREI7_AVX_M64: #define __corei7__ 1 +// CHECK_COREI7_AVX_M64: #define __tune_corei7__ 1 +// CHECK_COREI7_AVX_M64: #define __x86_64 1 +// CHECK_COREI7_AVX_M64: #define __x86_64__ 1 // // RUN: %clang -march=core-avx-i -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_CORE_AVX_I_M32 @@ -239,6 +329,15 @@ // CHECK_CORE_AVX_I_M32: #define __i386__ 1 // CHECK_CORE_AVX_I_M32: #define __tune_corei7__ 1 // CHECK_CORE_AVX_I_M32: #define i386 1 +// RUN: %clang -march=core-avx-i -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_CORE_AVX_I_M64 +// CHECK_CORE_AVX_I_M64: #define __amd64 1 +// CHECK_CORE_AVX_I_M64: #define __amd64__ 1 +// CHECK_CORE_AVX_I_M64: #define __corei7 1 +// CHECK_CORE_AVX_I_M64: #define __corei7__ 1 +// CHECK_CORE_AVX_I_M64: #define __tune_corei7__ 1 +// CHECK_CORE_AVX_I_M64: #define __x86_64 1 +// CHECK_CORE_AVX_I_M64: #define __x86_64__ 1 // // RUN: %clang -march=atom -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_ATOM_M32 @@ -248,6 +347,15 @@ // CHECK_ATOM_M32: #define __i386__ 1 // CHECK_ATOM_M32: #define __tune_atom__ 1 // CHECK_ATOM_M32: #define i386 1 +// RUN: %clang -march=atom -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_ATOM_M64 +// CHECK_ATOM_M64: #define __amd64 1 +// CHECK_ATOM_M64: #define __amd64__ 1 +// CHECK_ATOM_M64: #define __atom 1 +// CHECK_ATOM_M64: #define __atom__ 1 +// CHECK_ATOM_M64: #define __tune_atom__ 1 +// CHECK_ATOM_M64: #define __x86_64 1 +// CHECK_ATOM_M64: #define __x86_64__ 1 // // RUN: %clang -march=geode -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_GEODE_M32 @@ -257,6 +365,9 @@ // CHECK_GEODE_M32: #define __i386__ 1 // CHECK_GEODE_M32: #define __tune_geode__ 1 // CHECK_GEODE_M32: #define i386 1 +// RUN: %clang -march=geode -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_GEODE_M64 +// CHECK_GEODE_M64: error: // // RUN: %clang -march=k6 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_K6_M32 @@ -266,6 +377,9 @@ // CHECK_K6_M32: #define __k6__ 1 // CHECK_K6_M32: #define __tune_k6__ 1 // CHECK_K6_M32: #define i386 1 +// RUN: %clang -march=k6 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_K6_M64 +// CHECK_K6_M64: error: // // RUN: %clang -march=k6-2 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_K6_2_M32 @@ -277,6 +391,9 @@ // CHECK_K6_2_M32: #define __tune_k6_2__ 1 // CHECK_K6_2_M32: #define __tune_k6__ 1 // CHECK_K6_2_M32: #define i386 1 +// RUN: %clang -march=k6-2 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_K6_2_M64 +// CHECK_K6_2_M64: error: // // RUN: %clang -march=k6-3 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_K6_3_M32 @@ -288,6 +405,9 @@ // CHECK_K6_3_M32: #define __tune_k6_3__ 1 // CHECK_K6_3_M32: #define __tune_k6__ 1 // CHECK_K6_3_M32: #define i386 1 +// RUN: %clang -march=k6-3 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_K6_3_M64 +// CHECK_K6_3_M64: error: // // RUN: %clang -march=athlon -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_M32 @@ -297,6 +417,9 @@ // CHECK_ATHLON_M32: #define __i386__ 1 // CHECK_ATHLON_M32: #define __tune_athlon__ 1 // CHECK_ATHLON_M32: #define i386 1 +// RUN: %clang -march=athlon -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_M64 +// CHECK_ATHLON_M64: error: // // RUN: %clang -march=athlon-tbird -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_TBIRD_M32 @@ -306,6 +429,9 @@ // CHECK_ATHLON_TBIRD_M32: #define __i386__ 1 // CHECK_ATHLON_TBIRD_M32: #define __tune_athlon__ 1 // CHECK_ATHLON_TBIRD_M32: #define i386 1 +// RUN: %clang -march=athlon-tbird -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_TBIRD_M64 +// CHECK_ATHLON_TBIRD_M64: error: // // RUN: %clang -march=athlon-4 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_4_M32 @@ -318,6 +444,9 @@ // FIXME: This should be defined! // CHECK_ATHLON_4_M32-NOT: #define __tune_athlon_sse__ 1 // CHECK_ATHLON_4_M32: #define i386 1 +// RUN: %clang -march=athlon-4 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_4_M64 +// CHECK_ATHLON_4_M64: error: // // RUN: %clang -march=athlon-xp -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_XP_M32 @@ -330,6 +459,9 @@ // FIXME: This should be defined! // CHECK_ATHLON_XP_M32-NOT: #define __tune_athlon_sse__ 1 // CHECK_ATHLON_XP_M32: #define i386 1 +// RUN: %clang -march=athlon-xp -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_XP_M64 +// CHECK_ATHLON_XP_M64: error: // // RUN: %clang -march=athlon-mp -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_MP_M32 @@ -342,6 +474,9 @@ // FIXME: This should be defined! // CHECK_ATHLON_MP_M32-NOT: #define __tune_athlon_sse__ 1 // CHECK_ATHLON_MP_M32: #define i386 1 +// RUN: %clang -march=athlon-mp -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_MP_M64 +// CHECK_ATHLON_MP_M64: error: // // RUN: %clang -march=x86-64 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_X86_64_M32 @@ -350,6 +485,14 @@ // CHECK_X86_64_M32: #define __k8 1 // CHECK_X86_64_M32: #define __k8__ 1 // CHECK_X86_64_M32: #define i386 1 +// RUN: %clang -march=x86-64 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_X86_64_M64 +// CHECK_X86_64_M64: #define __amd64 1 +// CHECK_X86_64_M64: #define __amd64__ 1 +// CHECK_X86_64_M64: #define __k8 1 +// CHECK_X86_64_M64: #define __k8__ 1 +// CHECK_X86_64_M64: #define __x86_64 1 +// CHECK_X86_64_M64: #define __x86_64__ 1 // // RUN: %clang -march=k8 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_K8_M32 @@ -359,6 +502,15 @@ // CHECK_K8_M32: #define __k8__ 1 // CHECK_K8_M32: #define __tune_k8__ 1 // CHECK_K8_M32: #define i386 1 +// RUN: %clang -march=k8 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_K8_M64 +// CHECK_K8_M64: #define __amd64 1 +// CHECK_K8_M64: #define __amd64__ 1 +// CHECK_K8_M64: #define __k8 1 +// CHECK_K8_M64: #define __k8__ 1 +// CHECK_K8_M64: #define __tune_k8__ 1 +// CHECK_K8_M64: #define __x86_64 1 +// CHECK_K8_M64: #define __x86_64__ 1 // // RUN: %clang -march=k8-sse3 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_K8_SSE3_M32 @@ -368,6 +520,15 @@ // CHECK_K8_SSE3_M32: #define __k8__ 1 // CHECK_K8_SSE3_M32: #define __tune_k8__ 1 // CHECK_K8_SSE3_M32: #define i386 1 +// RUN: %clang -march=k8-sse3 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_K8_SSE3_M64 +// CHECK_K8_SSE3_M64: #define __amd64 1 +// CHECK_K8_SSE3_M64: #define __amd64__ 1 +// CHECK_K8_SSE3_M64: #define __k8 1 +// CHECK_K8_SSE3_M64: #define __k8__ 1 +// CHECK_K8_SSE3_M64: #define __tune_k8__ 1 +// CHECK_K8_SSE3_M64: #define __x86_64 1 +// CHECK_K8_SSE3_M64: #define __x86_64__ 1 // // RUN: %clang -march=opteron -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_OPTERON_M32 @@ -377,6 +538,15 @@ // CHECK_OPTERON_M32: #define __k8__ 1 // CHECK_OPTERON_M32: #define __tune_k8__ 1 // CHECK_OPTERON_M32: #define i386 1 +// RUN: %clang -march=opteron -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_OPTERON_M64 +// CHECK_OPTERON_M64: #define __amd64 1 +// CHECK_OPTERON_M64: #define __amd64__ 1 +// CHECK_OPTERON_M64: #define __k8 1 +// CHECK_OPTERON_M64: #define __k8__ 1 +// CHECK_OPTERON_M64: #define __tune_k8__ 1 +// CHECK_OPTERON_M64: #define __x86_64 1 +// CHECK_OPTERON_M64: #define __x86_64__ 1 // // RUN: %clang -march=opteron-sse3 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_OPTERON_SSE3_M32 @@ -386,6 +556,15 @@ // CHECK_OPTERON_SSE3_M32: #define __k8__ 1 // CHECK_OPTERON_SSE3_M32: #define __tune_k8__ 1 // CHECK_OPTERON_SSE3_M32: #define i386 1 +// RUN: %clang -march=opteron-sse3 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_OPTERON_SSE3_M64 +// CHECK_OPTERON_SSE3_M64: #define __amd64 1 +// CHECK_OPTERON_SSE3_M64: #define __amd64__ 1 +// CHECK_OPTERON_SSE3_M64: #define __k8 1 +// CHECK_OPTERON_SSE3_M64: #define __k8__ 1 +// CHECK_OPTERON_SSE3_M64: #define __tune_k8__ 1 +// CHECK_OPTERON_SSE3_M64: #define __x86_64 1 +// CHECK_OPTERON_SSE3_M64: #define __x86_64__ 1 // // RUN: %clang -march=athlon64 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_ATHLON64_M32 @@ -395,6 +574,15 @@ // CHECK_ATHLON64_M32: #define __k8__ 1 // CHECK_ATHLON64_M32: #define __tune_k8__ 1 // CHECK_ATHLON64_M32: #define i386 1 +// RUN: %clang -march=athlon64 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_ATHLON64_M64 +// CHECK_ATHLON64_M64: #define __amd64 1 +// CHECK_ATHLON64_M64: #define __amd64__ 1 +// CHECK_ATHLON64_M64: #define __k8 1 +// CHECK_ATHLON64_M64: #define __k8__ 1 +// CHECK_ATHLON64_M64: #define __tune_k8__ 1 +// CHECK_ATHLON64_M64: #define __x86_64 1 +// CHECK_ATHLON64_M64: #define __x86_64__ 1 // // RUN: %clang -march=athlon64-sse3 -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_ATHLON64_SSE3_M32 @@ -404,6 +592,15 @@ // CHECK_ATHLON64_SSE3_M32: #define __k8__ 1 // CHECK_ATHLON64_SSE3_M32: #define __tune_k8__ 1 // CHECK_ATHLON64_SSE3_M32: #define i386 1 +// RUN: %clang -march=athlon64-sse3 -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_ATHLON64_SSE3_M64 +// CHECK_ATHLON64_SSE3_M64: #define __amd64 1 +// CHECK_ATHLON64_SSE3_M64: #define __amd64__ 1 +// CHECK_ATHLON64_SSE3_M64: #define __k8 1 +// CHECK_ATHLON64_SSE3_M64: #define __k8__ 1 +// CHECK_ATHLON64_SSE3_M64: #define __tune_k8__ 1 +// CHECK_ATHLON64_SSE3_M64: #define __x86_64 1 +// CHECK_ATHLON64_SSE3_M64: #define __x86_64__ 1 // // RUN: %clang -march=athlon-fx -m32 -E -dM %s -o - 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_FX_M32 @@ -413,3 +610,12 @@ // CHECK_ATHLON_FX_M32: #define __k8__ 1 // CHECK_ATHLON_FX_M32: #define __tune_k8__ 1 // CHECK_ATHLON_FX_M32: #define i386 1 +// RUN: %clang -march=athlon-fx -m64 -E -dM %s -o - 2>&1 \ +// RUN: | FileCheck %s -check-prefix=CHECK_ATHLON_FX_M64 +// CHECK_ATHLON_FX_M64: #define __amd64 1 +// CHECK_ATHLON_FX_M64: #define __amd64__ 1 +// CHECK_ATHLON_FX_M64: #define __k8 1 +// CHECK_ATHLON_FX_M64: #define __k8__ 1 +// CHECK_ATHLON_FX_M64: #define __tune_k8__ 1 +// CHECK_ATHLON_FX_M64: #define __x86_64 1 +// CHECK_ATHLON_FX_M64: #define __x86_64__ 1 -- 2.40.0