Skip to content

Commit b5d9eea

Browse files
authored
Merge branch 'main' into an/avx-masked-shuffles
2 parents 1c01f28 + 581b654 commit b5d9eea

File tree

172 files changed

+3410
-1396
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

172 files changed

+3410
-1396
lines changed

clang/cmake/modules/CMakeLists.txt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,19 @@ include(FindPrefixFromConfig)
88
# the usual CMake convention seems to be ${Project}Targets.cmake.
99
set(CLANG_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/clang" CACHE STRING
1010
"Path for CMake subdirectory for Clang (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/clang')")
11-
# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
12-
set(clang_cmake_builddir "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/clang")
1311

1412
# Keep this in sync with llvm/cmake/CMakeLists.txt!
1513
set(LLVM_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/llvm" CACHE STRING
1614
"Path for CMake subdirectory for LLVM (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/llvm')")
1715
# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
18-
string(REPLACE "${CMAKE_CFG_INTDIR}" "." llvm_cmake_builddir "${LLVM_LIBRARY_DIR}")
19-
set(llvm_cmake_builddir "${llvm_cmake_builddir}/cmake/llvm")
16+
string(REPLACE "${CMAKE_CFG_INTDIR}" "." llvm_builddir "${LLVM_LIBRARY_DIR}")
17+
set(llvm_cmake_builddir "${llvm_builddir}/cmake/llvm")
18+
if(CLANG_BUILT_STANDALONE)
19+
# CMAKE_INSTALL_PACKAGEDIR might be absolute, so don't reuse below.
20+
set(clang_cmake_builddir "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/clang")
21+
else()
22+
set(clang_cmake_builddir "${llvm_builddir}/cmake/clang")
23+
endif()
2024

2125
get_property(CLANG_EXPORTS GLOBAL PROPERTY CLANG_EXPORTS)
2226
export(TARGETS ${CLANG_EXPORTS} FILE ${clang_cmake_builddir}/ClangTargets.cmake)

clang/docs/ReleaseNotes.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,7 @@ X86 Support
518518
- Remove `[no-]evex512` feature request from intrinsics and builtins.
519519
- Change features `avx10.x-[256,512]` to `avx10.x`.
520520
- `-march=wildcatlake` is now supported.
521+
- `-march=novalake` is now supported.
521522

522523
Arm and AArch64 Support
523524
^^^^^^^^^^^^^^^^^^^^^^^

clang/docs/analyzer/checkers.rst

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3465,12 +3465,6 @@ Check for an out-of-bound pointer being returned to callers.
34653465
return x; // warn: undefined or garbage returned
34663466
}
34673467
3468-
3469-
alpha.security.cert
3470-
^^^^^^^^^^^^^^^^^^^
3471-
3472-
SEI CERT checkers which tries to find errors based on their `C coding rules <https://wiki.sei.cmu.edu/confluence/display/c/2+Rules>`_.
3473-
34743468
alpha.unix
34753469
^^^^^^^^^^
34763470

