Skip to content

Commit c49ff5e

Browse files
committed
fixup: use SMEAttrs class
1 parent 3b5451c commit c49ff5e

File tree

9 files changed

+40
-30
lines changed

9 files changed

+40
-30
lines changed

clang/include/clang/Sema/Sema.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13832,16 +13832,8 @@ class Sema final {
1383213832
FormatArgumentPassingKind ArgPassingKind;
1383313833
};
1383413834

13835-
enum ArmStreamingType {
13836-
ArmNonStreaming,
13837-
ArmStreaming,
13838-
ArmStreamingCompatible,
13839-
ArmStreamingOrSVE2p1
13840-
};
13841-
1384213835
static bool getFormatStringInfo(const FormatAttr *Format, bool IsCXXMember,
1384313836
bool IsVariadic, FormatStringInfo *FSI);
13844-
static ArmStreamingType getArmStreamingFnType(const FunctionDecl *FD);
1384513837

1384613838
private:
1384713839
void CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,

clang/lib/CodeGen/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ set(LLVM_LINK_COMPONENTS
3131
Target
3232
TargetParser
3333
TransformUtils
34+
AArch64Utils
3435
)
3536

3637
# Workaround for MSVC ARM64 performance regression:
@@ -151,5 +152,4 @@ add_clang_library(clangCodeGen
151152
clangFrontend
152153
clangLex
153154
clangSerialization
154-
clangSema
155155
)

clang/lib/CodeGen/Targets/AArch64.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "ABIInfoImpl.h"
1010
#include "TargetInfo.h"
1111
#include "clang/Basic/DiagnosticFrontend.h"
12-
#include "clang/Sema/Sema.h"
12+
#include "llvm/Support/AArch64SMEAttributes.h"
1313

