Skip to content

Commit 9cca295

Browse files
authored
[AMDGPU] More radical feature initialization refactoring (#155222)
Factoring in flang, just have a single fillAMDGPUFeatureMap function doing it all as an external interface and returing an error.
1 parent 818b39e commit 9cca295

File tree

4 files changed

+334
-329
lines changed

4 files changed

+334
-329
lines changed

clang/lib/Basic/Targets/AMDGPU.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,7 @@ bool AMDGPUTargetInfo::initFeatureMap(
201201
if (!TargetInfo::initFeatureMap(Features, Diags, CPU, FeatureVec))
202202
return false;
203203

204-
// TODO: Should move this logic into TargetParser
205-
auto HasError = insertWaveSizeFeature(CPU, getTriple(), Features);
204+
auto HasError = fillAMDGPUFeatureMap(CPU, getTriple(), Features);
206205
switch (HasError.first) {
207206
default:
208207
break;

flang/lib/Frontend/CompilerInstance.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -253,18 +253,15 @@ getExplicitAndImplicitAMDGPUTargetFeatures(clang::DiagnosticsEngine &diags,
253253
const TargetOptions &targetOpts,
254254
const llvm::Triple triple) {
255255
llvm::StringRef cpu = targetOpts.cpu;
256-
llvm::StringMap<bool> implicitFeaturesMap;
257-
// Get the set of implicit target features
258-
llvm::AMDGPU::fillAMDGPUFeatureMap(cpu, triple, implicitFeaturesMap);
256+
llvm::StringMap<bool> FeaturesMap;
259257

260258
// Add target features specified by the user
261259
for (auto &userFeature : targetOpts.featuresAsWritten) {
262260
std::string userKeyString = userFeature.substr(1);
263-
implicitFeaturesMap[userKeyString] = (userFeature[0] == '+');
261+
FeaturesMap[userKeyString] = (userFeature[0] == '+');
264262
}
265263

266-
auto HasError =
267-
llvm::AMDGPU::insertWaveSizeFeature(cpu, triple, implicitFeaturesMap);
264+
auto HasError = llvm::AMDGPU::fillAMDGPUFeatureMap(cpu, triple, FeaturesMap);
268265
if (HasError.first) {
269266
unsigned diagID = diags.getCustomDiagID(clang::DiagnosticsEngine::Error,
270267
"Unsupported feature ID: %0");
@@ -273,9 +270,9 @@ getExplicitAndImplicitAMDGPUTargetFeatures(clang::DiagnosticsEngine &diags,
273270
}
274271

275272
llvm::SmallVector<std::string> featuresVec;
276-
for (auto &implicitFeatureItem : implicitFeaturesMap) {
277-
featuresVec.push_back((llvm::Twine(implicitFeatureItem.second ? "+" : "-") +
278-
implicitFeatureItem.first().str())
273+
for (auto &FeatureItem : FeaturesMap) {
274+
featuresVec.push_back((llvm::Twine(FeatureItem.second ? "+" : "-") +
275+
FeatureItem.first().str())
279276
.str());
280277
}
281278
llvm::sort(featuresVec);

llvm/include/llvm/TargetParser/TargetParser.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -183,15 +183,11 @@ LLVM_ABI void fillValidArchListR600(SmallVectorImpl<StringRef> &Values);
183183

184184
LLVM_ABI IsaVersion getIsaVersion(StringRef GPU);
185185

186-
/// Fills Features map with default values for given target GPU
187-
LLVM_ABI void fillAMDGPUFeatureMap(StringRef GPU, const Triple &T,
188-
StringMap<bool> &Features);
189-
190-
/// Inserts wave size feature for given GPU into features map
186+
/// Fills Features map with default values for given target GPU.
187+
/// \p Features contains overriding target features and this function returns
188+
/// default target features with entries overridden by \p Features.
191189
LLVM_ABI std::pair<FeatureError, StringRef>
192-
insertWaveSizeFeature(StringRef GPU, const Triple &T,
193-
StringMap<bool> &Features);
194-
190+
fillAMDGPUFeatureMap(StringRef GPU, const Triple &T, StringMap<bool> &Features);
195191
} // namespace AMDGPU
196192

197193
struct BasicSubtargetFeatureKV {

0 commit comments

Comments
 (0)