@@ -381,17 +381,18 @@ class OpenACC_DataEntryOp<string mnemonic, string clause, string extraDescriptio
381381 OpenACC_Op<mnemonic, !listconcat(traits,
382382 [AttrSizedOperandSegments,
383383 MemoryEffects<[MemRead<OpenACC_CurrentDeviceIdResource>]>])> {
384- let arguments = !con(additionalArgs,
385- (ins
386- Optional<OpenACC_PointerLikeTypeInterface>:$varPtrPtr,
387- Variadic<OpenACC_DataBoundsType>:$bounds, /* rank-0 to rank-{n-1} */
388- Variadic<IntOrIndex>:$asyncOperands,
389- OptionalAttr<DeviceTypeArrayAttr>:$asyncOperandsDeviceType,
390- OptionalAttr<DeviceTypeArrayAttr>:$asyncOnly,
391- DefaultValuedAttr<OpenACC_DataClauseAttr,clause>:$dataClause,
392- DefaultValuedAttr<BoolAttr, "true">:$structured,
393- DefaultValuedAttr<BoolAttr, "false">:$implicit,
394- OptionalAttr<StrAttr>:$name));
384+ let arguments = !con(
385+ additionalArgs,
386+ (ins TypeAttr:$varType,
387+ Optional<OpenACC_PointerLikeTypeInterface>:$varPtrPtr,
388+ Variadic<OpenACC_DataBoundsType>:$bounds, /* rank-0 to rank-{n-1} */
389+ Variadic<IntOrIndex>:$asyncOperands,
390+ OptionalAttr<DeviceTypeArrayAttr>:$asyncOperandsDeviceType,
391+ OptionalAttr<DeviceTypeArrayAttr>:$asyncOnly,
392+ DefaultValuedAttr<OpenACC_DataClauseAttr, clause>:$dataClause,
393+ DefaultValuedAttr<BoolAttr, "true">:$structured,
394+ DefaultValuedAttr<BoolAttr, "false">:$implicit,
395+ OptionalAttr<StrAttr>:$name));
395396
396397 let description = !strconcat(extraDescription, [{
397398 Description of arguments:
@@ -458,7 +459,7 @@ class OpenACC_DataEntryOp<string mnemonic, string clause, string extraDescriptio
458459 }];
459460
460461 let assemblyFormat = [{
461- `varPtr` `(` $varPtr `:` type($varPtr) `)`
462+ `varPtr` `(` $varPtr `:` custom<VarPtrType>( type($varPtr), $varType)
462463 oilist(
463464 `varPtrPtr` `(` $varPtrPtr `:` type($varPtrPtr) `)`
464465 | `bounds` `(` $bounds `)`
@@ -469,32 +470,35 @@ class OpenACC_DataEntryOp<string mnemonic, string clause, string extraDescriptio
469470
470471 let hasVerifier = 1;
471472
472- let builders = [
473- OpBuilder<(ins "::mlir::Value":$varPtr,
474- "bool":$structured,
475- "bool":$implicit,
476- CArg<"::mlir::ValueRange", "{}">:$bounds), [{
477- build($_builder, $_state, varPtr.getType(), varPtr, /*varPtrPtr=*/{},
478- bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
473+ let builders = [OpBuilder<(ins "::mlir::Value":$varPtr, "bool":$structured,
474+ "bool":$implicit,
475+ CArg<"::mlir::ValueRange", "{}">:$bounds),
476+ [{
477+ build($_builder, $_state, varPtr.getType(), varPtr,
478+ /*varType=*/::mlir::TypeAttr::get(
479+ ::mlir::cast<::mlir::acc::PointerLikeType>(
480+ varPtr.getType()).getElementType()),
481+ /*varPtrPtr=*/{}, bounds, /*asyncOperands=*/{},
482+ /*asyncOperandsDeviceType=*/nullptr,
479483 /*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
480484 /*structured=*/$_builder.getBoolAttr(structured),
481485 /*implicit=*/$_builder.getBoolAttr(implicit), /*name=*/nullptr);
482- }]
483- >,
484- OpBuilder<(ins "::mlir::Value":$varPtr,
485- "bool":$structured,
486- "bool":$implicit,
487- "const ::llvm::Twine &":$name,
488- CArg<"::mlir::ValueRange", "{}">:$bounds), [{
489- build($_builder, $_state, varPtr.getType(), varPtr, /*varPtrPtr=*/{},
490- bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
486+ }]>,
487+ OpBuilder<(ins "::mlir::Value":$varPtr, "bool":$structured,
488+ "bool":$implicit, "const ::llvm::Twine &":$name,
489+ CArg<"::mlir::ValueRange", "{}">:$bounds),
490+ [{
491+ build($_builder, $_state, varPtr.getType(), varPtr,
492+ /*varType=*/::mlir::TypeAttr::get(
493+ ::mlir::cast<::mlir::acc::PointerLikeType>(
494+ varPtr.getType()).getElementType()),
495+ /*varPtrPtr=*/{}, bounds, /*asyncOperands=*/{},
496+ /*asyncOperandsDeviceType=*/nullptr,
491497 /*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
492498 /*structured=*/$_builder.getBoolAttr(structured),
493499 /*implicit=*/$_builder.getBoolAttr(implicit),
494500 /*name=*/$_builder.getStringAttr(name));
495- }]
496- >
497- ];
501+ }]>];
498502}
499503
500504//===----------------------------------------------------------------------===//
@@ -794,63 +798,58 @@ class OpenACC_DataExitOp<string mnemonic, string clause, string extraDescription
794798 }
795799 }];
796800
797- let assemblyFormat = [{
798- `accPtr` `(` $accPtr `:` type($accPtr) `)`
799- oilist(
800- `bounds` `(` $bounds `)`
801- | `to` `varPtr` `(` $varPtr `:` type($varPtr) `)`
802- | `async` `(` custom<DeviceTypeOperands>($asyncOperands,
803- type($asyncOperands), $asyncOperandsDeviceType) `)`
804- ) attr-dict
805- }];
806-
807801 let hasVerifier = 1;
808802}
809803
810- class OpenACC_DataExitOpWithVarPtr<string mnemonic, string clause> :
811- OpenACC_DataExitOp<mnemonic, clause,
812- "- `varPtr`: The address of variable to copy back to.",
813- [MemoryEffects<[MemRead<OpenACC_RuntimeCounters>,
814- MemWrite<OpenACC_RuntimeCounters>]>],
815- (ins Arg<OpenACC_PointerLikeTypeInterface,"Address of device variable",[MemRead]>:$accPtr,
816- Arg<OpenACC_PointerLikeTypeInterface,"Address of variable",[MemWrite]>:$varPtr)> {
804+ class OpenACC_DataExitOpWithVarPtr<string mnemonic, string clause>
805+ : OpenACC_DataExitOp<
806+ mnemonic, clause,
807+ "- `varPtr`: The address of variable to copy back to.",
808+ [MemoryEffects<[MemRead<OpenACC_RuntimeCounters>,
809+ MemWrite<OpenACC_RuntimeCounters>]>],
810+ (ins Arg<OpenACC_PointerLikeTypeInterface,
811+ "Address of device variable", [MemRead]>:$accPtr,
812+ Arg<OpenACC_PointerLikeTypeInterface,
813+ "Address of variable", [MemWrite]>:$varPtr,
814+ TypeAttr:$varType)> {
817815 let assemblyFormat = [{
818816 `accPtr` `(` $accPtr `:` type($accPtr) `)`
819817 (`bounds` `(` $bounds^ `)` )?
820818 (`async` `(` custom<DeviceTypeOperands>($asyncOperands,
821819 type($asyncOperands), $asyncOperandsDeviceType)^ `)`)?
822- `to` `varPtr` `(` $varPtr `:` type($varPtr) `)`
820+ `to` `varPtr` `(` $varPtr `:` custom<VarPtrType>( type($varPtr), $varType)
823821 attr-dict
824822 }];
825823
826- let builders = [
827- OpBuilder<(ins "::mlir::Value":$accPtr,
828- "::mlir::Value":$varPtr,
829- "bool":$structured,
830- "bool":$implicit,
831- CArg<"::mlir::ValueRange", "{}">:$bounds), [{
824+ let builders = [OpBuilder<(ins "::mlir::Value":$accPtr,
825+ "::mlir::Value":$varPtr, "bool":$structured,
826+ "bool":$implicit,
827+ CArg<"::mlir::ValueRange", "{}">:$bounds),
828+ [{
832829 build($_builder, $_state, accPtr, varPtr,
830+ /*varType=*/::mlir::TypeAttr::get(
831+ ::mlir::cast<::mlir::acc::PointerLikeType>(
832+ varPtr.getType()).getElementType()),
833833 bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
834834 /*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
835835 /*structured=*/$_builder.getBoolAttr(structured),
836836 /*implicit=*/$_builder.getBoolAttr(implicit), /*name=*/nullptr);
837- }]
838- >,
839- OpBuilder<(ins "::mlir::Value":$accPtr,
840- "::mlir::Value":$varPtr,
841- "bool":$structured,
842- "bool":$implicit,
843- "const ::llvm::Twine &":$name,
844- CArg<"::mlir::ValueRange", "{}">:$bounds), [{
837+ }]>,
838+ OpBuilder<(ins "::mlir::Value":$accPtr,
839+ "::mlir::Value":$varPtr, "bool":$structured,
840+ "bool":$implicit, "const ::llvm::Twine &":$name,
841+ CArg<"::mlir::ValueRange", "{}">:$bounds),
842+ [{
845843 build($_builder, $_state, accPtr, varPtr,
844+ /*varType=*/::mlir::TypeAttr::get(
845+ ::mlir::cast<::mlir::acc::PointerLikeType>(
846+ varPtr.getType()).getElementType()),
846847 bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
847848 /*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
848849 /*structured=*/$_builder.getBoolAttr(structured),
849850 /*implicit=*/$_builder.getBoolAttr(implicit),
850851 /*name=*/$_builder.getStringAttr(name));
851- }]
852- >
853- ];
852+ }]>];
854853}
855854
856855class OpenACC_DataExitOpNoVarPtr<string mnemonic, string clause> :
0 commit comments