https://github.com/JonPsson1 updated 
https://github.com/llvm/llvm-project/pull/232938

>From 8d844d8022e0dba488efa7b42dd5d41ae406f7a4 Mon Sep 17 00:00:00 2001
From: Jonas Paulsson <[email protected]>
Date: Fri, 16 Oct 2026 13:24:44 -0700
Subject: [PATCH] [OpenMP] Add arg extensions.

---
 .../taskloop_strictmodifier_codegen.cpp       | 64 +++++++++----------
 .../include/llvm/Frontend/OpenMP/OMPKinds.def |  9 ++-
 llvm/test/Transforms/OpenMP/add_attributes.ll | 24 ++++++-
 3 files changed, 63 insertions(+), 34 deletions(-)

diff --git a/clang/test/OpenMP/taskloop_strictmodifier_codegen.cpp 
b/clang/test/OpenMP/taskloop_strictmodifier_codegen.cpp
index 546762d540f1c..813a5c47b1def 100644
--- a/clang/test/OpenMP/taskloop_strictmodifier_codegen.cpp
+++ b/clang/test/OpenMP/taskloop_strictmodifier_codegen.cpp
@@ -35,7 +35,7 @@ struct S {
 #endif
 
 
-// CHECK-LABEL: define noundef i32 @main(
+// CHECK-LABEL: define noundef i32 @main(-
 // CHECK-SAME: i32 noundef [[ARGC:%.*]], ptr noundef [[ARGV:%.*]]) 
local_unnamed_addr #[[ATTR0:[0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
 // CHECK-NEXT:    [[ARGC_ADDR:%.*]] = alloca i32, align 4
@@ -63,7 +63,7 @@ struct S {
 // CHECK-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP7]], 
i64 72
 // CHECK-NEXT:    store i64 0, ptr [[TMP11]], align 8
 // CHECK-NEXT:    [[TMP12:%.*]] = zext i32 [[TMP6]] to i64
-// CHECK-NEXT:    tail call void @__kmpc_taskloop_5(ptr nonnull @[[GLOB1]], 
i32 [[TMP0]], ptr [[TMP7]], i32 1, ptr nonnull [[TMP8]], ptr nonnull [[TMP9]], 
i64 1, i32 1, i32 1, i64 [[TMP12]], i32 1, ptr null) #[[ATTR1:[0-9]+]]
+// CHECK-NEXT:    tail call void @__kmpc_taskloop_5(ptr nonnull @[[GLOB1]], 
i32 [[TMP0]], ptr [[TMP7]], i32 1, ptr nonnull [[TMP8]], ptr nonnull [[TMP9]], 
i64 1, i32 1, i32 1, i64 [[TMP12]], i32 1, ptr null)
 // CHECK-NEXT:    tail call void @__kmpc_end_master(ptr nonnull @[[GLOB1]], 
i32 [[TMP0]])
 // CHECK-NEXT:    br label %[[OMP_IF_END]]
 // CHECK:       [[OMP_IF_END]]:
@@ -100,7 +100,7 @@ struct S {
 // CHECK-NEXT:    store i64 1, ptr [[TMP24]], align 8, !tbaa [[LONG_TBAA16]]
 // CHECK-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw i8, ptr 
[[TMP18]], i64 72
 // CHECK-NEXT:    store i64 0, ptr [[TMP25]], align 8
-// CHECK-NEXT:    call void @__kmpc_taskloop_5(ptr nonnull @[[GLOB1]], i32 
[[TMP0]], ptr nonnull [[TMP18]], i32 [[TMP21]], ptr nonnull [[TMP22]], ptr 
nonnull [[TMP23]], i64 1, i32 1, i32 2, i64 4, i32 1, ptr null) #[[ATTR1]]
+// CHECK-NEXT:    call void @__kmpc_taskloop_5(ptr nonnull @[[GLOB1]], i32 
[[TMP0]], ptr nonnull [[TMP18]], i32 [[TMP21]], ptr nonnull [[TMP22]], ptr 
nonnull [[TMP23]], i64 1, i32 1, i32 2, i64 4, i32 1, ptr null)
 // CHECK-NEXT:    call void @__kmpc_end_taskgroup(ptr nonnull @[[GLOB1]], i32 
