Skip to content

Commit f45c5f2

Browse files
author
git apple-llvm automerger
committed
Merge commit '2f3d061918ec' from llvm.org/main into next
2 parents 1c46df2 + 2f3d061 commit f45c5f2

File tree

7 files changed

+319
-317
lines changed

7 files changed

+319
-317
lines changed

flang/lib/Lower/OpenMP/ClauseProcessor.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ static void addUseDeviceClause(
181181

182182
static void convertLoopBounds(lower::AbstractConverter &converter,
183183
mlir::Location loc,
184-
mlir::omp::LoopRelatedOps &result,
184+
mlir::omp::LoopRelatedClauseOps &result,
185185
std::size_t loopVarTypeSize) {
186186
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
187187
// The types of lower bound, upper bound, and step are converted into the
@@ -203,7 +203,7 @@ static void convertLoopBounds(lower::AbstractConverter &converter,
203203

204204
bool ClauseProcessor::processCollapse(
205205
mlir::Location currentLocation, lower::pft::Evaluation &eval,
206-
mlir::omp::LoopRelatedOps &result,
206+
mlir::omp::LoopRelatedClauseOps &result,
207207
llvm::SmallVectorImpl<const semantics::Symbol *> &iv) const {
208208
bool found = false;
209209
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
@@ -855,7 +855,7 @@ bool ClauseProcessor::processIf(
855855
// Assume that, at most, a single 'if' clause will be applicable to the
856856
// given directive.
857857
if (operand) {
858-
result.ifVar = operand;
858+
result.ifExpr = operand;
859859
found = true;
860860
}
861861
});

flang/lib/Lower/OpenMP/ClauseProcessor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class ClauseProcessor {
5555
// 'Unique' clauses: They can appear at most once in the clause list.
5656
bool
5757
processCollapse(mlir::Location currentLocation, lower::pft::Evaluation &eval,
58-
mlir::omp::LoopRelatedOps &result,
58+
mlir::omp::LoopRelatedClauseOps &result,
5959
llvm::SmallVectorImpl<const semantics::Symbol *> &iv) const;
6060
bool processDevice(lower::StatementContext &stmtCtx,
6161
mlir::omp::DeviceClauseOps &result) const;

mlir/include/mlir/Dialect/OpenMP/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ mlir_tablegen(OpenMPOpsDialect.h.inc -gen-dialect-decls -dialect=omp)
1717
mlir_tablegen(OpenMPOpsDialect.cpp.inc -gen-dialect-defs -dialect=omp)
1818
mlir_tablegen(OpenMPOps.h.inc -gen-op-decls)
1919
mlir_tablegen(OpenMPOps.cpp.inc -gen-op-defs)
20+
mlir_tablegen(OpenMPClauseOps.h.inc -gen-openmp-clause-ops)
2021
mlir_tablegen(OpenMPOpsTypes.h.inc -gen-typedef-decls -typedefs-dialect=omp)
2122
mlir_tablegen(OpenMPOpsTypes.cpp.inc -gen-typedef-defs -typedefs-dialect=omp)
2223
mlir_tablegen(OpenMPOpsEnums.h.inc -gen-enum-decls)

mlir/include/mlir/Dialect/OpenMP/OpenMPClauseOperands.h

Lines changed: 10 additions & 282 deletions
Original file line numberDiff line numberDiff line change
@@ -23,303 +23,31 @@
2323
#define GET_ATTRDEF_CLASSES
2424
#include "mlir/Dialect/OpenMP/OpenMPOpsAttributes.h.inc"
2525

26+
#include "mlir/Dialect/OpenMP/OpenMPClauseOps.h.inc"
27+
2628
namespace mlir {
2729
namespace omp {
2830

2931
//===----------------------------------------------------------------------===//
30-
// Mixin structures defining MLIR operands associated with each OpenMP clause.
32+
// Extra clause operand structures.
3133
//===----------------------------------------------------------------------===//
3234

33-
struct AlignedClauseOps {
34-
llvm::SmallVector<Value> alignedVars;
35-
llvm::SmallVector<Attribute> alignments;
36-
};
37-
38-
struct AllocateClauseOps {
39-
llvm::SmallVector<Value> allocateVars, allocatorVars;
40-
};
41-
42-
struct CancelDirectiveNameClauseOps {
43-
ClauseCancellationConstructTypeAttr cancelDirective;
44-
};
45-
46-
struct CopyprivateClauseOps {
47-
llvm::SmallVector<Value> copyprivateVars;
48-
llvm::SmallVector<Attribute> copyprivateSyms;
49-
};
50-
51-
struct CriticalNameClauseOps {
52-
/// This field has a generic name because it's mirroring the `sym_name`
53-
/// argument of the `OpenMP_CriticalNameClause` tablegen definition. That one
54-
/// can't be renamed to anything more specific because the `sym_name` name is
55-
/// a requirement of the `Symbol` MLIR trait associated with that clause.
56-
StringAttr symName;
57-
};
58-
59-
struct DependClauseOps {
60-
llvm::SmallVector<Attribute> dependKinds;
61-
llvm::SmallVector<Value> dependVars;
62-
};
63-
64-
struct DeviceClauseOps {
65-
Value device;
66-
};
67-
6835
struct DeviceTypeClauseOps {
69-
// The default capture type.
36+
/// The default capture type.
7037
DeclareTargetDeviceType deviceType = DeclareTargetDeviceType::any;
7138
};
7239

73-
struct DistScheduleClauseOps {
74-
UnitAttr distScheduleStatic;
75-
Value distScheduleChunkSize;
76-
};
77-
78-
struct DoacrossClauseOps {
79-
ClauseDependAttr doacrossDependType;
80-
IntegerAttr doacrossNumLoops;
81-
llvm::SmallVector<Value> doacrossDependVars;
82-
};
83-
84-
struct FilterClauseOps {
85-
Value filteredThreadId;
86-
};
87-
88-
struct FinalClauseOps {
89-
Value final;
90-
};
91-
92-
struct GrainsizeClauseOps {
93-
Value grainsize;
94-
};
95-
96-
struct HasDeviceAddrClauseOps {
97-
llvm::SmallVector<Value> hasDeviceAddrVars;
98-
};
99-
100-
struct HintClauseOps {
101-
IntegerAttr hint;
102-
};
103-
104-
struct IfClauseOps {
105-
Value ifVar;
106-
};
107-
108-
struct InReductionClauseOps {
109-
llvm::SmallVector<Value> inReductionVars;
110-
llvm::SmallVector<bool> inReductionByref;
111-
llvm::SmallVector<Attribute> inReductionSyms;
112-
};
113-
114-
struct IsDevicePtrClauseOps {
115-
llvm::SmallVector<Value> isDevicePtrVars;
116-
};
117-
118-
struct LinearClauseOps {
119-
llvm::SmallVector<Value> linearVars, linearStepVars;
120-
};
121-
122-
struct LoopRelatedOps {
123-
llvm::SmallVector<Value> loopLowerBounds, loopUpperBounds, loopSteps;
124-
UnitAttr loopInclusive;
125-
};
126-
127-
struct MapClauseOps {
128-
llvm::SmallVector<Value> mapVars;
129-
};
130-
131-
struct MergeableClauseOps {
132-
UnitAttr mergeable;
133-
};
134-
135-
struct NogroupClauseOps {
136-
UnitAttr nogroup;
137-
};
138-
139-
struct NontemporalClauseOps {
140-
llvm::SmallVector<Value> nontemporalVars;
141-
};
142-
143-
struct NowaitClauseOps {
144-
UnitAttr nowait;
145-
};
146-
147-
struct NumTasksClauseOps {
148-
Value numTasks;
149-
};
150-
151-
struct NumTeamsClauseOps {
152-
Value numTeamsLower, numTeamsUpper;
153-
};
154-
155-
struct NumThreadsClauseOps {
156-
Value numThreads;
157-
};
158-
159-
struct OrderClauseOps {
160-
ClauseOrderKindAttr order;
161-
OrderModifierAttr orderMod;
162-
};
163-
164-
struct OrderedClauseOps {
165-
IntegerAttr ordered;
166-
};
167-
168-
struct ParallelizationLevelClauseOps {
169-
UnitAttr parLevelSimd;
170-
};
171-
172-
struct PriorityClauseOps {
173-
Value priority;
174-
};
175-
176-
struct PrivateClauseOps {
177-
// SSA values that correspond to "original" values being privatized.
178-
// They refer to the SSA value outside the OpenMP region from which a clone is
179-
// created inside the region.
180-
llvm::SmallVector<Value> privateVars;
181-
// The list of symbols referring to delayed privatizer ops (i.e. `omp.private`
182-
// ops).
183-
llvm::SmallVector<Attribute> privateSyms;
184-
};
185-
186-
struct ProcBindClauseOps {
187-
ClauseProcBindKindAttr procBindKind;
188-
};
189-
190-
struct ReductionClauseOps {
191-
llvm::SmallVector<Value> reductionVars;
192-
llvm::SmallVector<bool> reductionByref;
193-
llvm::SmallVector<Attribute> reductionSyms;
194-
};
195-
196-
struct SafelenClauseOps {
197-
IntegerAttr safelen;
198-
};
199-
200-
struct ScheduleClauseOps {
201-
ClauseScheduleKindAttr scheduleKind;
202-
Value scheduleChunk;
203-
ScheduleModifierAttr scheduleMod;
204-
UnitAttr scheduleSimd;
205-
};
206-
207-
struct SimdlenClauseOps {
208-
IntegerAttr simdlen;
209-
};
210-
211-
struct TaskReductionClauseOps {
212-
llvm::SmallVector<Value> taskReductionVars;
213-
llvm::SmallVector<bool> taskReductionByref;
214-
llvm::SmallVector<Attribute> taskReductionSyms;
215-
};
216-
217-
struct ThreadLimitClauseOps {
218-
Value threadLimit;
219-
};
220-
221-
struct UntiedClauseOps {
222-
UnitAttr untied;
223-
};
224-
225-
struct UseDeviceAddrClauseOps {
226-
llvm::SmallVector<Value> useDeviceAddrVars;
227-
};
228-
229-
struct UseDevicePtrClauseOps {
230-
llvm::SmallVector<Value> useDevicePtrVars;
231-
};
232-
23340
//===----------------------------------------------------------------------===//
234-
// Structures defining clause operands associated with each OpenMP leaf
235-
// construct.
236-
//
237-
// These mirror the arguments expected by the corresponding OpenMP MLIR ops.
41+
// Extra operation operand structures.
23842
//===----------------------------------------------------------------------===//
23943

240-
namespace detail {
241-
template <typename... Mixins>
242-
struct Clauses : public Mixins... {};
243-
} // namespace detail
244-
245-
using CancelOperands =
246-
detail::Clauses<CancelDirectiveNameClauseOps, IfClauseOps>;
247-
248-
using CancellationPointOperands = detail::Clauses<CancelDirectiveNameClauseOps>;
249-
250-
using CriticalDeclareOperands =
251-
detail::Clauses<CriticalNameClauseOps, HintClauseOps>;
252-
253-
// TODO `indirect` clause.
44+
// TODO: Add `indirect` clause.
25445
using DeclareTargetOperands = detail::Clauses<DeviceTypeClauseOps>;
25546

256-
using DistributeOperands =
257-
detail::Clauses<AllocateClauseOps, DistScheduleClauseOps, OrderClauseOps,
258-
PrivateClauseOps>;
259-
260-
using LoopNestOperands = detail::Clauses<LoopRelatedOps>;
261-
262-
using MaskedOperands = detail::Clauses<FilterClauseOps>;
263-
264-
using OrderedOperands = detail::Clauses<DoacrossClauseOps>;
265-
266-
using OrderedRegionOperands = detail::Clauses<ParallelizationLevelClauseOps>;
267-
268-
using ParallelOperands =
269-
detail::Clauses<AllocateClauseOps, IfClauseOps, NumThreadsClauseOps,
270-
PrivateClauseOps, ProcBindClauseOps, ReductionClauseOps>;
271-
272-
using SectionsOperands = detail::Clauses<AllocateClauseOps, NowaitClauseOps,
273-
PrivateClauseOps, ReductionClauseOps>;
274-
275-
using SimdOperands =
276-
detail::Clauses<AlignedClauseOps, IfClauseOps, LinearClauseOps,
277-
NontemporalClauseOps, OrderClauseOps, PrivateClauseOps,
278-
ReductionClauseOps, SafelenClauseOps, SimdlenClauseOps>;
279-
280-
using SingleOperands = detail::Clauses<AllocateClauseOps, CopyprivateClauseOps,
281-
NowaitClauseOps, PrivateClauseOps>;
282-
283-
// TODO `defaultmap`, `uses_allocators` clauses.
284-
using TargetOperands =
285-
detail::Clauses<AllocateClauseOps, DependClauseOps, DeviceClauseOps,
286-
HasDeviceAddrClauseOps, IfClauseOps, InReductionClauseOps,
287-
IsDevicePtrClauseOps, MapClauseOps, NowaitClauseOps,
288-
PrivateClauseOps, ThreadLimitClauseOps>;
289-
290-
using TargetDataOperands =
291-
detail::Clauses<DeviceClauseOps, IfClauseOps, MapClauseOps,
292-
UseDeviceAddrClauseOps, UseDevicePtrClauseOps>;
293-
294-
using TargetEnterExitUpdateDataOperands =
295-
detail::Clauses<DependClauseOps, DeviceClauseOps, IfClauseOps, MapClauseOps,
296-
NowaitClauseOps>;
297-
298-
// TODO `affinity`, `detach` clauses.
299-
using TaskOperands =
300-
detail::Clauses<AllocateClauseOps, DependClauseOps, FinalClauseOps,
301-
IfClauseOps, InReductionClauseOps, MergeableClauseOps,
302-
PriorityClauseOps, PrivateClauseOps, UntiedClauseOps>;
303-
304-
using TaskgroupOperands =
305-
detail::Clauses<AllocateClauseOps, TaskReductionClauseOps>;
306-
307-
using TaskloopOperands =
308-
detail::Clauses<AllocateClauseOps, FinalClauseOps, GrainsizeClauseOps,
309-
IfClauseOps, InReductionClauseOps, MergeableClauseOps,
310-
NogroupClauseOps, NumTasksClauseOps, PriorityClauseOps,
311-
PrivateClauseOps, ReductionClauseOps, UntiedClauseOps>;
312-
313-
using TaskwaitOperands = detail::Clauses<DependClauseOps, NowaitClauseOps>;
314-
315-
using TeamsOperands =
316-
detail::Clauses<AllocateClauseOps, IfClauseOps, NumTeamsClauseOps,
317-
PrivateClauseOps, ReductionClauseOps, ThreadLimitClauseOps>;
318-
319-
using WsloopOperands =
320-
detail::Clauses<AllocateClauseOps, LinearClauseOps, NowaitClauseOps,
321-
OrderClauseOps, OrderedClauseOps, PrivateClauseOps,
322-
ReductionClauseOps, ScheduleClauseOps>;
47+
/// omp.target_enter_data, omp.target_exit_data and omp.target_update take the
48+
/// same clauses, so we give the structure to be shared by all of them a
49+
/// representative name.
50+
using TargetEnterExitUpdateDataOperands = TargetEnterDataOperands;
32351

32452
} // namespace omp
32553
} // namespace mlir

0 commit comments

Comments
 (0)