@@ -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) {
@@ -204,6 +223,15 @@ static void convertLoopBounds(lower::AbstractConverter &converter,
204223// ClauseProcessor unique clauses
205224// ===----------------------------------------------------------------------===//
206225
226+ bool ClauseProcessor::processBind (mlir::omp::BindClauseOps &result) const {
227+ if (auto *clause = findUniqueClause<omp::clause::Bind>()) {
228+ fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder ();
229+ result.bindKind = genBindKindAttr (firOpBuilder, *clause);
230+ return true ;
231+ }
232+ return false ;
233+ }
234+
207235bool ClauseProcessor::processCollapse (
208236 mlir::Location currentLocation, lower::pft::Evaluation &eval,
209237 mlir::omp::LoopRelatedClauseOps &result,
0 commit comments