[[TMP0]])
 // CHECK-NEXT:    call void @__kmpc_end_master(ptr nonnull @[[GLOB1]], i32 
[[TMP0]])
 // CHECK-NEXT:    br label %[[OMP_IF_END17]]
@@ -134,15 +134,15 @@ struct S {
 // CHECK-NEXT:    [[TMP3:%.*]] = load i64, ptr [[TMP2]], align 8, !tbaa 
[[LONG_TBAA29:![0-9]+]]
 // CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP1]], 
i64 48
 // CHECK-NEXT:    [[TMP5:%.*]] = load i64, ptr [[TMP4]], align 8, !tbaa 
[[LONG_TBAA30:![0-9]+]]
-// CHECK-NEXT:    [[SEXT:%.*]] = shl i64 [[TMP3]], 32
-// CHECK-NEXT:    [[TMP6:%.*]] = ashr exact i64 [[SEXT]], 32
+// CHECK-NEXT:    [[TMP6:%.*]] = shl i64 [[TMP3]], 32
+// CHECK-NEXT:    [[TMP7:%.*]] = ashr exact i64 [[TMP6]], 32
 // CHECK-NEXT:    br label %[[OMP_INNER_FOR_COND_I:.*]]
 // CHECK:       [[OMP_INNER_FOR_COND_I]]:
-// CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], 
%[[OMP_INNER_FOR_COND_I]] ], [ [[TMP6]], %[[ENTRY]] ]
+// CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], 
%[[OMP_INNER_FOR_COND_I]] ], [ [[TMP7]], %[[ENTRY]] ]
 // CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp ult i64 [[TMP5]], [[INDVARS_IV]]
 // CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1
-// CHECK-NEXT:    br i1 [[CMP_NOT_I]], [[DOTOMP_OUTLINED__1_EXIT:label %.*]], 
label %[[OMP_INNER_FOR_COND_I]]
-// CHECK:       [[_OMP_OUTLINED__1_EXIT:.*:]]
+// CHECK-NEXT:    br i1 [[CMP_NOT_I]], label %[[DOTOMP_OUTLINED__1_EXIT:.*]], 
label %[[OMP_INNER_FOR_COND_I]]
+// CHECK:       [[DOTOMP_OUTLINED__1_EXIT]]:
 // CHECK-NEXT:    ret i32 0
 //
 //
@@ -151,7 +151,7 @@ struct S {
 // CHECK-NEXT:  [[ENTRY:.*:]]
 // CHECK-NEXT:    [[TMP2:%.*]] = tail call i32 @__kmpc_master(ptr nonnull 
@[[GLOB1]], i32 [[TMP0]])
 // CHECK-NEXT:    [[DOTNOT_I:%.*]] = icmp eq i32 [[TMP2]], 0
-// CHECK-NEXT:    br i1 [[DOTNOT_I]], [[DOTOMP_OUTLINED__EXIT:label %.*]], 
label %[[OMP_IF_THEN_I:.*]]
+// CHECK-NEXT:    br i1 [[DOTNOT_I]], label %[[DOTOMP_OUTLINED__EXIT:.*]], 
label %[[OMP_IF_THEN_I:.*]]
 // CHECK:       [[OMP_IF_THEN_I]]:
 // CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP1]], 
i64 40
 // CHECK-NEXT:    tail call void @__kmpc_taskgroup(ptr nonnull @[[GLOB1]], i32 
[[TMP0]])
@@ -170,8 +170,8 @@ struct S {
 // CHECK-NEXT:    tail call void @__kmpc_taskloop(ptr nonnull @[[GLOB1]], i32 
[[TMP0]], ptr [[TMP5]], i32 1, ptr nonnull [[TMP7]], ptr nonnull [[TMP8]], i64 
1, i32 1, i32 0, i64 0, ptr null)
 // CHECK-NEXT:    tail call void @__kmpc_end_taskgroup(ptr nonnull @[[GLOB1]], 
i32 [[TMP0]])
 // CHECK-NEXT:    tail call void @__kmpc_end_master(ptr nonnull @[[GLOB1]], 
i32 [[TMP0]])
-// CHECK-NEXT:    br [[DOTOMP_OUTLINED__EXIT]]
-// CHECK:       [[_OMP_OUTLINED__EXIT:.*:]]
+// CHECK-NEXT:    br label %[[DOTOMP_OUTLINED__EXIT]]
+// CHECK:       [[DOTOMP_OUTLINED__EXIT]]:
 // CHECK-NEXT:    ret i32 0
 //
 //
@@ -182,15 +182,15 @@ struct S {
 // CHECK-NEXT:    [[TMP3:%.*]] = load i64, ptr [[TMP2]], align 8, !tbaa 
[[LONG_TBAA29]]
 // CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP1]], 
i64 48
 // CHECK-NEXT:    [[TMP5:%.*]] = load i64, ptr [[TMP4]], align 8, !tbaa 
[[LONG_TBAA30]]
-// CHECK-NEXT:    [[SEXT:%.*]] = shl i64 [[TMP3]], 32
-// CHECK-NEXT:    [[TMP6:%.*]] = ashr exact i64 [[SEXT]], 32
+// CHECK-NEXT:    [[TMP6:%.*]] = shl i64 [[TMP3]], 32
+// CHECK-NEXT:    [[TMP7:%.*]] = ashr exact i64 [[TMP6]], 32
 // CHECK-NEXT:    br label %[[OMP_INNER_FOR_COND_I:.*]]
 // CHECK:       [[OMP_INNER_FOR_COND_I]]:
-// CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], 
%[[OMP_INNER_FOR_COND_I]] ], [ [[TMP6]], %[[ENTRY]] ]
+// CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], 
%[[OMP_INNER_FOR_COND_I]] ], [ [[TMP7]], %[[ENTRY]] ]
 // CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp ult i64 [[TMP5]], [[INDVARS_IV]]
 // CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1
-// CHECK-NEXT:    br i1 [[CMP_NOT_I]], [[DOTOMP_OUTLINED__3_EXIT:label %.*]], 
label %[[OMP_INNER_FOR_COND_I]]
-// CHECK:       [[_OMP_OUTLINED__3_EXIT:.*:]]
+// CHECK-NEXT:    br i1 [[CMP_NOT_I]], label %[[DOTOMP_OUTLINED__3_EXIT:.*]], 
label %[[OMP_INNER_FOR_COND_I]]
+// CHECK:       [[DOTOMP_OUTLINED__3_EXIT]]:
 // CHECK-NEXT:    ret i32 0
 //
 //
