Skip to content

Commit 4ee7897

Browse files
committed
Merge from 'main' to 'sycl-web' (38 commits)
CONFLICT (content): Merge conflict in clang/lib/Basic/Targets/NVPTX.cpp
2 parents 823b0e3 + 631c6e8 commit 4ee7897

File tree

123 files changed

+2728
-1529
lines changed

Some content is hidden

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

123 files changed

+2728
-1529
lines changed

.github/workflows/llvm-project-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ jobs:
9696
# This should be a no-op for non-mac OSes
9797
PKG_CONFIG_PATH: /usr/local/Homebrew/Library/Homebrew/os/mac/pkgconfig//12
9898
with:
99-
cmake_args: '-GNinja -DLLVM_ENABLE_PROJECTS="${{ inputs.projects }}" -DCMAKE_BUILD_TYPE=Release -DLLDB_INCLUDE_TESTS=OFF -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache ${{ inputs.extra_cmake_args }}'
99+
cmake_args: '-GNinja -DLLVM_ENABLE_PROJECTS="${{ inputs.projects }}" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLDB_INCLUDE_TESTS=OFF -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache ${{ inputs.extra_cmake_args }}'
100100
build_target: '${{ inputs.build_target }}'
101101

102102
- name: Build and Test libclc

clang/docs/ReleaseNotes.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -973,6 +973,9 @@ CUDA/HIP Language Changes
973973
CUDA Support
974974
^^^^^^^^^^^^
975975

976+
- Clang now supports CUDA SDK up to 12.3
977+
- Added support for sm_90a
978+
976979
AIX Support
977980
^^^^^^^^^^^
978981

clang/include/clang/Basic/BuiltinsNVPTX.def

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
#pragma push_macro("SM_87")
2727
#pragma push_macro("SM_89")
2828
#pragma push_macro("SM_90")
29-
#define SM_90 "sm_90"
29+
#pragma push_macro("SM_90a")
30+
#define SM_90a "sm_90a"
31+
#define SM_90 "sm_90|" SM_90a
3032
#define SM_89 "sm_89|" SM_90
3133
#define SM_87 "sm_87|" SM_89
3234
#define SM_86 "sm_86|" SM_87
@@ -56,7 +58,11 @@
5658
#pragma push_macro("PTX78")
5759
#pragma push_macro("PTX80")
5860
#pragma push_macro("PTX81")
59-
#define PTX81 "ptx81"
61+
#pragma push_macro("PTX82")
62+
#pragma push_macro("PTX83")
63+
#define PTX83 "ptx83"
64+
#define PTX82 "ptx82|" PTX83
65+
#define PTX81 "ptx81|" PTX82
6066
#define PTX80 "ptx80|" PTX81
6167
#define PTX78 "ptx78|" PTX80
6268
#define PTX77 "ptx77|" PTX78
@@ -2680,6 +2686,7 @@ TARGET_BUILTIN(__nvvm_getctarank_shared_cluster, "iv*3", "", AND(SM_90,PTX78))
26802686
#pragma pop_macro("SM_87")
26812687
#pragma pop_macro("SM_89")
26822688
#pragma pop_macro("SM_90")
2689+
#pragma pop_macro("SM_90a")
26832690
#pragma pop_macro("PTX42")
26842691
#pragma pop_macro("PTX60")
26852692
#pragma pop_macro("PTX61")
@@ -2697,3 +2704,5 @@ TARGET_BUILTIN(__nvvm_getctarank_shared_cluster, "iv*3", "", AND(SM_90,PTX78))
26972704
#pragma pop_macro("PTX78")
26982705
#pragma pop_macro("PTX80")
26992706
#pragma pop_macro("PTX81")
2707+
#pragma pop_macro("PTX82")
2708+
#pragma pop_macro("PTX83")

