Skip to content

Commit a1fae98

Browse files
committed
[AArch64] Add svboolx2_t and svboolx4_t tuple types
https://reviews.llvm.org/D145505
1 parent b0ea210 commit a1fae98

File tree

8 files changed

+79
-1
lines changed

8 files changed

+79
-1
lines changed

clang/include/clang/Basic/AArch64SVEACLETypes.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ SVE_VECTOR_TYPE("__clang_svfloat64x4_t", "svfloat64x4_t", SveFloat64x4, SveFloat
129129
SVE_VECTOR_TYPE("__clang_svbfloat16x4_t", "svbfloat16x4_t", SveBFloat16x4, SveBFloat16x4Ty, 32, 16, true, false, true)
130130

131131
SVE_PREDICATE_TYPE("__SVBool_t", "__SVBool_t", SveBool, SveBoolTy, 16)
132+
SVE_PREDICATE_TYPE("__clang_svboolx2_t", "svboolx2_t", SveBoolx2, SveBoolx2Ty, 32)
133+
SVE_PREDICATE_TYPE("__clang_svboolx4_t", "svboolx4_t", SveBoolx4, SveBoolx4Ty, 64)
132134

133135
SVE_OPAQUE_TYPE("__SVCount_t", "__SVCount_t", SveCount, SveCountTy)
134136

clang/lib/AST/ASTContext.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4041,6 +4041,10 @@ ASTContext::getBuiltinVectorTypeInfo(const BuiltinType *Ty) const {
40414041
return SVE_INT_ELTTY(64, 2, false, 4);
40424042
case BuiltinType::SveBool:
40434043
return SVE_ELTTY(BoolTy, 16, 1);
4044+
case BuiltinType::SveBoolx2:
4045+
return SVE_ELTTY(BoolTy, 16, 2);
4046+
case BuiltinType::SveBoolx4:
4047+
return SVE_ELTTY(BoolTy, 16, 4);
40444048
case BuiltinType::SveFloat16:
40454049
return SVE_ELTTY(HalfTy, 8, 1);
40464050
case BuiltinType::SveFloat16x2:

clang/lib/AST/Type.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2401,6 +2401,8 @@ bool Type::isVLSTBuiltinType() const {
24012401
case BuiltinType::SveFloat64:
24022402
case BuiltinType::SveBFloat16:
24032403
case BuiltinType::SveBool:
2404+
case BuiltinType::SveBoolx2:
2405+
case BuiltinType::SveBoolx4:
24042406
return true;
24052407
default:
24062408
return false;

clang/lib/CodeGen/CodeGenTypes.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,8 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) {
596596
case BuiltinType::SveInt64x4:
597597
case BuiltinType::SveUint64x4:
598598
case BuiltinType::SveBool:
599+
case BuiltinType::SveBoolx2:
600+
case BuiltinType::SveBoolx4:
599601
case BuiltinType::SveFloat16:
600602
case BuiltinType::SveFloat16x2:
601603
case BuiltinType::SveFloat16x3:

clang/test/CodeGen/svboolx2_t.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2+
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -emit-llvm -o - %s | FileCheck %s
3+
4+
// CHECK-LABEL: @_Z3foo10svboolx2_t(
5+
// CHECK-NEXT: entry:
6+
// CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca <vscale x 32 x i1>, align 2
7+
// CHECK-NEXT: store <vscale x 32 x i1> [[ARG:%.*]], ptr [[ARG_ADDR]], align 2
8+
// CHECK-NEXT: [[TMP0:%.*]] = load <vscale x 32 x i1>, ptr [[ARG_ADDR]], align 2
9+
// CHECK-NEXT: ret <vscale x 32 x i1> [[TMP0]]
10+
//
11+
__clang_svboolx2_t foo(__clang_svboolx2_t arg) { return arg; }
12+
13+
__clang_svboolx2_t bar();
14+
// CHECK-LABEL: @_Z4foo2v(
15+
// CHECK-NEXT: entry:
16+
// CHECK-NEXT: [[CALL:%.*]] = call <vscale x 32 x i1> @_Z3barv()
17+
// CHECK-NEXT: ret <vscale x 32 x i1> [[CALL]]
18+
//
19+
__clang_svboolx2_t foo2() { return bar(); }
20+
21+
__clang_svboolx2_t bar2(__clang_svboolx2_t);
22+
// CHECK-LABEL: @_Z4foo310svboolx2_t(
23+
// CHECK-NEXT: entry:
24+
// CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca <vscale x 32 x i1>, align 2
25+
// CHECK-NEXT: store <vscale x 32 x i1> [[ARG:%.*]], ptr [[ARG_ADDR]], align 2
26+
// CHECK-NEXT: [[TMP0:%.*]] = load <vscale x 32 x i1>, ptr [[ARG_ADDR]], align 2
27+
// CHECK-NEXT: [[CALL:%.*]] = call <vscale x 32 x i1> @_Z4bar210svboolx2_t(<vscale x 32 x i1> [[TMP0]])
28+
// CHECK-NEXT: ret <vscale x 32 x i1> [[CALL]]
29+
//
30+
__clang_svboolx2_t foo3(__clang_svboolx2_t arg) { return bar2(arg); }
31+

clang/test/CodeGen/svboolx4_t.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2+
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 -S -emit-llvm -o - %s | FileCheck %s
3+
4+
// CHECK-LABEL: @_Z3foo10svboolx4_t(
5+
// CHECK-NEXT: entry:
6+
// CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca <vscale x 64 x i1>, align 2
7+
// CHECK-NEXT: store <vscale x 64 x i1> [[ARG:%.*]], ptr [[ARG_ADDR]], align 2
8+
// CHECK-NEXT: [[TMP0:%.*]] = load <vscale x 64 x i1>, ptr [[ARG_ADDR]], align 2
9+
// CHECK-NEXT: ret <vscale x 64 x i1> [[TMP0]]
10+
//
11+
__clang_svboolx4_t foo(__clang_svboolx4_t arg) { return arg; }
12+
13+
__clang_svboolx4_t bar();
14+
// CHECK-LABEL: @_Z4foo2v(
15+
// CHECK-NEXT: entry:
16+
// CHECK-NEXT: [[CALL:%.*]] = call <vscale x 64 x i1> @_Z3barv()
17+
// CHECK-NEXT: ret <vscale x 64 x i1> [[CALL]]
18+
//
19+
__clang_svboolx4_t foo2() { return bar(); }
20+
21+
__clang_svboolx4_t bar2(__clang_svboolx4_t);
22+
// CHECK-LABEL: @_Z4foo310svboolx4_t(
23+
// CHECK-NEXT: entry:
24+
// CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca <vscale x 64 x i1>, align 2
25+
// CHECK-NEXT: store <vscale x 64 x i1> [[ARG:%.*]], ptr [[ARG_ADDR]], align 2
26+
// CHECK-NEXT: [[TMP0:%.*]] = load <vscale x 64 x i1>, ptr [[ARG_ADDR]], align 2
27+
// CHECK-NEXT: [[CALL:%.*]] = call <vscale x 64 x i1> @_Z4bar210svboolx4_t(<vscale x 64 x i1> [[TMP0]])
28+
// CHECK-NEXT: ret <vscale x 64 x i1> [[CALL]]
29+
//
30+
__clang_svboolx4_t foo3(__clang_svboolx4_t arg) { return bar2(arg); }
31+

clang/test/CodeGenCXX/aarch64-mangle-sve-vectors.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,7 @@ void f46(S<__clang_svbfloat16x2_t>) {}
108108
void f47(S<__clang_svbfloat16x3_t>) {}
109109
// CHECK: _Z3f481SI14svbfloat16x4_tE
110110
void f48(S<__clang_svbfloat16x4_t>) {}
111+
// CHECK: _Z3f491SI10svboolx2_tE
112+
void f49(S<__clang_svboolx2_t>) {}
113+
// CHECK: _Z3f501SI10svboolx4_tE
114+
void f50(S<__clang_svboolx4_t>) {}

clang/utils/TableGen/SveEmitter.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1140,7 +1140,9 @@ void SVEEmitter::createHeader(raw_ostream &OS) {
11401140
OS << "typedef __clang_svfloat16x4_t svfloat16x4_t;\n";
11411141
OS << "typedef __clang_svfloat32x4_t svfloat32x4_t;\n";
11421142
OS << "typedef __clang_svfloat64x4_t svfloat64x4_t;\n";
1143-
OS << "typedef __SVBool_t svbool_t;\n\n";
1143+
OS << "typedef __SVBool_t svbool_t;\n";
1144+
OS << "typedef __clang_svboolx2_t svboolx2_t;\n";
1145+
OS << "typedef __clang_svboolx4_t svboolx4_t;\n\n";
11441146

11451147
OS << "typedef __clang_svbfloat16x2_t svbfloat16x2_t;\n";
11461148
OS << "typedef __clang_svbfloat16x3_t svbfloat16x3_t;\n";

0 commit comments

Comments
 (0)