@@ -98,6 +98,25 @@ genAllocateClause(lower::AbstractConverter &converter,
9898 genObjectList (objects, converter, allocateOperands);
9999}
100100
101+ static mlir::omp::ClauseBindKindAttr
102+ genBindKindAttr (fir::FirOpBuilder &firOpBuilder,
103+ const omp::clause::Bind &clause) {
104+ mlir::omp::ClauseBindKind bindKind;
105+ switch (clause.v ) {
106+ case omp::clause::Bind::Binding::Teams:
107+ bindKind = mlir::omp::ClauseBindKind::Teams;
108+ break ;
109+ case omp::clause::Bind::Binding::Parallel:
110+ bindKind = mlir::omp::ClauseBindKind::Parallel;
111+ break ;
112+ case omp::clause::Bind::Binding::Thread:
113+ bindKind = mlir::omp::ClauseBindKind::Thread;
114+ break ;
115+ }
116+ return mlir::omp::ClauseBindKindAttr::get (firOpBuilder.getContext (),
117+ bindKind);
118+ }
119+
101120static mlir::omp::ClauseProcBindKindAttr
102121genProcBindKindAttr (fir::FirOpBuilder &firOpBuilder,
103122 const omp::clause::ProcBind &clause) {
@@ -199,6 +218,15 @@ static void convertLoopBounds(lower::AbstractConverter &converter,
199218// ClauseProcessor unique clauses
200219// ===----------------------------------------------------------------------===//
201220
221+ bool ClauseProcessor::processBind (mlir::omp::BindClauseOps &result) const {
222+ if (auto *clause = findUniqueClause<omp::clause::Bind>()) {
223+ fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder ();
224+ result.bindKind = genBindKindAttr (firOpBuilder, *clause);
225+ return true ;
226+ }
227+ return false ;
228+ }
229+
202230bool ClauseProcessor::processCollapse (
203231 mlir::Location currentLocation, lower::pft::Evaluation &eval,
204232 mlir::omp::LoopRelatedClauseOps &result,
0 commit comments