@@ -685,36 +685,7 @@ convertOmpSingle(omp::SingleOp &singleOp, llvm::IRBuilderBase &builder,
685
685
ompLoc, bodyCB, finiCB, singleOp.getNowait (), llvmCPVars, llvmCPFuncs));
686
686
return bodyGenStatus;
687
687
}
688
- template <typename T>
689
- static void buildDependData (T taskOrTargetop,
690
- SmallVector<llvm::OpenMPIRBuilder::DependData> &dds,
691
- LLVM::ModuleTranslation &moduleTranslation) {
692
- // std::optional<ArrayAttr> depends,
693
- // OperandRange &dependVars,
694
- if (taskOrTargetop.getDependVars ().empty ())
695
- return ;
696
- std::optional<ArrayAttr> depends = taskOrTargetop.getDepends ();
697
- const OperandRange &dependVars = taskOrTargetop.getDependVars ();
698
- for (auto dep : llvm::zip (dependVars, depends->getValue ())) {
699
- llvm::omp::RTLDependenceKindTy type;
700
- switch (
701
- cast<mlir::omp::ClauseTaskDependAttr>(std::get<1 >(dep)).getValue ()) {
702
- case mlir::omp::ClauseTaskDepend::taskdependin:
703
- type = llvm::omp::RTLDependenceKindTy::DepIn;
704
- break ;
705
- // The OpenMP runtime requires that the codegen for 'depend' clause for
706
- // 'out' dependency kind must be the same as codegen for 'depend' clause
707
- // with 'inout' dependency.
708
- case mlir::omp::ClauseTaskDepend::taskdependout:
709
- case mlir::omp::ClauseTaskDepend::taskdependinout:
710
- type = llvm::omp::RTLDependenceKindTy::DepInOut;
711
- break ;
712
- };
713
- llvm::Value *depVal = moduleTranslation.lookupValue (std::get<0 >(dep));
714
- llvm::OpenMPIRBuilder::DependData dd (type, depVal->getType (), depVal);
715
- dds.emplace_back (dd);
716
- }
717
- }
688
+
718
689
// Convert an OpenMP Teams construct to LLVM IR using OpenMPIRBuilder
719
690
static LogicalResult
720
691
convertOmpTeams (omp::TeamsOp op, llvm::IRBuilderBase &builder,
@@ -777,7 +748,28 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder,
777
748
};
778
749
779
750
SmallVector<llvm::OpenMPIRBuilder::DependData> dds;
780
- buildDependData (taskOp, dds, moduleTranslation);
751
+ if (!taskOp.getDependVars ().empty () && taskOp.getDepends ()) {
752
+ for (auto dep :
753
+ llvm::zip (taskOp.getDependVars (), taskOp.getDepends ()->getValue ())) {
754
+ llvm::omp::RTLDependenceKindTy type;
755
+ switch (
756
+ cast<mlir::omp::ClauseTaskDependAttr>(std::get<1 >(dep)).getValue ()) {
757
+ case mlir::omp::ClauseTaskDepend::taskdependin:
758
+ type = llvm::omp::RTLDependenceKindTy::DepIn;
759
+ break ;
760
+ // The OpenMP runtime requires that the codegen for 'depend' clause for
761
+ // 'out' dependency kind must be the same as codegen for 'depend' clause
762
+ // with 'inout' dependency.
763
+ case mlir::omp::ClauseTaskDepend::taskdependout:
764
+ case mlir::omp::ClauseTaskDepend::taskdependinout:
765
+ type = llvm::omp::RTLDependenceKindTy::DepInOut;
766
+ break ;
767
+ };
768
+ llvm::Value *depVal = moduleTranslation.lookupValue (std::get<0 >(dep));
769
+ llvm::OpenMPIRBuilder::DependData dd (type, depVal->getType (), depVal);
770
+ dds.emplace_back (dd);
771
+ }
772
+ }
781
773
782
774
llvm::OpenMPIRBuilder::InsertPointTy allocaIP =
783
775
findAllocaInsertPoint (builder, moduleTranslation);
0 commit comments