aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Huber <jhuber6@vols.utk.edu>2021-07-21 15:52:04 -0400
committerHuber, Joseph <huberjn@ornl.gov>2021-07-21 21:18:26 -0400
commit16206d17cd9e6b473673204c458e5f20bcc59fb1 (patch)
treee24d4efb60eba3cdc4c068360e20cc0c34afdca7
parent196fe994b8cccd986f4a63530d494cdd04cd04db (diff)
downloadllvm-16206d17cd9e6b473673204c458e5f20bcc59fb1.zip
llvm-16206d17cd9e6b473673204c458e5f20bcc59fb1.tar.gz
llvm-16206d17cd9e6b473673204c458e5f20bcc59fb1.tar.bz2
[OpenMP] Strip NoInline from known OpenMP runtime functions
This patch strips the NoInline attribute from known OpenMP runtime functions. This is done so that we can denote certain runtime functions as NoInline to ensure their call sites are intact so they can be checked by OpenMPOpt. We don't wan't this noinline attribute to remain for any functions after OpenMPOpt has been run however. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D106482
-rw-r--r--llvm/lib/Transforms/IPO/OpenMPOpt.cpp1
-rw-r--r--llvm/test/Transforms/OpenMP/add_attributes.ll8
2 files changed, 5 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
index 85b11e80..c82fa69 100644
--- a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+++ b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp
@@ -414,6 +414,7 @@ struct OMPInformationCache : public InformationCache {
RTLFunctions.insert(F); \
if (declMatchesRTFTypes(F, OMPBuilder._ReturnType, ArgsTypes)) { \
RuntimeFunctionIDMap[F] = _Enum; \
+ F->removeFnAttr(Attribute::NoInline); \
auto &RFI = RFIs[_Enum]; \
RFI.Kind = _Enum; \
RFI.Name = _Name; \
diff --git a/llvm/test/Transforms/OpenMP/add_attributes.ll b/llvm/test/Transforms/OpenMP/add_attributes.ll
index d0edeb0..f519a59 100644
--- a/llvm/test/Transforms/OpenMP/add_attributes.ll
+++ b/llvm/test/Transforms/OpenMP/add_attributes.ll
@@ -666,10 +666,10 @@ declare i8* @__kmpc_task_reduction_modifier_init(i8*, i32, i32, i32, i8*)
declare void @__kmpc_proxy_task_completed_ooo(i8*)
-; Function Attrs: noinline
+; Function Attrs: noinline cold
declare void @__kmpc_barrier_simple_spmd(%struct.ident_t* nocapture nofree readonly, i32) #0
-attributes #0 = { noinline }
+attributes #0 = { noinline cold }
; CHECK: ; Function Attrs: nounwind
; CHECK-NEXT: declare dso_local void @omp_set_num_threads(i32)
@@ -1208,7 +1208,7 @@ attributes #0 = { noinline }
; CHECK: ; Function Attrs: nounwind
; CHECK-NEXT: declare void @__kmpc_proxy_task_completed_ooo(i8*)
-; CHECK: ; Function Attrs: convergent noinline nounwind
+; CHECK: ; Function Attrs: cold convergent nounwind
; CHECK-NEXT: declare void @__kmpc_barrier_simple_spmd(%struct.ident_t* nocapture nofree readonly, i32)
; OPTIMISTIC: ; Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn writeonly
@@ -1736,7 +1736,7 @@ attributes #0 = { noinline }
; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind willreturn
; OPTIMISTIC-NEXT: declare void @__kmpc_proxy_task_completed_ooo(i8*)
-; OPTIMISTIC: ; Function Attrs: convergent noinline nounwind
+; OPTIMISTIC: ; Function Attrs: cold convergent nounwind
; OPTIMISTIC-NEXT: declare void @__kmpc_barrier_simple_spmd(%struct.ident_t* nocapture nofree readonly, i32)
!llvm.module.flags = !{!0}