Skip to content

Commit 3550e24

Browse files
committed
[Clang][ARM][AArch64] Add support for Armv9-A, Armv9.1-A and Armv9.2-A
armv9-a, armv9.1-a and armv9.2-a can be targeted using the -march option both in ARM and AArch64. - Armv9-A maps to Armv8.5-A. - Armv9.1-A maps to Armv8.6-A. - Armv9.2-A maps to Armv8.7-A. - The SVE2 extension is enabled by default on these architectures. - The cryptographic extensions are disabled by default on these architectures. The Armv9-A architecture is described in the Arm® Architecture Reference Manual Supplement Armv9, for Armv9-A architecture profile (https://developer.arm.com/documentation/ddi0608/latest). Reviewed By: SjoerdMeijer Differential Revision: https://reviews.llvm.org/D109517
1 parent 42b588a commit 3550e24

26 files changed

+416
-43
lines changed

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,17 @@ const Builtin::Info AArch64TargetInfo::BuiltinInfo[] = {
4040
#include "clang/Basic/BuiltinsAArch64.def"
4141
};
4242

43+
static StringRef getArchVersionString(llvm::AArch64::ArchKind Kind) {
44+
switch (Kind) {
45+
case llvm::AArch64::ArchKind::ARMV9A:
46+
case llvm::AArch64::ArchKind::ARMV9_1A:
47+
case llvm::AArch64::ArchKind::ARMV9_2A:
48+
return "9";
49+
default:
50+
return "8";
51+
}
52+
}
53+
4354
AArch64TargetInfo::AArch64TargetInfo(const llvm::Triple &Triple,
4455
const TargetOptions &Opts)
4556
: TargetInfo(Triple), ABI("aapcs") {
@@ -203,6 +214,24 @@ void AArch64TargetInfo::getTargetDefinesARMV87A(const LangOptions &Opts,
203214
getTargetDefinesARMV86A(Opts, Builder);
204215
}
205216

217+
void AArch64TargetInfo::getTargetDefinesARMV9A(const LangOptions &Opts,
218+
MacroBuilder &Builder) const {
219+
// Armv9-A maps to Armv8.5-A
220+
getTargetDefinesARMV85A(Opts, Builder);
221+
}
222+
223+
void AArch64TargetInfo::getTargetDefinesARMV91A(const LangOptions &Opts,
224+
MacroBuilder &Builder) const {
225+
// Armv9.1-A maps to Armv8.6-A
226+
getTargetDefinesARMV86A(Opts, Builder);
227+
}
228+
229+
void AArch64TargetInfo::getTargetDefinesARMV92A(const LangOptions &Opts,
230+
MacroBuilder &Builder) const {
231+
// Armv9.2-A maps to Armv8.7-A
232+
getTargetDefinesARMV87A(Opts, Builder);
233+
}
234+
206235
void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
207236
MacroBuilder &Builder) const {
208237
// Target identification.
@@ -227,7 +256,7 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
227256

228257
// ACLE predefines. Many can only have one possible value on v8 AArch64.
229258
Builder.defineMacro("__ARM_ACLE", "200");
230-
Builder.defineMacro("__ARM_ARCH", "8");
259+
Builder.defineMacro("__ARM_ARCH", getArchVersionString(ArchKind));
231260
Builder.defineMacro("__ARM_ARCH_PROFILE", "'A'");
232261

233262
Builder.defineMacro("__ARM_64BIT_STATE", "1");
@@ -405,6 +434,15 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
405434
case llvm::AArch64::ArchKind::ARMV8_7A:
406435
getTargetDefinesARMV87A(Opts, Builder);
407436
break;
437+
case llvm::AArch64::ArchKind::ARMV9A:
438+
getTargetDefinesARMV9A(Opts, Builder);
439+
break;
440+
case llvm::AArch64::ArchKind::ARMV9_1A:
441+
getTargetDefinesARMV91A(Opts, Builder);
442+
break;
443+
case llvm::AArch64::ArchKind::ARMV9_2A:
444+
getTargetDefinesARMV92A(Opts, Builder);
445+
break;
408446
}
409447

410448
// All of the __sync_(bool|val)_compare_and_swap_(1|2|4|8) builtins work.
@@ -550,6 +588,12 @@ bool AArch64TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
550588
ArchKind = llvm::AArch64::ArchKind::ARMV8_6A;
551589
if (Feature == "+v8.7a")
552590
ArchKind = llvm::AArch64::ArchKind::ARMV8_7A;
591+
if (Feature == "+v9a")
592+
ArchKind = llvm::AArch64::ArchKind::ARMV9A;
593+
if (Feature == "+v9.1a")
594+
ArchKind = llvm::AArch64::ArchKind::ARMV9_1A;
595+
if (Feature == "+v9.2a")
596+
ArchKind = llvm::AArch64::ArchKind::ARMV9_2A;
553597
if (Feature == "+v8r")
554598
ArchKind = llvm::AArch64::ArchKind::ARMV8R;
555599
if (Feature == "+fullfp16")

clang/lib/Basic/Targets/AArch64.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public TargetInfo {
9191
MacroBuilder &Builder) const;
9292
void getTargetDefinesARMV87A(const LangOptions &Opts,
9393
MacroBuilder &Builder) const;
94+
void getTargetDefinesARMV9A(const LangOptions &Opts,
95+
MacroBuilder &Builder) const;
96+
void getTargetDefinesARMV91A(const LangOptions &Opts,
97+
MacroBuilder &Builder) const;
98+
void getTargetDefinesARMV92A(const LangOptions &Opts,
99+
MacroBuilder &Builder) const;
94100
void getTargetDefines(const LangOptions &Opts,
95101
MacroBuilder &Builder) const override;
96102

clang/lib/Basic/Targets/ARM.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,12 @@ StringRef ARMTargetInfo::getCPUAttr() const {
212212
return "8_6A";
213213
case llvm::ARM::ArchKind::ARMV8_7A:
214214
return "8_7A";
215+
case llvm::ARM::ArchKind::ARMV9A:
216+
return "9A";
217+
case llvm::ARM::ArchKind::ARMV9_1A:
218+
return "9_1A";
219+
case llvm::ARM::ArchKind::ARMV9_2A:
220+
return "9_2A";
215221
case llvm::ARM::ArchKind::ARMV8MBaseline:
216222
return "8M_BASE";
217223
case llvm::ARM::ArchKind::ARMV8MMainline:
@@ -535,6 +541,7 @@ bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
535541
LDREX = LDREX_D | LDREX_W | LDREX_H | LDREX_B;
536542
break;
537543
case 8:
544+
case 9:
538545
LDREX = LDREX_D | LDREX_W | LDREX_H | LDREX_B;
539546
}
540547

@@ -877,6 +884,9 @@ void ARMTargetInfo::getTargetDefines(const LangOptions &Opts,
877884
case llvm::ARM::ArchKind::ARMV8_4A:
878885
case llvm::ARM::ArchKind::ARMV8_5A:
879886
case llvm::ARM::ArchKind::ARMV8_6A:
887+
case llvm::ARM::ArchKind::ARMV9A:
888+
case llvm::ARM::ArchKind::ARMV9_1A:
889+
case llvm::ARM::ArchKind::ARMV9_2A:
880890
getTargetDefinesARMV83A(Opts, Builder);
881891
break;
882892
}

clang/lib/Driver/ToolChains/Arch/AArch64.cpp

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,13 @@ static bool DecodeAArch64Features(const Driver &D, StringRef text,
7979
else
8080
return false;
8181

82-
// +sve implies +f32mm if the base architecture is v8.6A or v8.7A
83-
// it isn't the case in general that sve implies both f64mm and f32mm
82+
// +sve implies +f32mm if the base architecture is v8.6A, v8.7A, v9.1A or
83+
// v9.2A. It isn't the case in general that sve implies both f64mm and f32mm
8484
if ((ArchKind == llvm::AArch64::ArchKind::ARMV8_6A ||
85-
ArchKind == llvm::AArch64::ArchKind::ARMV8_7A) && Feature == "sve")
85+
ArchKind == llvm::AArch64::ArchKind::ARMV8_7A ||
86+
ArchKind == llvm::AArch64::ArchKind::ARMV9_1A ||
87+
ArchKind == llvm::AArch64::ArchKind::ARMV9_2A) &&
88+
Feature == "sve")
8689
Features.push_back("+f32mm");
8790
}
8891
return true;
@@ -345,7 +348,10 @@ void aarch64::getAArch64TargetFeatures(const Driver &D,
345348
NoCrypto = true;
346349
}
347350

