[PATCH] D157994: [OpenMP] Migrate dispatch related utility functions from Clang codegen to OMPIRBuilder
This revision was automatically updated to reflect the committed changes. Closed by commit rG5d9ccd7a9693: [OpenMP] Migrate dispatch related utility functions from Clang codegen to… (authored by TIFitis). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D157994/new/ https://reviews.llvm.org/D157994 Files: clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/lib/CodeGen/CGOpenMPRuntime.h clang/test/OpenMP/ordered_codegen.cpp llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp Index: llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp === --- llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -4337,6 +4337,66 @@ return Builder.saveIP(); } +FunctionCallee +OpenMPIRBuilder::createForStaticInitFunction(unsigned IVSize, bool IVSigned, + bool IsGPUDistribute) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name; + if (IsGPUDistribute) +Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_distribute_static_init_4 + : omp::OMPRTL___kmpc_distribute_static_init_4u) + : (IVSigned ? omp::OMPRTL___kmpc_distribute_static_init_8 + : omp::OMPRTL___kmpc_distribute_static_init_8u); + else +Name = IVSize == 32 ? (IVSigned ? omp::OMPRTL___kmpc_for_static_init_4 +: omp::OMPRTL___kmpc_for_static_init_4u) +: (IVSigned ? omp::OMPRTL___kmpc_for_static_init_8 +: omp::OMPRTL___kmpc_for_static_init_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + +FunctionCallee OpenMPIRBuilder::createDispatchInitFunction(unsigned IVSize, + bool IVSigned) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_dispatch_init_4 + : omp::OMPRTL___kmpc_dispatch_init_4u) + : (IVSigned ? omp::OMPRTL___kmpc_dispatch_init_8 + : omp::OMPRTL___kmpc_dispatch_init_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + +FunctionCallee OpenMPIRBuilder::createDispatchNextFunction(unsigned IVSize, + bool IVSigned) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_dispatch_next_4 + : omp::OMPRTL___kmpc_dispatch_next_4u) + : (IVSigned ? omp::OMPRTL___kmpc_dispatch_next_8 + : omp::OMPRTL___kmpc_dispatch_next_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + +FunctionCallee OpenMPIRBuilder::createDispatchFiniFunction(unsigned IVSize, + bool IVSigned) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_dispatch_fini_4 + : omp::OMPRTL___kmpc_dispatch_fini_4u) + : (IVSigned ? omp::OMPRTL___kmpc_dispatch_fini_8 + : omp::OMPRTL___kmpc_dispatch_fini_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + // Copy input from pointer or i64 to the expected argument type. static Value *copyInput(IRBuilderBase &Builder, unsigned AddrSpace, Value *Input, Argument &Arg) { Index: llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h === --- llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h +++ llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h @@ -2146,6 +2146,24 @@ GenMapInfoCallbackTy GenMapInfoCB, TargetBodyGenCallbackTy BodyGenCB); + /// Returns __kmpc_for_static_init_* runtime function for the specified + /// size \a IVSize and sign \a IVSigned. Will create a distribute call + /// __kmpc_distribute_static_init* if \a IsGPUDistribute is set. + FunctionCallee createForStaticInitFunction(unsigned IVSize, bool IVSigned, + bool IsGPUDistribute); + + /// Returns __kmpc_dispatch_init_* runtime function for the specified + /// size \a IVSize and sign \a IVSigned. + FunctionCallee createDispatchInitFunction(unsigned IVSize, bool IVSig
[PATCH] D157994: [OpenMP] Migrate dispatch related utility functions from Clang codegen to OMPIRBuilder
TIFitis updated this revision to Diff 550729. TIFitis added a comment. Updated test with correct function attributes. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D157994/new/ https://reviews.llvm.org/D157994 Files: clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/lib/CodeGen/CGOpenMPRuntime.h clang/test/OpenMP/ordered_codegen.cpp llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp Index: llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp === --- llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -4337,6 +4337,66 @@ return Builder.saveIP(); } +FunctionCallee +OpenMPIRBuilder::createForStaticInitFunction(unsigned IVSize, bool IVSigned, + bool IsGPUDistribute) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name; + if (IsGPUDistribute) +Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_distribute_static_init_4 + : omp::OMPRTL___kmpc_distribute_static_init_4u) + : (IVSigned ? omp::OMPRTL___kmpc_distribute_static_init_8 + : omp::OMPRTL___kmpc_distribute_static_init_8u); + else +Name = IVSize == 32 ? (IVSigned ? omp::OMPRTL___kmpc_for_static_init_4 +: omp::OMPRTL___kmpc_for_static_init_4u) +: (IVSigned ? omp::OMPRTL___kmpc_for_static_init_8 +: omp::OMPRTL___kmpc_for_static_init_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + +FunctionCallee OpenMPIRBuilder::createDispatchInitFunction(unsigned IVSize, + bool IVSigned) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_dispatch_init_4 + : omp::OMPRTL___kmpc_dispatch_init_4u) + : (IVSigned ? omp::OMPRTL___kmpc_dispatch_init_8 + : omp::OMPRTL___kmpc_dispatch_init_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + +FunctionCallee OpenMPIRBuilder::createDispatchNextFunction(unsigned IVSize, + bool IVSigned) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_dispatch_next_4 + : omp::OMPRTL___kmpc_dispatch_next_4u) + : (IVSigned ? omp::OMPRTL___kmpc_dispatch_next_8 + : omp::OMPRTL___kmpc_dispatch_next_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + +FunctionCallee OpenMPIRBuilder::createDispatchFiniFunction(unsigned IVSize, + bool IVSigned) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_dispatch_fini_4 + : omp::OMPRTL___kmpc_dispatch_fini_4u) + : (IVSigned ? omp::OMPRTL___kmpc_dispatch_fini_8 + : omp::OMPRTL___kmpc_dispatch_fini_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + // Copy input from pointer or i64 to the expected argument type. static Value *copyInput(IRBuilderBase &Builder, unsigned AddrSpace, Value *Input, Argument &Arg) { Index: llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h === --- llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h +++ llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h @@ -2146,6 +2146,24 @@ GenMapInfoCallbackTy GenMapInfoCB, TargetBodyGenCallbackTy BodyGenCB); + /// Returns __kmpc_for_static_init_* runtime function for the specified + /// size \a IVSize and sign \a IVSigned. Will create a distribute call + /// __kmpc_distribute_static_init* if \a IsGPUDistribute is set. + FunctionCallee createForStaticInitFunction(unsigned IVSize, bool IVSigned, + bool IsGPUDistribute); + + /// Returns __kmpc_dispatch_init_* runtime function for the specified + /// size \a IVSize and sign \a IVSigned. + FunctionCallee createDispatchInitFunction(unsigned IVSize, bool IVSigned); + + /// Returns __kmpc_dispatch_next_* runtime function for the specified + //
[PATCH] D157994: [OpenMP] Migrate dispatch related utility functions from Clang codegen to OMPIRBuilder
jdoerfert accepted this revision. jdoerfert added a comment. This revision is now accepted and ready to land. LG, but do not remove the Attribute from our set, add it to the tests. The functions are nounwind. Comment at: llvm/include/llvm/Frontend/OpenMP/OMPKinds.def:532 MemoryAttr(MemoryEffects::argMemOnly() | MemoryEffects::inaccessibleMemOnly(ModRefInfo::Ref))) -: AttributeSet(EnumAttr(NoUnwind))) __OMP_ATTRS_SET( TIFitis wrote: > Clang test //llvm/clang/test/OpenMP/ordered_codegen.cpp// complains about the > presence of `NoUnwind` attribute for the `__kmpc_dispatch_*` functions. > > This change doesn't seem to break any other test, although I am not sure if > we should be creating a new `Attr` group for the `__kmpc_dispatch` functions > and remove the `NoUnwind` `Attr` only there. Add nounwind to the tests? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D157994/new/ https://reviews.llvm.org/D157994 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D157994: [OpenMP] Migrate dispatch related utility functions from Clang codegen to OMPIRBuilder
TIFitis added inline comments. Comment at: llvm/include/llvm/Frontend/OpenMP/OMPKinds.def:532 MemoryAttr(MemoryEffects::argMemOnly() | MemoryEffects::inaccessibleMemOnly(ModRefInfo::Ref))) -: AttributeSet(EnumAttr(NoUnwind))) __OMP_ATTRS_SET( Clang test //llvm/clang/test/OpenMP/ordered_codegen.cpp// complains about the presence of `NoUnwind` attribute for the `__kmpc_dispatch_*` functions. This change doesn't seem to break any other test, although I am not sure if we should be creating a new `Attr` group for the `__kmpc_dispatch` functions and remove the `NoUnwind` `Attr` only there. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D157994/new/ https://reviews.llvm.org/D157994 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D157994: [OpenMP] Migrate dispatch related utility functions from Clang codegen to OMPIRBuilder
TIFitis created this revision. TIFitis added reviewers: jsjodin, jdoerfert, raghavendhra. Herald added subscribers: guansong, hiraditya, yaxunl. Herald added a project: All. TIFitis requested review of this revision. Herald added subscribers: llvm-commits, cfe-commits, jplehr, sstefan1. Herald added projects: clang, LLVM. Migrate createForStaticInitFunction, createDispatchInitFunction, createDispatchNextFunction and createDispatchFiniFunction from Clang CodeGen to OMPIRBuilder. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D157994 Files: clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/lib/CodeGen/CGOpenMPRuntime.h llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h llvm/include/llvm/Frontend/OpenMP/OMPKinds.def llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp Index: llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp === --- llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp +++ llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp @@ -4331,6 +4331,66 @@ return Builder.saveIP(); } +FunctionCallee +OpenMPIRBuilder::createForStaticInitFunction(unsigned IVSize, bool IVSigned, + bool IsGPUDistribute) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name; + if (IsGPUDistribute) +Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_distribute_static_init_4 + : omp::OMPRTL___kmpc_distribute_static_init_4u) + : (IVSigned ? omp::OMPRTL___kmpc_distribute_static_init_8 + : omp::OMPRTL___kmpc_distribute_static_init_8u); + else +Name = IVSize == 32 ? (IVSigned ? omp::OMPRTL___kmpc_for_static_init_4 +: omp::OMPRTL___kmpc_for_static_init_4u) +: (IVSigned ? omp::OMPRTL___kmpc_for_static_init_8 +: omp::OMPRTL___kmpc_for_static_init_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + +FunctionCallee OpenMPIRBuilder::createDispatchInitFunction(unsigned IVSize, + bool IVSigned) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_dispatch_init_4 + : omp::OMPRTL___kmpc_dispatch_init_4u) + : (IVSigned ? omp::OMPRTL___kmpc_dispatch_init_8 + : omp::OMPRTL___kmpc_dispatch_init_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + +FunctionCallee OpenMPIRBuilder::createDispatchNextFunction(unsigned IVSize, + bool IVSigned) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_dispatch_next_4 + : omp::OMPRTL___kmpc_dispatch_next_4u) + : (IVSigned ? omp::OMPRTL___kmpc_dispatch_next_8 + : omp::OMPRTL___kmpc_dispatch_next_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + +FunctionCallee OpenMPIRBuilder::createDispatchFiniFunction(unsigned IVSize, + bool IVSigned) { + assert((IVSize == 32 || IVSize == 64) && + "IV size is not compatible with the omp runtime"); + RuntimeFunction Name = IVSize == 32 + ? (IVSigned ? omp::OMPRTL___kmpc_dispatch_fini_4 + : omp::OMPRTL___kmpc_dispatch_fini_4u) + : (IVSigned ? omp::OMPRTL___kmpc_dispatch_fini_8 + : omp::OMPRTL___kmpc_dispatch_fini_8u); + + return getOrCreateRuntimeFunction(M, Name); +} + // Copy input from pointer or i64 to the expected argument type. static Value *copyInput(IRBuilderBase &Builder, unsigned AddrSpace, Value *Input, Argument &Arg) { Index: llvm/include/llvm/Frontend/OpenMP/OMPKinds.def === --- llvm/include/llvm/Frontend/OpenMP/OMPKinds.def +++ llvm/include/llvm/Frontend/OpenMP/OMPKinds.def @@ -529,7 +529,7 @@ ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync), EnumAttr(NoFree), EnumAttr(WillReturn), MemoryAttr(MemoryEffects::argMemOnly() | MemoryEffects::inaccessibleMemOnly(ModRefInfo::Ref))) -: AttributeSet(EnumAttr(NoUnwind))) +: AttributeSet()) __OMP_ATTRS_SET( SetterAttrs, OptimisticAttributes @@ -556,7 +556,7 @@ ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync), EnumAttr(NoFree)