clang/include/clang/AST/TypeBase.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4378,8 +4378,6 @@ class ConstantMatrixType final : public MatrixType {
43784378
unsigned NumRows;
43794379
unsigned NumColumns;
43804380

4381-
static constexpr unsigned MaxElementsPerDimension = (1 << 20) - 1;
4382-
43834381
ConstantMatrixType(QualType MatrixElementType, unsigned NRows,
43844382
unsigned NColumns, QualType CanonElementType);
43854383

@@ -4398,16 +4396,6 @@ class ConstantMatrixType final : public MatrixType {
43984396
return getNumRows() * getNumColumns();
43994397
}
44004398

4401-
/// Returns true if \p NumElements is a valid matrix dimension.
4402-
static constexpr bool isDimensionValid(size_t NumElements) {
4403-
return NumElements > 0 && NumElements <= MaxElementsPerDimension;
4404-
}
4405-
4406-
/// Returns the maximum number of elements per dimension.
4407-
static constexpr unsigned getMaxElementsPerDimension() {
4408-
return MaxElementsPerDimension;
4409-
}
4410-
44114399
void Profile(llvm::FoldingSetNodeID &ID) {
44124400
Profile(ID, getElementType(), getNumRows(), getNumColumns(),
44134401
getTypeClass());

clang/include/clang/Basic/BuiltinsX86.td

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,23 +1359,17 @@ let Features = "avx512bw", Attributes = [NoThrow, Const, Constexpr, RequiredVect
13591359
def pshufb512 : X86Builtin<"_Vector<64, char>(_Vector<64, char>, _Vector<64, char>)">;
13601360
}
13611361

1362-
let Features = "avx512cd,avx512vl", Attributes = [NoThrow, Const, RequiredVectorWidth<128>] in {
1362+
let Features = "avx512cd,avx512vl", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<128>] in {
13631363
def vpconflictdi_128 : X86Builtin<"_Vector<2, long long int>(_Vector<2, long long int>)">;
1364-
}
1365-
1366-
let Features = "avx512cd,avx512vl", Attributes = [NoThrow, Const, RequiredVectorWidth<256>] in {
1367-
def vpconflictdi_256 : X86Builtin<"_Vector<4, long long int>(_Vector<4, long long int>)">;
1368-
}
1369-
1370-
let Features = "avx512cd,avx512vl", Attributes = [NoThrow, Const, RequiredVectorWidth<128>] in {
13711364
def vpconflictsi_128 : X86Builtin<"_Vector<4, int>(_Vector<4, int>)">;
13721365
}
13731366

1374-
let Features = "avx512cd,avx512vl", Attributes = [NoThrow, Const, RequiredVectorWidth<256>] in {
1367+
let Features = "avx512cd,avx512vl", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<256>] in {
1368+
def vpconflictdi_256 : X86Builtin<"_Vector<4, long long int>(_Vector<4, long long int>)">;
13751369
def vpconflictsi_256 : X86Builtin<"_Vector<8, int>(_Vector<8, int>)">;
13761370
}
13771371

1378-
let Features = "avx512cd", Attributes = [NoThrow, Const, RequiredVectorWidth<512>] in {
1372+
let Features = "avx512cd", Attributes = [NoThrow, Const, Constexpr, RequiredVectorWidth<512>] in {
13791373
def vpconflictdi_512 : X86Builtin<"_Vector<8, long long int>(_Vector<8, long long int>)">;
13801374
def vpconflictsi_512 : X86Builtin<"_Vector<16, int>(_Vector<16, int>)">;
13811375
}

clang/include/clang/Basic/LangOptions.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ ENUM_LANGOPT(RegisterStaticDestructors, RegisterStaticDestructorsKind, 2,
433433
LANGOPT(RegCall4, 1, 0, NotCompatible, "Set __regcall4 as a default calling convention to respect __regcall ABI v.4")
434434

435435
LANGOPT(MatrixTypes, 1, 0, NotCompatible, "Enable or disable the builtin matrix type")
436+
VALUE_LANGOPT(MaxMatrixDimension, 32, (1 << 20) - 1, NotCompatible, "maximum allowed matrix dimension")
436437

437438
LANGOPT(CXXAssumptions, 1, 1, NotCompatible, "Enable or disable codegen and compile-time checks for C++23's [[assume]] attribute")
438439

clang/include/clang/StaticAnalyzer/Checkers/Checkers.td

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,6 @@ def SecurityAlpha : Package<"security">, ParentPackage<Alpha>;
7676
def CERT : Package<"cert">, ParentPackage<Security>;
7777
def ENV : Package<"env">, ParentPackage<CERT>;
7878

79-
def CERTAlpha : Package<"cert">, ParentPackage<SecurityAlpha>;
80-
def POSAlpha : Package<"pos">, ParentPackage<CERTAlpha>;
81-
8279
def Unix : Package<"unix">;
8380
def UnixAlpha : Package<"unix">, ParentPackage<Alpha>;
8481
def CString : Package<"cstring">, ParentPackage<Unix>;

clang/lib/AST/ASTContext.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4712,8 +4712,8 @@ QualType ASTContext::getConstantMatrixType(QualType ElementTy, unsigned NumRows,
47124712

47134713
assert(MatrixType::isValidElementType(ElementTy) &&
47144714
"need a valid element type");
4715-
assert(ConstantMatrixType::isDimensionValid(NumRows) &&
4716-
ConstantMatrixType::isDimensionValid(NumColumns) &&
4715+
assert(NumRows > 0 && NumRows <= LangOpts.MaxMatrixDimension &&
4716+
NumColumns > 0 && NumColumns <= LangOpts.MaxMatrixDimension &&
47174717
"need valid matrix dimensions");
47184718
void *InsertPos = nullptr;
47194719
if (ConstantMatrixType *MTP = MatrixTypes.FindNodeOrInsertPos(ID, InsertPos))

clang/lib/AST/ByteCode/InterpBuiltin.cpp

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3101,6 +3101,33 @@ static bool interp__builtin_vec_set(InterpState &S, CodePtr OpPC,
31013101
return true;
31023102
}
31033103

3104+
static bool interp__builtin_ia32_vpconflict(InterpState &S, CodePtr OpPC,
3105+
const CallExpr *Call) {
3106+
assert(Call->getNumArgs() == 1);
3107+
3108+
QualType Arg0Type = Call->getArg(0)->getType();
3109+
const auto *VecT = Arg0Type->castAs<VectorType>();
3110+
PrimType ElemT = *S.getContext().classify(VecT->getElementType());
3111+
unsigned NumElems = VecT->getNumElements();
3112+
bool DestUnsigned = Call->getType()->isUnsignedIntegerOrEnumerationType();
3113+
const Pointer &Src = S.Stk.pop<Pointer>();
3114+
const Pointer &Dst = S.Stk.peek<Pointer>();
3115+
3116+
for (unsigned I = 0; I != NumElems; ++I) {
3117+
INT_TYPE_SWITCH_NO_BOOL(ElemT, {
3118+
APSInt ElemI = Src.elem<T>(I).toAPSInt();
3119+
APInt ConflictMask(ElemI.getBitWidth(), 0);
3120+
for (unsigned J = 0; J != I; ++J) {
3121+
APSInt ElemJ = Src.elem<T>(J).toAPSInt();
3122+
ConflictMask.setBitVal(J, ElemI == ElemJ);
3123+
}
3124+
Dst.elem<T>(I) = static_cast<T>(APSInt(ConflictMask, DestUnsigned));
3125+
});
3126+
}
3127+
Dst.initializeAllElements();
3128+
return true;
3129+
}
3130+
31043131
bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
31053132
uint32_t BuiltinID) {
31063133
if (!S.getASTContext().BuiltinInfo.isConstantEvaluated(BuiltinID))
@@ -3891,7 +3918,13 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call,
38913918
[](const APSInt &Lo, const APSInt &Hi, const APSInt &Amt) {
38923919
return llvm::APIntOps::fshr(Hi, Lo, Amt);
38933920
});
3894-
3921+
case X86::BI__builtin_ia32_vpconflictsi_128:
3922+
case X86::BI__builtin_ia32_vpconflictsi_256:
3923+
case X86::BI__builtin_ia32_vpconflictsi_512:
3924+
case X86::BI__builtin_ia32_vpconflictdi_128:
3925+
case X86::BI__builtin_ia32_vpconflictdi_256:
3926+
case X86::BI__builtin_ia32_vpconflictdi_512:
3927+
return interp__builtin_ia32_vpconflict(S, OpPC, Call);
38953928
case clang::X86::BI__builtin_ia32_blendpd:
38963929
case clang::X86::BI__builtin_ia32_blendpd256:
38973930
case clang::X86::BI__builtin_ia32_blendps:

clang/lib/AST/ExprConstant.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12179,6 +12179,37 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
1217912179

1218012180
return Success(APValue(ResultElements.data(), ResultElements.size()), E);
1218112181
}
12182+
case X86::BI__builtin_ia32_vpconflictsi_128:
12183+
case X86::BI__builtin_ia32_vpconflictsi_256:
12184+
case X86::BI__builtin_ia32_vpconflictsi_512:
12185+
case X86::BI__builtin_ia32_vpconflictdi_128:
12186+
case X86::BI__builtin_ia32_vpconflictdi_256:
12187+
case X86::BI__builtin_ia32_vpconflictdi_512: {
12188+
APValue Source;
12189+
12190+
if (!EvaluateAsRValue(Info, E->getArg(0), Source))
12191+
return false;
12192+
12193+
unsigned SourceLen = Source.getVectorLength();
12194+
SmallVector<APValue, 32> ResultElements;
12195+
ResultElements.reserve(SourceLen);
12196+
12197+
const auto *VecT = E->getType()->castAs<VectorType>();
12198+
bool DestUnsigned =
12199+
VecT->getElementType()->isUnsignedIntegerOrEnumerationType();
12200+
12201+
for (unsigned I = 0; I != SourceLen; ++I) {
12202+
const APValue &EltI = Source.getVectorElt(I);
12203+
12204+
APInt ConflictMask(EltI.getInt().getBitWidth(), 0);
12205+
for (unsigned J = 0; J != I; ++J) {
12206+
const APValue &EltJ = Source.getVectorElt(J);
12207+
ConflictMask.setBitVal(J, EltI.getInt() == EltJ.getInt());
12208+
}
12209+
ResultElements.push_back(APValue(APSInt(ConflictMask, DestUnsigned)));
12210+
}
12211+
return Success(APValue(ResultElements.data(), ResultElements.size()), E);
12212+
}
1218212213
case X86::BI__builtin_ia32_blendpd:
1218312214
case X86::BI__builtin_ia32_blendpd256:
1218412215
case X86::BI__builtin_ia32_blendps:

0 commit comments

Comments
 (0)