blob: f9f38c3e11184f0bae15f8e51e82c59c155fd796 [file] [edit]
//===-- AMDGPUTargetParser.td - TargetParser metadata ------*- tablegen -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// TargetParser metadata for the -gen-amdgpu-target-def backend.
//
//===----------------------------------------------------------------------===//
// A generic target may use this feature if at least one covered GPU has it.
// These features participate in validation even when not frontend-visible.
// Other frontend-visible features must be present on every covered GPU.
// Implied features are checked according to their own classes.
// This checks feature membership, not numeric ordering of feature values.
class AMDGPUGenericAnyFeature<string name, string fieldName, string value,
string description,
list<SubtargetFeature> implies = [],
InlineBehavior ib = InlineDefault>
: SubtargetFeature<name, fieldName, value, description, implies, ib>;
// Marks a Processor/ProcessorModel record as a canonical GPU.
//
// \p isa is the ISA version [major, minor, stepping]. Empty for R600 (no AMDGCN
// ISA version); required for AMDGCN GPUs. Not derivable from the name.
class AMDGPUGPUInfo<list<int> isa = []> {
list<int> IsaVersion = isa;
// For a "gfxN-generic" target, this must contain at least one compatible
// concrete AMDGPU GPU. For individual GPUs and pseudo targets, it must be empty.
list<Processor> CoveredGPUs = [];
// A pseudo target ("generic"/"generic-hsa") that represents no
// hardware.
bit IsPseudoTarget = false;
// An explicit triple subarch spelling (e.g. "12.50"). If unset,
// this will be guessed from the device name.
string SubArchSpelling;
}
// An R600 processor that is also a canonical TargetParser GPU.
class R600ProcessorModel<string n, ProcessorItineraries pi,
list<SubtargetFeature> f>
: Processor<n, pi, f>, AMDGPUGPUInfo;
// A gfx6+ processor that is also a canonical TargetParser GPU. \p isa
// is the ISA version [major, minor, stepping].
class AMDGPUProcessorModel<string n, SchedMachineModel m,
list<SubtargetFeature> f, list<int> isa>
: ProcessorModel<n, m, f>, AMDGPUGPUInfo<isa>;
// A major-subarch family that has no "gfxN-generic" target of its own
// (gfx6, gfx7, gfx8). \p major is the bare subarch suffix (e.g. "6");
// \p members are the GPUs mapped to Triple::AMDGPUSubArch<major>
class AMDGPUFamily<string major, list<Processor> members> {
string MajorSubArch = major;
list<Processor> Members = members;
}