diff options
author | Hans Wennborg <hans@hanshq.net> | 2019-07-31 14:20:16 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2019-07-31 14:20:16 +0000 |
commit | 5f32370064ad5bfcb7216abea49d2cb604ec193f (patch) | |
tree | 5ab64dd31992e46f965928c99d6df801e58deabe /clang | |
parent | 372334b3d334887b7699f5018e6532e31eb6cf40 (diff) | |
download | llvm-5f32370064ad5bfcb7216abea49d2cb604ec193f.zip llvm-5f32370064ad5bfcb7216abea49d2cb604ec193f.tar.gz llvm-5f32370064ad5bfcb7216abea49d2cb604ec193f.tar.bz2 |
Merging r366878 and r367301:
------------------------------------------------------------------------
r366878 | s.desmalen | 2019-07-24 10:42:34 +0200 (Wed, 24 Jul 2019) | 12 lines
[SVE][Inline-Asm] Add support to specify SVE registers in the clobber list
Adds the SVE vector and predicate registers to the list of known registers.
Patch by Kerry McLaughlin.
Reviewers: erichkeane, sdesmalen, rengolin
Reviewed By: sdesmalen
Differential Revision: https://reviews.llvm.org/D64739
------------------------------------------------------------------------
------------------------------------------------------------------------
r367301 | s.desmalen | 2019-07-30 12:14:39 +0200 (Tue, 30 Jul 2019) | 15 lines
[AArch64] Disable __ARM_FEATURE_SVE without ACLE.
The Arm C Language Extensions for SVE document specifies that
__ARM_FEATURE_SVE should be set when the compiler supports SVE and
implements all the extensions described in the document.
This is currently not yet the case, so the feature should be disabled
until the compiler can provide all the extensions as described.
Reviewers: c-rhodes, rengolin, rovka, ktkachov
Reviewed By: rengolin
Differential Revision: https://reviews.llvm.org/D65404
------------------------------------------------------------------------
llvm-svn: 367432
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Basic/Targets/AArch64.cpp | 16 | ||||
-rw-r--r-- | clang/test/CodeGen/aarch64-sve-inline-asm.c | 13 | ||||
-rw-r--r-- | clang/test/Preprocessor/aarch64-target-features.c | 2 |
3 files changed, 25 insertions, 6 deletions
diff --git a/clang/lib/Basic/Targets/AArch64.cpp b/clang/lib/Basic/Targets/AArch64.cpp index 74ac69a..25f2b7b 100644 --- a/clang/lib/Basic/Targets/AArch64.cpp +++ b/clang/lib/Basic/Targets/AArch64.cpp @@ -196,9 +196,6 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("__ARM_NEON_FP", "0xE"); } - if (FPU & SveMode) - Builder.defineMacro("__ARM_FEATURE_SVE", "1"); - if (HasCRC) Builder.defineMacro("__ARM_FEATURE_CRC32", "1"); @@ -351,10 +348,19 @@ const char *const AArch64TargetInfo::GCCRegNames[] = { "d12", "d13", "d14", "d15", "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23", "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31", - // Vector registers + // Neon vector registers "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21", "v22", - "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" + "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", + + // SVE vector registers + "z0", "z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8", "z9", "z10", + "z11", "z12", "z13", "z14", "z15", "z16", "z17", "z18", "z19", "z20", "z21", + "z22", "z23", "z24", "z25", "z26", "z27", "z28", "z29", "z30", "z31", + + // SVE predicate registers + "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9", "p10", + "p11", "p12", "p13", "p14", "p15" }; ArrayRef<const char *> AArch64TargetInfo::getGCCRegNames() const { diff --git a/clang/test/CodeGen/aarch64-sve-inline-asm.c b/clang/test/CodeGen/aarch64-sve-inline-asm.c new file mode 100644 index 0000000..90e7777 --- /dev/null +++ b/clang/test/CodeGen/aarch64-sve-inline-asm.c @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK + +void test_sve_asm() { + asm volatile( + "ptrue p0.d\n" + "ptrue p15.d\n" + "add z0.d, p0/m, z0.d, z0.d\n" + "add z31.d, p0/m, z31.d, z31.d\n" + : + : + : "z0", "z31", "p0", "p15"); + // CHECK: "~{z0},~{z31},~{p0},~{p15}" +} diff --git a/clang/test/Preprocessor/aarch64-target-features.c b/clang/test/Preprocessor/aarch64-target-features.c index 6964edc..922c099 100644 --- a/clang/test/Preprocessor/aarch64-target-features.c +++ b/clang/test/Preprocessor/aarch64-target-features.c @@ -88,7 +88,7 @@ // RUN: %clang -target aarch64 -mtune=cyclone -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-MTUNE-CYCLONE %s // RUN: %clang -target aarch64-none-linux-gnu -march=armv8-a+sve -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-SVE %s -// CHECK-SVE: __ARM_FEATURE_SVE 1 +// CHECK-SVE-NOT: __ARM_FEATURE_SVE 1 // RUN: %clang -target aarch64-none-linux-gnu -march=armv8.2a+dotprod -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-DOTPROD %s // CHECK-DOTPROD: __ARM_FEATURE_DOTPROD 1 |