1414
using namespace clang;
1515
using namespace clang::CodeGen;
@@ -827,13 +827,24 @@ void AArch64TargetCodeGenInfo::checkFunctionCallABI(
827827
if (!Callee->hasAttr<AlwaysInlineAttr>())
828828
return;
829829

830-
auto CalleeStreamingMode = Sema::getArmStreamingFnType(Callee);
831-
auto CallerStreamingMode = Sema::getArmStreamingFnType(Caller);
830+
auto GetSMEAttrs = [](const FunctionDecl *F) {
831+
llvm::SMEAttrs FAttrs;
832+
if (F->hasAttr<ArmLocallyStreamingAttr>())
833+
FAttrs.set(llvm::SMEAttrs::Mask::SM_Enabled);
834+
if (const auto *T = F->getType()->getAs<FunctionProtoType>()) {
835+
if (T->getAArch64SMEAttributes() & FunctionType::SME_PStateSMEnabledMask)
836+
FAttrs.set(llvm::SMEAttrs::Mask::SM_Enabled);
837+
if (T->getAArch64SMEAttributes() &
838+
FunctionType::SME_PStateSMCompatibleMask)
839+
FAttrs.set(llvm::SMEAttrs::Mask::SM_Compatible);
840+
}
841+
return FAttrs;
842+
};
843+
844+
auto CalleeAttrs = GetSMEAttrs(Callee);
845+
auto CallerAttrs = GetSMEAttrs(Caller);
832846

833-
// The caller can inline the callee if their streaming modes match or the
834-
// callee is streaming compatible
835-
if (CalleeStreamingMode != CallerStreamingMode &&
836-
CalleeStreamingMode != Sema::ArmStreamingCompatible)
847+
if (CallerAttrs.requiresSMChange(CalleeAttrs, true))
837848
CGM.getDiags().Report(CallLoc,
838849
diag::err_function_always_inline_attribute_mismatch)
839850
<< Caller->getDeclName() << Callee->getDeclName() << "streaming";

clang/lib/Sema/SemaChecking.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2998,6 +2998,13 @@ static QualType getNeonEltType(NeonTypeFlags Flags, ASTContext &Context,
29982998
llvm_unreachable("Invalid NeonTypeFlag!");
29992999
}
30003000

3001+
enum ArmStreamingType {
3002+
ArmNonStreaming,
3003+
ArmStreaming,
3004+
ArmStreamingCompatible,
3005+
ArmStreamingOrSVE2p1
3006+
};
3007+
30013008
bool Sema::ParseSVEImmChecks(
30023009
CallExpr *TheCall, SmallVector<std::tuple<int, int, int>, 3> &ImmChecks) {
30033010
// Perform all the immediate checks for this builtin call.
@@ -3138,7 +3145,7 @@ bool Sema::ParseSVEImmChecks(
31383145
return HasError;
31393146
}
31403147

3141-
Sema::ArmStreamingType Sema::getArmStreamingFnType(const FunctionDecl *FD) {
3148+
static ArmStreamingType getArmStreamingFnType(const FunctionDecl *FD) {
31423149
if (FD->hasAttr<ArmLocallyStreamingAttr>())
31433150
return ArmStreaming;
31443151
if (const auto *T = FD->getType()->getAs<FunctionProtoType>()) {
@@ -3152,31 +3159,31 @@ Sema::ArmStreamingType Sema::getArmStreamingFnType(const FunctionDecl *FD) {
31523159

31533160
static void checkArmStreamingBuiltin(Sema &S, CallExpr *TheCall,
31543161
const FunctionDecl *FD,
3155-
Sema::ArmStreamingType BuiltinType) {
3156-
Sema::ArmStreamingType FnType = Sema::getArmStreamingFnType(FD);
3157-
if (BuiltinType == Sema::ArmStreamingOrSVE2p1) {
3162+
ArmStreamingType BuiltinType) {
3163+
ArmStreamingType FnType = getArmStreamingFnType(FD);
3164+
if (BuiltinType == ArmStreamingOrSVE2p1) {
31583165
// Check intrinsics that are available in [sve2p1 or sme/sme2].
31593166
llvm::StringMap<bool> CallerFeatureMap;
31603167
S.Context.getFunctionFeatureMap(CallerFeatureMap, FD);
31613168
if (Builtin::evaluateRequiredTargetFeatures("sve2p1", CallerFeatureMap))
3162-
BuiltinType = Sema::ArmStreamingCompatible;
3169+
BuiltinType = ArmStreamingCompatible;
31633170
else
3164-
BuiltinType = Sema::ArmStreaming;
3171+
BuiltinType = ArmStreaming;
31653172
}
31663173

3167-
if (FnType == Sema::ArmStreaming && BuiltinType == Sema::ArmNonStreaming) {
3174+
if (FnType == ArmStreaming && BuiltinType == ArmNonStreaming) {
31683175
S.Diag(TheCall->getBeginLoc(), diag::warn_attribute_arm_sm_incompat_builtin)
31693176
<< TheCall->getSourceRange() << "streaming";
31703177
}
31713178

3172-
if (FnType == Sema::ArmStreamingCompatible &&
3173-
BuiltinType != Sema::ArmStreamingCompatible) {
3179+
if (FnType == ArmStreamingCompatible &&
3180+
BuiltinType != ArmStreamingCompatible) {
31743181
S.Diag(TheCall->getBeginLoc(), diag::warn_attribute_arm_sm_incompat_builtin)
31753182
<< TheCall->getSourceRange() << "streaming compatible";
31763183
return;
31773184
}
31783185

3179-
if (FnType == Sema::ArmNonStreaming && BuiltinType == Sema::ArmStreaming) {
3186+
if (FnType == ArmNonStreaming && BuiltinType == ArmStreaming) {
31803187
S.Diag(TheCall->getBeginLoc(), diag::warn_attribute_arm_sm_incompat_builtin)
31813188
<< TheCall->getSourceRange() << "non-streaming";
31823189
}

llvm/lib/Target/AArch64/AArch64ISelLowering.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515
#define LLVM_LIB_TARGET_AARCH64_AARCH64ISELLOWERING_H
1616

1717
#include "AArch64.h"
18-
#include "Utils/AArch64SMEAttributes.h"
1918
#include "llvm/CodeGen/CallingConvLower.h"
2019
#include "llvm/CodeGen/MachineFunction.h"
2120
#include "llvm/CodeGen/SelectionDAG.h"
2221
#include "llvm/CodeGen/TargetLowering.h"
2322
#include "llvm/IR/CallingConv.h"
2423
#include "llvm/IR/Instruction.h"
24+
#include "llvm/Support/AArch64SMEAttributes.h"
2525

2626
namespace llvm {
2727

llvm/lib/Target/AArch64/SMEABIPass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
#include "AArch64.h"
1616
#include "Utils/AArch64BaseInfo.h"
17-
#include "Utils/AArch64SMEAttributes.h"
1817
#include "llvm/ADT/StringRef.h"
1918
#include "llvm/IR/Constants.h"
2019
#include "llvm/IR/IRBuilder.h"
@@ -23,6 +22,7 @@
2322
#include "llvm/IR/IntrinsicsAArch64.h"
2423
#include "llvm/IR/LLVMContext.h"
2524
#include "llvm/InitializePasses.h"
25+
#include "llvm/Support/AArch64SMEAttributes.h"
2626
#include "llvm/Support/Debug.h"
2727
#include "llvm/Transforms/Utils/Cloning.h"
2828

llvm/lib/Target/AArch64/Utils/AArch64SMEAttributes.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "AArch64SMEAttributes.h"
9+
#include "llvm/Support/AArch64SMEAttributes.h"
1010
#include "llvm/IR/InstrTypes.h"
1111
#include <cassert>
1212

llvm/unittests/Target/AArch64/SMEAttributesTest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
#include "Utils/AArch64SMEAttributes.h"
21
#include "llvm/AsmParser/Parser.h"
32
#include "llvm/IR/Function.h"
43
#include "llvm/IR/Module.h"
4+
#include "llvm/Support/AArch64SMEAttributes.h"
55
#include "llvm/Support/SourceMgr.h"
66

77
#include "gtest/gtest.h"

0 commit comments

Comments
 (0)