@@ -206,7 +206,7 @@ struct S {
 // CHECK-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TMP2]], align 8, !tbaa 
[[INTPTR_TBAA34:![0-9]+]], !alias.scope [[META31]], !nonnull 
[[META36:![0-9]+]], !align [[META37:![0-9]+]]
 // CHECK-NEXT:    [[TMP8:%.*]] = load i32, ptr [[TMP7]], align 4, !tbaa 
[[INT_TBAA7]], !noalias [[META31]]
 // CHECK-NEXT:    [[CMP_I:%.*]] = icmp sgt i32 [[TMP8]], 0
-// CHECK-NEXT:    br i1 [[CMP_I]], label %[[LAND_LHS_TRUE_I:.*]], 
[[DOTOMP_OUTLINED__5_EXIT:label %.*]]
+// CHECK-NEXT:    br i1 [[CMP_I]], label %[[LAND_LHS_TRUE_I:.*]], label 
%[[DOTOMP_OUTLINED__5_EXIT:.*]]
 // CHECK:       [[LAND_LHS_TRUE_I]]:
 // CHECK-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP2]], 
i64 8
 // CHECK-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 8, !tbaa 
[[CHARPTR_TBAA38:![0-9]+]], !alias.scope [[META31]], !nonnull [[META36]], 
!align [[META39:![0-9]+]]
@@ -218,13 +218,13 @@ struct S {
 // CHECK-NEXT:    [[TMP13:%.*]] = load i8, ptr [[ARRAYIDX5_I]], align 1, !tbaa 
[[CHAR_TBAA20]], !noalias [[META31]]
 // CHECK-NEXT:    [[CONV_I:%.*]] = sext i8 [[TMP13]] to i32
 // CHECK-NEXT:    [[CMP13_I:%.*]] = icmp slt i32 [[TMP8]], [[CONV_I]]
-// CHECK-NEXT:    br i1 [[CMP13_I]], label %[[OMP_INNER_FOR_COND_I:.*]], 
[[DOTOMP_OUTLINED__5_EXIT]]
+// CHECK-NEXT:    br i1 [[CMP13_I]], label %[[OMP_INNER_FOR_COND_I:.*]], label 
%[[DOTOMP_OUTLINED__5_EXIT]]
 // CHECK:       [[OMP_INNER_FOR_COND_I]]:
 // CHECK-NEXT:    [[DOTOMP_IV_0_I:%.*]] = phi i64 [ [[ADD46_I:%.*]], 
%[[OMP_INNER_FOR_COND_I]] ], [ [[TMP4]], %[[LAND_LHS_TRUE_I]] ]
 // CHECK-NEXT:    [[CMP16_NOT_I:%.*]] = icmp ugt i64 [[DOTOMP_IV_0_I]], 
[[TMP6]]
 // CHECK-NEXT:    [[ADD46_I]] = add nsw i64 [[DOTOMP_IV_0_I]], 1
-// CHECK-NEXT:    br i1 [[CMP16_NOT_I]], [[DOTOMP_OUTLINED__5_EXIT]], label 
%[[OMP_INNER_FOR_COND_I]]
-// CHECK:       [[_OMP_OUTLINED__5_EXIT:.*:]]
+// CHECK-NEXT:    br i1 [[CMP16_NOT_I]], label %[[DOTOMP_OUTLINED__5_EXIT]], 
label %[[OMP_INNER_FOR_COND_I]]
+// CHECK:       [[DOTOMP_OUTLINED__5_EXIT]]:
 // CHECK-NEXT:    ret i32 0
 //
 //
@@ -238,20 +238,20 @@ struct S {
 // CHECK-NEXT:    [[SEXT:%.*]] = shl i64 [[TMP3]], 32
 // CHECK-NEXT:    [[CONV1_I2:%.*]] = ashr exact i64 [[SEXT]], 32
 // CHECK-NEXT:    [[CMP_NOT_I3:%.*]] = icmp ult i64 [[TMP5]], [[CONV1_I2]]
-// CHECK-NEXT:    br i1 [[CMP_NOT_I3]], [[DOTOMP_OUTLINED__7_EXIT:label %.*]], 
label %[[OMP_INNER_FOR_BODY_I:.*]]
+// CHECK-NEXT:    br i1 [[CMP_NOT_I3]], label %[[DOTOMP_OUTLINED__7_EXIT:.*]], 
label %[[OMP_INNER_FOR_BODY_I:.*]]
 // CHECK:       [[OMP_INNER_FOR_BODY_I]]:
 // CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], 
%[[DOTCANCEL_CONTINUE_I:.*]] ], [ [[CONV1_I2]], %[[ENTRY]] ]
 // CHECK-NEXT:    [[TMP6:%.*]] = tail call i32 @__kmpc_cancel(ptr nonnull 
@[[GLOB1]], i32 [[TMP0]], i32 4)
 // CHECK-NEXT:    [[DOTNOT_I:%.*]] = icmp eq i32 [[TMP6]], 0