348-
if (std::find(ItBegin, ItEnd, "+v8.4a") != ItEnd) {
351+
if (std::find(ItBegin, ItEnd, "+v8.4a") != ItEnd ||
352+
std::find(ItBegin, ItEnd, "+v9a") != ItEnd ||
353+
std::find(ItBegin, ItEnd, "+v9.1a") != ItEnd ||
354+
std::find(ItBegin, ItEnd, "+v9.2a") != ItEnd) {
349355
if (HasCrypto && !NoCrypto) {
350356
// Check if we have NOT disabled an algorithm with something like:
351357
// +crypto, -algorithm
@@ -404,9 +410,19 @@ void aarch64::getAArch64TargetFeatures(const Driver &D,
404410
}
405411
}
406412

407-
auto V8_6Pos = llvm::find(Features, "+v8.6a");
408-
if (V8_6Pos != std::end(Features))
409-
V8_6Pos = Features.insert(std::next(V8_6Pos), {"+i8mm", "+bf16"});
413+
const char *Archs[] = {"+v8.6a", "+v8.7a", "+v9.1a", "+v9.2a"};
414+
auto Pos = std::find_first_of(Features.begin(), Features.end(),
415+
std::begin(Archs), std::end(Archs));
416+
if (Pos != std::end(Features))
417+
Pos = Features.insert(std::next(Pos), {"+i8mm", "+bf16"});
418+
419+
// Enable SVE2 by default on Armv9-A.
420+
// It can still be disabled if +nosve2 is present.
421+
const char *SVE2Archs[] = {"+v9a", "+v9.1a", "+v9.2a"};
422+
Pos = std::find_first_of(Features.begin(), Features.end(),
423+
std::begin(SVE2Archs), std::end(SVE2Archs));
424+
if (Pos != Features.end())
425+
Features.insert(++Pos, "+sve2");
410426

411427
if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access,
412428
options::OPT_munaligned_access)) {

clang/test/Driver/aarch64-cpus.c

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,63 @@
768768
// NO-LS64-NOT: "-target-feature" "+ls64"
769769
// LS64: "-target-feature" "+ls64"
770770

771+
// RUN: %clang -target aarch64 -march=armv9a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A %s
772+
// RUN: %clang -target aarch64 -march=armv9-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A %s
773+
// RUN: %clang -target aarch64 -mlittle-endian -march=armv9a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A %s
774+
// RUN: %clang -target aarch64 -mlittle-endian -march=armv9-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A %s
775+
// RUN: %clang -target aarch64_be -mlittle-endian -march=armv9a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A %s
776+
// RUN: %clang -target aarch64_be -mlittle-endian -march=armv9-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A %s
777+
// GENERICV9A: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v9a" "-target-feature" "+sve2"
778+
779+
// SVE2 is enabled by default on Armv9-A but it can be disabled
780+
// RUN: %clang -target aarch64 -march=armv9a+nosve2 -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-NOSVE2 %s
781+
// RUN: %clang -target aarch64 -march=armv9-a+nosve2 -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-NOSVE2 %s
782+
// RUN: %clang -target aarch64 -mlittle-endian -march=armv9a+nosve2 -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-NOSVE2 %s
783+
// RUN: %clang -target aarch64 -mlittle-endian -march=armv9-a+nosve2 -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-NOSVE2 %s
784+
// RUN: %clang -target aarch64_be -mlittle-endian -march=armv9a+nosve2 -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-NOSVE2 %s
785+
// RUN: %clang -target aarch64_be -mlittle-endian -march=armv9-a+nosve2 -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-NOSVE2 %s
786+
// GENERICV9A-NOSVE2: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v9a" "-target-feature" "-sve2"
787+
788+
// RUN: %clang -target aarch64_be -march=armv9a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-BE %s
789+
// RUN: %clang -target aarch64_be -march=armv9-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-BE %s
790+
// RUN: %clang -target aarch64 -mbig-endian -march=armv9a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-BE %s
791+
// RUN: %clang -target aarch64 -mbig-endian -march=armv9-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-BE %s
792+
// RUN: %clang -target aarch64_be -mbig-endian -march=armv9a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-BE %s
793+
// RUN: %clang -target aarch64_be -mbig-endian -march=armv9-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV9A-BE %s
794+
// GENERICV9A-BE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v9a" "-target-feature" "+sve2"
795+
796+
// RUN: %clang -target aarch64 -march=armv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A %s
797+
// RUN: %clang -target aarch64 -march=armv9.1-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A %s
798+
// RUN: %clang -target aarch64 -mlittle-endian -march=armv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A %s
799+
// RUN: %clang -target aarch64 -mlittle-endian -march=armv9.1-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A %s
800+
// RUN: %clang -target aarch64_be -mlittle-endian -march=armv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A %s
801+
// RUN: %clang -target aarch64_be -mlittle-endian -march=armv9.1-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A %s
802+
// GENERICV91A: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v9.1a" "-target-feature" "+sve2"
803+
804+
// RUN: %clang -target aarch64_be -march=armv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A-BE %s
805+
// RUN: %clang -target aarch64_be -march=armv9.1-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A-BE %s
806+
// RUN: %clang -target aarch64 -mbig-endian -march=armv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A-BE %s
807+
// RUN: %clang -target aarch64 -mbig-endian -march=armv9.1-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A-BE %s
808+
// RUN: %clang -target aarch64_be -mbig-endian -march=armv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A-BE %s
809+
// RUN: %clang -target aarch64_be -mbig-endian -march=armv9.1-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV91A-BE %s
810+
// GENERICV91A-BE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v9.1a" "-target-feature" "+sve2"
811+
812+
// RUN: %clang -target aarch64 -march=armv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A %s
813+
// RUN: %clang -target aarch64 -march=armv9.2-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A %s
814+
// RUN: %clang -target aarch64 -mlittle-endian -march=armv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A %s
815+
// RUN: %clang -target aarch64 -mlittle-endian -march=armv9.2-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A %s
816+
// RUN: %clang -target aarch64_be -mlittle-endian -march=armv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A %s
817+
// RUN: %clang -target aarch64_be -mlittle-endian -march=armv9.2-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A %s
818+
// GENERICV92A: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v9.2a" "-target-feature" "+sve2"
819+
820+
// RUN: %clang -target aarch64_be -march=armv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A-BE %s
821+
// RUN: %clang -target aarch64_be -march=armv9.2-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A-BE %s
822+
// RUN: %clang -target aarch64 -mbig-endian -march=armv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A-BE %s
823+
// RUN: %clang -target aarch64 -mbig-endian -march=armv9.2-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A-BE %s
824+
// RUN: %clang -target aarch64_be -mbig-endian -march=armv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A-BE %s
825+
// RUN: %clang -target aarch64_be -mbig-endian -march=armv9.2-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV92A-BE %s
826+
// GENERICV92A-BE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu" "generic" "-target-feature" "+neon" "-target-feature" "+v9.2a" "-target-feature" "+sve2"
827+
771828
// fullfp16 is off by default for v8a, feature must not be mentioned
772829
// RUN: %clang -target aarch64 -march=armv8a -### -c %s 2>&1 | FileCheck -check-prefix=V82ANOFP16 -check-prefix=GENERIC %s
773830
// RUN: %clang -target aarch64 -march=armv8-a -### -c %s 2>&1 | FileCheck -check-prefix=V82ANOFP16 -check-prefix=GENERIC %s

clang/test/Driver/arm-cortex-cpus.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,57 @@
369369
// RUN: %clang -target arm -march=armebv8.7-a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V87A %s
370370
// CHECK-BE-V87A: "-cc1"{{.*}} "-triple" "armebv8.7{{.*}}" "-target-cpu" "generic"
371371

372+
// RUN: %clang -target armv9a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V9A %s
373+
// RUN: %clang -target arm -march=armv9a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V9A %s
374+
// RUN: %clang -target arm -march=armv9-a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V9A %s
375+
// RUN: %clang -target arm -march=armv9a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V9A %s
376+
// RUN: %clang -target armv9a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V9A %s
377+
// RUN: %clang -target arm -march=armv9a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V9A %s
378+
// RUN: %clang -target arm -mlittle-endian -march=armv9-a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V9A %s
379+
// CHECK-V9A: "-cc1"{{.*}} "-triple" "armv9{{.*}}" "-target-cpu" "generic"
380+
381+
// RUN: %clang -target armebv9a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V9A %s
382+
// RUN: %clang -target armv9a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V9A %s
383+
// RUN: %clang -target armeb -march=armebv9a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V9A %s
384+
// RUN: %clang -target armeb -march=armebv9-a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V9A %s
385+
// RUN: %clang -target arm -march=armebv9a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V9A %s
386+
// RUN: %clang -target arm -march=armebv9-a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V9A %s
387+
// CHECK-BE-V9A: "-cc1"{{.*}} "-triple" "armebv9{{.*}}" "-target-cpu" "generic"
388+
389+
// RUN: %clang -target armv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V91A %s
390+
// RUN: %clang -target arm -march=armv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V91A %s
391+
// RUN: %clang -target arm -march=armv9.1-a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V91A %s
392+
// RUN: %clang -target arm -march=armv9.1a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V91A %s
393+
// RUN: %clang -target armv9.1a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V91A %s
394+
// RUN: %clang -target arm -march=armv9.1a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V91A %s
395+
// RUN: %clang -target arm -mlittle-endian -march=armv9.1-a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V91A %s
396+
// CHECK-V91A: "-cc1"{{.*}} "-triple" "armv9.1{{.*}}" "-target-cpu" "generic"
397+
398+
// RUN: %clang -target armebv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V91A %s
399+
// RUN: %clang -target armv9.1a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V91A %s
400+
// RUN: %clang -target armeb -march=armebv9.1a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V91A %s
401+
// RUN: %clang -target armeb -march=armebv9.1-a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V91A %s
402+
// RUN: %clang -target arm -march=armebv9.1a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V91A %s
403+
// RUN: %clang -target arm -march=armebv9.1-a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V91A %s
404+
// CHECK-BE-V91A: "-cc1"{{.*}} "-triple" "armebv9.1{{.*}}" "-target-cpu" "generic"
405+
406+
// RUN: %clang -target armv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V92A %s
407+
// RUN: %clang -target arm -march=armv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V92A %s
408+
// RUN: %clang -target arm -march=armv9.2-a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V92A %s
409+
// RUN: %clang -target arm -march=armv9.2a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V92A %s
410+
// RUN: %clang -target armv9.2a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V92A %s
411+
// RUN: %clang -target arm -march=armv9.2a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V92A %s
412+
// RUN: %clang -target arm -mlittle-endian -march=armv9.2-a -mlittle-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-V92A %s
413+
// CHECK-V92A: "-cc1"{{.*}} "-triple" "armv9.2{{.*}}" "-target-cpu" "generic"
414+
415+
// RUN: %clang -target armebv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V92A %s
416+
// RUN: %clang -target armv9.2a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V92A %s
417+
// RUN: %clang -target armeb -march=armebv9.2a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V92A %s
418+
// RUN: %clang -target armeb -march=armebv9.2-a -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V92A %s
419+
// RUN: %clang -target arm -march=armebv9.2a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V92A %s
420+
// RUN: %clang -target arm -march=armebv9.2-a -mbig-endian -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V92A %s
421+
// CHECK-BE-V92A: "-cc1"{{.*}} "-triple" "armebv9.2{{.*}}" "-target-cpu" "generic"
422+
372423
// Once we have CPUs with optional v8.2-A FP16, we will need a way to turn it
373424
// on and off. Cortex-A53 is a placeholder for now.
374425
// RUN: %clang -target armv8a-linux-eabi -mcpu=cortex-a53+fp16 -### -c %s 2>&1 | FileCheck --check-prefix CHECK-CORTEX-A53-FP16 %s

0 commit comments

Comments
 (0)