diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2019-08-09 08:52:54 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2019-08-09 08:52:54 +0000 |
commit | eb485fbc712861e37813ff93d2711c631d162f68 (patch) | |
tree | a4d98d5f98b6ca91562dba8b5c2a3819546eb688 /clang/test/CodeGenObjC | |
parent | 9693d28da8758de36adcf95614447f8ee3943ab1 (diff) | |
download | bcm5719-llvm-eb485fbc712861e37813ff93d2711c631d162f68.tar.gz bcm5719-llvm-eb485fbc712861e37813ff93d2711c631d162f68.zip |
Add SVE opaque built-in types
This patch adds the SVE built-in types defined by the Procedure Call
Standard for the Arm Architecture:
https://developer.arm.com/docs/100986/0000
It handles the types in all relevant places that deal with built-in types.
At the moment, some of these places bail out with an error, including:
(1) trying to generate LLVM IR for the types
(2) trying to generate debug info for the types
(3) trying to mangle the types using the Microsoft C++ ABI
(4) trying to @encode the types in Objective C
(1) and (2) are fixed by follow-on patches but (unlike this patch)
they deal mostly with target-specific LLVM details, so seemed like
a logically separate change. There is currently no spec for (3) and
(4), so reporting an error seems like the correct behaviour for now.
The intention is that the types will become sizeless types:
http://lists.llvm.org/pipermail/cfe-dev/2019-June/062523.html
The main purpose of the sizeless type extension is to diagnose
impossible or dangerous uses of the types, such as any that would
require sizeof to have a meaningful defined value.
Until then, the patch sets the alignments of the types to the values
specified in the link above. It also sets the sizes of the types to
zero, which is chosen to be consistently wrong and shouldn't affect
correctly-written code (i.e. code that would compile even with the
sizeless type extension).
The patch adds the common subset of functionality needed to test the
sizeless type extension on the one hand and to provide SVE intrinsic
functions on the other. After this patch, the two pieces of work are
essentially independent.
The patch is based on one by Graham Hunter:
https://reviews.llvm.org/D59245
Differential Revision: https://reviews.llvm.org/D62960
llvm-svn: 368413
Diffstat (limited to 'clang/test/CodeGenObjC')
-rw-r--r-- | clang/test/CodeGenObjC/aarch64-sve-types.m | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjC/aarch64-sve-types.m b/clang/test/CodeGenObjC/aarch64-sve-types.m new file mode 100644 index 00000000000..625c7529659 --- /dev/null +++ b/clang/test/CodeGenObjC/aarch64-sve-types.m @@ -0,0 +1,32 @@ +// RUN: not %clang_cc1 -triple aarch64-none-linux-gnu %s -emit-llvm -o - \ +// RUN: 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -triple aarch64-none-linux-gnu %s -emit-llvm -o - \ +// RUN: -target-feature +sve 2>&1 | FileCheck %s + +// CHECK: error: cannot yet @encode type __SVInt8_t +const char s8[] = @encode(__SVInt8_t); +// CHECK: error: cannot yet @encode type __SVInt16_t +const char s16[] = @encode(__SVInt16_t); +// CHECK: error: cannot yet @encode type __SVInt32_t +const char s32[] = @encode(__SVInt32_t); +// CHECK: error: cannot yet @encode type __SVInt64_t +const char s64[] = @encode(__SVInt64_t); + +// CHECK: error: cannot yet @encode type __SVUint8_t +const char u8[] = @encode(__SVUint8_t); +// CHECK: error: cannot yet @encode type __SVUint16_t +const char u16[] = @encode(__SVUint16_t); +// CHECK: error: cannot yet @encode type __SVUint32_t +const char u32[] = @encode(__SVUint32_t); +// CHECK: error: cannot yet @encode type __SVUint64_t +const char u64[] = @encode(__SVUint64_t); + +// CHECK: error: cannot yet @encode type __SVFloat16_t +const char f16[] = @encode(__SVFloat16_t); +// CHECK: error: cannot yet @encode type __SVFloat32_t +const char f32[] = @encode(__SVFloat32_t); +// CHECK: error: cannot yet @encode type __SVFloat64_t +const char f64[] = @encode(__SVFloat64_t); + +// CHECK: error: cannot yet @encode type __SVBool_t +const char b8[] = @encode(__SVBool_t); |