@@ -381,17 +381,18 @@ class OpenACC_DataEntryOp<string mnemonic, string clause, string extraDescriptio
381
381
OpenACC_Op<mnemonic, !listconcat(traits,
382
382
[AttrSizedOperandSegments,
383
383
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));
395
396
396
397
let description = !strconcat(extraDescription, [{
397
398
Description of arguments:
@@ -458,7 +459,7 @@ class OpenACC_DataEntryOp<string mnemonic, string clause, string extraDescriptio
458
459
}];
459
460
460
461
let assemblyFormat = [{
461
- `varPtr` `(` $varPtr `:` type($varPtr) `)`
462
+ `varPtr` `(` $varPtr `:` custom<VarPtrType>( type($varPtr), $varType)
462
463
oilist(
463
464
`varPtrPtr` `(` $varPtrPtr `:` type($varPtrPtr) `)`
464
465
| `bounds` `(` $bounds `)`
@@ -469,32 +470,35 @@ class OpenACC_DataEntryOp<string mnemonic, string clause, string extraDescriptio
469
470
470
471
let hasVerifier = 1;
471
472
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,
479
483
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
480
484
/*structured=*/$_builder.getBoolAttr(structured),
481
485
/*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,
491
497
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
492
498
/*structured=*/$_builder.getBoolAttr(structured),
493
499
/*implicit=*/$_builder.getBoolAttr(implicit),
494
500
/*name=*/$_builder.getStringAttr(name));
495
- }]
496
- >
497
- ];
501
+ }]>];
498
502
}
499
503
500
504
//===----------------------------------------------------------------------===//
@@ -794,63 +798,58 @@ class OpenACC_DataExitOp<string mnemonic, string clause, string extraDescription
794
798
}
795
799
}];
796
800
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
-
807
801
let hasVerifier = 1;
808
802
}
809
803
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)> {
817
815
let assemblyFormat = [{
818
816
`accPtr` `(` $accPtr `:` type($accPtr) `)`
819
817
(`bounds` `(` $bounds^ `)` )?
820
818
(`async` `(` custom<DeviceTypeOperands>($asyncOperands,
821
819
type($asyncOperands), $asyncOperandsDeviceType)^ `)`)?
822
- `to` `varPtr` `(` $varPtr `:` type($varPtr) `)`
820
+ `to` `varPtr` `(` $varPtr `:` custom<VarPtrType>( type($varPtr), $varType)
823
821
attr-dict
824
822
}];
825
823
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
+ [{
832
829
build($_builder, $_state, accPtr, varPtr,
830
+ /*varType=*/::mlir::TypeAttr::get(
831
+ ::mlir::cast<::mlir::acc::PointerLikeType>(
832
+ varPtr.getType()).getElementType()),
833
833
bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
834
834
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
835
835
/*structured=*/$_builder.getBoolAttr(structured),
836
836
/*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
+ [{
845
843
build($_builder, $_state, accPtr, varPtr,
844
+ /*varType=*/::mlir::TypeAttr::get(
845
+ ::mlir::cast<::mlir::acc::PointerLikeType>(
846
+ varPtr.getType()).getElementType()),
846
847
bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
847
848
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
848
849
/*structured=*/$_builder.getBoolAttr(structured),
849
850
/*implicit=*/$_builder.getBoolAttr(implicit),
850
851
/*name=*/$_builder.getStringAttr(name));
851
- }]
852
- >
853
- ];
852
+ }]>];
854
853
}
855
854
856
855
class OpenACC_DataExitOpNoVarPtr<string mnemonic, string clause> :
0 commit comments