clang/include/clang/Basic/Cuda.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@ enum class CudaVersion {
3939
CUDA_118,
4040
CUDA_120,
4141
CUDA_121,
42-
FULLY_SUPPORTED = CUDA_118,
42+
CUDA_122,
43+
CUDA_123,
44+
FULLY_SUPPORTED = CUDA_123,
4345
PARTIALLY_SUPPORTED =
44-
CUDA_121, // Partially supported. Proceed with a warning.
46+
CUDA_123, // Partially supported. Proceed with a warning.
4547
NEW = 10000, // Too new. Issue a warning, but allow using it.
4648
};
4749
const char *CudaVersionToString(CudaVersion V);
@@ -71,6 +73,7 @@ enum class CudaArch {
7173
SM_87,
7274
SM_89,
7375
SM_90,
76+
SM_90a,
7477
GFX600,
7578
GFX601,
7679
GFX602,

clang/include/clang/Basic/arm_sve.td

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1935,16 +1935,25 @@ def SVBGRP : SInst<"svbgrp[_{d}]", "ddd", "UcUsUiUl", MergeNone, "aarch64_sv
19351935
def SVBGRP_N : SInst<"svbgrp[_n_{d}]", "dda", "UcUsUiUl", MergeNone, "aarch64_sve_bgrp_x">;
19361936
}
19371937

