jdoerfert accepted this revision. jdoerfert added a comment. This revision is now accepted and ready to land.
Apologies for the wait. I think with the comments below this is good to go. If you have questions or concerns, let me know. Thanks for these changes! ================ Comment at: llvm/include/llvm/Frontend/OpenMP/OMPKinds.def:587 + ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(WillReturn)) : AttributeSet(EnumAttr(NoUnwind))) ---------------- I think (for now) we should even remove willreturn here. I'm not sure we have forward progress guarantees for C + OpenMP :( ================ Comment at: llvm/include/llvm/Frontend/OpenMP/OMPKinds.def:621 + ? AttributeSet(EnumAttr(WriteOnly), EnumAttr(NoFree)) + : AttributeSet()) + ---------------- Here and above, `nocapture`. ================ Comment at: llvm/include/llvm/Frontend/OpenMP/OMPKinds.def:632 + EnumAttrInt(DereferenceableOrNull, 8)) + : AttributeSet()) + ---------------- I guess this means the attribute is returned, right? If we are sure it is, we can add the `returned` attribute. I checked `__kmpc_threadprivate_cached` and I wasn't sure the argument is actually returned, maybe I misunderstand what this means. We could add a comment here. We should also not go for alignment or dereferenceability for now. ================ Comment at: llvm/include/llvm/Frontend/OpenMP/OMPKinds.def:729 +__OMP_RTL_ATTRS(__kmpc_end_critical, BarrierAttrs, AttributeSet(), + ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet())) + ---------------- I think this will mitigate PR46210, which is good! ================ Comment at: llvm/test/Transforms/OpenMP/add_attributes.ll:1542 +; OPTIMISTIC: ; Function Attrs: inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn +; OPTIMISTIC-NEXT: declare void @__kmpc_end_single(%struct.ident_t* nofree readonly, i32) + ---------------- the `single` ones should be barrier like ================ Comment at: llvm/test/Transforms/OpenMP/add_attributes.ll:1551 +; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind willreturn +; OPTIMISTIC-NEXT: declare void @__kmpc_end_taskgroup(%struct.ident_t* nofree readonly, i32) + ---------------- barrier like ================ Comment at: llvm/test/Transforms/OpenMP/add_attributes.ll:1614 +; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind willreturn +; OPTIMISTIC-NEXT: declare void @__kmpc_omp_wait_deps(%struct.ident_t* nofree readonly, i32, i32, i8* nofree readonly, i32, i8*) + ---------------- barrier like, probably all `wait` functions ================ Comment at: llvm/test/Transforms/OpenMP/add_attributes.ll:1653 +; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind willreturn +; OPTIMISTIC-NEXT: declare void @__kmpc_doacross_wait(%struct.ident_t* nofree readonly, i32, i64* nofree readonly) + ---------------- this is a barrier like directive. Let's just mark all doacross as such for now. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D81031/new/ https://reviews.llvm.org/D81031 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits