@@ -3756,6 +3756,19 @@ struct OmpAllocatorComplexModifier {
3756
3756
WRAPPER_CLASS_BOILERPLATE (OmpAllocatorComplexModifier, ScalarIntExpr);
3757
3757
};
3758
3758
3759
+ // Ref: [4.5:216-219], [5.0:315-324], [5.1:347-355], [5.2:150-158],
3760
+ // [6.0:279-288]
3761
+ //
3762
+ // always-modifier ->
3763
+ // ALWAYS // since 4.5
3764
+ //
3765
+ // Until 5.2, it was a part of map-type-modifier. Since 6.0 the
3766
+ // map-type-modifier has been split into individual modifiers.
3767
+ struct OmpAlwaysModifier {
3768
+ ENUM_CLASS (Value, Always)
3769
+ WRAPPER_CLASS_BOILERPLATE (OmpAlwaysModifier, Value);
3770
+ };
3771
+
3759
3772
// Ref: [5.2:252-254]
3760
3773
//
3761
3774
// chunk-modifier ->
@@ -3767,17 +3780,29 @@ struct OmpChunkModifier {
3767
3780
WRAPPER_CLASS_BOILERPLATE (OmpChunkModifier, Value);
3768
3781
};
3769
3782
3770
- // Ref: [5.0:47-49], [5.1:49-51], [5.2:67-69]
3783
+ // Ref: [4.5:216-219], [5.0:315-324], [5.1:347-355], [5.2:150-158],
3784
+ // [6.0:279-288]
3771
3785
//
3772
- // iterator-specifier ->
3773
- // [iterator-type] iterator-identifier
3774
- // = range-specification | // since 5.0
3775
- // [iterator-type ::] iterator-identifier
3776
- // = range-specification // since 5.2
3777
- struct OmpIteratorSpecifier {
3778
- TUPLE_CLASS_BOILERPLATE (OmpIteratorSpecifier);
3779
- CharBlock source;
3780
- std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
3786
+ // close-modifier ->
3787
+ // CLOSE // since 5.0
3788
+ //
3789
+ // Until 5.2, it was a part of map-type-modifier. Since 6.0 the
3790
+ // map-type-modifier has been split into individual modifiers.
3791
+ struct OmpCloseModifier {
3792
+ ENUM_CLASS (Value, Close)
3793
+ WRAPPER_CLASS_BOILERPLATE (OmpCloseModifier, Value);
3794
+ };
3795
+
3796
+ // Ref: [4.5:216-219], [5.0:315-324], [5.1:347-355], [5.2:150-158],
3797
+ // [6.0:279-288]
3798
+ //
3799
+ // delete-modifier ->
3800
+ // DELETE // since 6.0
3801
+ //
3802
+ // Until 5.2, it was a part of map-type.
3803
+ struct OmpDeleteModifier {
3804
+ ENUM_CLASS (Value, Delete)
3805
+ WRAPPER_CLASS_BOILERPLATE (OmpDeleteModifier, Value);
3781
3806
};
3782
3807
3783
3808
// Ref: [4.5:169-170], [5.0:255-256], [5.1:288-289]
@@ -3867,6 +3892,19 @@ struct OmpInteropType {
3867
3892
WRAPPER_CLASS_BOILERPLATE (OmpInteropType, Value);
3868
3893
};
3869
3894
3895
+ // Ref: [5.0:47-49], [5.1:49-51], [5.2:67-69]
3896
+ //
3897
+ // iterator-specifier ->
3898
+ // [iterator-type] iterator-identifier
3899
+ // = range-specification | // since 5.0
3900
+ // [iterator-type ::] iterator-identifier
3901
+ // = range-specification // since 5.2
3902
+ struct OmpIteratorSpecifier {
3903
+ TUPLE_CLASS_BOILERPLATE (OmpIteratorSpecifier);
3904
+ CharBlock source;
3905
+ std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
3906
+ };
3907
+
3870
3908
// Ref: [5.0:47-49], [5.1:49-51], [5.2:67-69]
3871
3909
//
3872
3910
// iterator-modifier ->
@@ -3901,21 +3939,28 @@ struct OmpMapper {
3901
3939
WRAPPER_CLASS_BOILERPLATE (OmpMapper, Name);
3902
3940
};
3903
3941
3904
- // Ref: [4.5:216-219], [5.0:315-324], [5.1:347-355], [5.2:150-158]
3942
+ // Ref: [4.5:216-219], [5.0:315-324], [5.1:347-355], [5.2:150-158],
3943
+ // [6.0:279-288]
3905
3944
//
3906
3945
// map-type ->
3907
- // ALLOC | DELETE | FROM | RELEASE | TO | TOFROM // since 4.5
3946
+ // ALLOC | DELETE | RELEASE | // since 4.5, until 5.2
3947
+ // FROM | TO | TOFROM | // since 4.5
3948
+ // STORAGE // since 6.0
3949
+ //
3950
+ // Since 6.0 DELETE is a separate delete-modifier.
3908
3951
struct OmpMapType {
3909
- ENUM_CLASS (Value, Alloc, Delete, From, Release, To, Tofrom);
3952
+ ENUM_CLASS (Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
3910
3953
WRAPPER_CLASS_BOILERPLATE (OmpMapType, Value);
3911
3954
};
3912
3955
3913
3956
// Ref: [4.5:216-219], [5.0:315-324], [5.1:347-355], [5.2:150-158]
3914
3957
//
3915
3958
// map-type-modifier ->
3916
- // ALWAYS | // since 4.5
3917
- // CLOSE | // since 5.0
3918
- // PRESENT // since 5.1
3959
+ // ALWAYS | // since 4.5, until 5.2
3960
+ // CLOSE | // since 5.0, until 5.2
3961
+ // PRESENT // since 5.1, until 5.2
3962
+ // Since 6.0 the map-type-modifier has been split into individual modifiers.
3963
+ //
3919
3964
struct OmpMapTypeModifier {
3920
3965
ENUM_CLASS (Value, Always, Close, Present, Ompx_Hold)
3921
3966
WRAPPER_CLASS_BOILERPLATE (OmpMapTypeModifier, Value);
@@ -3954,6 +3999,19 @@ struct OmpPrescriptiveness {
3954
3999
WRAPPER_CLASS_BOILERPLATE (OmpPrescriptiveness, Value);
3955
4000
};
3956
4001
4002
+ // Ref: [4.5:216-219], [5.0:315-324], [5.1:347-355], [5.2:150-158],
4003
+ // [6.0:279-288]
4004
+ //
4005
+ // present-modifier ->
4006
+ // PRESENT // since 5.1
4007
+ //
4008
+ // Until 5.2, it was a part of map-type-modifier. Since 6.0 the
4009
+ // map-type-modifier has been split into individual modifiers.
4010
+ struct OmpPresentModifier {
4011
+ ENUM_CLASS (Value, Present)
4012
+ WRAPPER_CLASS_BOILERPLATE (OmpPresentModifier, Value);
4013
+ };
4014
+
3957
4015
// Ref: [5.0:300-302], [5.1:332-334], [5.2:134-137]
3958
4016
//
3959
4017
// reduction-modifier ->
@@ -3963,6 +4021,26 @@ struct OmpReductionModifier {
3963
4021
WRAPPER_CLASS_BOILERPLATE (OmpReductionModifier, Value);
3964
4022
};
3965
4023
4024
+ // Ref: [6.0:279-288]
4025
+ //
4026
+ // ref-modifier ->
4027
+ // REF_PTEE | REF_PTR | REF_PTR_PTEE // since 6.0
4028
+ //
4029
+ struct OmpRefModifier {
4030
+ ENUM_CLASS (Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4031
+ WRAPPER_CLASS_BOILERPLATE (OmpRefModifier, Value);
4032
+ };
4033
+
4034
+ // Ref: [6.0:279-288]
4035
+ //
4036
+ // self-modifier ->
4037
+ // SELF // since 6.0
4038
+ //
4039
+ struct OmpSelfModifier {
4040
+ ENUM_CLASS (Value, Self)
4041
+ WRAPPER_CLASS_BOILERPLATE (OmpSelfModifier, Value);
4042
+ };
4043
+
3966
4044
// Ref: [5.2:117-120]
3967
4045
//
3968
4046
// step-complex-modifier ->
@@ -4001,6 +4079,19 @@ struct OmpVariableCategory {
4001
4079
WRAPPER_CLASS_BOILERPLATE (OmpVariableCategory, Value);
4002
4080
};
4003
4081
4082
+ // Extension:
4083
+ // https://openmp.llvm.org//openacc/OpenMPExtensions.html#ompx-hold
4084
+ //
4085
+ // ompx-hold-modifier ->
4086
+ // OMPX_HOLD // since 4.5
4087
+ //
4088
+ // Until 5.2, it was a part of map-type-modifier. Since 6.0 the
4089
+ // map-type-modifier has been split into individual modifiers.
4090
+ struct OmpxHoldModifier {
4091
+ ENUM_CLASS (Value, Ompx_Hold)
4092
+ WRAPPER_CLASS_BOILERPLATE (OmpxHoldModifier, Value);
4093
+ };
4094
+
4004
4095
// context-selector
4005
4096
using OmpContextSelector = traits::OmpContextSelectorSpecification;
4006
4097
} // namespace modifier
@@ -4376,13 +4467,25 @@ struct OmpLinearClause {
4376
4467
// map-clause ->
4377
4468
// MAP([modifier...:] locator-list) // since 4.5
4378
4469
// modifier ->
4379
- // map-type-modifier | // since 4.5
4470
+ // map-type-modifier [replaced] | // since 4.5, until 5.2
4471
+ // always-modifier | // since 6.0
4472
+ // close-modifier | // since 6.0
4473
+ // delete-modifier | // since 6.0
4474
+ // present-modifier | // since 6.0
4475
+ // ref-modifier | // since 6.0
4476
+ // self-modifier | // since 6.0
4380
4477
// mapper | // since 5.0
4381
4478
// iterator | // since 5.1
4382
4479
// map-type // since 4.5
4480
+ // ompx-hold-modifier | // since 6.0
4481
+ //
4482
+ // Since 6.0 the map-type-modifier has been split into individual modifiers,
4483
+ // and delete-modifier has been split from map-type.
4383
4484
struct OmpMapClause {
4384
4485
TUPLE_CLASS_BOILERPLATE (OmpMapClause);
4385
- MODIFIER_BOILERPLATE (OmpMapTypeModifier, OmpMapper, OmpIterator, OmpMapType);
4486
+ MODIFIER_BOILERPLATE (OmpAlwaysModifier, OmpCloseModifier, OmpDeleteModifier,
4487
+ OmpMapTypeModifier, OmpPresentModifier, OmpRefModifier, OmpSelfModifier,
4488
+ OmpMapper, OmpIterator, OmpMapType, OmpxHoldModifier);
4386
4489
std::tuple<MODIFIERS(), OmpObjectList, /* CommaSeparated=*/ bool > t;
4387
4490
};
4388
4491
0 commit comments