26 #include "llvm/ADT/TypeSwitch.h"
27 #include "llvm/AsmParser/Parser.h"
28 #include "llvm/IR/Attributes.h"
29 #include "llvm/IR/Function.h"
30 #include "llvm/IR/Type.h"
31 #include "llvm/Support/SourceMgr.h"
34 using namespace ROCDL;
36 #include "mlir/Dialect/LLVMIR/ROCDLOpsDialect.cpp.inc"
56 return parser.
resolveOperands(ops, {i32x4Ty, int32Ty, int32Ty, int32Ty},
61 p <<
" " << getOperands() <<
" : " << getRes().getType();
78 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
85 p <<
" " << getOperands() <<
" : " << getVdata().getType();
102 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
109 p <<
" " << getOperands() <<
" : " << getVdata().getType();
126 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
133 p <<
" " << getOperands() <<
" : " << getVdata().getType();
150 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
157 p <<
" " << getOperands() <<
" : " << getVdata().getType();
174 if (parser.
resolveOperands(ops, {type, i32x4Ty, int32Ty, int32Ty, int32Ty},
181 p <<
" " << getOperands() <<
" : " << getVdata().getType();
189 void ROCDLDialect::initialize() {
192 #include "mlir/Dialect/LLVMIR/ROCDLOps.cpp.inc"
196 #define GET_ATTRDEF_LIST
197 #include "mlir/Dialect/LLVMIR/ROCDLOpsAttributes.cpp.inc"
201 allowUnknownOperations();
202 declarePromisedInterface<gpu::TargetAttrInterface, ROCDLTargetAttr>();
205 LogicalResult ROCDLDialect::verifyOperationAttribute(
Operation *op,
208 if (kernelAttrName.getName() == attr.
getName()) {
209 if (!isa<LLVM::LLVMFuncOp>(op)) {
210 return op->
emitError() <<
"'" << kernelAttrName.getName()
211 <<
"' attribute attached to unexpected op";
222 int optLevel, StringRef triple, StringRef chip,
223 StringRef features, StringRef abiVersion,
224 DictionaryAttr flags, ArrayAttr files) {
225 if (optLevel < 0 || optLevel > 3) {
226 emitError() <<
"The optimization level must be a number between 0 and 3.";
229 if (triple.empty()) {
230 emitError() <<
"The target triple cannot be empty.";
234 emitError() <<
"The target chip cannot be empty.";
237 if (abiVersion !=
"400" && abiVersion !=
"500") {
238 emitError() <<
"Invalid ABI version, it must be either `400` or `500`.";
242 return attr && mlir::isa<StringAttr>(attr);
244 emitError() <<
"All the elements in the `link` array must be strings.";
250 #define GET_OP_CLASSES
251 #include "mlir/Dialect/LLVMIR/ROCDLOps.cpp.inc"
253 #define GET_ATTRDEF_CLASSES
254 #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.