-// CHECK-NEXT:    br i1 [[DOTNOT_I]], label %[[DOTCANCEL_CONTINUE_I]], 
[[DOTOMP_OUTLINED__7_EXIT]]
-// CHECK:       [[_CANCEL_CONTINUE_I:.*:]]
+// CHECK-NEXT:    br i1 [[DOTNOT_I]], label %[[DOTCANCEL_CONTINUE_I]], label 
%[[DOTOMP_OUTLINED__7_EXIT]]
+// CHECK:       [[DOTCANCEL_CONTINUE_I]]:
 // CHECK-NEXT:    [[TMP7:%.*]] = tail call i32 @__kmpc_cancellationpoint(ptr 
nonnull @[[GLOB1]], i32 [[TMP0]], i32 4)
 // CHECK-NEXT:    [[DOTNOT12_I:%.*]] = icmp ne i32 [[TMP7]], 0
 // CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1
 // CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp ult i64 [[TMP5]], 
[[INDVARS_IV_NEXT]]
 // CHECK-NEXT:    [[OR_COND:%.*]] = select i1 [[DOTNOT12_I]], i1 true, i1 
[[CMP_NOT_I]]
-// CHECK-NEXT:    br i1 [[OR_COND]], [[DOTOMP_OUTLINED__7_EXIT]], label 
%[[OMP_INNER_FOR_BODY_I]]
-// CHECK:       [[_OMP_OUTLINED__7_EXIT:.*:]]
+// CHECK-NEXT:    br i1 [[OR_COND]], label %[[DOTOMP_OUTLINED__7_EXIT]], label 
%[[OMP_INNER_FOR_BODY_I]]
+// CHECK:       [[DOTOMP_OUTLINED__7_EXIT]]:
 // CHECK-NEXT:    ret i32 0
 //
 //
@@ -284,7 +284,7 @@ struct S {
 // CHECK-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP4]], 
i64 72
 // CHECK-NEXT:    store i64 0, ptr [[TMP9]], align 8
 // CHECK-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP2]] to i64
-// CHECK-NEXT:    call void @__kmpc_taskloop_5(ptr nonnull @[[GLOB1]], i32 
[[TMP0]], ptr nonnull [[TMP4]], i32 1, ptr nonnull [[TMP6]], ptr nonnull 
[[TMP7]], i64 1, i32 1, i32 2, i64 [[TMP10]], i32 1, ptr null) #[[ATTR1]]
+// CHECK-NEXT:    call void @__kmpc_taskloop_5(ptr nonnull @[[GLOB1]], i32 
[[TMP0]], ptr nonnull [[TMP4]], i32 1, ptr nonnull [[TMP6]], ptr nonnull 
[[TMP7]], i64 1, i32 1, i32 2, i64 [[TMP10]], i32 1, ptr null)
 // CHECK-NEXT:    call void @__kmpc_end_taskgroup(ptr nonnull @[[GLOB1]], i32 
[[TMP0]])
 // CHECK-NEXT:    call void @__kmpc_end_master(ptr nonnull @[[GLOB1]], i32 
[[TMP0]])
 // CHECK-NEXT:    br label %[[OMP_IF_END]]
