Skip to content

Commit 76848d5

Browse files
committed
Print out valid AMDGCN processor identifiers.
1 parent 18841c1 commit 76848d5

File tree

5 files changed

+21
-4
lines changed

5 files changed

+21
-4
lines changed

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12445,7 +12445,7 @@ def warn_zero_as_null_pointer_constant : Warning<
1244512445
InGroup<DiagGroup<"zero-as-null-pointer-constant">>, DefaultIgnore;
1244612446

1244712447
def warn_not_eliding_copy_on_return : Warning<
12448-
"not eliding copy on return">,
12448+
"not eliding copy on return">,
1244912449
InGroup<DiagGroup<"nrvo">>, DefaultIgnore;
1245012450

1245112451
def err_nullability_cs_multilevel : Error<
@@ -13347,6 +13347,8 @@ def err_amdgcn_processor_is_arg_not_literal
1334713347
def err_amdgcn_processor_is_arg_invalid_value
1334813348
: Error<"the argument to __builtin_amdgcn_processor_is must be a valid "
1334913349
"AMDGCN processor identifier; '%0' is not valid">;
13350+
def note_amdgcn_processor_is_valid_options
13351+
: Note<"valid AMDGCN processor identifiers are: %0">;
1335013352
def err_amdgcn_is_invocable_arg_invalid_value
1335113353
: Error<"the argument to __builtin_amdgcn_is_invocable must be either a "
1335213354
"target agnostic builtin or an AMDGCN target specific builtin; `%0`"

clang/lib/Basic/Targets/SPIR.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,8 @@ void SPIRV64AMDGCNTargetInfo::setAuxTarget(const TargetInfo *Aux) {
156156
bool SPIRV64AMDGCNTargetInfo::isValidCPUName(StringRef CPU) const {
157157
return AMDGPUTI.isValidCPUName(CPU);
158158
}
159+
160+
void SPIRV64AMDGCNTargetInfo::fillValidCPUList(
161+
SmallVectorImpl<StringRef> &Values) const {
162+
return AMDGPUTI.fillValidCPUList(Values);
163+
}

clang/lib/Basic/Targets/SPIR.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,7 @@ class LLVM_LIBRARY_VISIBILITY SPIRV64AMDGCNTargetInfo final
453453
// This is only needed for validating arguments passed to
454454
// __builtin_amdgcn_processor_is
455455
bool isValidCPUName(StringRef Name) const override;
456+
void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override;
456457
};
457458

458459
} // namespace targets

clang/lib/Sema/SemaAMDGPU.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -393,10 +393,18 @@ Expr *SemaAMDGPU::ExpandAMDGPUPredicateBI(CallExpr *CE) {
393393
}
394394

395395
StringRef N = GFX->getString();
396-
if (!Ctx.getTargetInfo().isValidCPUName(N) &&
397-
(!Ctx.getAuxTargetInfo() ||
398-
!Ctx.getAuxTargetInfo()->isValidCPUName(N))) {
396+
const TargetInfo &TI = Ctx.getTargetInfo();
397+
const TargetInfo *AuxTI = Ctx.getAuxTargetInfo();
398+
if (!TI.isValidCPUName(N) && (!AuxTI || !AuxTI->isValidCPUName(N))) {
399399
Diag(Loc, diag::err_amdgcn_processor_is_arg_invalid_value) << N;
400+
SmallVector<StringRef, 32> ValidList;
401+
if (TI.getTriple().getVendor() == llvm::Triple::VendorType::AMD)
402+
TI.fillValidCPUList(ValidList);
403+
else if (AuxTI) // Since the BI is present it must be and AMDGPU triple.
404+
AuxTI->fillValidCPUList(ValidList);
405+
if (!ValidList.empty())
406+
Diag(Loc, diag::note_amdgcn_processor_is_valid_options)
407+
<< llvm::join(ValidList, ", ");
400408
return nullptr;
401409
}
402410
if (Ctx.getTargetInfo().getTriple().isSPIRV()) {

clang/test/CodeGen/amdgpu-feature-builtins-invalid-use.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ void invalid_uses(int *p, int x, const __amdgpu_feature_predicate_t &lv,
2828

2929
void invalid_invocations(int x, const char* str) {
3030
// CHECK: error: the argument to __builtin_amdgcn_processor_is must be a valid AMDGCN processor identifier; 'not_an_amdgcn_gfx_id' is not valid
31+
// CHECK-DAG: note: valid AMDGCN processor identifiers are: {{.*}}gfx{{.*}}
3132
if (__builtin_amdgcn_processor_is("not_an_amdgcn_gfx_id")) return;
3233
// CHECK: error: the argument to __builtin_amdgcn_processor_is must be a string literal
3334
if (__builtin_amdgcn_processor_is(str)) return;

0 commit comments

Comments
 (0)