1938-
let TargetGuard = "sve2p1" in {
1939-
def SVFCLAMP : SInst<"svclamp[_{d}]", "dddd", "hfd", MergeNone, "aarch64_sve_fclamp", [], []>;
1938+
let TargetGuard = "sve2p1|sme" in {
1939+
def SVPSEL_B : SInst<"svpsel_lane_b8", "PPPm", "Pc", MergeNone, "", [IsStreamingCompatible], []>;
1940+
def SVPSEL_H : SInst<"svpsel_lane_b16", "PPPm", "Ps", MergeNone, "", [IsStreamingCompatible], []>;
1941+
def SVPSEL_S : SInst<"svpsel_lane_b32", "PPPm", "Pi", MergeNone, "", [IsStreamingCompatible], []>;
1942+
def SVPSEL_D : SInst<"svpsel_lane_b64", "PPPm", "Pl", MergeNone, "", [IsStreamingCompatible], []>;
1943+
def SVPSEL_COUNT_ALIAS_B : SInst<"svpsel_lane_c8", "}}Pm", "Pc", MergeNone, "", [IsStreamingCompatible], []>;
1944+
def SVPSEL_COUNT_ALIAS_H : SInst<"svpsel_lane_c16", "}}Pm", "Ps", MergeNone, "", [IsStreamingCompatible], []>;
1945+
def SVPSEL_COUNT_ALIAS_S : SInst<"svpsel_lane_c32", "}}Pm", "Pi", MergeNone, "", [IsStreamingCompatible], []>;
1946+
def SVPSEL_COUNT_ALIAS_D : SInst<"svpsel_lane_c64", "}}Pm", "Pl", MergeNone, "", [IsStreamingCompatible], []>;
1947+
}
19401948

1941-
def SVPEXT_SINGLE : SInst<"svpext_lane_{d}", "P}i", "QcQsQiQl", MergeNone, "aarch64_sve_pext", [], [ImmCheck<1, ImmCheck0_3>]>;
1942-
def SVPEXT_X2 : SInst<"svpext_lane_{d}_x2", "2.P}i", "QcQsQiQl", MergeNone, "aarch64_sve_pext_x2", [], [ImmCheck<1, ImmCheck0_1>]>;
1949+
let TargetGuard = "sve2p1|sme2" in {
1950+
//FIXME: Replace IsStreamingCompatible with IsStreamingOrHasSVE2p1 when available
1951+
def SVPEXT_SINGLE : SInst<"svpext_lane_{d}", "P}i", "QcQsQiQl", MergeNone, "aarch64_sve_pext", [IsStreamingCompatible], [ImmCheck<1, ImmCheck0_3>]>;
1952+
def SVPEXT_X2 : SInst<"svpext_lane_{d}_x2", "2.P}i", "QcQsQiQl", MergeNone, "aarch64_sve_pext_x2", [IsStreamingCompatible], [ImmCheck<1, ImmCheck0_1>]>;
1953+
}
19431954

1944-
def SVPSEL_COUNT_ALIAS_B : SInst<"svpsel_lane_c8", "}}Pm", "Pc", MergeNone, "", [], []>;
1945-
def SVPSEL_COUNT_ALIAS_H : SInst<"svpsel_lane_c16", "}}Pm", "Ps", MergeNone, "", [], []>;
1946-
def SVPSEL_COUNT_ALIAS_S : SInst<"svpsel_lane_c32", "}}Pm", "Pi", MergeNone, "", [], []>;
1947-
def SVPSEL_COUNT_ALIAS_D : SInst<"svpsel_lane_c64", "}}Pm", "Pl", MergeNone, "", [], []>;
1955+
let TargetGuard = "sve2p1" in {
1956+
def SVFCLAMP : SInst<"svclamp[_{d}]", "dddd", "hfd", MergeNone, "aarch64_sve_fclamp", [], []>;
19481957

19491958
def SVWHILEGE_COUNT : SInst<"svwhilege_{d}", "}lli", "QcQsQiQl", MergeNone, "aarch64_sve_whilege_{d}", [IsOverloadNone], [ImmCheck<2, ImmCheck2_4_Mul2>]>;
19501959
def SVWHILEGT_COUNT : SInst<"svwhilegt_{d}", "}lli", "QcQsQiQl", MergeNone, "aarch64_sve_whilegt_{d}", [IsOverloadNone], [ImmCheck<2, ImmCheck2_4_Mul2>]>;
@@ -2045,11 +2054,6 @@ let TargetGuard = "sve2p1" in {
20452054
def SVSCLAMP : SInst<"svclamp[_{d}]", "dddd", "csil", MergeNone, "aarch64_sve_sclamp", [], []>;
20462055
def SVUCLAMP : SInst<"svclamp[_{d}]", "dddd", "UcUsUiUl", MergeNone, "aarch64_sve_uclamp", [], []>;
20472056

2048-
def SVPSEL_B : SInst<"svpsel_lane_b8", "PPPm", "Pc", MergeNone, "", [], []>;
2049-
def SVPSEL_H : SInst<"svpsel_lane_b16", "PPPm", "Ps", MergeNone, "", [], []>;
2050-
def SVPSEL_S : SInst<"svpsel_lane_b32", "PPPm", "Pi", MergeNone, "", [], []>;
2051-
def SVPSEL_D : SInst<"svpsel_lane_b64", "PPPm", "Pl", MergeNone, "", [], []>;
2052-
20532057
def SVCNTP_COUNT : SInst<"svcntp_{d}", "n}i", "QcQsQiQl", MergeNone, "aarch64_sve_cntp_{d}", [IsOverloadNone], [ImmCheck<1, ImmCheck2_4_Mul2>]>;
20542058

20552059
defm SVREVD : SInstZPZ<"svrevd", "csilUcUsUiUl", "aarch64_sve_revd">;

clang/lib/AST/Interp/Interp.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1619,7 +1619,11 @@ bool CastFloatingIntegral(InterpState &S, CodePtr OpPC) {
16191619
QualType Type = E->getType();
16201620

16211621
S.CCEDiag(E, diag::note_constexpr_overflow) << F.getAPFloat() << Type;
1622-
return S.noteUndefinedBehavior();
1622+
if (S.noteUndefinedBehavior()) {
1623+
S.Stk.push<T>(T(Result));
1624+
return true;
1625+
}
1626+
return false;
16231627
}
16241628

16251629
S.Stk.push<T>(T(Result));

clang/lib/AST/Interp/InterpFrame.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ Pointer InterpFrame::getParamPointer(unsigned Off) {
228228
SourceInfo InterpFrame::getSource(CodePtr PC) const {
229229
// Implicitly created functions don't have any code we could point at,
230230
// so return the call site.
231-
if (Func && Func->getDecl()->isImplicit() && Caller)
231+
if (Func && (!Func->hasBody() || Func->getDecl()->isImplicit()) && Caller)
232232
return Caller->getSource(RetPC);
233233

234234
return S.getSource(Func, PC);
@@ -243,7 +243,7 @@ SourceLocation InterpFrame::getLocation(CodePtr PC) const {
243243
}
244244

245245
SourceRange InterpFrame::getRange(CodePtr PC) const {
246-
if (Func && Func->getDecl()->isImplicit() && Caller)
246+
if (Func && (!Func->hasBody() || Func->getDecl()->isImplicit()) && Caller)
247247
return Caller->getRange(RetPC);
248248

249249
return S.getRange(Func, PC);

clang/lib/AST/RecordLayoutBuilder.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2943,8 +2943,8 @@ void MicrosoftRecordLayoutBuilder::layoutNonVirtualBase(
29432943
}
29442944

29452945
if (!FoundBase) {
2946-
if (MDCUsesEBO && BaseDecl->isEmpty()) {
2947-
assert(BaseLayout.getNonVirtualSize() == CharUnits::Zero());
2946+
if (MDCUsesEBO && BaseDecl->isEmpty() &&
2947+
(BaseLayout.getNonVirtualSize() == CharUnits::Zero())) {
29482948
BaseOffset = CharUnits::Zero();
29492949
} else {
29502950
// Otherwise, lay the base out at the end of the MDC.

clang/lib/Basic/Cuda.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ static const CudaVersionMapEntry CudaNameVersionMap[] = {
3939
CUDA_ENTRY(11, 8),
4040
CUDA_ENTRY(12, 0),
4141
CUDA_ENTRY(12, 1),
42+
CUDA_ENTRY(12, 2),
43+
CUDA_ENTRY(12, 3),
4244
{"", CudaVersion::NEW, llvm::VersionTuple(std::numeric_limits<int>::max())},
4345
{"unknown", CudaVersion::UNKNOWN, {}} // End of list tombstone.
4446
};
@@ -93,6 +95,7 @@ static const CudaArchToStringMap arch_names[] = {
9395
SM(87), // Jetson/Drive AGX Orin
9496
SM(89), // Ada Lovelace
9597
SM(90), // Hopper
98+
SM(90a), // Hopper
9699
GFX(600), // gfx600
97100
GFX(601), // gfx601
98101
GFX(602), // gfx602
@@ -209,6 +212,8 @@ CudaVersion MinVersionForCudaArch(CudaArch A) {
209212
case CudaArch::SM_89:
210213
case CudaArch::SM_90:
211214
return CudaVersion::CUDA_118;
215+
case CudaArch::SM_90a:
216+
return CudaVersion::CUDA_120;
212217
default:
213218
llvm_unreachable("invalid enum");
214219
}

clang/lib/Basic/Targets/NVPTX.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,13 +266,16 @@ void NVPTXTargetInfo::getTargetDefines(const LangOptions &Opts,
266266
case CudaArch::SM_89:
267267
return "890";
268268
case CudaArch::SM_90:
269+
case CudaArch::SM_90a:
269270
return "900";
270271
}
271272
llvm_unreachable("unhandled CudaArch");
272273
}();
273274

274275
if (Opts.SYCLIsDevice) {
275276
Builder.defineMacro("__SYCL_CUDA_ARCH__", CUDAArchCode);
277+
} else if (GPU == CudaArch::SM_90a) {
278+
Builder.defineMacro("__CUDA_ARCH_FEAT_SM90_ALL", "1");
276279
} else {
277280
Builder.defineMacro("__CUDA_ARCH__", CUDAArchCode);
278281
}

0 commit comments

Comments
 (0)