Skip to content

Commit a1c59ac

Browse files
committed
Fixups
1 parent fdfc161 commit a1c59ac

File tree

3 files changed

+59
-123
lines changed

3 files changed

+59
-123
lines changed

clang/lib/CodeGen/Targets/AArch64.cpp

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,38 +1146,37 @@ void AArch64TargetCodeGenInfo::checkFunctionABI(
11461146
}
11471147
}
11481148

1149-
enum class ArmStreamingInlinability : uint8_t {
1149+
enum ArmSMEInlinability : uint8_t {
11501150
Ok = 0,
1151-
IncompatibleStreamingModes = 1,
11521151
MismatchedStreamingCompatibility = 1 << 1,
1153-
CalleeHasNewZA = 1 << 2,
1154-
LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/CalleeHasNewZA),
1152+
IncompatibleStreamingModes = 1,
1153+
CalleeRequiresNewZA = 1 << 2,
1154+
LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/CalleeRequiresNewZA),
11551155
};
11561156

1157-
/// Determines if there are any streaming ABI issues with inlining \p Callee
1158-
/// into \p Caller. Returns the issues in the ArmStreamingInlinability bit enum
1159-
/// (multiple bits can be set).
1160-
static ArmStreamingInlinability
1161-
GetArmStreamingInlinability(const FunctionDecl *Caller,
1162-
const FunctionDecl *Callee) {
1157+
/// Determines if there are any Arm SME ABI issues with inlining \p Callee into
1158+
/// \p Caller. Returns the issues in the ArmSMEInlinability bit enum (multiple
1159+
/// bits can be set).
1160+
static ArmSMEInlinability GetArmSMEInlinability(const FunctionDecl *Caller,
1161+
const FunctionDecl *Callee) {
11631162
bool CallerIsStreaming =
11641163
IsArmStreamingFunction(Caller, /*IncludeLocallyStreaming=*/true);
11651164
bool CalleeIsStreaming =
11661165
IsArmStreamingFunction(Callee, /*IncludeLocallyStreaming=*/true);
11671166
bool CallerIsStreamingCompatible = isStreamingCompatible(Caller);
11681167
bool CalleeIsStreamingCompatible = isStreamingCompatible(Callee);
11691168

1170-
ArmStreamingInlinability Inlinability = ArmStreamingInlinability::Ok;
1169+
ArmSMEInlinability Inlinability = ArmSMEInlinability::Ok;
11711170

11721171
if (!CalleeIsStreamingCompatible &&
11731172
(CallerIsStreaming != CalleeIsStreaming || CallerIsStreamingCompatible)) {
1174-
Inlinability |= ArmStreamingInlinability::MismatchedStreamingCompatibility;
1173+
Inlinability |= ArmSMEInlinability::MismatchedStreamingCompatibility;
11751174
if (CalleeIsStreaming)
1176-
Inlinability |= ArmStreamingInlinability::IncompatibleStreamingModes;
1175+
Inlinability |= ArmSMEInlinability::IncompatibleStreamingModes;
11771176
}
11781177
if (auto *NewAttr = Callee->getAttr<ArmNewAttr>())
11791178
if (NewAttr->isNewZA())
1180-
Inlinability |= ArmStreamingInlinability::CalleeHasNewZA;
1179+
Inlinability |= ArmSMEInlinability::CalleeRequiresNewZA;
11811180

11821181
return Inlinability;
11831182
}
@@ -1188,18 +1187,18 @@ void AArch64TargetCodeGenInfo::checkFunctionCallABIStreaming(
11881187
if (!Caller || !Callee || !Callee->hasAttr<AlwaysInlineAttr>())
11891188
return;
11901189

1191-
ArmStreamingInlinability Inlinability =
1192-
GetArmStreamingInlinability(Caller, Callee);
1190+
ArmSMEInlinability Inlinability = GetArmSMEInlinability(Caller, Callee);
11931191

1194-
if (bool(Inlinability &
1195-
ArmStreamingInlinability::MismatchedStreamingCompatibility))
1192+
if ((Inlinability & ArmSMEInlinability::MismatchedStreamingCompatibility) !=
1193+
0)
11961194
CGM.getDiags().Report(
1197-
CallLoc, bool(Inlinability &
1198-
ArmStreamingInlinability::IncompatibleStreamingModes)
1199-
? diag::err_function_always_inline_attribute_mismatch
1200-
: diag::warn_function_always_inline_attribute_mismatch)
1195+
CallLoc,
1196+
(Inlinability & ArmSMEInlinability::IncompatibleStreamingModes) != 0
1197+
? diag::err_function_always_inline_attribute_mismatch
1198+
: diag::warn_function_always_inline_attribute_mismatch)
12011199
<< Caller->getDeclName() << Callee->getDeclName() << "streaming";
1202-
if (bool(Inlinability & ArmStreamingInlinability::CalleeHasNewZA))
1200+
1201+
if ((Inlinability & ArmSMEInlinability::CalleeRequiresNewZA) != 0)
12031202
CGM.getDiags().Report(CallLoc, diag::err_function_always_inline_new_za)
12041203
<< Callee->getDeclName();
12051204
}
@@ -1238,8 +1237,7 @@ void AArch64TargetCodeGenInfo::checkFunctionCallABI(CodeGenModule &CGM,
12381237
bool AArch64TargetCodeGenInfo::wouldInliningViolateFunctionCallABI(
12391238
const FunctionDecl *Caller, const FunctionDecl *Callee) const {
12401239
return Caller && Callee &&
1241-
GetArmStreamingInlinability(Caller, Callee) !=
1242-
ArmStreamingInlinability::Ok;
1240+
GetArmSMEInlinability(Caller, Callee) != ArmSMEInlinability::Ok;
12431241
}
12441242

12451243
void AArch64ABIInfo::appendAttributeMangling(TargetClonesAttr *Attr,

clang/test/CodeGen/AArch64/sme-flatten-streaming-attrs.c renamed to clang/test/CodeGen/AArch64/sme-inline-callees-streaming-attrs.c

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
1-
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -emit-llvm -target-feature +sme %s -o - | FileCheck %s
1+
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -emit-llvm -target-feature +sme %s -DUSE_FLATTEN -o - | FileCheck %s
2+
// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -emit-llvm -target-feature +sme %s -DUSE_ALWAYS_INLINE_STMT -o - | FileCheck %s
23

34
// REQUIRES: aarch64-registered-target
45

56
extern void was_inlined(void);
67

7-
#define __flatten __attribute__((flatten))
8+
#if defined(USE_FLATTEN)
9+
#define FN_ATTR __attribute__((flatten))
10+
#define STMT_ATTR
11+
#elif defined(USE_ALWAYS_INLINE_STMT)
12+
#define FN_ATTR
13+
#define STMT_ATTR [[clang::always_inline]]
14+
#else
15+
#error Expected USE_FLATTEN or USE_ALWAYS_INLINE_STMT to be defined.
16+
#endif
17+
818
void fn(void) { was_inlined(); }
919
void fn_streaming_compatible(void) __arm_streaming_compatible { was_inlined(); }
1020
void fn_streaming(void) __arm_streaming { was_inlined(); }
1121
__arm_locally_streaming void fn_locally_streaming(void) { was_inlined(); }
1222
__arm_new("za") void fn_streaming_new_za(void) __arm_streaming { was_inlined(); }
1323

14-
__flatten
24+
FN_ATTR
1525
void caller(void) {
16-
fn();
17-
fn_streaming_compatible();
18-
fn_streaming();
19-
fn_locally_streaming();
20-
fn_streaming_new_za();
26+
STMT_ATTR fn();
27+
STMT_ATTR fn_streaming_compatible();
28+
STMT_ATTR fn_streaming();
29+
STMT_ATTR fn_locally_streaming();
30+
STMT_ATTR fn_streaming_new_za();
2131
}
2232
// CHECK-LABEL: void @caller()
2333
// CHECK-NEXT: entry:
@@ -27,12 +37,12 @@ void caller(void) {
2737
// CHECK-NEXT: call void @fn_locally_streaming
2838
// CHECK-NEXT: call void @fn_streaming_new_za
2939

30-
__flatten void caller_streaming_compatible(void) __arm_streaming_compatible {
31-
fn();
32-
fn_streaming_compatible();
33-
fn_streaming();
34-
fn_locally_streaming();
35-
fn_streaming_new_za();
40+
FN_ATTR void caller_streaming_compatible(void) __arm_streaming_compatible {
41+
STMT_ATTR fn();
42+
STMT_ATTR fn_streaming_compatible();
43+
STMT_ATTR fn_streaming();
44+
STMT_ATTR fn_locally_streaming();
45+
STMT_ATTR fn_streaming_new_za();
3646
}
3747
// CHECK-LABEL: void @caller_streaming_compatible()
3848
// CHECK-NEXT: entry:
@@ -42,12 +52,12 @@ __flatten void caller_streaming_compatible(void) __arm_streaming_compatible {
4252
// CHECK-NEXT: call void @fn_locally_streaming
4353
// CHECK-NEXT: call void @fn_streaming_new_za
4454

45-
__flatten void caller_streaming(void) __arm_streaming {
46-
fn();
47-
fn_streaming_compatible();
48-
fn_streaming();
49-
fn_locally_streaming();
50-
fn_streaming_new_za();
55+
FN_ATTR void caller_streaming(void) __arm_streaming {
56+
STMT_ATTR fn();
57+
STMT_ATTR fn_streaming_compatible();
58+
STMT_ATTR fn_streaming();
59+
STMT_ATTR fn_locally_streaming();
60+
STMT_ATTR fn_streaming_new_za();
5161
}
5262
// CHECK-LABEL: void @caller_streaming()
5363
// CHECK-NEXT: entry:
@@ -57,13 +67,13 @@ __flatten void caller_streaming(void) __arm_streaming {
5767
// CHECK-NEXT: call void @was_inlined
5868
// CHECK-NEXT: call void @fn_streaming_new_za
5969

60-
__flatten __arm_locally_streaming
70+
FN_ATTR __arm_locally_streaming
6171
void caller_locally_streaming(void) {
62-
fn();
63-
fn_streaming_compatible();
64-
fn_streaming();
65-
fn_locally_streaming();
66-
fn_streaming_new_za();
72+
STMT_ATTR fn();
73+
STMT_ATTR fn_streaming_compatible();
74+
STMT_ATTR fn_streaming();
75+
STMT_ATTR fn_locally_streaming();
76+
STMT_ATTR fn_streaming_new_za();
6777
}
6878
// CHECK-LABEL: void @caller_locally_streaming()
6979
// CHECK-NEXT: entry:

clang/test/CodeGen/AArch64/sme-inline-stmt-streaming-attrs.c

Lines changed: 0 additions & 72 deletions
This file was deleted.

0 commit comments

Comments
 (0)