Skip to content

Commit 781b135

Browse files
authored
[clang] Introduce SemaX86 (#93098)
This patch moves `Sema` functions that are specific for x86 into the new `SemaX86` class. This continues previous efforts to split `Sema` up. Additional context can be found in #84184 and #92682.
1 parent d811708 commit 781b135

File tree

6 files changed

+960
-861
lines changed

6 files changed

+960
-861
lines changed

clang/include/clang/Sema/Sema.h

+7-10
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ class SemaOpenMP;
177177
class SemaPseudoObject;
178178
class SemaRISCV;
179179
class SemaSYCL;
180+
class SemaX86;
180181
class StandardConversionSequence;
181182
class Stmt;
182183
class StringLiteral;
@@ -1037,6 +1038,11 @@ class Sema final : public SemaBase {
10371038
return *SYCLPtr;
10381039
}
10391040

1041+
SemaX86 &X86() {
1042+
assert(X86Ptr);
1043+
return *X86Ptr;
1044+
}
1045+
10401046
/// Source of additional semantic information.
10411047
IntrusiveRefCntPtr<ExternalSemaSource> ExternalSource;
10421048

@@ -1076,6 +1082,7 @@ class Sema final : public SemaBase {
10761082
std::unique_ptr<SemaPseudoObject> PseudoObjectPtr;
10771083
std::unique_ptr<SemaRISCV> RISCVPtr;
10781084
std::unique_ptr<SemaSYCL> SYCLPtr;
1085+
std::unique_ptr<SemaX86> X86Ptr;
10791086

10801087
///@}
10811088

@@ -2122,16 +2129,6 @@ class Sema final : public SemaBase {
21222129
CallExpr *TheCall);
21232130
bool CheckMipsBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall);
21242131
bool CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
2125-
bool CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall);
2126-
bool CheckX86BuiltinGatherScatterScale(unsigned BuiltinID, CallExpr *TheCall);
2127-
bool CheckX86BuiltinTileArguments(unsigned BuiltinID, CallExpr *TheCall);
2128-
bool CheckX86BuiltinTileArgumentsRange(CallExpr *TheCall,
2129-
ArrayRef<int> ArgNums);
2130-
bool CheckX86BuiltinTileDuplicate(CallExpr *TheCall, ArrayRef<int> ArgNums);
2131-
bool CheckX86BuiltinTileRangeAndDuplicate(CallExpr *TheCall,
2132-
ArrayRef<int> ArgNums);
2133-
bool CheckX86BuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
2134-
CallExpr *TheCall);
21352132
bool CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
21362133
CallExpr *TheCall);
21372134
bool CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);

clang/include/clang/Sema/SemaX86.h

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
//===----- SemaX86.h ------- X86 target-specific routines -----*- C++ -*---===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
/// \file
9+
/// This file declares semantic analysis functions specific to X86.
10+
///
11+
//===----------------------------------------------------------------------===//
12+
13+
#ifndef LLVM_CLANG_SEMA_SEMAX86_H
14+
#define LLVM_CLANG_SEMA_SEMAX86_H
15+
16+
#include "clang/AST/Expr.h"
17+
#include "clang/Basic/LLVM.h"
18+
#include "clang/Basic/TargetInfo.h"
19+
#include "clang/Sema/SemaBase.h"
20+
21+
namespace clang {
22+
class SemaX86 : public SemaBase {
23+
public:
24+
SemaX86(Sema &S);
25+
26+
bool CheckBuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall);
27+
bool CheckBuiltinGatherScatterScale(unsigned BuiltinID, CallExpr *TheCall);
28+
bool CheckBuiltinTileArguments(unsigned BuiltinID, CallExpr *TheCall);
29+
bool CheckBuiltinTileArgumentsRange(CallExpr *TheCall, ArrayRef<int> ArgNums);
30+
bool CheckBuiltinTileDuplicate(CallExpr *TheCall, ArrayRef<int> ArgNums);
31+
bool CheckBuiltinTileRangeAndDuplicate(CallExpr *TheCall,
32+
ArrayRef<int> ArgNums);
33+
bool CheckBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID,
34+
CallExpr *TheCall);
35+
};
36+
} // namespace clang
37+
38+
#endif // LLVM_CLANG_SEMA_SEMAX86_H

clang/lib/Sema/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ add_clang_library(clangSema
7171
SemaTemplateInstantiateDecl.cpp
7272
SemaTemplateVariadic.cpp
7373
SemaType.cpp
74+
SemaX86.cpp
7475
TypeLocBuilder.cpp
7576

7677
DEPENDS

clang/lib/Sema/Sema.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#include "clang/Sema/SemaPseudoObject.h"
5353
#include "clang/Sema/SemaRISCV.h"
5454
#include "clang/Sema/SemaSYCL.h"
55+
#include "clang/Sema/SemaX86.h"
5556
#include "clang/Sema/TemplateDeduction.h"
5657
#include "clang/Sema/TemplateInstCallback.h"
5758
#include "clang/Sema/TypoCorrection.h"
@@ -215,6 +216,7 @@ Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
215216
PseudoObjectPtr(std::make_unique<SemaPseudoObject>(*this)),
216217
RISCVPtr(std::make_unique<SemaRISCV>(*this)),
217218
SYCLPtr(std::make_unique<SemaSYCL>(*this)),
219+
X86Ptr(std::make_unique<SemaX86>(*this)),
218220
MSPointerToMemberRepresentationMethod(
219221
LangOpts.getMSPointerToMemberRepresentationMethod()),
220222
MSStructPragmaOn(false), VtorDispStack(LangOpts.getVtorDispMode()),

0 commit comments

Comments
 (0)