@@ -1727,19 +1727,24 @@ LogicalResult gpu::ReturnOp::verify() {
17271727// ===----------------------------------------------------------------------===//
17281728
17291729void GPUModuleOp::build (OpBuilder &builder, OperationState &result,
1730- StringRef name, ArrayAttr targets) {
1730+ StringRef name, ArrayAttr targets,
1731+ Attribute offloadingHandler) {
17311732 ensureTerminator (*result.addRegion (), builder, result.location );
17321733 result.attributes .push_back (builder.getNamedAttr (
17331734 ::mlir::SymbolTable::getSymbolAttrName (), builder.getStringAttr(name)));
17341735
1736+ Properties &props = result.getOrAddProperties <Properties>();
17351737 if (targets)
1736- result.getOrAddProperties <Properties>().targets = targets;
1738+ props.targets = targets;
1739+ props.offloadingHandler = offloadingHandler;
17371740}
17381741
17391742void GPUModuleOp::build (OpBuilder &builder, OperationState &result,
1740- StringRef name, ArrayRef<Attribute> targets) {
1743+ StringRef name, ArrayRef<Attribute> targets,
1744+ Attribute offloadingHandler) {
17411745 build (builder, result, name,
1742- targets.empty () ? ArrayAttr () : builder.getArrayAttr (targets));
1746+ targets.empty () ? ArrayAttr () : builder.getArrayAttr (targets),
1747+ offloadingHandler);
17431748}
17441749
17451750ParseResult GPUModuleOp::parse (OpAsmParser &parser, OperationState &result) {
@@ -1750,14 +1755,24 @@ ParseResult GPUModuleOp::parse(OpAsmParser &parser, OperationState &result) {
17501755 result.attributes ))
17511756 return failure ();
17521757
1758+ Properties &props = result.getOrAddProperties <Properties>();
1759+
1760+ // Parse the optional offloadingHandler
1761+ if (succeeded (parser.parseOptionalLess ())) {
1762+ if (parser.parseAttribute (props.offloadingHandler ))
1763+ return failure ();
1764+ if (parser.parseGreater ())
1765+ return failure ();
1766+ }
1767+
17531768 // Parse the optional array of target attributes.
17541769 OptionalParseResult targetsAttrResult =
17551770 parser.parseOptionalAttribute (targetsAttr, Type{});
17561771 if (targetsAttrResult.has_value ()) {
17571772 if (failed (*targetsAttrResult)) {
17581773 return failure ();
17591774 }
1760- result. getOrAddProperties <Properties>() .targets = targetsAttr;
1775+ props .targets = targetsAttr;
17611776 }
17621777
17631778 // If module attributes are present, parse them.
@@ -1778,15 +1793,22 @@ void GPUModuleOp::print(OpAsmPrinter &p) {
17781793 p << ' ' ;
17791794 p.printSymbolName (getName ());
17801795
1796+ if (Attribute attr = getOffloadingHandlerAttr ()) {
1797+ p << " <" ;
1798+ p.printAttribute (attr);
1799+ p << " >" ;
1800+ }
1801+
17811802 if (Attribute attr = getTargetsAttr ()) {
17821803 p << ' ' ;
17831804 p.printAttribute (attr);
17841805 p << ' ' ;
17851806 }
17861807
1787- p.printOptionalAttrDictWithKeyword (
1788- (*this )->getAttrs (),
1789- {mlir::SymbolTable::getSymbolAttrName (), getTargetsAttrName ()});
1808+ p.printOptionalAttrDictWithKeyword ((*this )->getAttrs (),
1809+ {mlir::SymbolTable::getSymbolAttrName (),
1810+ getTargetsAttrName (),
1811+ getOffloadingHandlerAttrName ()});
17901812 p << ' ' ;
17911813 p.printRegion (getRegion (), /* printEntryBlockArgs=*/ false ,
17921814 /* printBlockTerminators=*/ false );
0 commit comments