26 #include "llvm/ADT/TypeSwitch.h"
29 using namespace ROCDL;
31 #include "mlir/Dialect/LLVMIR/ROCDLOpsDialect.cpp.inc"
51 return parser.
resolveOperands(ops, {i32x4Ty, int32Ty, int32Ty, int32Ty},
56 p <<
" " << getOperands() <<
" : " << getRes().getType();
73 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
80 p <<
" " << getOperands() <<
" : " << getVdata().getType();
97 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
104 p <<
" " << getOperands() <<
" : " << getVdata().getType();
121 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
128 p <<
" " << getOperands() <<
" : " << getVdata().getType();
145 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
152 p <<
" " << getOperands() <<
" : " << getVdata().getType();
169 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
176 p <<
" " << getOperands() <<
" : " << getVdata().getType();
184 void ROCDLDialect::initialize() {
187 #include "mlir/Dialect/LLVMIR/ROCDLOps.cpp.inc"
191 #define GET_ATTRDEF_LIST
192 #include "mlir/Dialect/LLVMIR/ROCDLOpsAttributes.cpp.inc"
196 allowUnknownOperations();
197 declarePromisedInterface<gpu::TargetAttrInterface, ROCDLTargetAttr>();
200 LogicalResult ROCDLDialect::verifyOperationAttribute(
Operation *op,
203 if (kernelAttrName.getName() == attr.
getName()) {
204 if (!isa<LLVM::LLVMFuncOp>(op)) {
205 return op->
emitError() <<
"'" << kernelAttrName.getName()
206 <<
"' attribute attached to unexpected op";
217 int optLevel, StringRef triple, StringRef chip,
218 StringRef features, StringRef abiVersion,
219 DictionaryAttr flags, ArrayAttr files) {
220 if (optLevel < 0 || optLevel > 3) {
221 emitError() <<
"The optimization level must be a number between 0 and 3.";
224 if (triple.empty()) {
225 emitError() <<
"The target triple cannot be empty.";
229 emitError() <<
"The target chip cannot be empty.";
232 if (abiVersion !=
"400" && abiVersion !=
"500" && abiVersion !=
"600") {
233 emitError() <<
"Invalid ABI version, it must be `400`, `500` or '600'.";
237 return attr && mlir::isa<StringAttr>(attr);
239 emitError() <<
"All the elements in the `link` array must be strings.";
245 #define GET_OP_CLASSES
246 #include "mlir/Dialect/LLVMIR/ROCDLOps.cpp.inc"
248 #define GET_ATTRDEF_CLASSES
249 #include "mlir/Dialect/LLVMIR/ROCDLOpsAttributes.cpp.inc"
static void print(spirv::VerCapExtAttr triple, DialectAsmPrinter &printer)
virtual Builder & getBuilder() const =0
Return a builder which provides useful access to MLIRContext, global objects like types and attribute...
ParseResult addTypeToList(Type type, SmallVectorImpl< Type > &result)
Add the specified type to the end of the specified type list and return success.
virtual ParseResult parseColonType(Type &result)=0
Parse a colon followed by a type.
virtual SMLoc getNameLoc() const =0
Return the location of the original name token.
Attributes are known-constant values of operations.
This class represents a diagnostic that is inflight and set to be reported.
NamedAttribute represents a combination of a name and an Attribute value.
StringAttr getName() const
Return the name of the attribute.
The OpAsmParser has methods for interacting with the asm parser: parsing things from it,...
ParseResult resolveOperands(Operands &&operands, Type type, SmallVectorImpl< Value > &result)
Resolve a list of operands to SSA values, emitting an error on failure, or appending the results to t...
virtual ParseResult parseOperandList(SmallVectorImpl< UnresolvedOperand > &result, Delimiter delimiter=Delimiter::None, bool allowResultNumber=true, int requiredOperandCount=-1)=0
Parse zero or more SSA comma-separated operand references with a specified surrounding delimiter,...
This is a pure-virtual base class that exposes the asmprinter hooks necessary to implement a custom p...
Operation is the basic unit of execution within MLIR.
InFlightDiagnostic emitError(const Twine &message={})
Emit an error about fatal conditions with this operation, reporting up to any diagnostic handlers tha...
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
QueryRef parse(llvm::StringRef line, const QuerySession &qs)
Include the generated interface declarations.
InFlightDiagnostic emitError(Location loc)
Utility method to emit an error message using this location.
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...
LogicalResult verify(Operation *op, bool verifyRecursively=true)
Perform (potentially expensive) checks of invariants, used to detect compiler bugs,...
This represents an operation in an abstracted form, suitable for use with the builder APIs.
SmallVector< Value, 4 > operands
SmallVector< Type, 4 > types
Types of the results of this operation.