@@ -305,17 +305,17 @@ struct S {
 // CHECK-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[TMP7]], align 8, !tbaa 
[[INTPTR_TBAA47:![0-9]+]], !alias.scope [[META44]], !nonnull [[META36]], !align 
[[META37]]
 // CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 4, !tbaa 
[[INT_TBAA7]], !noalias [[META44]]
 // CHECK-NEXT:    [[CMP_I:%.*]] = icmp sgt i32 [[TMP9]], 0
-// CHECK-NEXT:    br i1 [[CMP_I]], label %[[TASKLOOP_IF_THEN_I:.*]], 
[[DOTOMP_OUTLINED__9_EXIT:label %.*]]
+// CHECK-NEXT:    br i1 [[CMP_I]], label %[[TASKLOOP_IF_THEN_I:.*]], label 
%[[DOTOMP_OUTLINED__9_EXIT:.*]]
 // CHECK:       [[TASKLOOP_IF_THEN_I]]:
-// CHECK-NEXT:    [[SEXT:%.*]] = shl i64 [[TMP4]], 32
-// CHECK-NEXT:    [[TMP10:%.*]] = ashr exact i64 [[SEXT]], 32
+// CHECK-NEXT:    [[TMP10:%.*]] = shl i64 [[TMP4]], 32
+// CHECK-NEXT:    [[TMP11:%.*]] = ashr exact i64 [[TMP10]], 32
 // CHECK-NEXT:    br label %[[OMP_INNER_FOR_COND_I:.*]]
 // CHECK:       [[OMP_INNER_FOR_COND_I]]:
-// CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], 
%[[OMP_INNER_FOR_COND_I]] ], [ [[TMP10]], %[[TASKLOOP_IF_THEN_I]] ]
+// CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], 
%[[OMP_INNER_FOR_COND_I]] ], [ [[TMP11]], %[[TASKLOOP_IF_THEN_I]] ]
 // CHECK-NEXT:    [[CMP8_NOT_I:%.*]] = icmp ult i64 [[TMP6]], [[INDVARS_IV]]
 // CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1
-// CHECK-NEXT:    br i1 [[CMP8_NOT_I]], [[DOTOMP_OUTLINED__9_EXIT]], label 
%[[OMP_INNER_FOR_COND_I]]
-// CHECK:       [[_OMP_OUTLINED__9_EXIT:.*:]]
+// CHECK-NEXT:    br i1 [[CMP8_NOT_I]], label %[[DOTOMP_OUTLINED__9_EXIT]], 
label %[[OMP_INNER_FOR_COND_I]]
+// CHECK:       [[DOTOMP_OUTLINED__9_EXIT]]:
 // CHECK-NEXT:    ret i32 0
 //
 //
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def 
b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
index 83ce9be8dea57..6dc100e2592cd 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
@@ -960,6 +960,10 @@ __OMP_RTL_ATTRS(__kmpc_omp_task_with_deps, DefaultAttrs, 
SExt,
 __OMP_RTL_ATTRS(__kmpc_taskloop, DefaultAttrs, AttributeSet(),
                 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet(), SExt,
                            ArgPtrAttrs, ArgPtrAttrs, AttributeSet(), SExt, 
SExt))
+__OMP_RTL_ATTRS(__kmpc_taskloop_5, DefaultAttrs, AttributeSet(),
+                ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet(), SExt,
+                           ArgPtrAttrs, ArgPtrAttrs, AttributeSet(), SExt, 
SExt,
+                           AttributeSet(), SExt))
 __OMP_RTL_ATTRS(__kmpc_omp_target_task_alloc, DefaultAttrs, ReturnPtrAttrs,
                 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SizeTyExt, SizeTyExt,
                            ReadOnlyPtrAttrs, AttributeSet()))
@@ -990,6 +994,9 @@ __OMP_RTL_ATTRS(__kmpc_fork_teams, ForkAttrs, 
AttributeSet(),
                 ParamAttrs(ReadOnlyPtrAttrs, SExt, ReadOnlyPtrAttrs))
 __OMP_RTL_ATTRS(__kmpc_push_num_teams, InaccessibleArgOnlyAttrs, 
AttributeSet(),
                 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SExt))
