[AArch64] clang support for Armv8.8/9.3 MOPS
This introduces clang command line support for the new Armv8.8-A and
Armv9.3-A instructions for standardising memcpy, memset and memmove
operations, which was previously introduced into LLVM in
https://reviews.llvm.org/D116157.
Patch by Lucas Prates, Tomas Matheson and Son Tuan Vu.
Differential Revision: https://reviews.llvm.org/D117271
GitOrigin-RevId: c84b8be516bcc4d021ff804169d58a7b3104e050
diff --git a/lib/Basic/Targets/AArch64.cpp b/lib/Basic/Targets/AArch64.cpp
index 4a2d2a8..8e23cc4 100644
--- a/lib/Basic/Targets/AArch64.cpp
+++ b/lib/Basic/Targets/AArch64.cpp
@@ -544,6 +544,7 @@
HasMatmulFP32 = false;
HasLSE = false;
HasHBC = false;
+ HasMOPS = false;
ArchKind = llvm::AArch64::ArchKind::INVALID;
diff --git a/lib/Basic/Targets/AArch64.h b/lib/Basic/Targets/AArch64.h
index aa1ee77..b9e6e32 100644
--- a/lib/Basic/Targets/AArch64.h
+++ b/lib/Basic/Targets/AArch64.h
@@ -54,6 +54,7 @@
bool HasLSE;
bool HasFlagM;
bool HasHBC;
+ bool HasMOPS;
llvm::AArch64::ArchKind ArchKind;
diff --git a/test/Driver/aarch64-mops.c b/test/Driver/aarch64-mops.c
new file mode 100644
index 0000000..4cd4814
--- /dev/null
+++ b/test/Driver/aarch64-mops.c
@@ -0,0 +1,6 @@
+// Test that target feature mops is implemented and available correctly
+// RUN: %clang -### -target aarch64-none-none-eabi -march=armv8.8-a+mops %s 2>&1 | FileCheck %s
+// CHECK: "-target-feature" "+mops"
+
+// RUN: %clang -### -target aarch64-none-none-eabi -march=armv8.8-a+nomops %s 2>&1 | FileCheck %s --check-prefix=NO_MOPS
+// NO_MOPS: "-target-feature" "-mops"