Skip to content

Commit 72d4fc1

Browse files
committed
Revert "[AMDGPU] Do not emit arch dependent macros with unspecified cpu (#79660)"
This reverts commit c9a6e99. This breaks HIP code that incorrectly depended on GPU-specific macros to be set. The code is totally wrong as using `__WAVEFRTONSIZE__` on the host is absolutely meaningless, but it seems this entire corner of the toolchain is fundmentally broken. Reverting for now to avoid breakages.
1 parent f28430d commit 72d4fc1

File tree

3 files changed

+30
-36
lines changed

3 files changed

+30
-36
lines changed

clang/lib/Basic/Targets/AMDGPU.cpp

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -274,29 +274,30 @@ void AMDGPUTargetInfo::getTargetDefines(const LangOptions &Opts,
274274
else
275275
Builder.defineMacro("__R600__");
276276

277-
if (GPUKind == llvm::AMDGPU::GK_NONE)
278-
return;
279-
280-
StringRef CanonName = isAMDGCN(getTriple()) ? getArchNameAMDGCN(GPUKind)
281-
: getArchNameR600(GPUKind);
282-
Builder.defineMacro(Twine("__") + Twine(CanonName) + Twine("__"));
283-
// Emit macros for gfx family e.g. gfx906 -> __GFX9__, gfx1030 -> __GFX10___
284-
if (isAMDGCN(getTriple())) {
285-
assert(CanonName.starts_with("gfx") && "Invalid amdgcn canonical name");
286-
Builder.defineMacro(Twine("__") + Twine(CanonName.drop_back(2).upper()) +
287-
Twine("__"));
288-
Builder.defineMacro("__amdgcn_processor__",
289-
Twine("\"") + Twine(CanonName) + Twine("\""));
290-
Builder.defineMacro("__amdgcn_target_id__",
291-
Twine("\"") + Twine(*getTargetID()) + Twine("\""));
292-
for (auto F : getAllPossibleTargetIDFeatures(getTriple(), CanonName)) {
293-
auto Loc = OffloadArchFeatures.find(F);
294-
if (Loc != OffloadArchFeatures.end()) {
295-
std::string NewF = F.str();
296-
std::replace(NewF.begin(), NewF.end(), '-', '_');
297-
Builder.defineMacro(Twine("__amdgcn_feature_") + Twine(NewF) +
298-
Twine("__"),
299-
Loc->second ? "1" : "0");
277+
if (GPUKind != llvm::AMDGPU::GK_NONE) {
278+
StringRef CanonName = isAMDGCN(getTriple()) ?
279+
getArchNameAMDGCN(GPUKind) : getArchNameR600(GPUKind);
280+
Builder.defineMacro(Twine("__") + Twine(CanonName) + Twine("__"));
281+
// Emit macros for gfx family e.g. gfx906 -> __GFX9__, gfx1030 -> __GFX10___
282+
if (isAMDGCN(getTriple())) {
283+
assert(CanonName.starts_with("gfx") && "Invalid amdgcn canonical name");
284+
Builder.defineMacro(Twine("__") + Twine(CanonName.drop_back(2).upper()) +
285+
Twine("__"));
286+
}
287+
if (isAMDGCN(getTriple())) {
288+
Builder.defineMacro("__amdgcn_processor__",
289+
Twine("\"") + Twine(CanonName) + Twine("\""));
290+
Builder.defineMacro("__amdgcn_target_id__",
291+
Twine("\"") + Twine(*getTargetID()) + Twine("\""));
292+
for (auto F : getAllPossibleTargetIDFeatures(getTriple(), CanonName)) {
293+
auto Loc = OffloadArchFeatures.find(F);
294+
if (Loc != OffloadArchFeatures.end()) {
295+
std::string NewF = F.str();
296+
std::replace(NewF.begin(), NewF.end(), '-', '_');
297+
Builder.defineMacro(Twine("__amdgcn_feature_") + Twine(NewF) +
298+
Twine("__"),
299+
Loc->second ? "1" : "0");
300+
}
300301
}
301302
}
302303
}

clang/test/CodeGenOpenCL/builtins-amdgcn-wave64.cl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,6 @@ void test_read_exec_hi(global ulong* out) {
4444
*out = __builtin_amdgcn_read_exec_hi();
4545
}
4646

47-
#if defined(__AMDGCN_WAVEFRONT_SIZE__) && __AMDGCN_WAVEFRONT_SIZE__ != 64
47+
#if __AMDGCN_WAVEFRONT_SIZE != 64
4848
#error Wrong wavesize detected
4949
#endif

clang/test/Preprocessor/predefined-arch-macros.c

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4294,20 +4294,13 @@
42944294

42954295
// Begin amdgcn tests ----------------
42964296

4297-
// RUN: %clang -mcpu=gfx803 -E -dM %s -o - 2>&1 \
4298-
// RUN: -target amdgcn-unknown-unknown \
4299-
// RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_AMDGCN,CHECK_AMDGCN_803
4300-
// RUN: %clang -E -dM %s -o - 2>&1 \
4297+
// RUN: %clang -march=amdgcn -E -dM %s -o - 2>&1 \
43014298
// RUN: -target amdgcn-unknown-unknown \
4302-
// RUN: | FileCheck -match-full-lines %s -check-prefixes=CHECK_AMDGCN,CHECK_AMDGCN_NONE
4299+
// RUN: | FileCheck -match-full-lines %s -check-prefix=CHECK_AMDGCN
43034300
// CHECK_AMDGCN: #define __AMDGCN__ 1
4304-
// CHECK_AMDGCN_803: #define __HAS_FMAF__ 1
4305-
// CHECK_AMDGCN_803: #define __HAS_FP64__ 1
4306-
// CHECK_AMDGCN_803: #define __HAS_LDEXPF__ 1
4307-
// CHECK_AMDGCN_NONE-NOT: #define __HAS_FMAF__
4308-
// CHECK_AMDGCN_NONE-NOT: #define __HAS_FP64__
4309-
// CHECK_AMDGCN_NONE-NOT: #define __HAS_LDEXPF__
4310-
// CHECK_AMDGCN_NONE-NOT: #define __AMDGCN_WAVEFRONT_SIZE__
4301+
// CHECK_AMDGCN: #define __HAS_FMAF__ 1
4302+
// CHECK_AMDGCN: #define __HAS_FP64__ 1
4303+
// CHECK_AMDGCN: #define __HAS_LDEXPF__ 1
43114304

43124305
// Begin r600 tests ----------------
43134306

0 commit comments

Comments
 (0)