+__OMP_RTL_ATTRS(__kmpc_push_num_teams_51, InaccessibleArgOnlyAttrs,
+                AttributeSet(),
+                ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SExt, SExt))
 __OMP_RTL_ATTRS(__kmpc_set_thread_limit, InaccessibleArgOnlyAttrs, 
AttributeSet(),
                 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
 
@@ -1038,7 +1045,7 @@ __OMP_RTL_ATTRS(__kmpc_free, AllocAttrs, AttributeSet(),
 
 __OMP_RTL_ATTRS(__tgt_interop_init, AttributeSet(), AttributeSet(),
                 ParamAttrs(AttributeSet(), SExt, AttributeSet(), SExt,
-                           SExt, AttributeSet(), AttributeSet(), SExt))
+                           SExt, SExt, AttributeSet(), SExt))
 __OMP_RTL_ATTRS(__tgt_interop_destroy, AttributeSet(), AttributeSet(),
                 ParamAttrs(AttributeSet(), SExt, AttributeSet(), SExt, SExt,
                            AttributeSet(), SExt))
diff --git a/llvm/test/Transforms/OpenMP/add_attributes.ll 
b/llvm/test/Transforms/OpenMP/add_attributes.ll
index f2afc67426ed5..cc6230c95a35e 100644
--- a/llvm/test/Transforms/OpenMP/add_attributes.ll
+++ b/llvm/test/Transforms/OpenMP/add_attributes.ll
@@ -595,10 +595,14 @@ declare i32 @__kmpc_cancellationpoint(ptr, i32, i32)
 
 declare void @__kmpc_push_num_teams(ptr, i32, i32, i32)
 
+declare void @__kmpc_push_num_teams_51(ptr, i32, i32, i32, i32)
+
 declare void @__kmpc_fork_teams(ptr, i32, ptr, ...)
 
 declare void @__kmpc_taskloop(ptr, i32, ptr, i32, ptr, ptr, i64, i32, i32, 
i64, ptr)
 
+declare void @__kmpc_taskloop_5(ptr, i32, ptr, i32, ptr, ptr, i64, i32, i32, 
i64, i32, ptr)
+
 declare ptr @__kmpc_omp_target_task_alloc(ptr, i32, i32, i64, i64, ptr, i64)
 
 declare ptr @__kmpc_taskred_modifier_init(ptr, i32, i32, i32, ptr)
@@ -1176,12 +1180,18 @@ declare i32 @__tgt_target_kernel_nowait(ptr, i64, i32, 
i32, ptr, ptr, i32, ptr,
 ; CHECK: ; Function Attrs: nounwind
 ; CHECK-NEXT: declare void @__kmpc_push_num_teams(ptr, i32, i32, i32)
 
+; CHECK: ; Function Attrs: nounwind
+; CHECK-NEXT: declare void @__kmpc_push_num_teams_51(ptr, i32, i32, i32, i32)
+
 ; CHECK: ; Function Attrs: nounwind
 ; CHECK-NEXT: declare void @__kmpc_fork_teams(ptr, i32, ptr, ...)
 
 ; CHECK: ; Function Attrs: nounwind
 ; CHECK-NEXT: declare void @__kmpc_taskloop(ptr, i32, ptr, i32, ptr, ptr, i64, 
i32, i32, i64, ptr)
 
+; CHECK: ; Function Attrs: nounwind
+; CHECK-NEXT: declare void @__kmpc_taskloop_5(ptr, i32, ptr, i32, ptr, ptr, 
i64, i32, i32, i64, i32, ptr)
+
 ; CHECK: ; Function Attrs: nounwind
 ; CHECK-NEXT: declare noalias ptr @__kmpc_omp_target_task_alloc(ptr, i32, i32, 
i64, i64, ptr, i64)
 
@@ -1818,12 +1828,18 @@ declare i32 @__tgt_target_kernel_nowait(ptr, i64, i32, 
i32, ptr, ptr, i32, ptr,
 ; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind willreturn 
memory(argmem: readwrite, inaccessiblemem: readwrite)
 ; OPTIMISTIC-NEXT: declare void @__kmpc_push_num_teams(ptr nofree readonly 
captures(none), i32, i32, i32)
 
+; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind willreturn 
memory(argmem: readwrite, inaccessiblemem: readwrite)
+; OPTIMISTIC-NEXT: declare void @__kmpc_push_num_teams_51(ptr nofree readonly 
captures(none), i32, i32, i32, i32)
+
 ; OPTIMISTIC: ; Function Attrs: nounwind
 ; OPTIMISTIC-NEXT: declare void @__kmpc_fork_teams(ptr nofree readonly 
captures(none), i32, ptr nofree readonly captures(none), ...)
 
 ; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind willreturn
 ; OPTIMISTIC-NEXT: declare void @__kmpc_taskloop(ptr nofree readonly 
captures(none), i32, ptr, i32, ptr nofree captures(none), ptr nofree 
captures(none), i64, i32, i32, i64, ptr)
 
+; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind willreturn
+; OPTIMISTIC-NEXT: declare void @__kmpc_taskloop_5(ptr nofree readonly 
captures(none), i32, ptr, i32, ptr nofree captures(none), ptr nofree 
captures(none), i64, i32, i32, i64, i32, ptr)
+
 ; OPTIMISTIC: ; Function Attrs: nofree nosync nounwind willreturn
 ; OPTIMISTIC-NEXT: declare noalias ptr @__kmpc_omp_target_task_alloc(ptr 
nofree readonly captures(none), i32, i32, i64, i64, ptr nofree readonly 
captures(none), i64)
 
@@ -2476,12 +2492,18 @@ declare i32 @__tgt_target_kernel_nowait(ptr, i64, i32, 
i32, ptr, ptr, i32, ptr,
 ; EXT: ; Function Attrs: nounwind
 ; EXT-NEXT: declare void @__kmpc_push_num_teams(ptr, i32 signext, i32 signext, 
i32 signext)
 
+; EXT: ; Function Attrs: nounwind
+; EXT-NEXT: declare void @__kmpc_push_num_teams_51(ptr, i32 signext, i32 
signext, i32 signext, i32 signext)
+
 ; EXT: ; Function Attrs: nounwind
 ; EXT-NEXT: declare void @__kmpc_fork_teams(ptr, i32 signext, ptr, ...)
 
 ; EXT: ; Function Attrs: nounwind
 ; EXT-NEXT: declare void @__kmpc_taskloop(ptr, i32 signext, ptr, i32 signext, 
ptr, ptr, i64, i32 signext, i32 signext, i64, ptr)
 
+; EXT: ; Function Attrs: nounwind
+; EXT-NEXT: declare void @__kmpc_taskloop_5(ptr, i32 signext, ptr, i32 
signext, ptr, ptr, i64, i32 signext, i32 signext, i64, i32 signext, ptr)
+
 ; EXT: ; Function Attrs: nounwind
 ; EXT-NEXT: declare noalias ptr @__kmpc_omp_target_task_alloc(ptr, i32 
signext, i32 signext, i64, i64, ptr, i64)
 
@@ -2690,7 +2712,7 @@ declare i32 @__tgt_target_kernel_nowait(ptr, i64, i32, 
i32, ptr, ptr, i32, ptr,
 ; EXT: declare void @__tgt_interop_destroy(ptr, i32 signext, ptr, i32 signext, 
i32 signext, ptr, i32 signext)
 
 ; EXT-NOT: Function Attrs
-; EXT: declare void @__tgt_interop_init(ptr, i32 signext, ptr, i32 signext, 
i32 signext, i32, ptr, i32 signext)
+; EXT: declare void @__tgt_interop_init(ptr, i32 signext, ptr, i32 signext, 
i32 signext, i32 signext, ptr, i32 signext)
 
 ; EXT-NOT: Function Attrs
 ; EXT: declare void @__tgt_interop_use(ptr, i32 signext, ptr, i32 signext, i32 
signext, ptr, i32 signext)

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to