10279 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _2// RUN: %clang_cc1 -verify -Wno-vla -triple x86_64-apple-darwin10 -fopenmp -fopenmp-version=50 -x c++ -emit-llvm %s -o - -DUNTIEDRT | FileCheck %s --check-prefix=CHECK13 4// RUN: %clang_cc1 -verify -Wno-vla -triple x86_64-apple-darwin10 -fopenmp -x c++ \5// RUN: -fopenmp-version=51 -emit-llvm %s -o - -DUNTIEDRT -DOMP51 \6// RUN: | FileCheck %s --check-prefix=CHECK1-517 8// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -x c++ -triple x86_64-apple-darwin10 -emit-pch -o %t %s -DUNTIEDRT9// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -x c++ -triple x86_64-apple-darwin10 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK210 11// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -x c++ -triple \12// RUN: x86_64-apple-darwin10 -emit-pch -o %t %s -DUNTIEDRT -DOMP5113// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -x c++ -triple \14// RUN: x86_64-apple-darwin10 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - \15// RUN: -DOMP51 | FileCheck %s --check-prefix=CHECK2-5116 17// RUN: %clang_cc1 -verify -Wno-vla -triple x86_64-apple-darwin10 -fopenmp -fopenmp-version=50 -fopenmp-enable-irbuilder -x c++ -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK318// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -fopenmp-enable-irbuilder -x c++ -triple x86_64-apple-darwin10 -emit-pch -o %t %s19// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -fopenmp-enable-irbuilder -x c++ -triple x86_64-apple-darwin10 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK420 21// RUN: %clang_cc1 -verify -Wno-vla -triple x86_64-apple-darwin10 -fopenmp \22// RUN: -fopenmp-version=51 -fopenmp-enable-irbuilder -x c++ -emit-llvm \23// RUN: %s -o - -DOMP51 | FileCheck %s --check-prefix=CHECK3-5124// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -fopenmp-enable-irbuilder \25// RUN: -x c++ -triple x86_64-apple-darwin10 -emit-pch -o %t %s26// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -fopenmp-enable-irbuilder \27// RUN: -x c++ -triple x86_64-apple-darwin10 -include-pch %t -verify -Wno-vla %s \28// RUN: -emit-llvm -o - -DOMP51 | FileCheck %s --check-prefix=CHECK4-5129 30// RUN: %clang_cc1 -verify -Wno-vla -triple x86_64-apple-darwin10 -fopenmp-simd -fopenmp-version=50 -x c++ -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"31// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=50 -x c++ -triple x86_64-apple-darwin10 -emit-pch -o %t %s32// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=50 -x c++ -triple x86_64-apple-darwin10 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"33 34// RUN: %clang_cc1 -verify -Wno-vla -triple x86_64-apple-darwin10 -fopenmp-simd \35// RUN: -fopenmp-version=51 -x c++ -emit-llvm %s -o - -DOMP51 \36// RUN: | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"37// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ \38// RUN: -triple x86_64-apple-darwin10 -emit-pch -o %t %s -DOMP5139// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ \40// RUN: -triple x86_64-apple-darwin10 -include-pch %t -verify -Wno-vla %s \41// RUN: -emit-llvm -o - -DOMP51 | FileCheck %s \42// RUN: --implicit-check-not="{{__kmpc|__tgt}}"43 44// RUN: %clang_cc1 -verify -Wno-vla -triple x86_64-apple-darwin10 -fopenmp -fopenmp-version=60 -DOMP60 -fopenmp-enable-irbuilder -x c++ -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK645// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -DOMP60 -fopenmp-enable-irbuilder -x c++ -triple x86_64-apple-darwin10 -emit-pch -o %t %s46// RUN: %clang_cc1 -fopenmp -fopenmp-version=60 -DOMP60 -fopenmp-enable-irbuilder -x c++ -triple x86_64-apple-darwin10 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK647 48// expected-no-diagnostics49#ifndef HEADER50#define HEADER51 52enum omp_allocator_handle_t {53 omp_null_allocator = 0,54 omp_default_mem_alloc = 1,55 omp_large_cap_mem_alloc = 2,56 omp_const_mem_alloc = 3,57 omp_high_bw_mem_alloc = 4,58 omp_low_lat_mem_alloc = 5,59 omp_cgroup_mem_alloc = 6,60 omp_pteam_mem_alloc = 7,61 omp_thread_mem_alloc = 8,62 KMP_ALLOCATOR_MAX_HANDLE = __UINTPTR_MAX__63};64 65struct S {66 int a;67 S() : a(0) {}68 S(const S &s) : a(s.a) {}69 ~S() {}70};71 72int a;73int main() {74 char b;75 S s[2];76 int arr[10][a];77#pragma omp task shared(a, b, s) priority(b)78 {79 a = 15;80 b = a;81 s[0].a = 10;82 }83#pragma omp task shared(a, s) depend(in : a, b, s, arr[:])84 {85 a = 15;86 s[1].a = 10;87 }88#pragma omp task untied89 {90#pragma omp critical91 a = 1;92 }93#pragma omp task untied depend(out : s[0], arr[4:][b])94 {95 a = 1;96 }97#pragma omp task untied depend(mutexinoutset: s[0], arr[4:][b])98 {99 a = 1;100 }101#pragma omp task final(true) depend(inout: a, s[1], arr[:a][3:])102 {103 a = 2;104 }105#ifdef OMP51106#pragma omp task final(false) depend(inoutset: a, s[1], arr[:a][3:])107 {108 a = 2;109 }110#endif // OMP51111#pragma omp task final(true)112 {113 a = 2;114 }115 const bool flag = false;116#pragma omp task final(flag)117 {118 a = 3;119 }120 int c __attribute__((aligned(128)));121#pragma omp task final(b) shared(c)122 {123 a = 4;124 c = 5;125 }126#pragma omp task untied firstprivate(c) allocate(omp_pteam_mem_alloc:c)127 {128 S s1, s2;129#ifdef UNTIEDRT130#pragma omp allocate(s2) allocator(omp_pteam_mem_alloc)131#endif132 s2.a = 0;133#pragma omp task134 a = c = 4;135#pragma omp taskyield136 s1 = S();137 s2.a = 10;138#pragma omp taskwait139 }140 return a;141}142 143 144 145 146 147 148 149 150 151 152 153 154 155// s1 = S();156 157 158 159 160 161struct S1 {162 int a;163 S1() { taskinit(); }164 void taskinit() {165#pragma omp task166 a = 0;167 }168} s1;169 170 171#ifdef UNTIEDRT172// FIXME: There is a buffer overflow in IrBuilder mode.173template <typename T = void>174void foobar() {175 float a;176#pragma omp parallel177#pragma omp single178 {179 double b;180#pragma omp task181 a += b;182 }183}184 185void xxxx() {186 foobar();187}188 189 190// Copy `a` to the list of shared variables191 192// Allocate task.193// Copy shared vars.194 195// Copy firstprivate value of `b`.196#endif // UNTIEDRT197#ifdef OMP51198void test_omp_all_memory()199{200 int a,b,c,d,e;201#pragma omp task depend(in:a) depend(out:omp_all_memory)202 {203 a = 13;204 }205#pragma omp task depend(in:a) depend(inout:omp_all_memory)206 {207 a = 14;208 }209#pragma omp task depend(in:a) depend(inout:b) depend(inout:omp_all_memory)210 {211 a = 15;212 }213#pragma omp task depend(in:a) depend(inout:b) depend(inout:c,omp_all_memory,d)214 {215 a = 16;216 }217#pragma omp task depend(out:omp_all_memory)218 {219 a = 17;220 }221}222#endif // OMP51223 224#ifdef OMP60225void test_threadset()226{227#pragma omp task threadset(omp_team)228 {229 }230#pragma omp task threadset(omp_pool)231 {232 }233}234#endif // OMP60235 236#endif237// CHECK1-LABEL: define {{[^@]+}}@main238// CHECK1-SAME: () #[[ATTR0:[0-9]+]] {239// CHECK1-NEXT: entry:240// CHECK1-NEXT: [[RETVAL:%.*]] = alloca i32, align 4241// CHECK1-NEXT: [[B:%.*]] = alloca i8, align 1242// CHECK1-NEXT: [[S:%.*]] = alloca [2 x %struct.S], align 4243// CHECK1-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 8244// CHECK1-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 8245// CHECK1-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 8246// CHECK1-NEXT: [[AGG_CAPTURED1:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 8247// CHECK1-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 8248// CHECK1-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 8249// CHECK1-NEXT: [[AGG_CAPTURED3:%.*]] = alloca [[STRUCT_ANON_2:%.*]], align 1250// CHECK1-NEXT: [[AGG_CAPTURED4:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 1251// CHECK1-NEXT: [[DOTDEP_ARR_ADDR5:%.*]] = alloca [2 x %struct.kmp_depend_info], align 8252// CHECK1-NEXT: [[DEP_COUNTER_ADDR11:%.*]] = alloca i64, align 8253// CHECK1-NEXT: [[AGG_CAPTURED12:%.*]] = alloca [[STRUCT_ANON_6:%.*]], align 1254// CHECK1-NEXT: [[DOTDEP_ARR_ADDR13:%.*]] = alloca [2 x %struct.kmp_depend_info], align 8255// CHECK1-NEXT: [[DEP_COUNTER_ADDR19:%.*]] = alloca i64, align 8256// CHECK1-NEXT: [[AGG_CAPTURED20:%.*]] = alloca [[STRUCT_ANON_8:%.*]], align 1257// CHECK1-NEXT: [[DOTDEP_ARR_ADDR21:%.*]] = alloca [3 x %struct.kmp_depend_info], align 8258// CHECK1-NEXT: [[DEP_COUNTER_ADDR27:%.*]] = alloca i64, align 8259// CHECK1-NEXT: [[AGG_CAPTURED28:%.*]] = alloca [[STRUCT_ANON_10:%.*]], align 1260// CHECK1-NEXT: [[FLAG:%.*]] = alloca i8, align 1261// CHECK1-NEXT: [[AGG_CAPTURED29:%.*]] = alloca [[STRUCT_ANON_12:%.*]], align 1262// CHECK1-NEXT: [[C:%.*]] = alloca i32, align 128263// CHECK1-NEXT: [[AGG_CAPTURED30:%.*]] = alloca [[STRUCT_ANON_14:%.*]], align 8264// CHECK1-NEXT: [[AGG_CAPTURED31:%.*]] = alloca [[STRUCT_ANON_16:%.*]], align 1265// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])266// CHECK1-NEXT: store i32 0, ptr [[RETVAL]], align 4267// CHECK1-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 0268// CHECK1-NEXT: [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 2269// CHECK1-NEXT: br label [[ARRAYCTOR_LOOP:%.*]]270// CHECK1: arrayctor.loop:271// CHECK1-NEXT: [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]272// CHECK1-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])273// CHECK1-NEXT: [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 1274// CHECK1-NEXT: [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]275// CHECK1-NEXT: br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]276// CHECK1: arrayctor.cont:277// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr @a, align 4278// CHECK1-NEXT: [[TMP2:%.*]] = zext i32 [[TMP1]] to i64279// CHECK1-NEXT: [[TMP3:%.*]] = call ptr @llvm.stacksave.p0()280// CHECK1-NEXT: store ptr [[TMP3]], ptr [[SAVED_STACK]], align 8281// CHECK1-NEXT: [[TMP4:%.*]] = mul nuw i64 10, [[TMP2]]282// CHECK1-NEXT: [[VLA:%.*]] = alloca i32, i64 [[TMP4]], align 16283// CHECK1-NEXT: store i64 [[TMP2]], ptr [[__VLA_EXPR0]], align 8284// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 0285// CHECK1-NEXT: store ptr [[B]], ptr [[TMP5]], align 8286// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 1287// CHECK1-NEXT: store ptr [[S]], ptr [[TMP6]], align 8288// CHECK1-NEXT: [[TMP7:%.*]] = load i8, ptr [[B]], align 1289// CHECK1-NEXT: [[CONV:%.*]] = sext i8 [[TMP7]] to i32290// CHECK1-NEXT: [[TMP8:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 33, i64 40, i64 16, ptr @.omp_task_entry.)291// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP8]], i32 0, i32 0292// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP9]], i32 0, i32 0293// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TMP10]], align 8294// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP11]], ptr align 8 [[AGG_CAPTURED]], i64 16, i1 false)295// CHECK1-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP9]], i32 0, i32 4296// CHECK1-NEXT: store i32 [[CONV]], ptr [[TMP12]], align 8297// CHECK1-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP8]])298// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_0]], ptr [[AGG_CAPTURED1]], i32 0, i32 0299// CHECK1-NEXT: store ptr [[S]], ptr [[TMP14]], align 8300// CHECK1-NEXT: [[TMP15:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..2)301// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP15]], i32 0, i32 0302// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP16]], i32 0, i32 0303// CHECK1-NEXT: [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 8304// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP18]], ptr align 8 [[AGG_CAPTURED1]], i64 8, i1 false)305// CHECK1-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 0306// CHECK1-NEXT: [[TMP20:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP19]], i64 0307// CHECK1-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 0308// CHECK1-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP21]], align 8309// CHECK1-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 1310// CHECK1-NEXT: store i64 4, ptr [[TMP22]], align 8311// CHECK1-NEXT: [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 2312// CHECK1-NEXT: store i8 1, ptr [[TMP23]], align 8313// CHECK1-NEXT: [[TMP24:%.*]] = ptrtoint ptr [[B]] to i64314// CHECK1-NEXT: [[TMP25:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 1315// CHECK1-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 0316// CHECK1-NEXT: store i64 [[TMP24]], ptr [[TMP26]], align 8317// CHECK1-NEXT: [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 1318// CHECK1-NEXT: store i64 1, ptr [[TMP27]], align 8319// CHECK1-NEXT: [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 2320// CHECK1-NEXT: store i8 1, ptr [[TMP28]], align 8321// CHECK1-NEXT: [[TMP29:%.*]] = ptrtoint ptr [[S]] to i64322// CHECK1-NEXT: [[TMP30:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 2323// CHECK1-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 0324// CHECK1-NEXT: store i64 [[TMP29]], ptr [[TMP31]], align 8325// CHECK1-NEXT: [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 1326// CHECK1-NEXT: store i64 8, ptr [[TMP32]], align 8327// CHECK1-NEXT: [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 2328// CHECK1-NEXT: store i8 1, ptr [[TMP33]], align 8329// CHECK1-NEXT: [[TMP34:%.*]] = mul nsw i64 0, [[TMP2]]330// CHECK1-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP34]]331// CHECK1-NEXT: [[TMP35:%.*]] = mul nsw i64 9, [[TMP2]]332// CHECK1-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP35]]333// CHECK1-NEXT: [[TMP36:%.*]] = getelementptr i32, ptr [[ARRAYIDX2]], i32 1334// CHECK1-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64335// CHECK1-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP36]] to i64336// CHECK1-NEXT: [[TMP39:%.*]] = sub nuw i64 [[TMP38]], [[TMP37]]337// CHECK1-NEXT: [[TMP40:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64338// CHECK1-NEXT: [[TMP41:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 3339// CHECK1-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 0340// CHECK1-NEXT: store i64 [[TMP40]], ptr [[TMP42]], align 8341// CHECK1-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 1342// CHECK1-NEXT: store i64 [[TMP39]], ptr [[TMP43]], align 8343// CHECK1-NEXT: [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 2344// CHECK1-NEXT: store i8 1, ptr [[TMP44]], align 8345// CHECK1-NEXT: store i64 4, ptr [[DEP_COUNTER_ADDR]], align 8346// CHECK1-NEXT: [[TMP45:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP15]], i32 4, ptr [[TMP19]], i32 0, ptr null)347// CHECK1-NEXT: [[TMP46:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..4)348// CHECK1-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP46]], i32 0, i32 0349// CHECK1-NEXT: [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP47]], i32 0, i32 2350// CHECK1-NEXT: store i32 0, ptr [[TMP48]], align 8351// CHECK1-NEXT: [[TMP49:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP46]])352// CHECK1-NEXT: [[TMP50:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..6)353// CHECK1-NEXT: [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP50]], i32 0, i32 0354// CHECK1-NEXT: [[TMP52:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR5]], i64 0, i64 0355// CHECK1-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 0356// CHECK1-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[ARRAYIDX6]] to i64357// CHECK1-NEXT: [[TMP54:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 0358// CHECK1-NEXT: [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 0359// CHECK1-NEXT: store i64 [[TMP53]], ptr [[TMP55]], align 8360// CHECK1-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 1361// CHECK1-NEXT: store i64 4, ptr [[TMP56]], align 8362// CHECK1-NEXT: [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 2363// CHECK1-NEXT: store i8 3, ptr [[TMP57]], align 8364// CHECK1-NEXT: [[TMP58:%.*]] = load i8, ptr [[B]], align 1365// CHECK1-NEXT: [[TMP59:%.*]] = sext i8 [[TMP58]] to i64366// CHECK1-NEXT: [[TMP60:%.*]] = mul nsw i64 4, [[TMP2]]367// CHECK1-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP60]]368// CHECK1-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX7]], i64 [[TMP59]]369// CHECK1-NEXT: [[TMP61:%.*]] = load i8, ptr [[B]], align 1370// CHECK1-NEXT: [[TMP62:%.*]] = sext i8 [[TMP61]] to i64371// CHECK1-NEXT: [[TMP63:%.*]] = mul nsw i64 9, [[TMP2]]372// CHECK1-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP63]]373// CHECK1-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX9]], i64 [[TMP62]]374// CHECK1-NEXT: [[TMP64:%.*]] = getelementptr i32, ptr [[ARRAYIDX10]], i32 1375// CHECK1-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i64376// CHECK1-NEXT: [[TMP66:%.*]] = ptrtoint ptr [[TMP64]] to i64377// CHECK1-NEXT: [[TMP67:%.*]] = sub nuw i64 [[TMP66]], [[TMP65]]378// CHECK1-NEXT: [[TMP68:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i64379// CHECK1-NEXT: [[TMP69:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 1380// CHECK1-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 0381// CHECK1-NEXT: store i64 [[TMP68]], ptr [[TMP70]], align 8382// CHECK1-NEXT: [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 1383// CHECK1-NEXT: store i64 [[TMP67]], ptr [[TMP71]], align 8384// CHECK1-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 2385// CHECK1-NEXT: store i8 3, ptr [[TMP72]], align 8386// CHECK1-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR11]], align 8387// CHECK1-NEXT: [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP51]], i32 0, i32 2388// CHECK1-NEXT: store i32 0, ptr [[TMP73]], align 8389// CHECK1-NEXT: [[TMP74:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP50]], i32 2, ptr [[TMP52]], i32 0, ptr null)390// CHECK1-NEXT: [[TMP75:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..8)391// CHECK1-NEXT: [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP75]], i32 0, i32 0392// CHECK1-NEXT: [[TMP77:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR13]], i64 0, i64 0393// CHECK1-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 0394// CHECK1-NEXT: [[TMP78:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i64395// CHECK1-NEXT: [[TMP79:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 0396// CHECK1-NEXT: [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 0397// CHECK1-NEXT: store i64 [[TMP78]], ptr [[TMP80]], align 8398// CHECK1-NEXT: [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 1399// CHECK1-NEXT: store i64 4, ptr [[TMP81]], align 8400// CHECK1-NEXT: [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 2401// CHECK1-NEXT: store i8 4, ptr [[TMP82]], align 8402// CHECK1-NEXT: [[TMP83:%.*]] = load i8, ptr [[B]], align 1403// CHECK1-NEXT: [[TMP84:%.*]] = sext i8 [[TMP83]] to i64404// CHECK1-NEXT: [[TMP85:%.*]] = mul nsw i64 4, [[TMP2]]405// CHECK1-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP85]]406// CHECK1-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX15]], i64 [[TMP84]]407// CHECK1-NEXT: [[TMP86:%.*]] = load i8, ptr [[B]], align 1408// CHECK1-NEXT: [[TMP87:%.*]] = sext i8 [[TMP86]] to i64409// CHECK1-NEXT: [[TMP88:%.*]] = mul nsw i64 9, [[TMP2]]410// CHECK1-NEXT: [[ARRAYIDX17:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP88]]411// CHECK1-NEXT: [[ARRAYIDX18:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX17]], i64 [[TMP87]]412// CHECK1-NEXT: [[TMP89:%.*]] = getelementptr i32, ptr [[ARRAYIDX18]], i32 1413// CHECK1-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i64414// CHECK1-NEXT: [[TMP91:%.*]] = ptrtoint ptr [[TMP89]] to i64415// CHECK1-NEXT: [[TMP92:%.*]] = sub nuw i64 [[TMP91]], [[TMP90]]416// CHECK1-NEXT: [[TMP93:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i64417// CHECK1-NEXT: [[TMP94:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 1418// CHECK1-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 0419// CHECK1-NEXT: store i64 [[TMP93]], ptr [[TMP95]], align 8420// CHECK1-NEXT: [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 1421// CHECK1-NEXT: store i64 [[TMP92]], ptr [[TMP96]], align 8422// CHECK1-NEXT: [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 2423// CHECK1-NEXT: store i8 4, ptr [[TMP97]], align 8424// CHECK1-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR19]], align 8425// CHECK1-NEXT: [[TMP98:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP76]], i32 0, i32 2426// CHECK1-NEXT: store i32 0, ptr [[TMP98]], align 8427// CHECK1-NEXT: [[TMP99:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP75]], i32 2, ptr [[TMP77]], i32 0, ptr null)428// CHECK1-NEXT: [[TMP100:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..10)429// CHECK1-NEXT: [[TMP101:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP100]], i32 0, i32 0430// CHECK1-NEXT: [[TMP102:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR21]], i64 0, i64 0431// CHECK1-NEXT: [[TMP103:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 0432// CHECK1-NEXT: [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 0433// CHECK1-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP104]], align 8434// CHECK1-NEXT: [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 1435// CHECK1-NEXT: store i64 4, ptr [[TMP105]], align 8436// CHECK1-NEXT: [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 2437// CHECK1-NEXT: store i8 3, ptr [[TMP106]], align 8438// CHECK1-NEXT: [[ARRAYIDX22:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 1439// CHECK1-NEXT: [[TMP107:%.*]] = ptrtoint ptr [[ARRAYIDX22]] to i64440// CHECK1-NEXT: [[TMP108:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 1441// CHECK1-NEXT: [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 0442// CHECK1-NEXT: store i64 [[TMP107]], ptr [[TMP109]], align 8443// CHECK1-NEXT: [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 1444// CHECK1-NEXT: store i64 4, ptr [[TMP110]], align 8445// CHECK1-NEXT: [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 2446// CHECK1-NEXT: store i8 3, ptr [[TMP111]], align 8447// CHECK1-NEXT: [[TMP112:%.*]] = mul nsw i64 0, [[TMP2]]448// CHECK1-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP112]]449// CHECK1-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX23]], i64 3450// CHECK1-NEXT: [[TMP113:%.*]] = load i32, ptr @a, align 4451// CHECK1-NEXT: [[TMP114:%.*]] = sext i32 [[TMP113]] to i64452// CHECK1-NEXT: [[LEN_SUB_1:%.*]] = sub nsw i64 [[TMP114]], 1453// CHECK1-NEXT: [[TMP115:%.*]] = load i32, ptr @a, align 4454// CHECK1-NEXT: [[TMP116:%.*]] = sext i32 [[TMP115]] to i64455// CHECK1-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP116]]456// CHECK1-NEXT: [[TMP117:%.*]] = mul nsw i64 [[LB_ADD_LEN]], [[TMP2]]457// CHECK1-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP117]]458// CHECK1-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[LEN_SUB_1]]459// CHECK1-NEXT: [[TMP118:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 1460// CHECK1-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i64461// CHECK1-NEXT: [[TMP120:%.*]] = ptrtoint ptr [[TMP118]] to i64462// CHECK1-NEXT: [[TMP121:%.*]] = sub nuw i64 [[TMP120]], [[TMP119]]463// CHECK1-NEXT: [[TMP122:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i64464// CHECK1-NEXT: [[TMP123:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 2465// CHECK1-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 0466// CHECK1-NEXT: store i64 [[TMP122]], ptr [[TMP124]], align 8467// CHECK1-NEXT: [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 1468// CHECK1-NEXT: store i64 [[TMP121]], ptr [[TMP125]], align 8469// CHECK1-NEXT: [[TMP126:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 2470// CHECK1-NEXT: store i8 3, ptr [[TMP126]], align 8471// CHECK1-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR27]], align 8472// CHECK1-NEXT: [[TMP127:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP100]], i32 3, ptr [[TMP102]], i32 0, ptr null)473// CHECK1-NEXT: [[TMP128:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..12)474// CHECK1-NEXT: [[TMP129:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP128]], i32 0, i32 0475// CHECK1-NEXT: [[TMP130:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP128]])476// CHECK1-NEXT: store i8 0, ptr [[FLAG]], align 1477// CHECK1-NEXT: [[TMP131:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..14)478// CHECK1-NEXT: [[TMP132:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP131]], i32 0, i32 0479// CHECK1-NEXT: [[TMP133:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP131]])480// CHECK1-NEXT: [[TMP134:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_14]], ptr [[AGG_CAPTURED30]], i32 0, i32 0481// CHECK1-NEXT: store ptr [[C]], ptr [[TMP134]], align 8482// CHECK1-NEXT: [[TMP135:%.*]] = load i8, ptr [[B]], align 1483// CHECK1-NEXT: [[TOBOOL:%.*]] = icmp ne i8 [[TMP135]], 0484// CHECK1-NEXT: [[TMP136:%.*]] = select i1 [[TOBOOL]], i32 2, i32 0485// CHECK1-NEXT: [[TMP137:%.*]] = or i32 [[TMP136]], 1486// CHECK1-NEXT: [[TMP138:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 [[TMP137]], i64 40, i64 8, ptr @.omp_task_entry..16)487// CHECK1-NEXT: [[TMP139:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP138]], i32 0, i32 0488// CHECK1-NEXT: [[TMP140:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP139]], i32 0, i32 0489// CHECK1-NEXT: [[TMP141:%.*]] = load ptr, ptr [[TMP140]], align 8490// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP141]], ptr align 8 [[AGG_CAPTURED30]], i64 8, i1 false)491// CHECK1-NEXT: [[TMP142:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP138]])492// CHECK1-NEXT: [[TMP143:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 256, i64 1, ptr @.omp_task_entry..21)493// CHECK1-NEXT: [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP143]], i32 0, i32 0494// CHECK1-NEXT: [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP143]], i32 0, i32 2495// CHECK1-NEXT: [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP145]], i32 0, i32 0496// CHECK1-NEXT: [[TMP147:%.*]] = load i32, ptr [[C]], align 128497// CHECK1-NEXT: store i32 [[TMP147]], ptr [[TMP146]], align 128498// CHECK1-NEXT: [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP144]], i32 0, i32 2499// CHECK1-NEXT: store i32 0, ptr [[TMP148]], align 16500// CHECK1-NEXT: [[TMP149:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP143]])501// CHECK1-NEXT: [[TMP150:%.*]] = load i32, ptr @a, align 4502// CHECK1-NEXT: store i32 [[TMP150]], ptr [[RETVAL]], align 4503// CHECK1-NEXT: [[TMP151:%.*]] = load ptr, ptr [[SAVED_STACK]], align 8504// CHECK1-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP151]])505// CHECK1-NEXT: [[ARRAY_BEGIN32:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 0506// CHECK1-NEXT: [[TMP152:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN32]], i64 2507// CHECK1-NEXT: br label [[ARRAYDESTROY_BODY:%.*]]508// CHECK1: arraydestroy.body:509// CHECK1-NEXT: [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP152]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]510// CHECK1-NEXT: [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -1511// CHECK1-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR4:[0-9]+]]512// CHECK1-NEXT: [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN32]]513// CHECK1-NEXT: br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE33:%.*]], label [[ARRAYDESTROY_BODY]]514// CHECK1: arraydestroy.done33:515// CHECK1-NEXT: [[TMP153:%.*]] = load i32, ptr [[RETVAL]], align 4516// CHECK1-NEXT: ret i32 [[TMP153]]517//518//519// CHECK1-LABEL: define {{[^@]+}}@_ZN1SC1Ev520// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] align 2 {521// CHECK1-NEXT: entry:522// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8523// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8524// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8525// CHECK1-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])526// CHECK1-NEXT: ret void527//528//529// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry.530// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {531// CHECK1-NEXT: entry:532// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4533// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8534// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8535// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8536// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8537// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8538// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4539// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8540// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4541// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8542// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4543// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8544// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 0545// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2546// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0547// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8548// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])549// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])550// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])551// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])552// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META12:![0-9]+]]553// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META12]]554// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META12]]555// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META12]]556// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META12]]557// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]558// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]559// CHECK1-NEXT: store i32 15, ptr @a, align 4, !noalias [[META12]]560// CHECK1-NEXT: [[TMP9:%.*]] = load i32, ptr @a, align 4, !noalias [[META12]]561// CHECK1-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP9]] to i8562// CHECK1-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP8]], align 8563// CHECK1-NEXT: store i8 [[CONV_I]], ptr [[TMP10]], align 1564// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON:%.*]], ptr [[TMP8]], i32 0, i32 1565// CHECK1-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 8566// CHECK1-NEXT: store i32 10, ptr [[TMP12]], align 4567// CHECK1-NEXT: ret i32 0568//569//570// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..2571// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {572// CHECK1-NEXT: entry:573// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4574// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8575// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8576// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8577// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8578// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8579// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4580// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8581// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4582// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8583// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4584// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8585// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 0586// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2587// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0588// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8589// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])590// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META16:![0-9]+]])591// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])592// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])593// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META22:![0-9]+]]594// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META22]]595// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META22]]596// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META22]]597// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META22]]598// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]599// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]600// CHECK1-NEXT: store i32 15, ptr @a, align 4, !noalias [[META22]]601// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 8602// CHECK1-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP9]], i64 0, i64 1603// CHECK1-NEXT: store i32 10, ptr [[ARRAYIDX_I]], align 4604// CHECK1-NEXT: ret i32 0605//606//607// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..4608// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {609// CHECK1-NEXT: entry:610// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4611// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8612// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8613// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8614// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8615// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8616// CHECK1-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 4617// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4618// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8619// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4620// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8621// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4622// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8623// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP3]], i32 0, i32 0624// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2625// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0626// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8627// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META23:![0-9]+]])628// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META26:![0-9]+]])629// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])630// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])631// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32:![0-9]+]]632// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]633// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META32]]634// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META32]]635// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]636// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]637// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]638// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]639// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 4640// CHECK1-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [641// CHECK1-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]642// CHECK1-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]643// CHECK1-NEXT: ]644// CHECK1: .untied.done..i:645// CHECK1-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]646// CHECK1-NEXT: br label [[CLEANUP_I:%.*]]647// CHECK1: .untied.jmp..i:648// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]649// CHECK1-NEXT: store i32 1, ptr [[TMP11]], align 4650// CHECK1-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32]]651// CHECK1-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]652// CHECK1-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])653// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT:%.*]]654// CHECK1: .untied.jmp.1.i:655// CHECK1-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32]]656// CHECK1-NEXT: call void @__kmpc_critical(ptr @[[GLOB1]], i32 [[TMP15]], ptr @.gomp_critical_user_.var)657// CHECK1-NEXT: store i32 1, ptr @a, align 4, !noalias [[META32]]658// CHECK1-NEXT: call void @__kmpc_end_critical(ptr @[[GLOB1]], i32 [[TMP15]], ptr @.gomp_critical_user_.var)659// CHECK1-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]660// CHECK1-NEXT: br label [[CLEANUP_I]]661// CHECK1: cleanup.i:662// CHECK1-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]663// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT]]664// CHECK1: .omp_outlined..3.exit:665// CHECK1-NEXT: ret i32 0666//667//668// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..6669// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {670// CHECK1-NEXT: entry:671// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4672// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8673// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8674// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8675// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8676// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8677// CHECK1-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 4678// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4679// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8680// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4681// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8682// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4683// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8684// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 0685// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2686// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0687// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8688// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META33:![0-9]+]])689// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META36:![0-9]+]])690// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META38:![0-9]+]])691// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])692// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42:![0-9]+]]693// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]694// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META42]]695// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META42]]696// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]697// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]698// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]699// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]700// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 4701// CHECK1-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [702// CHECK1-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]703// CHECK1-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]704// CHECK1-NEXT: ]705// CHECK1: .untied.done..i:706// CHECK1-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]707// CHECK1-NEXT: br label [[CLEANUP_I:%.*]]708// CHECK1: .untied.jmp..i:709// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]710// CHECK1-NEXT: store i32 1, ptr [[TMP11]], align 4711// CHECK1-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42]]712// CHECK1-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]713// CHECK1-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])714// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT:%.*]]715// CHECK1: .untied.jmp.1.i:716// CHECK1-NEXT: store i32 1, ptr @a, align 4, !noalias [[META42]]717// CHECK1-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]718// CHECK1-NEXT: br label [[CLEANUP_I]]719// CHECK1: cleanup.i:720// CHECK1-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]721// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT]]722// CHECK1: .omp_outlined..5.exit:723// CHECK1-NEXT: ret i32 0724//725//726// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..8727// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {728// CHECK1-NEXT: entry:729// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4730// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8731// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8732// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8733// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8734// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8735// CHECK1-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 4736// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4737// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8738// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4739// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8740// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4741// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8742// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP3]], i32 0, i32 0743// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2744// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0745// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8746// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])747// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META46:![0-9]+]])748// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META48:![0-9]+]])749// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META50:![0-9]+]])750// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52:![0-9]+]]751// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]752// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META52]]753// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META52]]754// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]755// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]756// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]757// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]758// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 4759// CHECK1-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [760// CHECK1-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]761// CHECK1-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]762// CHECK1-NEXT: ]763// CHECK1: .untied.done..i:764// CHECK1-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]765// CHECK1-NEXT: br label [[CLEANUP_I:%.*]]766// CHECK1: .untied.jmp..i:767// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]768// CHECK1-NEXT: store i32 1, ptr [[TMP11]], align 4769// CHECK1-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52]]770// CHECK1-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]771// CHECK1-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])772// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT:%.*]]773// CHECK1: .untied.jmp.1.i:774// CHECK1-NEXT: store i32 1, ptr @a, align 4, !noalias [[META52]]775// CHECK1-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]776// CHECK1-NEXT: br label [[CLEANUP_I]]777// CHECK1: cleanup.i:778// CHECK1-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]779// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT]]780// CHECK1: .omp_outlined..7.exit:781// CHECK1-NEXT: ret i32 0782//783//784// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..10785// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {786// CHECK1-NEXT: entry:787// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4788// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8789// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8790// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8791// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8792// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8793// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4794// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8795// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4796// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8797// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4798// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8799// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP3]], i32 0, i32 0800// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2801// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0802// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8803// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META53:![0-9]+]])804// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META56:![0-9]+]])805// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META58:![0-9]+]])806// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META60:![0-9]+]])807// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META62:![0-9]+]]808// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META62]]809// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META62]]810// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META62]]811// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META62]]812// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]813// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]814// CHECK1-NEXT: store i32 2, ptr @a, align 4, !noalias [[META62]]815// CHECK1-NEXT: ret i32 0816//817//818// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..12819// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {820// CHECK1-NEXT: entry:821// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4822// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8823// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8824// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8825// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8826// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8827// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4828// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8829// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4830// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8831// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4832// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8833// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP3]], i32 0, i32 0834// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2835// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0836// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8837// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META63:![0-9]+]])838// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META66:![0-9]+]])839// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META68:![0-9]+]])840// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META70:![0-9]+]])841// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META72:![0-9]+]]842// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META72]]843// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META72]]844// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META72]]845// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META72]]846// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]847// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]848// CHECK1-NEXT: store i32 2, ptr @a, align 4, !noalias [[META72]]849// CHECK1-NEXT: ret i32 0850//851//852// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..14853// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {854// CHECK1-NEXT: entry:855// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4856// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8857// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8858// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8859// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8860// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8861// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4862// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8863// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4864// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8865// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4866// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8867// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP3]], i32 0, i32 0868// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2869// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0870// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8871// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META73:![0-9]+]])872// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META76:![0-9]+]])873// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META78:![0-9]+]])874// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META80:![0-9]+]])875// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META82:![0-9]+]]876// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META82]]877// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META82]]878// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META82]]879// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META82]]880// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]881// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]882// CHECK1-NEXT: store i32 3, ptr @a, align 4, !noalias [[META82]]883// CHECK1-NEXT: ret i32 0884//885//886// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..16887// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {888// CHECK1-NEXT: entry:889// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4890// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8891// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8892// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8893// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8894// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8895// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4896// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8897// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4898// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8899// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4900// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8901// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP3]], i32 0, i32 0902// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2903// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0904// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8905// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META83:![0-9]+]])906// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META86:![0-9]+]])907// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META88:![0-9]+]])908// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META90:![0-9]+]])909// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META92:![0-9]+]]910// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META92]]911// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META92]]912// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META92]]913// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META92]]914// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]915// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]916// CHECK1-NEXT: store i32 4, ptr @a, align 4, !noalias [[META92]]917// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 8918// CHECK1-NEXT: store i32 5, ptr [[TMP9]], align 128919// CHECK1-NEXT: ret i32 0920//921//922// CHECK1-LABEL: define {{[^@]+}}@.omp_task_privates_map.923// CHECK1-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7:[0-9]+]] {924// CHECK1-NEXT: entry:925// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 8926// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8927// CHECK1-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 8928// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8929// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 8930// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP2]], i32 0, i32 0931// CHECK1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 8932// CHECK1-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 8933// CHECK1-NEXT: ret void934//935//936// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..19937// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {938// CHECK1-NEXT: entry:939// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4940// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8941// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8942// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8943// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8944// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8945// CHECK1-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 8946// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 4947// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8948// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 4949// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8950// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4951// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8952// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP3]], i32 0, i32 0953// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2954// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0955// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 128956// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18]], ptr [[TMP3]], i32 0, i32 2957// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META93:![0-9]+]])958// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META96:![0-9]+]])959// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META98:![0-9]+]])960// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META100:![0-9]+]])961// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META102:![0-9]+]]962// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META102]]963// CHECK1-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]964// CHECK1-NEXT: store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]965// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META102]]966// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]967// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]968// CHECK1-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]969// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]970// CHECK1-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]971// CHECK1-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META102]]972// CHECK1-NEXT: store i32 4, ptr [[TMP12]], align 128973// CHECK1-NEXT: store i32 4, ptr @a, align 4, !noalias [[META102]]974// CHECK1-NEXT: ret i32 0975//976//977// CHECK1-LABEL: define {{[^@]+}}@_ZN1SD1Ev978// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {979// CHECK1-NEXT: entry:980// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8981// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8982// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8983// CHECK1-NEXT: call void @_ZN1SD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR4]]984// CHECK1-NEXT: ret void985//986//987// CHECK1-LABEL: define {{[^@]+}}@.omp_task_privates_map..20988// CHECK1-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]]) #[[ATTR7]] {989// CHECK1-NEXT: entry:990// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 8991// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8992// CHECK1-NEXT: [[DOTADDR2:%.*]] = alloca ptr, align 8993// CHECK1-NEXT: [[DOTADDR3:%.*]] = alloca ptr, align 8994// CHECK1-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 8995// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8996// CHECK1-NEXT: store ptr [[TMP2]], ptr [[DOTADDR2]], align 8997// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTADDR3]], align 8998// CHECK1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR]], align 8999// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP4]], i32 0, i32 01000// CHECK1-NEXT: [[TMP6:%.*]] = load ptr, ptr [[DOTADDR1]], align 81001// CHECK1-NEXT: store ptr [[TMP5]], ptr [[TMP6]], align 81002// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 21003// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[DOTADDR3]], align 81004// CHECK1-NEXT: store ptr [[TMP7]], ptr [[TMP8]], align 81005// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 31006// CHECK1-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTADDR2]], align 81007// CHECK1-NEXT: store ptr [[TMP9]], ptr [[TMP10]], align 81008// CHECK1-NEXT: ret void1009//1010//1011// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..211012// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {1013// CHECK1-NEXT: entry:1014// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41015// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81016// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81017// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81018// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81019// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81020// CHECK1-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 81021// CHECK1-NEXT: [[DOTLOCAL_PTR_ADDR_I:%.*]] = alloca ptr, align 81022// CHECK1-NEXT: [[DOTLOCAL_PTR_ADDR1_I:%.*]] = alloca ptr, align 81023// CHECK1-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 41024// CHECK1-NEXT: [[REF_TMP_I:%.*]] = alloca [[STRUCT_S:%.*]], align 41025// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41026// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81027// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41028// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81029// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41030// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81031// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP3]], i32 0, i32 01032// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21033// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01034// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1281035// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP3]], i32 0, i32 21036// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META103:![0-9]+]])1037// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META106:![0-9]+]])1038// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META108:![0-9]+]])1039// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META110:![0-9]+]])1040// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112:![0-9]+]]1041// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]1042// CHECK1-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]1043// CHECK1-NEXT: store ptr @.omp_task_privates_map..20, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]1044// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]1045// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]1046// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]1047// CHECK1-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]1048// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]1049// CHECK1-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR1_I]]) #[[ATTR4]]1050// CHECK1-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META112]]1051// CHECK1-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR_I]], align 8, !noalias [[META112]]1052// CHECK1-NEXT: [[TMP14:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR1_I]], align 8, !noalias [[META112]]1053// CHECK1-NEXT: [[TMP15:%.*]] = load ptr, ptr [[TMP14]], align 81054// CHECK1-NEXT: [[TMP16:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]1055// CHECK1-NEXT: [[TMP17:%.*]] = load i32, ptr [[TMP16]], align 41056// CHECK1-NEXT: switch i32 [[TMP17]], label [[DOTUNTIED_DONE__I:%.*]] [1057// CHECK1-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]1058// CHECK1-NEXT: i32 1, label [[DOTUNTIED_JMP_2_I:%.*]]1059// CHECK1-NEXT: i32 2, label [[DOTUNTIED_JMP_3_I:%.*]]1060// CHECK1-NEXT: i32 3, label [[DOTUNTIED_JMP_5_I:%.*]]1061// CHECK1-NEXT: i32 4, label [[DOTUNTIED_JMP_7_I:%.*]]1062// CHECK1-NEXT: i32 5, label [[DOTUNTIED_JMP_10_I:%.*]]1063// CHECK1-NEXT: ]1064// CHECK1: .untied.done..i:1065// CHECK1-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]1066// CHECK1-NEXT: br label [[CLEANUP_I:%.*]]1067// CHECK1: .untied.jmp..i:1068// CHECK1-NEXT: [[TMP18:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]1069// CHECK1-NEXT: store i32 1, ptr [[TMP18]], align 41070// CHECK1-NEXT: [[TMP19:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1071// CHECK1-NEXT: [[TMP20:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]1072// CHECK1-NEXT: [[TMP21:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP19]], ptr [[TMP20]])1073// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT:%.*]]1074// CHECK1: .untied.jmp.2.i:1075// CHECK1-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP13]])1076// CHECK1-NEXT: [[TMP22:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1077// CHECK1-NEXT: [[DOTS2__VOID_ADDR_I:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP22]], i64 4, ptr inttoptr (i64 7 to ptr))1078// CHECK1-NEXT: store ptr [[DOTS2__VOID_ADDR_I]], ptr [[TMP14]], align 81079// CHECK1-NEXT: [[TMP23:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]1080// CHECK1-NEXT: store i32 2, ptr [[TMP23]], align 41081// CHECK1-NEXT: [[TMP24:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1082// CHECK1-NEXT: [[TMP25:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]1083// CHECK1-NEXT: [[TMP26:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP24]], ptr [[TMP25]])1084// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]1085// CHECK1: .untied.jmp.3.i:1086// CHECK1-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP15]])1087// CHECK1-NEXT: store i32 0, ptr [[TMP15]], align 41088// CHECK1-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1089// CHECK1-NEXT: [[TMP28:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP27]], i32 1, i64 256, i64 1, ptr @.omp_task_entry..19)1090// CHECK1-NEXT: [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP28]], i32 0, i32 21091// CHECK1-NEXT: [[TMP30:%.*]] = load i32, ptr [[TMP12]], align 1281092// CHECK1-NEXT: store i32 [[TMP30]], ptr [[TMP29]], align 1281093// CHECK1-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1094// CHECK1-NEXT: [[TMP32:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP31]], ptr [[TMP28]])1095// CHECK1-NEXT: [[TMP33:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]1096// CHECK1-NEXT: store i32 3, ptr [[TMP33]], align 41097// CHECK1-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1098// CHECK1-NEXT: [[TMP35:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]1099// CHECK1-NEXT: [[TMP36:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP34]], ptr [[TMP35]])1100// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]1101// CHECK1: .untied.jmp.5.i:1102// CHECK1-NEXT: [[TMP37:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1103// CHECK1-NEXT: [[TMP38:%.*]] = call i32 @__kmpc_omp_taskyield(ptr @[[GLOB1]], i32 [[TMP37]], i32 0)1104// CHECK1-NEXT: [[TMP39:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]1105// CHECK1-NEXT: store i32 4, ptr [[TMP39]], align 41106// CHECK1-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1107// CHECK1-NEXT: [[TMP41:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]1108// CHECK1-NEXT: [[TMP42:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP40]], ptr [[TMP41]])1109// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]1110// CHECK1: .untied.jmp.7.i:1111// CHECK1-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]])1112// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TMP13]], ptr align 4 [[REF_TMP_I]], i64 4, i1 false)1113// CHECK1-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]]) #[[ATTR4]]1114// CHECK1-NEXT: store i32 10, ptr [[TMP15]], align 41115// CHECK1-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1116// CHECK1-NEXT: [[TMP44:%.*]] = call i32 @__kmpc_omp_taskwait(ptr @[[GLOB1]], i32 [[TMP43]])1117// CHECK1-NEXT: [[TMP45:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]1118// CHECK1-NEXT: store i32 5, ptr [[TMP45]], align 41119// CHECK1-NEXT: [[TMP46:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1120// CHECK1-NEXT: [[TMP47:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]1121// CHECK1-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP46]], ptr [[TMP47]])1122// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]1123// CHECK1: .untied.jmp.10.i:1124// CHECK1-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP15]]) #[[ATTR4]]1125// CHECK1-NEXT: [[TMP49:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]1126// CHECK1-NEXT: call void @__kmpc_free(i32 [[TMP49]], ptr [[TMP15]], ptr inttoptr (i64 7 to ptr))1127// CHECK1-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP13]]) #[[ATTR4]]1128// CHECK1-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]1129// CHECK1-NEXT: br label [[CLEANUP_I]]1130// CHECK1: cleanup.i:1131// CHECK1-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]1132// CHECK1-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]1133// CHECK1: .omp_outlined..17.exit:1134// CHECK1-NEXT: ret i32 01135//1136//1137// CHECK1-LABEL: define {{[^@]+}}@_ZN1SC2Ev1138// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {1139// CHECK1-NEXT: entry:1140// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 81141// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 81142// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81143// CHECK1-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 01144// CHECK1-NEXT: store i32 0, ptr [[A]], align 41145// CHECK1-NEXT: ret void1146//1147//1148// CHECK1-LABEL: define {{[^@]+}}@_ZN1SD2Ev1149// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {1150// CHECK1-NEXT: entry:1151// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 81152// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 81153// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81154// CHECK1-NEXT: ret void1155//1156//1157// CHECK1-LABEL: define {{[^@]+}}@__cxx_global_var_init1158// CHECK1-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {1159// CHECK1-NEXT: entry:1160// CHECK1-NEXT: call void @_ZN2S1C1Ev(ptr noundef nonnull align 4 dereferenceable(4) @s1)1161// CHECK1-NEXT: ret void1162//1163//1164// CHECK1-LABEL: define {{[^@]+}}@_ZN2S1C1Ev1165// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {1166// CHECK1-NEXT: entry:1167// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 81168// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 81169// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81170// CHECK1-NEXT: call void @_ZN2S1C2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])1171// CHECK1-NEXT: ret void1172//1173//1174// CHECK1-LABEL: define {{[^@]+}}@_ZN2S1C2Ev1175// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {1176// CHECK1-NEXT: entry:1177// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 81178// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 81179// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81180// CHECK1-NEXT: call void @_ZN2S18taskinitEv(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])1181// CHECK1-NEXT: ret void1182//1183//1184// CHECK1-LABEL: define {{[^@]+}}@_ZN2S18taskinitEv1185// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) #[[ATTR1]] align 2 {1186// CHECK1-NEXT: entry:1187// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 81188// CHECK1-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_21:%.*]], align 81189// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])1190// CHECK1-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 81191// CHECK1-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81192// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_21]], ptr [[AGG_CAPTURED]], i32 0, i32 01193// CHECK1-NEXT: store ptr [[THIS1]], ptr [[TMP1]], align 81194// CHECK1-NEXT: [[TMP2:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..23)1195// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP2]], i32 0, i32 01196// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP3]], i32 0, i32 01197// CHECK1-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 81198// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP5]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)1199// CHECK1-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP2]])1200// CHECK1-NEXT: ret void1201//1202//1203// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..231204// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {1205// CHECK1-NEXT: entry:1206// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41207// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81208// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81209// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81210// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81211// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81212// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41213// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81214// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41215// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81216// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41217// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81218// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP3]], i32 0, i32 01219// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21220// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01221// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81222// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META113:![0-9]+]])1223// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META116:![0-9]+]])1224// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META118:![0-9]+]])1225// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META120:![0-9]+]])1226// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122:![0-9]+]]1227// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]1228// CHECK1-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]1229// CHECK1-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]1230// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]1231// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]1232// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]1233// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 81234// CHECK1-NEXT: store i32 0, ptr [[TMP9]], align 41235// CHECK1-NEXT: ret i32 01236//1237//1238// CHECK1-LABEL: define {{[^@]+}}@_Z4xxxxv1239// CHECK1-SAME: () #[[ATTR1]] {1240// CHECK1-NEXT: entry:1241// CHECK1-NEXT: call void @_Z6foobarIvEvv()1242// CHECK1-NEXT: ret void1243//1244//1245// CHECK1-LABEL: define {{[^@]+}}@_Z6foobarIvEvv1246// CHECK1-SAME: () #[[ATTR1]] {1247// CHECK1-NEXT: entry:1248// CHECK1-NEXT: [[A:%.*]] = alloca float, align 41249// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB1]], i32 1, ptr @_Z6foobarIvEvv.omp_outlined, ptr [[A]])1250// CHECK1-NEXT: ret void1251//1252//1253// CHECK1-LABEL: define {{[^@]+}}@_Z6foobarIvEvv.omp_outlined1254// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR8:[0-9]+]] {1255// CHECK1-NEXT: entry:1256// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81257// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81258// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 81259// CHECK1-NEXT: [[B:%.*]] = alloca double, align 81260// CHECK1-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_23:%.*]], align 81261// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81262// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81263// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 81264// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 81265// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81266// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 41267// CHECK1-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB1]], i32 [[TMP2]])1268// CHECK1-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 01269// CHECK1-NEXT: br i1 [[TMP4]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]1270// CHECK1: omp_if.then:1271// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_23]], ptr [[AGG_CAPTURED]], i32 0, i32 01272// CHECK1-NEXT: store ptr [[TMP0]], ptr [[TMP5]], align 81273// CHECK1-NEXT: [[TMP6:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i64 48, i64 8, ptr @.omp_task_entry..26)1274// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP6]], i32 0, i32 01275// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP7]], i32 0, i32 01276// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 81277// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP9]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)1278// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24]], ptr [[TMP6]], i32 0, i32 11279// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_25:%.*]], ptr [[TMP10]], i32 0, i32 01280// CHECK1-NEXT: [[TMP12:%.*]] = load double, ptr [[B]], align 81281// CHECK1-NEXT: store double [[TMP12]], ptr [[TMP11]], align 81282// CHECK1-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP2]], ptr [[TMP6]])1283// CHECK1-NEXT: call void @__kmpc_end_single(ptr @[[GLOB1]], i32 [[TMP2]])1284// CHECK1-NEXT: br label [[OMP_IF_END]]1285// CHECK1: omp_if.end:1286// CHECK1-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2:[0-9]+]], i32 [[TMP2]])1287// CHECK1-NEXT: ret void1288//1289//1290// CHECK1-LABEL: define {{[^@]+}}@.omp_task_privates_map..251291// CHECK1-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {1292// CHECK1-NEXT: entry:1293// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 81294// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81295// CHECK1-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 81296// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81297// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 81298// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_25:%.*]], ptr [[TMP2]], i32 0, i32 01299// CHECK1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 81300// CHECK1-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 81301// CHECK1-NEXT: ret void1302//1303//1304// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry..261305// CHECK1-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {1306// CHECK1-NEXT: entry:1307// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41308// CHECK1-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81309// CHECK1-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81310// CHECK1-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81311// CHECK1-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81312// CHECK1-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81313// CHECK1-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 81314// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41315// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81316// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41317// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81318// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41319// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81320// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP3]], i32 0, i32 01321// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21322// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01323// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81324// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24]], ptr [[TMP3]], i32 0, i32 11325// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META123:![0-9]+]])1326// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META126:![0-9]+]])1327// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META128:![0-9]+]])1328// CHECK1-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META130:![0-9]+]])1329// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META132:![0-9]+]]1330// CHECK1-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META132]]1331// CHECK1-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META132]]1332// CHECK1-NEXT: store ptr @.omp_task_privates_map..25, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META132]]1333// CHECK1-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META132]]1334// CHECK1-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]1335// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]1336// CHECK1-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META132]]1337// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META132]]1338// CHECK1-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]1339// CHECK1-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META132]]1340// CHECK1-NEXT: [[TMP13:%.*]] = load double, ptr [[TMP12]], align 81341// CHECK1-NEXT: [[TMP14:%.*]] = load ptr, ptr [[TMP9]], align 81342// CHECK1-NEXT: [[TMP15:%.*]] = load float, ptr [[TMP14]], align 41343// CHECK1-NEXT: [[CONV_I:%.*]] = fpext float [[TMP15]] to double1344// CHECK1-NEXT: [[ADD_I:%.*]] = fadd double [[CONV_I]], [[TMP13]]1345// CHECK1-NEXT: [[CONV1_I:%.*]] = fptrunc double [[ADD_I]] to float1346// CHECK1-NEXT: store float [[CONV1_I]], ptr [[TMP14]], align 41347// CHECK1-NEXT: ret i32 01348//1349//1350// CHECK1-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_task_codegen.cpp1351// CHECK1-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {1352// CHECK1-NEXT: entry:1353// CHECK1-NEXT: call void @__cxx_global_var_init()1354// CHECK1-NEXT: ret void1355//1356//1357// CHECK1-51-LABEL: define {{[^@]+}}@main1358// CHECK1-51-SAME: () #[[ATTR0:[0-9]+]] {1359// CHECK1-51-NEXT: entry:1360// CHECK1-51-NEXT: [[RETVAL:%.*]] = alloca i32, align 41361// CHECK1-51-NEXT: [[B:%.*]] = alloca i8, align 11362// CHECK1-51-NEXT: [[S:%.*]] = alloca [2 x %struct.S], align 41363// CHECK1-51-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 81364// CHECK1-51-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 81365// CHECK1-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 81366// CHECK1-51-NEXT: [[AGG_CAPTURED1:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 81367// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 81368// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 81369// CHECK1-51-NEXT: [[AGG_CAPTURED3:%.*]] = alloca [[STRUCT_ANON_2:%.*]], align 11370// CHECK1-51-NEXT: [[AGG_CAPTURED4:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 11371// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR5:%.*]] = alloca [2 x %struct.kmp_depend_info], align 81372// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR11:%.*]] = alloca i64, align 81373// CHECK1-51-NEXT: [[AGG_CAPTURED12:%.*]] = alloca [[STRUCT_ANON_6:%.*]], align 11374// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR13:%.*]] = alloca [2 x %struct.kmp_depend_info], align 81375// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR19:%.*]] = alloca i64, align 81376// CHECK1-51-NEXT: [[AGG_CAPTURED20:%.*]] = alloca [[STRUCT_ANON_8:%.*]], align 11377// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR21:%.*]] = alloca [3 x %struct.kmp_depend_info], align 81378// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR27:%.*]] = alloca i64, align 81379// CHECK1-51-NEXT: [[AGG_CAPTURED28:%.*]] = alloca [[STRUCT_ANON_10:%.*]], align 11380// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR29:%.*]] = alloca [3 x %struct.kmp_depend_info], align 81381// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR37:%.*]] = alloca i64, align 81382// CHECK1-51-NEXT: [[AGG_CAPTURED38:%.*]] = alloca [[STRUCT_ANON_12:%.*]], align 11383// CHECK1-51-NEXT: [[FLAG:%.*]] = alloca i8, align 11384// CHECK1-51-NEXT: [[AGG_CAPTURED39:%.*]] = alloca [[STRUCT_ANON_14:%.*]], align 11385// CHECK1-51-NEXT: [[C:%.*]] = alloca i32, align 1281386// CHECK1-51-NEXT: [[AGG_CAPTURED40:%.*]] = alloca [[STRUCT_ANON_16:%.*]], align 81387// CHECK1-51-NEXT: [[AGG_CAPTURED41:%.*]] = alloca [[STRUCT_ANON_18:%.*]], align 11388// CHECK1-51-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])1389// CHECK1-51-NEXT: store i32 0, ptr [[RETVAL]], align 41390// CHECK1-51-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 01391// CHECK1-51-NEXT: [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 21392// CHECK1-51-NEXT: br label [[ARRAYCTOR_LOOP:%.*]]1393// CHECK1-51: arrayctor.loop:1394// CHECK1-51-NEXT: [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]1395// CHECK1-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])1396// CHECK1-51-NEXT: [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 11397// CHECK1-51-NEXT: [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]1398// CHECK1-51-NEXT: br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]1399// CHECK1-51: arrayctor.cont:1400// CHECK1-51-NEXT: [[TMP1:%.*]] = load i32, ptr @a, align 41401// CHECK1-51-NEXT: [[TMP2:%.*]] = zext i32 [[TMP1]] to i641402// CHECK1-51-NEXT: [[TMP3:%.*]] = call ptr @llvm.stacksave.p0()1403// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[SAVED_STACK]], align 81404// CHECK1-51-NEXT: [[TMP4:%.*]] = mul nuw i64 10, [[TMP2]]1405// CHECK1-51-NEXT: [[VLA:%.*]] = alloca i32, i64 [[TMP4]], align 161406// CHECK1-51-NEXT: store i64 [[TMP2]], ptr [[__VLA_EXPR0]], align 81407// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 01408// CHECK1-51-NEXT: store ptr [[B]], ptr [[TMP5]], align 81409// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 11410// CHECK1-51-NEXT: store ptr [[S]], ptr [[TMP6]], align 81411// CHECK1-51-NEXT: [[TMP7:%.*]] = load i8, ptr [[B]], align 11412// CHECK1-51-NEXT: [[CONV:%.*]] = sext i8 [[TMP7]] to i321413// CHECK1-51-NEXT: [[TMP8:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 33, i64 40, i64 16, ptr @.omp_task_entry.)1414// CHECK1-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP8]], i32 0, i32 01415// CHECK1-51-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP9]], i32 0, i32 01416// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TMP10]], align 81417// CHECK1-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP11]], ptr align 8 [[AGG_CAPTURED]], i64 16, i1 false)1418// CHECK1-51-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP9]], i32 0, i32 41419// CHECK1-51-NEXT: store i32 [[CONV]], ptr [[TMP12]], align 81420// CHECK1-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP8]])1421// CHECK1-51-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_0]], ptr [[AGG_CAPTURED1]], i32 0, i32 01422// CHECK1-51-NEXT: store ptr [[S]], ptr [[TMP14]], align 81423// CHECK1-51-NEXT: [[TMP15:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..2)1424// CHECK1-51-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP15]], i32 0, i32 01425// CHECK1-51-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP16]], i32 0, i32 01426// CHECK1-51-NEXT: [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 81427// CHECK1-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP18]], ptr align 8 [[AGG_CAPTURED1]], i64 8, i1 false)1428// CHECK1-51-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 01429// CHECK1-51-NEXT: [[TMP20:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP19]], i64 01430// CHECK1-51-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 01431// CHECK1-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP21]], align 81432// CHECK1-51-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 11433// CHECK1-51-NEXT: store i64 4, ptr [[TMP22]], align 81434// CHECK1-51-NEXT: [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 21435// CHECK1-51-NEXT: store i8 1, ptr [[TMP23]], align 81436// CHECK1-51-NEXT: [[TMP24:%.*]] = ptrtoint ptr [[B]] to i641437// CHECK1-51-NEXT: [[TMP25:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 11438// CHECK1-51-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 01439// CHECK1-51-NEXT: store i64 [[TMP24]], ptr [[TMP26]], align 81440// CHECK1-51-NEXT: [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 11441// CHECK1-51-NEXT: store i64 1, ptr [[TMP27]], align 81442// CHECK1-51-NEXT: [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 21443// CHECK1-51-NEXT: store i8 1, ptr [[TMP28]], align 81444// CHECK1-51-NEXT: [[TMP29:%.*]] = ptrtoint ptr [[S]] to i641445// CHECK1-51-NEXT: [[TMP30:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 21446// CHECK1-51-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 01447// CHECK1-51-NEXT: store i64 [[TMP29]], ptr [[TMP31]], align 81448// CHECK1-51-NEXT: [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 11449// CHECK1-51-NEXT: store i64 8, ptr [[TMP32]], align 81450// CHECK1-51-NEXT: [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 21451// CHECK1-51-NEXT: store i8 1, ptr [[TMP33]], align 81452// CHECK1-51-NEXT: [[TMP34:%.*]] = mul nsw i64 0, [[TMP2]]1453// CHECK1-51-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP34]]1454// CHECK1-51-NEXT: [[TMP35:%.*]] = mul nsw i64 9, [[TMP2]]1455// CHECK1-51-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP35]]1456// CHECK1-51-NEXT: [[TMP36:%.*]] = getelementptr i32, ptr [[ARRAYIDX2]], i32 11457// CHECK1-51-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i641458// CHECK1-51-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP36]] to i641459// CHECK1-51-NEXT: [[TMP39:%.*]] = sub nuw i64 [[TMP38]], [[TMP37]]1460// CHECK1-51-NEXT: [[TMP40:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i641461// CHECK1-51-NEXT: [[TMP41:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 31462// CHECK1-51-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 01463// CHECK1-51-NEXT: store i64 [[TMP40]], ptr [[TMP42]], align 81464// CHECK1-51-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 11465// CHECK1-51-NEXT: store i64 [[TMP39]], ptr [[TMP43]], align 81466// CHECK1-51-NEXT: [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 21467// CHECK1-51-NEXT: store i8 1, ptr [[TMP44]], align 81468// CHECK1-51-NEXT: store i64 4, ptr [[DEP_COUNTER_ADDR]], align 81469// CHECK1-51-NEXT: [[TMP45:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP15]], i32 4, ptr [[TMP19]], i32 0, ptr null)1470// CHECK1-51-NEXT: [[TMP46:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..4)1471// CHECK1-51-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP46]], i32 0, i32 01472// CHECK1-51-NEXT: [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP47]], i32 0, i32 21473// CHECK1-51-NEXT: store i32 0, ptr [[TMP48]], align 81474// CHECK1-51-NEXT: [[TMP49:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP46]])1475// CHECK1-51-NEXT: [[TMP50:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..6)1476// CHECK1-51-NEXT: [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP50]], i32 0, i32 01477// CHECK1-51-NEXT: [[TMP52:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR5]], i64 0, i64 01478// CHECK1-51-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 01479// CHECK1-51-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[ARRAYIDX6]] to i641480// CHECK1-51-NEXT: [[TMP54:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 01481// CHECK1-51-NEXT: [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 01482// CHECK1-51-NEXT: store i64 [[TMP53]], ptr [[TMP55]], align 81483// CHECK1-51-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 11484// CHECK1-51-NEXT: store i64 4, ptr [[TMP56]], align 81485// CHECK1-51-NEXT: [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 21486// CHECK1-51-NEXT: store i8 3, ptr [[TMP57]], align 81487// CHECK1-51-NEXT: [[TMP58:%.*]] = load i8, ptr [[B]], align 11488// CHECK1-51-NEXT: [[TMP59:%.*]] = sext i8 [[TMP58]] to i641489// CHECK1-51-NEXT: [[TMP60:%.*]] = mul nsw i64 4, [[TMP2]]1490// CHECK1-51-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP60]]1491// CHECK1-51-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX7]], i64 [[TMP59]]1492// CHECK1-51-NEXT: [[TMP61:%.*]] = load i8, ptr [[B]], align 11493// CHECK1-51-NEXT: [[TMP62:%.*]] = sext i8 [[TMP61]] to i641494// CHECK1-51-NEXT: [[TMP63:%.*]] = mul nsw i64 9, [[TMP2]]1495// CHECK1-51-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP63]]1496// CHECK1-51-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX9]], i64 [[TMP62]]1497// CHECK1-51-NEXT: [[TMP64:%.*]] = getelementptr i32, ptr [[ARRAYIDX10]], i32 11498// CHECK1-51-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i641499// CHECK1-51-NEXT: [[TMP66:%.*]] = ptrtoint ptr [[TMP64]] to i641500// CHECK1-51-NEXT: [[TMP67:%.*]] = sub nuw i64 [[TMP66]], [[TMP65]]1501// CHECK1-51-NEXT: [[TMP68:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i641502// CHECK1-51-NEXT: [[TMP69:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 11503// CHECK1-51-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 01504// CHECK1-51-NEXT: store i64 [[TMP68]], ptr [[TMP70]], align 81505// CHECK1-51-NEXT: [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 11506// CHECK1-51-NEXT: store i64 [[TMP67]], ptr [[TMP71]], align 81507// CHECK1-51-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 21508// CHECK1-51-NEXT: store i8 3, ptr [[TMP72]], align 81509// CHECK1-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR11]], align 81510// CHECK1-51-NEXT: [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP51]], i32 0, i32 21511// CHECK1-51-NEXT: store i32 0, ptr [[TMP73]], align 81512// CHECK1-51-NEXT: [[TMP74:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP50]], i32 2, ptr [[TMP52]], i32 0, ptr null)1513// CHECK1-51-NEXT: [[TMP75:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..8)1514// CHECK1-51-NEXT: [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP75]], i32 0, i32 01515// CHECK1-51-NEXT: [[TMP77:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR13]], i64 0, i64 01516// CHECK1-51-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 01517// CHECK1-51-NEXT: [[TMP78:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i641518// CHECK1-51-NEXT: [[TMP79:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 01519// CHECK1-51-NEXT: [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 01520// CHECK1-51-NEXT: store i64 [[TMP78]], ptr [[TMP80]], align 81521// CHECK1-51-NEXT: [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 11522// CHECK1-51-NEXT: store i64 4, ptr [[TMP81]], align 81523// CHECK1-51-NEXT: [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 21524// CHECK1-51-NEXT: store i8 4, ptr [[TMP82]], align 81525// CHECK1-51-NEXT: [[TMP83:%.*]] = load i8, ptr [[B]], align 11526// CHECK1-51-NEXT: [[TMP84:%.*]] = sext i8 [[TMP83]] to i641527// CHECK1-51-NEXT: [[TMP85:%.*]] = mul nsw i64 4, [[TMP2]]1528// CHECK1-51-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP85]]1529// CHECK1-51-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX15]], i64 [[TMP84]]1530// CHECK1-51-NEXT: [[TMP86:%.*]] = load i8, ptr [[B]], align 11531// CHECK1-51-NEXT: [[TMP87:%.*]] = sext i8 [[TMP86]] to i641532// CHECK1-51-NEXT: [[TMP88:%.*]] = mul nsw i64 9, [[TMP2]]1533// CHECK1-51-NEXT: [[ARRAYIDX17:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP88]]1534// CHECK1-51-NEXT: [[ARRAYIDX18:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX17]], i64 [[TMP87]]1535// CHECK1-51-NEXT: [[TMP89:%.*]] = getelementptr i32, ptr [[ARRAYIDX18]], i32 11536// CHECK1-51-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i641537// CHECK1-51-NEXT: [[TMP91:%.*]] = ptrtoint ptr [[TMP89]] to i641538// CHECK1-51-NEXT: [[TMP92:%.*]] = sub nuw i64 [[TMP91]], [[TMP90]]1539// CHECK1-51-NEXT: [[TMP93:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i641540// CHECK1-51-NEXT: [[TMP94:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 11541// CHECK1-51-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 01542// CHECK1-51-NEXT: store i64 [[TMP93]], ptr [[TMP95]], align 81543// CHECK1-51-NEXT: [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 11544// CHECK1-51-NEXT: store i64 [[TMP92]], ptr [[TMP96]], align 81545// CHECK1-51-NEXT: [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 21546// CHECK1-51-NEXT: store i8 4, ptr [[TMP97]], align 81547// CHECK1-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR19]], align 81548// CHECK1-51-NEXT: [[TMP98:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP76]], i32 0, i32 21549// CHECK1-51-NEXT: store i32 0, ptr [[TMP98]], align 81550// CHECK1-51-NEXT: [[TMP99:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP75]], i32 2, ptr [[TMP77]], i32 0, ptr null)1551// CHECK1-51-NEXT: [[TMP100:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..10)1552// CHECK1-51-NEXT: [[TMP101:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP100]], i32 0, i32 01553// CHECK1-51-NEXT: [[TMP102:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR21]], i64 0, i64 01554// CHECK1-51-NEXT: [[TMP103:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 01555// CHECK1-51-NEXT: [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 01556// CHECK1-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP104]], align 81557// CHECK1-51-NEXT: [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 11558// CHECK1-51-NEXT: store i64 4, ptr [[TMP105]], align 81559// CHECK1-51-NEXT: [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 21560// CHECK1-51-NEXT: store i8 3, ptr [[TMP106]], align 81561// CHECK1-51-NEXT: [[ARRAYIDX22:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 11562// CHECK1-51-NEXT: [[TMP107:%.*]] = ptrtoint ptr [[ARRAYIDX22]] to i641563// CHECK1-51-NEXT: [[TMP108:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 11564// CHECK1-51-NEXT: [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 01565// CHECK1-51-NEXT: store i64 [[TMP107]], ptr [[TMP109]], align 81566// CHECK1-51-NEXT: [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 11567// CHECK1-51-NEXT: store i64 4, ptr [[TMP110]], align 81568// CHECK1-51-NEXT: [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 21569// CHECK1-51-NEXT: store i8 3, ptr [[TMP111]], align 81570// CHECK1-51-NEXT: [[TMP112:%.*]] = mul nsw i64 0, [[TMP2]]1571// CHECK1-51-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP112]]1572// CHECK1-51-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX23]], i64 31573// CHECK1-51-NEXT: [[TMP113:%.*]] = load i32, ptr @a, align 41574// CHECK1-51-NEXT: [[TMP114:%.*]] = sext i32 [[TMP113]] to i641575// CHECK1-51-NEXT: [[LEN_SUB_1:%.*]] = sub nsw i64 [[TMP114]], 11576// CHECK1-51-NEXT: [[TMP115:%.*]] = load i32, ptr @a, align 41577// CHECK1-51-NEXT: [[TMP116:%.*]] = sext i32 [[TMP115]] to i641578// CHECK1-51-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP116]]1579// CHECK1-51-NEXT: [[TMP117:%.*]] = mul nsw i64 [[LB_ADD_LEN]], [[TMP2]]1580// CHECK1-51-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP117]]1581// CHECK1-51-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[LEN_SUB_1]]1582// CHECK1-51-NEXT: [[TMP118:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 11583// CHECK1-51-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i641584// CHECK1-51-NEXT: [[TMP120:%.*]] = ptrtoint ptr [[TMP118]] to i641585// CHECK1-51-NEXT: [[TMP121:%.*]] = sub nuw i64 [[TMP120]], [[TMP119]]1586// CHECK1-51-NEXT: [[TMP122:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i641587// CHECK1-51-NEXT: [[TMP123:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 21588// CHECK1-51-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 01589// CHECK1-51-NEXT: store i64 [[TMP122]], ptr [[TMP124]], align 81590// CHECK1-51-NEXT: [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 11591// CHECK1-51-NEXT: store i64 [[TMP121]], ptr [[TMP125]], align 81592// CHECK1-51-NEXT: [[TMP126:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 21593// CHECK1-51-NEXT: store i8 3, ptr [[TMP126]], align 81594// CHECK1-51-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR27]], align 81595// CHECK1-51-NEXT: [[TMP127:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP100]], i32 3, ptr [[TMP102]], i32 0, ptr null)1596// CHECK1-51-NEXT: [[TMP128:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..12)1597// CHECK1-51-NEXT: [[TMP129:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP128]], i32 0, i32 01598// CHECK1-51-NEXT: [[TMP130:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR29]], i64 0, i64 01599// CHECK1-51-NEXT: [[TMP131:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP130]], i64 01600// CHECK1-51-NEXT: [[TMP132:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP131]], i32 0, i32 01601// CHECK1-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP132]], align 81602// CHECK1-51-NEXT: [[TMP133:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP131]], i32 0, i32 11603// CHECK1-51-NEXT: store i64 4, ptr [[TMP133]], align 81604// CHECK1-51-NEXT: [[TMP134:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP131]], i32 0, i32 21605// CHECK1-51-NEXT: store i8 8, ptr [[TMP134]], align 81606// CHECK1-51-NEXT: [[ARRAYIDX30:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 11607// CHECK1-51-NEXT: [[TMP135:%.*]] = ptrtoint ptr [[ARRAYIDX30]] to i641608// CHECK1-51-NEXT: [[TMP136:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP130]], i64 11609// CHECK1-51-NEXT: [[TMP137:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP136]], i32 0, i32 01610// CHECK1-51-NEXT: store i64 [[TMP135]], ptr [[TMP137]], align 81611// CHECK1-51-NEXT: [[TMP138:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP136]], i32 0, i32 11612// CHECK1-51-NEXT: store i64 4, ptr [[TMP138]], align 81613// CHECK1-51-NEXT: [[TMP139:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP136]], i32 0, i32 21614// CHECK1-51-NEXT: store i8 8, ptr [[TMP139]], align 81615// CHECK1-51-NEXT: [[TMP140:%.*]] = mul nsw i64 0, [[TMP2]]1616// CHECK1-51-NEXT: [[ARRAYIDX31:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP140]]1617// CHECK1-51-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX31]], i64 31618// CHECK1-51-NEXT: [[TMP141:%.*]] = load i32, ptr @a, align 41619// CHECK1-51-NEXT: [[TMP142:%.*]] = sext i32 [[TMP141]] to i641620// CHECK1-51-NEXT: [[LEN_SUB_133:%.*]] = sub nsw i64 [[TMP142]], 11621// CHECK1-51-NEXT: [[TMP143:%.*]] = load i32, ptr @a, align 41622// CHECK1-51-NEXT: [[TMP144:%.*]] = sext i32 [[TMP143]] to i641623// CHECK1-51-NEXT: [[LB_ADD_LEN34:%.*]] = add nsw i64 -1, [[TMP144]]1624// CHECK1-51-NEXT: [[TMP145:%.*]] = mul nsw i64 [[LB_ADD_LEN34]], [[TMP2]]1625// CHECK1-51-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP145]]1626// CHECK1-51-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX35]], i64 [[LEN_SUB_133]]1627// CHECK1-51-NEXT: [[TMP146:%.*]] = getelementptr i32, ptr [[ARRAYIDX36]], i32 11628// CHECK1-51-NEXT: [[TMP147:%.*]] = ptrtoint ptr [[ARRAYIDX32]] to i641629// CHECK1-51-NEXT: [[TMP148:%.*]] = ptrtoint ptr [[TMP146]] to i641630// CHECK1-51-NEXT: [[TMP149:%.*]] = sub nuw i64 [[TMP148]], [[TMP147]]1631// CHECK1-51-NEXT: [[TMP150:%.*]] = ptrtoint ptr [[ARRAYIDX32]] to i641632// CHECK1-51-NEXT: [[TMP151:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP130]], i64 21633// CHECK1-51-NEXT: [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP151]], i32 0, i32 01634// CHECK1-51-NEXT: store i64 [[TMP150]], ptr [[TMP152]], align 81635// CHECK1-51-NEXT: [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP151]], i32 0, i32 11636// CHECK1-51-NEXT: store i64 [[TMP149]], ptr [[TMP153]], align 81637// CHECK1-51-NEXT: [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP151]], i32 0, i32 21638// CHECK1-51-NEXT: store i8 8, ptr [[TMP154]], align 81639// CHECK1-51-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR37]], align 81640// CHECK1-51-NEXT: [[TMP155:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP128]], i32 3, ptr [[TMP130]], i32 0, ptr null)1641// CHECK1-51-NEXT: [[TMP156:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..14)1642// CHECK1-51-NEXT: [[TMP157:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP156]], i32 0, i32 01643// CHECK1-51-NEXT: [[TMP158:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP156]])1644// CHECK1-51-NEXT: store i8 0, ptr [[FLAG]], align 11645// CHECK1-51-NEXT: [[TMP159:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..16)1646// CHECK1-51-NEXT: [[TMP160:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP159]], i32 0, i32 01647// CHECK1-51-NEXT: [[TMP161:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP159]])1648// CHECK1-51-NEXT: [[TMP162:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_16]], ptr [[AGG_CAPTURED40]], i32 0, i32 01649// CHECK1-51-NEXT: store ptr [[C]], ptr [[TMP162]], align 81650// CHECK1-51-NEXT: [[TMP163:%.*]] = load i8, ptr [[B]], align 11651// CHECK1-51-NEXT: [[TOBOOL:%.*]] = icmp ne i8 [[TMP163]], 01652// CHECK1-51-NEXT: [[TMP164:%.*]] = select i1 [[TOBOOL]], i32 2, i32 01653// CHECK1-51-NEXT: [[TMP165:%.*]] = or i32 [[TMP164]], 11654// CHECK1-51-NEXT: [[TMP166:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 [[TMP165]], i64 40, i64 8, ptr @.omp_task_entry..18)1655// CHECK1-51-NEXT: [[TMP167:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_17:%.*]], ptr [[TMP166]], i32 0, i32 01656// CHECK1-51-NEXT: [[TMP168:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP167]], i32 0, i32 01657// CHECK1-51-NEXT: [[TMP169:%.*]] = load ptr, ptr [[TMP168]], align 81658// CHECK1-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP169]], ptr align 8 [[AGG_CAPTURED40]], i64 8, i1 false)1659// CHECK1-51-NEXT: [[TMP170:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP166]])1660// CHECK1-51-NEXT: [[TMP171:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 256, i64 1, ptr @.omp_task_entry..23)1661// CHECK1-51-NEXT: [[TMP172:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21:%.*]], ptr [[TMP171]], i32 0, i32 01662// CHECK1-51-NEXT: [[TMP173:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21]], ptr [[TMP171]], i32 0, i32 21663// CHECK1-51-NEXT: [[TMP174:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22:%.*]], ptr [[TMP173]], i32 0, i32 01664// CHECK1-51-NEXT: [[TMP175:%.*]] = load i32, ptr [[C]], align 1281665// CHECK1-51-NEXT: store i32 [[TMP175]], ptr [[TMP174]], align 1281666// CHECK1-51-NEXT: [[TMP176:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP172]], i32 0, i32 21667// CHECK1-51-NEXT: store i32 0, ptr [[TMP176]], align 161668// CHECK1-51-NEXT: [[TMP177:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP171]])1669// CHECK1-51-NEXT: [[TMP178:%.*]] = load i32, ptr @a, align 41670// CHECK1-51-NEXT: store i32 [[TMP178]], ptr [[RETVAL]], align 41671// CHECK1-51-NEXT: [[TMP179:%.*]] = load ptr, ptr [[SAVED_STACK]], align 81672// CHECK1-51-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP179]])1673// CHECK1-51-NEXT: [[ARRAY_BEGIN42:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 01674// CHECK1-51-NEXT: [[TMP180:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN42]], i64 21675// CHECK1-51-NEXT: br label [[ARRAYDESTROY_BODY:%.*]]1676// CHECK1-51: arraydestroy.body:1677// CHECK1-51-NEXT: [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP180]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]1678// CHECK1-51-NEXT: [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -11679// CHECK1-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR4:[0-9]+]]1680// CHECK1-51-NEXT: [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN42]]1681// CHECK1-51-NEXT: br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE43:%.*]], label [[ARRAYDESTROY_BODY]]1682// CHECK1-51: arraydestroy.done43:1683// CHECK1-51-NEXT: [[TMP181:%.*]] = load i32, ptr [[RETVAL]], align 41684// CHECK1-51-NEXT: ret i32 [[TMP181]]1685//1686//1687// CHECK1-51-LABEL: define {{[^@]+}}@_ZN1SC1Ev1688// CHECK1-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] align 2 {1689// CHECK1-51-NEXT: entry:1690// CHECK1-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 81691// CHECK1-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 81692// CHECK1-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81693// CHECK1-51-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])1694// CHECK1-51-NEXT: ret void1695//1696//1697// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry.1698// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {1699// CHECK1-51-NEXT: entry:1700// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41701// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81702// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81703// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81704// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81705// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81706// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41707// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81708// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41709// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81710// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41711// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81712// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 01713// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21714// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01715// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81716// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])1717// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])1718// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])1719// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])1720// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META12:![0-9]+]]1721// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META12]]1722// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META12]]1723// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META12]]1724// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META12]]1725// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]1726// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]1727// CHECK1-51-NEXT: store i32 15, ptr @a, align 4, !noalias [[META12]]1728// CHECK1-51-NEXT: [[TMP9:%.*]] = load i32, ptr @a, align 4, !noalias [[META12]]1729// CHECK1-51-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP9]] to i81730// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP8]], align 81731// CHECK1-51-NEXT: store i8 [[CONV_I]], ptr [[TMP10]], align 11732// CHECK1-51-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON:%.*]], ptr [[TMP8]], i32 0, i32 11733// CHECK1-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 81734// CHECK1-51-NEXT: store i32 10, ptr [[TMP12]], align 41735// CHECK1-51-NEXT: ret i32 01736//1737//1738// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..21739// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {1740// CHECK1-51-NEXT: entry:1741// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41742// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81743// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81744// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81745// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81746// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81747// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41748// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81749// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41750// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81751// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41752// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81753// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 01754// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21755// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01756// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81757// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])1758// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META16:![0-9]+]])1759// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])1760// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])1761// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META22:![0-9]+]]1762// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META22]]1763// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META22]]1764// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META22]]1765// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META22]]1766// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]1767// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]1768// CHECK1-51-NEXT: store i32 15, ptr @a, align 4, !noalias [[META22]]1769// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 81770// CHECK1-51-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP9]], i64 0, i64 11771// CHECK1-51-NEXT: store i32 10, ptr [[ARRAYIDX_I]], align 41772// CHECK1-51-NEXT: ret i32 01773//1774//1775// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..41776// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {1777// CHECK1-51-NEXT: entry:1778// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41779// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81780// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81781// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81782// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81783// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81784// CHECK1-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 41785// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41786// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81787// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41788// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81789// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41790// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81791// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP3]], i32 0, i32 01792// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21793// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01794// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81795// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META23:![0-9]+]])1796// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META26:![0-9]+]])1797// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])1798// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])1799// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32:![0-9]+]]1800// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]1801// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META32]]1802// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META32]]1803// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]1804// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]1805// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]1806// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]1807// CHECK1-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 41808// CHECK1-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [1809// CHECK1-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]1810// CHECK1-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]1811// CHECK1-51-NEXT: ]1812// CHECK1-51: .untied.done..i:1813// CHECK1-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]1814// CHECK1-51-NEXT: br label [[CLEANUP_I:%.*]]1815// CHECK1-51: .untied.jmp..i:1816// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]1817// CHECK1-51-NEXT: store i32 1, ptr [[TMP11]], align 41818// CHECK1-51-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32]]1819// CHECK1-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]1820// CHECK1-51-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])1821// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT:%.*]]1822// CHECK1-51: .untied.jmp.1.i:1823// CHECK1-51-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32]]1824// CHECK1-51-NEXT: call void @__kmpc_critical(ptr @[[GLOB1]], i32 [[TMP15]], ptr @.gomp_critical_user_.var)1825// CHECK1-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META32]]1826// CHECK1-51-NEXT: call void @__kmpc_end_critical(ptr @[[GLOB1]], i32 [[TMP15]], ptr @.gomp_critical_user_.var)1827// CHECK1-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]1828// CHECK1-51-NEXT: br label [[CLEANUP_I]]1829// CHECK1-51: cleanup.i:1830// CHECK1-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]1831// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT]]1832// CHECK1-51: .omp_outlined..3.exit:1833// CHECK1-51-NEXT: ret i32 01834//1835//1836// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..61837// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {1838// CHECK1-51-NEXT: entry:1839// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41840// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81841// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81842// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81843// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81844// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81845// CHECK1-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 41846// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41847// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81848// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41849// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81850// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41851// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81852// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 01853// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21854// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01855// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81856// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META33:![0-9]+]])1857// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META36:![0-9]+]])1858// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META38:![0-9]+]])1859// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])1860// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42:![0-9]+]]1861// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]1862// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META42]]1863// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META42]]1864// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]1865// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]1866// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]1867// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]1868// CHECK1-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 41869// CHECK1-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [1870// CHECK1-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]1871// CHECK1-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]1872// CHECK1-51-NEXT: ]1873// CHECK1-51: .untied.done..i:1874// CHECK1-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]1875// CHECK1-51-NEXT: br label [[CLEANUP_I:%.*]]1876// CHECK1-51: .untied.jmp..i:1877// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]1878// CHECK1-51-NEXT: store i32 1, ptr [[TMP11]], align 41879// CHECK1-51-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42]]1880// CHECK1-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]1881// CHECK1-51-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])1882// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT:%.*]]1883// CHECK1-51: .untied.jmp.1.i:1884// CHECK1-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META42]]1885// CHECK1-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]1886// CHECK1-51-NEXT: br label [[CLEANUP_I]]1887// CHECK1-51: cleanup.i:1888// CHECK1-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]1889// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT]]1890// CHECK1-51: .omp_outlined..5.exit:1891// CHECK1-51-NEXT: ret i32 01892//1893//1894// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..81895// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {1896// CHECK1-51-NEXT: entry:1897// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41898// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81899// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81900// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81901// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81902// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81903// CHECK1-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 41904// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41905// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81906// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41907// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81908// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41909// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81910// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP3]], i32 0, i32 01911// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21912// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01913// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81914// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])1915// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META46:![0-9]+]])1916// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META48:![0-9]+]])1917// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META50:![0-9]+]])1918// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52:![0-9]+]]1919// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]1920// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META52]]1921// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META52]]1922// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]1923// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]1924// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]1925// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]1926// CHECK1-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 41927// CHECK1-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [1928// CHECK1-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]1929// CHECK1-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]1930// CHECK1-51-NEXT: ]1931// CHECK1-51: .untied.done..i:1932// CHECK1-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]1933// CHECK1-51-NEXT: br label [[CLEANUP_I:%.*]]1934// CHECK1-51: .untied.jmp..i:1935// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]1936// CHECK1-51-NEXT: store i32 1, ptr [[TMP11]], align 41937// CHECK1-51-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52]]1938// CHECK1-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]1939// CHECK1-51-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])1940// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT:%.*]]1941// CHECK1-51: .untied.jmp.1.i:1942// CHECK1-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META52]]1943// CHECK1-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]1944// CHECK1-51-NEXT: br label [[CLEANUP_I]]1945// CHECK1-51: cleanup.i:1946// CHECK1-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]1947// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT]]1948// CHECK1-51: .omp_outlined..7.exit:1949// CHECK1-51-NEXT: ret i32 01950//1951//1952// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..101953// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {1954// CHECK1-51-NEXT: entry:1955// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41956// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81957// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81958// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81959// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81960// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81961// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41962// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81963// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41964// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81965// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41966// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81967// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP3]], i32 0, i32 01968// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21969// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01970// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81971// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META53:![0-9]+]])1972// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META56:![0-9]+]])1973// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META58:![0-9]+]])1974// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META60:![0-9]+]])1975// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META62:![0-9]+]]1976// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META62]]1977// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META62]]1978// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META62]]1979// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META62]]1980// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]1981// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]1982// CHECK1-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META62]]1983// CHECK1-51-NEXT: ret i32 01984//1985//1986// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..121987// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {1988// CHECK1-51-NEXT: entry:1989// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41990// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 81991// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 81992// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 81993// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 81994// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81995// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 41996// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81997// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 41998// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81999// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42000// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82001// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP3]], i32 0, i32 02002// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22003// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02004// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82005// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META63:![0-9]+]])2006// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META66:![0-9]+]])2007// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META68:![0-9]+]])2008// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META70:![0-9]+]])2009// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META72:![0-9]+]]2010// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META72]]2011// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META72]]2012// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META72]]2013// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META72]]2014// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]2015// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]2016// CHECK1-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META72]]2017// CHECK1-51-NEXT: ret i32 02018//2019//2020// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..142021// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2022// CHECK1-51-NEXT: entry:2023// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42024// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82025// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82026// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82027// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82028// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82029// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42030// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82031// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42032// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82033// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42034// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82035// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP3]], i32 0, i32 02036// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22037// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02038// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82039// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META73:![0-9]+]])2040// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META76:![0-9]+]])2041// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META78:![0-9]+]])2042// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META80:![0-9]+]])2043// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META82:![0-9]+]]2044// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META82]]2045// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META82]]2046// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META82]]2047// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META82]]2048// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]2049// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]2050// CHECK1-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META82]]2051// CHECK1-51-NEXT: ret i32 02052//2053//2054// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..162055// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2056// CHECK1-51-NEXT: entry:2057// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42058// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82059// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82060// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82061// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82062// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82063// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42064// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82065// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42066// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82067// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42068// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82069// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP3]], i32 0, i32 02070// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22071// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02072// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82073// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META83:![0-9]+]])2074// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META86:![0-9]+]])2075// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META88:![0-9]+]])2076// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META90:![0-9]+]])2077// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META92:![0-9]+]]2078// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META92]]2079// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META92]]2080// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META92]]2081// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META92]]2082// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]2083// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]2084// CHECK1-51-NEXT: store i32 3, ptr @a, align 4, !noalias [[META92]]2085// CHECK1-51-NEXT: ret i32 02086//2087//2088// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..182089// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2090// CHECK1-51-NEXT: entry:2091// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42092// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82093// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82094// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82095// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82096// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82097// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42098// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82099// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42100// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82101// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42102// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82103// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_17:%.*]], ptr [[TMP3]], i32 0, i32 02104// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22105// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02106// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82107// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META93:![0-9]+]])2108// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META96:![0-9]+]])2109// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META98:![0-9]+]])2110// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META100:![0-9]+]])2111// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META102:![0-9]+]]2112// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META102]]2113// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]2114// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]2115// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META102]]2116// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]2117// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]2118// CHECK1-51-NEXT: store i32 4, ptr @a, align 4, !noalias [[META102]]2119// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 82120// CHECK1-51-NEXT: store i32 5, ptr [[TMP9]], align 1282121// CHECK1-51-NEXT: ret i32 02122//2123//2124// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_privates_map.2125// CHECK1-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7:[0-9]+]] {2126// CHECK1-51-NEXT: entry:2127// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82128// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82129// CHECK1-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82130// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82131// CHECK1-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82132// CHECK1-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP2]], i32 0, i32 02133// CHECK1-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 82134// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 82135// CHECK1-51-NEXT: ret void2136//2137//2138// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..212139// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2140// CHECK1-51-NEXT: entry:2141// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42142// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82143// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82144// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82145// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82146// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82147// CHECK1-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 82148// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42149// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82150// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42151// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82152// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42153// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82154// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_20:%.*]], ptr [[TMP3]], i32 0, i32 02155// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22156// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02157// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1282158// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_20]], ptr [[TMP3]], i32 0, i32 22159// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META103:![0-9]+]])2160// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META106:![0-9]+]])2161// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META108:![0-9]+]])2162// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META110:![0-9]+]])2163// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112:![0-9]+]]2164// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]2165// CHECK1-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]2166// CHECK1-51-NEXT: store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]2167// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]2168// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]2169// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]2170// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]2171// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]2172// CHECK1-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]2173// CHECK1-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META112]]2174// CHECK1-51-NEXT: store i32 4, ptr [[TMP12]], align 1282175// CHECK1-51-NEXT: store i32 4, ptr @a, align 4, !noalias [[META112]]2176// CHECK1-51-NEXT: ret i32 02177//2178//2179// CHECK1-51-LABEL: define {{[^@]+}}@_ZN1SD1Ev2180// CHECK1-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {2181// CHECK1-51-NEXT: entry:2182// CHECK1-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 82183// CHECK1-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 82184// CHECK1-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82185// CHECK1-51-NEXT: call void @_ZN1SD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR4]]2186// CHECK1-51-NEXT: ret void2187//2188//2189// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..222190// CHECK1-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]]) #[[ATTR7]] {2191// CHECK1-51-NEXT: entry:2192// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82193// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82194// CHECK1-51-NEXT: [[DOTADDR2:%.*]] = alloca ptr, align 82195// CHECK1-51-NEXT: [[DOTADDR3:%.*]] = alloca ptr, align 82196// CHECK1-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82197// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82198// CHECK1-51-NEXT: store ptr [[TMP2]], ptr [[DOTADDR2]], align 82199// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTADDR3]], align 82200// CHECK1-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR]], align 82201// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22:%.*]], ptr [[TMP4]], i32 0, i32 02202// CHECK1-51-NEXT: [[TMP6:%.*]] = load ptr, ptr [[DOTADDR1]], align 82203// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[TMP6]], align 82204// CHECK1-51-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22]], ptr [[TMP4]], i32 0, i32 22205// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[DOTADDR3]], align 82206// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[TMP8]], align 82207// CHECK1-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22]], ptr [[TMP4]], i32 0, i32 32208// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTADDR2]], align 82209// CHECK1-51-NEXT: store ptr [[TMP9]], ptr [[TMP10]], align 82210// CHECK1-51-NEXT: ret void2211//2212//2213// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..232214// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2215// CHECK1-51-NEXT: entry:2216// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42217// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82218// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82219// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82220// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82221// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82222// CHECK1-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 82223// CHECK1-51-NEXT: [[DOTLOCAL_PTR_ADDR_I:%.*]] = alloca ptr, align 82224// CHECK1-51-NEXT: [[DOTLOCAL_PTR_ADDR1_I:%.*]] = alloca ptr, align 82225// CHECK1-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 42226// CHECK1-51-NEXT: [[REF_TMP_I:%.*]] = alloca [[STRUCT_S:%.*]], align 42227// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42228// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82229// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42230// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82231// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42232// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82233// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21:%.*]], ptr [[TMP3]], i32 0, i32 02234// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22235// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02236// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1282237// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21]], ptr [[TMP3]], i32 0, i32 22238// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META113:![0-9]+]])2239// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META116:![0-9]+]])2240// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META118:![0-9]+]])2241// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META120:![0-9]+]])2242// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122:![0-9]+]]2243// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]2244// CHECK1-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]2245// CHECK1-51-NEXT: store ptr @.omp_task_privates_map..22, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]2246// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]2247// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]2248// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]2249// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]2250// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]2251// CHECK1-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR1_I]]) #[[ATTR4]]2252// CHECK1-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META122]]2253// CHECK1-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR_I]], align 8, !noalias [[META122]]2254// CHECK1-51-NEXT: [[TMP14:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR1_I]], align 8, !noalias [[META122]]2255// CHECK1-51-NEXT: [[TMP15:%.*]] = load ptr, ptr [[TMP14]], align 82256// CHECK1-51-NEXT: [[TMP16:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]2257// CHECK1-51-NEXT: [[TMP17:%.*]] = load i32, ptr [[TMP16]], align 42258// CHECK1-51-NEXT: switch i32 [[TMP17]], label [[DOTUNTIED_DONE__I:%.*]] [2259// CHECK1-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]2260// CHECK1-51-NEXT: i32 1, label [[DOTUNTIED_JMP_2_I:%.*]]2261// CHECK1-51-NEXT: i32 2, label [[DOTUNTIED_JMP_3_I:%.*]]2262// CHECK1-51-NEXT: i32 3, label [[DOTUNTIED_JMP_5_I:%.*]]2263// CHECK1-51-NEXT: i32 4, label [[DOTUNTIED_JMP_7_I:%.*]]2264// CHECK1-51-NEXT: i32 5, label [[DOTUNTIED_JMP_10_I:%.*]]2265// CHECK1-51-NEXT: ]2266// CHECK1-51: .untied.done..i:2267// CHECK1-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META122]]2268// CHECK1-51-NEXT: br label [[CLEANUP_I:%.*]]2269// CHECK1-51: .untied.jmp..i:2270// CHECK1-51-NEXT: [[TMP18:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]2271// CHECK1-51-NEXT: store i32 1, ptr [[TMP18]], align 42272// CHECK1-51-NEXT: [[TMP19:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2273// CHECK1-51-NEXT: [[TMP20:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]2274// CHECK1-51-NEXT: [[TMP21:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP19]], ptr [[TMP20]])2275// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT:%.*]]2276// CHECK1-51: .untied.jmp.2.i:2277// CHECK1-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP13]])2278// CHECK1-51-NEXT: [[TMP22:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2279// CHECK1-51-NEXT: [[DOTS2__VOID_ADDR_I:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP22]], i64 4, ptr inttoptr (i64 7 to ptr))2280// CHECK1-51-NEXT: store ptr [[DOTS2__VOID_ADDR_I]], ptr [[TMP14]], align 82281// CHECK1-51-NEXT: [[TMP23:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]2282// CHECK1-51-NEXT: store i32 2, ptr [[TMP23]], align 42283// CHECK1-51-NEXT: [[TMP24:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2284// CHECK1-51-NEXT: [[TMP25:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]2285// CHECK1-51-NEXT: [[TMP26:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP24]], ptr [[TMP25]])2286// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]2287// CHECK1-51: .untied.jmp.3.i:2288// CHECK1-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP15]])2289// CHECK1-51-NEXT: store i32 0, ptr [[TMP15]], align 42290// CHECK1-51-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2291// CHECK1-51-NEXT: [[TMP28:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP27]], i32 1, i64 256, i64 1, ptr @.omp_task_entry..21)2292// CHECK1-51-NEXT: [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_20:%.*]], ptr [[TMP28]], i32 0, i32 22293// CHECK1-51-NEXT: [[TMP30:%.*]] = load i32, ptr [[TMP12]], align 1282294// CHECK1-51-NEXT: store i32 [[TMP30]], ptr [[TMP29]], align 1282295// CHECK1-51-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2296// CHECK1-51-NEXT: [[TMP32:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP31]], ptr [[TMP28]])2297// CHECK1-51-NEXT: [[TMP33:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]2298// CHECK1-51-NEXT: store i32 3, ptr [[TMP33]], align 42299// CHECK1-51-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2300// CHECK1-51-NEXT: [[TMP35:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]2301// CHECK1-51-NEXT: [[TMP36:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP34]], ptr [[TMP35]])2302// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]2303// CHECK1-51: .untied.jmp.5.i:2304// CHECK1-51-NEXT: [[TMP37:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2305// CHECK1-51-NEXT: [[TMP38:%.*]] = call i32 @__kmpc_omp_taskyield(ptr @[[GLOB1]], i32 [[TMP37]], i32 0)2306// CHECK1-51-NEXT: [[TMP39:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]2307// CHECK1-51-NEXT: store i32 4, ptr [[TMP39]], align 42308// CHECK1-51-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2309// CHECK1-51-NEXT: [[TMP41:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]2310// CHECK1-51-NEXT: [[TMP42:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP40]], ptr [[TMP41]])2311// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]2312// CHECK1-51: .untied.jmp.7.i:2313// CHECK1-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]])2314// CHECK1-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TMP13]], ptr align 4 [[REF_TMP_I]], i64 4, i1 false)2315// CHECK1-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]]) #[[ATTR4]]2316// CHECK1-51-NEXT: store i32 10, ptr [[TMP15]], align 42317// CHECK1-51-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2318// CHECK1-51-NEXT: [[TMP44:%.*]] = call i32 @__kmpc_omp_taskwait(ptr @[[GLOB1]], i32 [[TMP43]])2319// CHECK1-51-NEXT: [[TMP45:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]2320// CHECK1-51-NEXT: store i32 5, ptr [[TMP45]], align 42321// CHECK1-51-NEXT: [[TMP46:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2322// CHECK1-51-NEXT: [[TMP47:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]2323// CHECK1-51-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP46]], ptr [[TMP47]])2324// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]2325// CHECK1-51: .untied.jmp.10.i:2326// CHECK1-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP15]]) #[[ATTR4]]2327// CHECK1-51-NEXT: [[TMP49:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]2328// CHECK1-51-NEXT: call void @__kmpc_free(i32 [[TMP49]], ptr [[TMP15]], ptr inttoptr (i64 7 to ptr))2329// CHECK1-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP13]]) #[[ATTR4]]2330// CHECK1-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META122]]2331// CHECK1-51-NEXT: br label [[CLEANUP_I]]2332// CHECK1-51: cleanup.i:2333// CHECK1-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META122]]2334// CHECK1-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]2335// CHECK1-51: .omp_outlined..19.exit:2336// CHECK1-51-NEXT: ret i32 02337//2338//2339// CHECK1-51-LABEL: define {{[^@]+}}@_ZN1SC2Ev2340// CHECK1-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {2341// CHECK1-51-NEXT: entry:2342// CHECK1-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 82343// CHECK1-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 82344// CHECK1-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82345// CHECK1-51-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 02346// CHECK1-51-NEXT: store i32 0, ptr [[A]], align 42347// CHECK1-51-NEXT: ret void2348//2349//2350// CHECK1-51-LABEL: define {{[^@]+}}@_ZN1SD2Ev2351// CHECK1-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {2352// CHECK1-51-NEXT: entry:2353// CHECK1-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 82354// CHECK1-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 82355// CHECK1-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82356// CHECK1-51-NEXT: ret void2357//2358//2359// CHECK1-51-LABEL: define {{[^@]+}}@__cxx_global_var_init2360// CHECK1-51-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {2361// CHECK1-51-NEXT: entry:2362// CHECK1-51-NEXT: call void @_ZN2S1C1Ev(ptr noundef nonnull align 4 dereferenceable(4) @s1)2363// CHECK1-51-NEXT: ret void2364//2365//2366// CHECK1-51-LABEL: define {{[^@]+}}@_ZN2S1C1Ev2367// CHECK1-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {2368// CHECK1-51-NEXT: entry:2369// CHECK1-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 82370// CHECK1-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 82371// CHECK1-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82372// CHECK1-51-NEXT: call void @_ZN2S1C2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])2373// CHECK1-51-NEXT: ret void2374//2375//2376// CHECK1-51-LABEL: define {{[^@]+}}@_ZN2S1C2Ev2377// CHECK1-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {2378// CHECK1-51-NEXT: entry:2379// CHECK1-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 82380// CHECK1-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 82381// CHECK1-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82382// CHECK1-51-NEXT: call void @_ZN2S18taskinitEv(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])2383// CHECK1-51-NEXT: ret void2384//2385//2386// CHECK1-51-LABEL: define {{[^@]+}}@_ZN2S18taskinitEv2387// CHECK1-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) #[[ATTR1]] align 2 {2388// CHECK1-51-NEXT: entry:2389// CHECK1-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 82390// CHECK1-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_23:%.*]], align 82391// CHECK1-51-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])2392// CHECK1-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 82393// CHECK1-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82394// CHECK1-51-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_23]], ptr [[AGG_CAPTURED]], i32 0, i32 02395// CHECK1-51-NEXT: store ptr [[THIS1]], ptr [[TMP1]], align 82396// CHECK1-51-NEXT: [[TMP2:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..25)2397// CHECK1-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP2]], i32 0, i32 02398// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP3]], i32 0, i32 02399// CHECK1-51-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 82400// CHECK1-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP5]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)2401// CHECK1-51-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP2]])2402// CHECK1-51-NEXT: ret void2403//2404//2405// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..252406// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2407// CHECK1-51-NEXT: entry:2408// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42409// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82410// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82411// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82412// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82413// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82414// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42415// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82416// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42417// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82418// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42419// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82420// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP3]], i32 0, i32 02421// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22422// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02423// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82424// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META123:![0-9]+]])2425// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META126:![0-9]+]])2426// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META128:![0-9]+]])2427// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META130:![0-9]+]])2428// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META132:![0-9]+]]2429// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META132]]2430// CHECK1-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META132]]2431// CHECK1-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META132]]2432// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META132]]2433// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]2434// CHECK1-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]2435// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 82436// CHECK1-51-NEXT: store i32 0, ptr [[TMP9]], align 42437// CHECK1-51-NEXT: ret i32 02438//2439//2440// CHECK1-51-LABEL: define {{[^@]+}}@_Z4xxxxv2441// CHECK1-51-SAME: () #[[ATTR1]] {2442// CHECK1-51-NEXT: entry:2443// CHECK1-51-NEXT: call void @_Z6foobarIvEvv()2444// CHECK1-51-NEXT: ret void2445//2446//2447// CHECK1-51-LABEL: define {{[^@]+}}@_Z6foobarIvEvv2448// CHECK1-51-SAME: () #[[ATTR1]] {2449// CHECK1-51-NEXT: entry:2450// CHECK1-51-NEXT: [[A:%.*]] = alloca float, align 42451// CHECK1-51-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB1]], i32 1, ptr @_Z6foobarIvEvv.omp_outlined, ptr [[A]])2452// CHECK1-51-NEXT: ret void2453//2454//2455// CHECK1-51-LABEL: define {{[^@]+}}@_Z6foobarIvEvv.omp_outlined2456// CHECK1-51-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR8:[0-9]+]] {2457// CHECK1-51-NEXT: entry:2458// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82459// CHECK1-51-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82460// CHECK1-51-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 82461// CHECK1-51-NEXT: [[B:%.*]] = alloca double, align 82462// CHECK1-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_25:%.*]], align 82463// CHECK1-51-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82464// CHECK1-51-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82465// CHECK1-51-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 82466// CHECK1-51-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 82467// CHECK1-51-NEXT: [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82468// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 42469// CHECK1-51-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB1]], i32 [[TMP2]])2470// CHECK1-51-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 02471// CHECK1-51-NEXT: br i1 [[TMP4]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]2472// CHECK1-51: omp_if.then:2473// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_25]], ptr [[AGG_CAPTURED]], i32 0, i32 02474// CHECK1-51-NEXT: store ptr [[TMP0]], ptr [[TMP5]], align 82475// CHECK1-51-NEXT: [[TMP6:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i64 48, i64 8, ptr @.omp_task_entry..28)2476// CHECK1-51-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26:%.*]], ptr [[TMP6]], i32 0, i32 02477// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP7]], i32 0, i32 02478// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 82479// CHECK1-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP9]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)2480// CHECK1-51-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26]], ptr [[TMP6]], i32 0, i32 12481// CHECK1-51-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_27:%.*]], ptr [[TMP10]], i32 0, i32 02482// CHECK1-51-NEXT: [[TMP12:%.*]] = load double, ptr [[B]], align 82483// CHECK1-51-NEXT: store double [[TMP12]], ptr [[TMP11]], align 82484// CHECK1-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP2]], ptr [[TMP6]])2485// CHECK1-51-NEXT: call void @__kmpc_end_single(ptr @[[GLOB1]], i32 [[TMP2]])2486// CHECK1-51-NEXT: br label [[OMP_IF_END]]2487// CHECK1-51: omp_if.end:2488// CHECK1-51-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2:[0-9]+]], i32 [[TMP2]])2489// CHECK1-51-NEXT: ret void2490//2491//2492// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..272493// CHECK1-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {2494// CHECK1-51-NEXT: entry:2495// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82496// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82497// CHECK1-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82498// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82499// CHECK1-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82500// CHECK1-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_27:%.*]], ptr [[TMP2]], i32 0, i32 02501// CHECK1-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 82502// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 82503// CHECK1-51-NEXT: ret void2504//2505//2506// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..282507// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2508// CHECK1-51-NEXT: entry:2509// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42510// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82511// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82512// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82513// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82514// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82515// CHECK1-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 82516// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42517// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82518// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42519// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82520// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42521// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82522// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26:%.*]], ptr [[TMP3]], i32 0, i32 02523// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22524// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02525// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82526// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26]], ptr [[TMP3]], i32 0, i32 12527// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META133:![0-9]+]])2528// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META136:![0-9]+]])2529// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META138:![0-9]+]])2530// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META140:![0-9]+]])2531// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META142:![0-9]+]]2532// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META142]]2533// CHECK1-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META142]]2534// CHECK1-51-NEXT: store ptr @.omp_task_privates_map..27, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META142]]2535// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META142]]2536// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META142]]2537// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META142]]2538// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META142]]2539// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META142]]2540// CHECK1-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]2541// CHECK1-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META142]]2542// CHECK1-51-NEXT: [[TMP13:%.*]] = load double, ptr [[TMP12]], align 82543// CHECK1-51-NEXT: [[TMP14:%.*]] = load ptr, ptr [[TMP9]], align 82544// CHECK1-51-NEXT: [[TMP15:%.*]] = load float, ptr [[TMP14]], align 42545// CHECK1-51-NEXT: [[CONV_I:%.*]] = fpext float [[TMP15]] to double2546// CHECK1-51-NEXT: [[ADD_I:%.*]] = fadd double [[CONV_I]], [[TMP13]]2547// CHECK1-51-NEXT: [[CONV1_I:%.*]] = fptrunc double [[ADD_I]] to float2548// CHECK1-51-NEXT: store float [[CONV1_I]], ptr [[TMP14]], align 42549// CHECK1-51-NEXT: ret i32 02550//2551//2552// CHECK1-51-LABEL: define {{[^@]+}}@_Z19test_omp_all_memoryv2553// CHECK1-51-SAME: () #[[ATTR1]] {2554// CHECK1-51-NEXT: entry:2555// CHECK1-51-NEXT: [[A:%.*]] = alloca i32, align 42556// CHECK1-51-NEXT: [[B:%.*]] = alloca i32, align 42557// CHECK1-51-NEXT: [[C:%.*]] = alloca i32, align 42558// CHECK1-51-NEXT: [[D:%.*]] = alloca i32, align 42559// CHECK1-51-NEXT: [[E:%.*]] = alloca i32, align 42560// CHECK1-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_28:%.*]], align 12561// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [2 x %struct.kmp_depend_info], align 82562// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 82563// CHECK1-51-NEXT: [[AGG_CAPTURED1:%.*]] = alloca [[STRUCT_ANON_31:%.*]], align 12564// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR2:%.*]] = alloca [2 x %struct.kmp_depend_info], align 82565// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR3:%.*]] = alloca i64, align 82566// CHECK1-51-NEXT: [[AGG_CAPTURED4:%.*]] = alloca [[STRUCT_ANON_34:%.*]], align 12567// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR5:%.*]] = alloca [2 x %struct.kmp_depend_info], align 82568// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR6:%.*]] = alloca i64, align 82569// CHECK1-51-NEXT: [[AGG_CAPTURED7:%.*]] = alloca [[STRUCT_ANON_37:%.*]], align 12570// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR8:%.*]] = alloca [2 x %struct.kmp_depend_info], align 82571// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR9:%.*]] = alloca i64, align 82572// CHECK1-51-NEXT: [[AGG_CAPTURED10:%.*]] = alloca [[STRUCT_ANON_40:%.*]], align 12573// CHECK1-51-NEXT: [[DOTDEP_ARR_ADDR11:%.*]] = alloca [1 x %struct.kmp_depend_info], align 82574// CHECK1-51-NEXT: [[DEP_COUNTER_ADDR12:%.*]] = alloca i64, align 82575// CHECK1-51-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])2576// CHECK1-51-NEXT: [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..31)2577// CHECK1-51-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29:%.*]], ptr [[TMP1]], i32 0, i32 02578// CHECK1-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29]], ptr [[TMP1]], i32 0, i32 12579// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_30:%.*]], ptr [[TMP3]], i32 0, i32 02580// CHECK1-51-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 42581// CHECK1-51-NEXT: store i32 [[TMP5]], ptr [[TMP4]], align 82582// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 02583// CHECK1-51-NEXT: [[TMP7:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP6]], i64 02584// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP7]], i32 0, i32 02585// CHECK1-51-NEXT: store i64 0, ptr [[TMP8]], align 82586// CHECK1-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP7]], i32 0, i32 12587// CHECK1-51-NEXT: store i64 0, ptr [[TMP9]], align 82588// CHECK1-51-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP7]], i32 0, i32 22589// CHECK1-51-NEXT: store i8 -128, ptr [[TMP10]], align 82590// CHECK1-51-NEXT: [[TMP11:%.*]] = ptrtoint ptr [[A]] to i642591// CHECK1-51-NEXT: [[TMP12:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP6]], i64 12592// CHECK1-51-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP12]], i32 0, i32 02593// CHECK1-51-NEXT: store i64 [[TMP11]], ptr [[TMP13]], align 82594// CHECK1-51-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP12]], i32 0, i32 12595// CHECK1-51-NEXT: store i64 4, ptr [[TMP14]], align 82596// CHECK1-51-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP12]], i32 0, i32 22597// CHECK1-51-NEXT: store i8 1, ptr [[TMP15]], align 82598// CHECK1-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR]], align 82599// CHECK1-51-NEXT: [[TMP16:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP1]], i32 2, ptr [[TMP6]], i32 0, ptr null)2600// CHECK1-51-NEXT: [[TMP17:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..34)2601// CHECK1-51-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32:%.*]], ptr [[TMP17]], i32 0, i32 02602// CHECK1-51-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32]], ptr [[TMP17]], i32 0, i32 12603// CHECK1-51-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_33:%.*]], ptr [[TMP19]], i32 0, i32 02604// CHECK1-51-NEXT: [[TMP21:%.*]] = load i32, ptr [[A]], align 42605// CHECK1-51-NEXT: store i32 [[TMP21]], ptr [[TMP20]], align 82606// CHECK1-51-NEXT: [[TMP22:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR2]], i64 0, i64 02607// CHECK1-51-NEXT: [[TMP23:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP22]], i64 02608// CHECK1-51-NEXT: [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP23]], i32 0, i32 02609// CHECK1-51-NEXT: store i64 0, ptr [[TMP24]], align 82610// CHECK1-51-NEXT: [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP23]], i32 0, i32 12611// CHECK1-51-NEXT: store i64 0, ptr [[TMP25]], align 82612// CHECK1-51-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP23]], i32 0, i32 22613// CHECK1-51-NEXT: store i8 -128, ptr [[TMP26]], align 82614// CHECK1-51-NEXT: [[TMP27:%.*]] = ptrtoint ptr [[A]] to i642615// CHECK1-51-NEXT: [[TMP28:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP22]], i64 12616// CHECK1-51-NEXT: [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP28]], i32 0, i32 02617// CHECK1-51-NEXT: store i64 [[TMP27]], ptr [[TMP29]], align 82618// CHECK1-51-NEXT: [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP28]], i32 0, i32 12619// CHECK1-51-NEXT: store i64 4, ptr [[TMP30]], align 82620// CHECK1-51-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP28]], i32 0, i32 22621// CHECK1-51-NEXT: store i8 1, ptr [[TMP31]], align 82622// CHECK1-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR3]], align 82623// CHECK1-51-NEXT: [[TMP32:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP17]], i32 2, ptr [[TMP22]], i32 0, ptr null)2624// CHECK1-51-NEXT: [[TMP33:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..37)2625// CHECK1-51-NEXT: [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35:%.*]], ptr [[TMP33]], i32 0, i32 02626// CHECK1-51-NEXT: [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35]], ptr [[TMP33]], i32 0, i32 12627// CHECK1-51-NEXT: [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_36:%.*]], ptr [[TMP35]], i32 0, i32 02628// CHECK1-51-NEXT: [[TMP37:%.*]] = load i32, ptr [[A]], align 42629// CHECK1-51-NEXT: store i32 [[TMP37]], ptr [[TMP36]], align 82630// CHECK1-51-NEXT: [[TMP38:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR5]], i64 0, i64 02631// CHECK1-51-NEXT: [[TMP39:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP38]], i64 02632// CHECK1-51-NEXT: [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP39]], i32 0, i32 02633// CHECK1-51-NEXT: store i64 0, ptr [[TMP40]], align 82634// CHECK1-51-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP39]], i32 0, i32 12635// CHECK1-51-NEXT: store i64 0, ptr [[TMP41]], align 82636// CHECK1-51-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP39]], i32 0, i32 22637// CHECK1-51-NEXT: store i8 -128, ptr [[TMP42]], align 82638// CHECK1-51-NEXT: [[TMP43:%.*]] = ptrtoint ptr [[A]] to i642639// CHECK1-51-NEXT: [[TMP44:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP38]], i64 12640// CHECK1-51-NEXT: [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP44]], i32 0, i32 02641// CHECK1-51-NEXT: store i64 [[TMP43]], ptr [[TMP45]], align 82642// CHECK1-51-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP44]], i32 0, i32 12643// CHECK1-51-NEXT: store i64 4, ptr [[TMP46]], align 82644// CHECK1-51-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP44]], i32 0, i32 22645// CHECK1-51-NEXT: store i8 1, ptr [[TMP47]], align 82646// CHECK1-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR6]], align 82647// CHECK1-51-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP33]], i32 2, ptr [[TMP38]], i32 0, ptr null)2648// CHECK1-51-NEXT: [[TMP49:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..40)2649// CHECK1-51-NEXT: [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38:%.*]], ptr [[TMP49]], i32 0, i32 02650// CHECK1-51-NEXT: [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38]], ptr [[TMP49]], i32 0, i32 12651// CHECK1-51-NEXT: [[TMP52:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_39:%.*]], ptr [[TMP51]], i32 0, i32 02652// CHECK1-51-NEXT: [[TMP53:%.*]] = load i32, ptr [[A]], align 42653// CHECK1-51-NEXT: store i32 [[TMP53]], ptr [[TMP52]], align 82654// CHECK1-51-NEXT: [[TMP54:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR8]], i64 0, i64 02655// CHECK1-51-NEXT: [[TMP55:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i64 02656// CHECK1-51-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP55]], i32 0, i32 02657// CHECK1-51-NEXT: store i64 0, ptr [[TMP56]], align 82658// CHECK1-51-NEXT: [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP55]], i32 0, i32 12659// CHECK1-51-NEXT: store i64 0, ptr [[TMP57]], align 82660// CHECK1-51-NEXT: [[TMP58:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP55]], i32 0, i32 22661// CHECK1-51-NEXT: store i8 -128, ptr [[TMP58]], align 82662// CHECK1-51-NEXT: [[TMP59:%.*]] = ptrtoint ptr [[A]] to i642663// CHECK1-51-NEXT: [[TMP60:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i64 12664// CHECK1-51-NEXT: [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP60]], i32 0, i32 02665// CHECK1-51-NEXT: store i64 [[TMP59]], ptr [[TMP61]], align 82666// CHECK1-51-NEXT: [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP60]], i32 0, i32 12667// CHECK1-51-NEXT: store i64 4, ptr [[TMP62]], align 82668// CHECK1-51-NEXT: [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP60]], i32 0, i32 22669// CHECK1-51-NEXT: store i8 1, ptr [[TMP63]], align 82670// CHECK1-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR9]], align 82671// CHECK1-51-NEXT: [[TMP64:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP49]], i32 2, ptr [[TMP54]], i32 0, ptr null)2672// CHECK1-51-NEXT: [[TMP65:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..43)2673// CHECK1-51-NEXT: [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_41:%.*]], ptr [[TMP65]], i32 0, i32 02674// CHECK1-51-NEXT: [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_41]], ptr [[TMP65]], i32 0, i32 12675// CHECK1-51-NEXT: [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_42:%.*]], ptr [[TMP67]], i32 0, i32 02676// CHECK1-51-NEXT: [[TMP69:%.*]] = load i32, ptr [[A]], align 42677// CHECK1-51-NEXT: store i32 [[TMP69]], ptr [[TMP68]], align 82678// CHECK1-51-NEXT: [[TMP70:%.*]] = getelementptr inbounds [1 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR11]], i64 0, i64 02679// CHECK1-51-NEXT: [[TMP71:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP70]], i64 02680// CHECK1-51-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP71]], i32 0, i32 02681// CHECK1-51-NEXT: store i64 0, ptr [[TMP72]], align 82682// CHECK1-51-NEXT: [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP71]], i32 0, i32 12683// CHECK1-51-NEXT: store i64 0, ptr [[TMP73]], align 82684// CHECK1-51-NEXT: [[TMP74:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP71]], i32 0, i32 22685// CHECK1-51-NEXT: store i8 -128, ptr [[TMP74]], align 82686// CHECK1-51-NEXT: store i64 1, ptr [[DEP_COUNTER_ADDR12]], align 82687// CHECK1-51-NEXT: [[TMP75:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP65]], i32 1, ptr [[TMP70]], i32 0, ptr null)2688// CHECK1-51-NEXT: ret void2689//2690//2691// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..302692// CHECK1-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {2693// CHECK1-51-NEXT: entry:2694// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82695// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82696// CHECK1-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82697// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82698// CHECK1-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82699// CHECK1-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_30:%.*]], ptr [[TMP2]], i32 0, i32 02700// CHECK1-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 82701// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 82702// CHECK1-51-NEXT: ret void2703//2704//2705// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..312706// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2707// CHECK1-51-NEXT: entry:2708// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42709// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82710// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82711// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82712// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82713// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82714// CHECK1-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 82715// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42716// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82717// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42718// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82719// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42720// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82721// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29:%.*]], ptr [[TMP3]], i32 0, i32 02722// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22723// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02724// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82725// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29]], ptr [[TMP3]], i32 0, i32 12726// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META145:![0-9]+]])2727// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META148:![0-9]+]])2728// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META150:![0-9]+]])2729// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META152:![0-9]+]])2730// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META154:![0-9]+]]2731// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META154]]2732// CHECK1-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META154]]2733// CHECK1-51-NEXT: store ptr @.omp_task_privates_map..30, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META154]]2734// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META154]]2735// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META154]]2736// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META154]]2737// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META154]]2738// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META154]]2739// CHECK1-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]2740// CHECK1-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META154]]2741// CHECK1-51-NEXT: store i32 13, ptr [[TMP12]], align 42742// CHECK1-51-NEXT: ret i32 02743//2744//2745// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..332746// CHECK1-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {2747// CHECK1-51-NEXT: entry:2748// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82749// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82750// CHECK1-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82751// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82752// CHECK1-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82753// CHECK1-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_33:%.*]], ptr [[TMP2]], i32 0, i32 02754// CHECK1-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 82755// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 82756// CHECK1-51-NEXT: ret void2757//2758//2759// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..342760// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2761// CHECK1-51-NEXT: entry:2762// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42763// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82764// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82765// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82766// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82767// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82768// CHECK1-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 82769// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42770// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82771// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42772// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82773// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42774// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82775// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32:%.*]], ptr [[TMP3]], i32 0, i32 02776// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22777// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02778// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82779// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32]], ptr [[TMP3]], i32 0, i32 12780// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META155:![0-9]+]])2781// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META158:![0-9]+]])2782// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META160:![0-9]+]])2783// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META162:![0-9]+]])2784// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META164:![0-9]+]]2785// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META164]]2786// CHECK1-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META164]]2787// CHECK1-51-NEXT: store ptr @.omp_task_privates_map..33, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META164]]2788// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META164]]2789// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META164]]2790// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META164]]2791// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META164]]2792// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META164]]2793// CHECK1-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]2794// CHECK1-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META164]]2795// CHECK1-51-NEXT: store i32 14, ptr [[TMP12]], align 42796// CHECK1-51-NEXT: ret i32 02797//2798//2799// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..362800// CHECK1-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {2801// CHECK1-51-NEXT: entry:2802// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82803// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82804// CHECK1-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82805// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82806// CHECK1-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82807// CHECK1-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_36:%.*]], ptr [[TMP2]], i32 0, i32 02808// CHECK1-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 82809// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 82810// CHECK1-51-NEXT: ret void2811//2812//2813// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..372814// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2815// CHECK1-51-NEXT: entry:2816// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42817// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82818// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82819// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82820// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82821// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82822// CHECK1-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 82823// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42824// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82825// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42826// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82827// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42828// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82829// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35:%.*]], ptr [[TMP3]], i32 0, i32 02830// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22831// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02832// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82833// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35]], ptr [[TMP3]], i32 0, i32 12834// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META165:![0-9]+]])2835// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META168:![0-9]+]])2836// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META170:![0-9]+]])2837// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META172:![0-9]+]])2838// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META174:![0-9]+]]2839// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META174]]2840// CHECK1-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META174]]2841// CHECK1-51-NEXT: store ptr @.omp_task_privates_map..36, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META174]]2842// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META174]]2843// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META174]]2844// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META174]]2845// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META174]]2846// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META174]]2847// CHECK1-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]2848// CHECK1-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META174]]2849// CHECK1-51-NEXT: store i32 15, ptr [[TMP12]], align 42850// CHECK1-51-NEXT: ret i32 02851//2852//2853// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..392854// CHECK1-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {2855// CHECK1-51-NEXT: entry:2856// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82857// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82858// CHECK1-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82859// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82860// CHECK1-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82861// CHECK1-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_39:%.*]], ptr [[TMP2]], i32 0, i32 02862// CHECK1-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 82863// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 82864// CHECK1-51-NEXT: ret void2865//2866//2867// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..402868// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2869// CHECK1-51-NEXT: entry:2870// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42871// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82872// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82873// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82874// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82875// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82876// CHECK1-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 82877// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42878// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82879// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42880// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82881// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42882// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82883// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38:%.*]], ptr [[TMP3]], i32 0, i32 02884// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22885// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02886// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82887// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38]], ptr [[TMP3]], i32 0, i32 12888// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META175:![0-9]+]])2889// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META178:![0-9]+]])2890// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META180:![0-9]+]])2891// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META182:![0-9]+]])2892// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META184:![0-9]+]]2893// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META184]]2894// CHECK1-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META184]]2895// CHECK1-51-NEXT: store ptr @.omp_task_privates_map..39, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META184]]2896// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META184]]2897// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META184]]2898// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META184]]2899// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META184]]2900// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META184]]2901// CHECK1-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]2902// CHECK1-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META184]]2903// CHECK1-51-NEXT: store i32 16, ptr [[TMP12]], align 42904// CHECK1-51-NEXT: ret i32 02905//2906//2907// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..422908// CHECK1-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {2909// CHECK1-51-NEXT: entry:2910// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82911// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82912// CHECK1-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82913// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82914// CHECK1-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82915// CHECK1-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_42:%.*]], ptr [[TMP2]], i32 0, i32 02916// CHECK1-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 82917// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 82918// CHECK1-51-NEXT: ret void2919//2920//2921// CHECK1-51-LABEL: define {{[^@]+}}@.omp_task_entry..432922// CHECK1-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {2923// CHECK1-51-NEXT: entry:2924// CHECK1-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42925// CHECK1-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 82926// CHECK1-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 82927// CHECK1-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 82928// CHECK1-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 82929// CHECK1-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 82930// CHECK1-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 82931// CHECK1-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 42932// CHECK1-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82933// CHECK1-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 42934// CHECK1-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82935// CHECK1-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 42936// CHECK1-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82937// CHECK1-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_41:%.*]], ptr [[TMP3]], i32 0, i32 02938// CHECK1-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 22939// CHECK1-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 02940// CHECK1-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82941// CHECK1-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_41]], ptr [[TMP3]], i32 0, i32 12942// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META185:![0-9]+]])2943// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META188:![0-9]+]])2944// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META190:![0-9]+]])2945// CHECK1-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META192:![0-9]+]])2946// CHECK1-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META194:![0-9]+]]2947// CHECK1-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META194]]2948// CHECK1-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META194]]2949// CHECK1-51-NEXT: store ptr @.omp_task_privates_map..42, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META194]]2950// CHECK1-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META194]]2951// CHECK1-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META194]]2952// CHECK1-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META194]]2953// CHECK1-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META194]]2954// CHECK1-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META194]]2955// CHECK1-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]2956// CHECK1-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META194]]2957// CHECK1-51-NEXT: store i32 17, ptr [[TMP12]], align 42958// CHECK1-51-NEXT: ret i32 02959//2960//2961// CHECK1-51-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_task_codegen.cpp2962// CHECK1-51-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {2963// CHECK1-51-NEXT: entry:2964// CHECK1-51-NEXT: call void @__cxx_global_var_init()2965// CHECK1-51-NEXT: ret void2966//2967//2968// CHECK2-LABEL: define {{[^@]+}}@main2969// CHECK2-SAME: () #[[ATTR0:[0-9]+]] {2970// CHECK2-NEXT: entry:2971// CHECK2-NEXT: [[RETVAL:%.*]] = alloca i32, align 42972// CHECK2-NEXT: [[B:%.*]] = alloca i8, align 12973// CHECK2-NEXT: [[S:%.*]] = alloca [2 x %struct.S], align 42974// CHECK2-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 82975// CHECK2-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 82976// CHECK2-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 82977// CHECK2-NEXT: [[AGG_CAPTURED1:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 82978// CHECK2-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 82979// CHECK2-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 82980// CHECK2-NEXT: [[AGG_CAPTURED3:%.*]] = alloca [[STRUCT_ANON_2:%.*]], align 12981// CHECK2-NEXT: [[AGG_CAPTURED4:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 12982// CHECK2-NEXT: [[DOTDEP_ARR_ADDR5:%.*]] = alloca [2 x %struct.kmp_depend_info], align 82983// CHECK2-NEXT: [[DEP_COUNTER_ADDR11:%.*]] = alloca i64, align 82984// CHECK2-NEXT: [[AGG_CAPTURED12:%.*]] = alloca [[STRUCT_ANON_6:%.*]], align 12985// CHECK2-NEXT: [[DOTDEP_ARR_ADDR13:%.*]] = alloca [2 x %struct.kmp_depend_info], align 82986// CHECK2-NEXT: [[DEP_COUNTER_ADDR19:%.*]] = alloca i64, align 82987// CHECK2-NEXT: [[AGG_CAPTURED20:%.*]] = alloca [[STRUCT_ANON_8:%.*]], align 12988// CHECK2-NEXT: [[DOTDEP_ARR_ADDR21:%.*]] = alloca [3 x %struct.kmp_depend_info], align 82989// CHECK2-NEXT: [[DEP_COUNTER_ADDR27:%.*]] = alloca i64, align 82990// CHECK2-NEXT: [[AGG_CAPTURED28:%.*]] = alloca [[STRUCT_ANON_10:%.*]], align 12991// CHECK2-NEXT: [[FLAG:%.*]] = alloca i8, align 12992// CHECK2-NEXT: [[AGG_CAPTURED29:%.*]] = alloca [[STRUCT_ANON_12:%.*]], align 12993// CHECK2-NEXT: [[C:%.*]] = alloca i32, align 1282994// CHECK2-NEXT: [[AGG_CAPTURED30:%.*]] = alloca [[STRUCT_ANON_14:%.*]], align 82995// CHECK2-NEXT: [[AGG_CAPTURED31:%.*]] = alloca [[STRUCT_ANON_16:%.*]], align 12996// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])2997// CHECK2-NEXT: store i32 0, ptr [[RETVAL]], align 42998// CHECK2-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 02999// CHECK2-NEXT: [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 23000// CHECK2-NEXT: br label [[ARRAYCTOR_LOOP:%.*]]3001// CHECK2: arrayctor.loop:3002// CHECK2-NEXT: [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]3003// CHECK2-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])3004// CHECK2-NEXT: [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 13005// CHECK2-NEXT: [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]3006// CHECK2-NEXT: br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]3007// CHECK2: arrayctor.cont:3008// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr @a, align 43009// CHECK2-NEXT: [[TMP2:%.*]] = zext i32 [[TMP1]] to i643010// CHECK2-NEXT: [[TMP3:%.*]] = call ptr @llvm.stacksave.p0()3011// CHECK2-NEXT: store ptr [[TMP3]], ptr [[SAVED_STACK]], align 83012// CHECK2-NEXT: [[TMP4:%.*]] = mul nuw i64 10, [[TMP2]]3013// CHECK2-NEXT: [[VLA:%.*]] = alloca i32, i64 [[TMP4]], align 163014// CHECK2-NEXT: store i64 [[TMP2]], ptr [[__VLA_EXPR0]], align 83015// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 03016// CHECK2-NEXT: store ptr [[B]], ptr [[TMP5]], align 83017// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 13018// CHECK2-NEXT: store ptr [[S]], ptr [[TMP6]], align 83019// CHECK2-NEXT: [[TMP7:%.*]] = load i8, ptr [[B]], align 13020// CHECK2-NEXT: [[CONV:%.*]] = sext i8 [[TMP7]] to i323021// CHECK2-NEXT: [[TMP8:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 33, i64 40, i64 16, ptr @.omp_task_entry.)3022// CHECK2-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP8]], i32 0, i32 03023// CHECK2-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP9]], i32 0, i32 03024// CHECK2-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TMP10]], align 83025// CHECK2-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP11]], ptr align 8 [[AGG_CAPTURED]], i64 16, i1 false)3026// CHECK2-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP9]], i32 0, i32 43027// CHECK2-NEXT: store i32 [[CONV]], ptr [[TMP12]], align 83028// CHECK2-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP8]])3029// CHECK2-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_0]], ptr [[AGG_CAPTURED1]], i32 0, i32 03030// CHECK2-NEXT: store ptr [[S]], ptr [[TMP14]], align 83031// CHECK2-NEXT: [[TMP15:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..2)3032// CHECK2-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP15]], i32 0, i32 03033// CHECK2-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP16]], i32 0, i32 03034// CHECK2-NEXT: [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 83035// CHECK2-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP18]], ptr align 8 [[AGG_CAPTURED1]], i64 8, i1 false)3036// CHECK2-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 03037// CHECK2-NEXT: [[TMP20:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP19]], i64 03038// CHECK2-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 03039// CHECK2-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP21]], align 83040// CHECK2-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 13041// CHECK2-NEXT: store i64 4, ptr [[TMP22]], align 83042// CHECK2-NEXT: [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 23043// CHECK2-NEXT: store i8 1, ptr [[TMP23]], align 83044// CHECK2-NEXT: [[TMP24:%.*]] = ptrtoint ptr [[B]] to i643045// CHECK2-NEXT: [[TMP25:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 13046// CHECK2-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 03047// CHECK2-NEXT: store i64 [[TMP24]], ptr [[TMP26]], align 83048// CHECK2-NEXT: [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 13049// CHECK2-NEXT: store i64 1, ptr [[TMP27]], align 83050// CHECK2-NEXT: [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 23051// CHECK2-NEXT: store i8 1, ptr [[TMP28]], align 83052// CHECK2-NEXT: [[TMP29:%.*]] = ptrtoint ptr [[S]] to i643053// CHECK2-NEXT: [[TMP30:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 23054// CHECK2-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 03055// CHECK2-NEXT: store i64 [[TMP29]], ptr [[TMP31]], align 83056// CHECK2-NEXT: [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 13057// CHECK2-NEXT: store i64 8, ptr [[TMP32]], align 83058// CHECK2-NEXT: [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 23059// CHECK2-NEXT: store i8 1, ptr [[TMP33]], align 83060// CHECK2-NEXT: [[TMP34:%.*]] = mul nsw i64 0, [[TMP2]]3061// CHECK2-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP34]]3062// CHECK2-NEXT: [[TMP35:%.*]] = mul nsw i64 9, [[TMP2]]3063// CHECK2-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP35]]3064// CHECK2-NEXT: [[TMP36:%.*]] = getelementptr i32, ptr [[ARRAYIDX2]], i32 13065// CHECK2-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i643066// CHECK2-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP36]] to i643067// CHECK2-NEXT: [[TMP39:%.*]] = sub nuw i64 [[TMP38]], [[TMP37]]3068// CHECK2-NEXT: [[TMP40:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i643069// CHECK2-NEXT: [[TMP41:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 33070// CHECK2-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 03071// CHECK2-NEXT: store i64 [[TMP40]], ptr [[TMP42]], align 83072// CHECK2-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 13073// CHECK2-NEXT: store i64 [[TMP39]], ptr [[TMP43]], align 83074// CHECK2-NEXT: [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 23075// CHECK2-NEXT: store i8 1, ptr [[TMP44]], align 83076// CHECK2-NEXT: store i64 4, ptr [[DEP_COUNTER_ADDR]], align 83077// CHECK2-NEXT: [[TMP45:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP15]], i32 4, ptr [[TMP19]], i32 0, ptr null)3078// CHECK2-NEXT: [[TMP46:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..4)3079// CHECK2-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP46]], i32 0, i32 03080// CHECK2-NEXT: [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP47]], i32 0, i32 23081// CHECK2-NEXT: store i32 0, ptr [[TMP48]], align 83082// CHECK2-NEXT: [[TMP49:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP46]])3083// CHECK2-NEXT: [[TMP50:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..6)3084// CHECK2-NEXT: [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP50]], i32 0, i32 03085// CHECK2-NEXT: [[TMP52:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR5]], i64 0, i64 03086// CHECK2-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 03087// CHECK2-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[ARRAYIDX6]] to i643088// CHECK2-NEXT: [[TMP54:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 03089// CHECK2-NEXT: [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 03090// CHECK2-NEXT: store i64 [[TMP53]], ptr [[TMP55]], align 83091// CHECK2-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 13092// CHECK2-NEXT: store i64 4, ptr [[TMP56]], align 83093// CHECK2-NEXT: [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 23094// CHECK2-NEXT: store i8 3, ptr [[TMP57]], align 83095// CHECK2-NEXT: [[TMP58:%.*]] = load i8, ptr [[B]], align 13096// CHECK2-NEXT: [[TMP59:%.*]] = sext i8 [[TMP58]] to i643097// CHECK2-NEXT: [[TMP60:%.*]] = mul nsw i64 4, [[TMP2]]3098// CHECK2-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP60]]3099// CHECK2-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX7]], i64 [[TMP59]]3100// CHECK2-NEXT: [[TMP61:%.*]] = load i8, ptr [[B]], align 13101// CHECK2-NEXT: [[TMP62:%.*]] = sext i8 [[TMP61]] to i643102// CHECK2-NEXT: [[TMP63:%.*]] = mul nsw i64 9, [[TMP2]]3103// CHECK2-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP63]]3104// CHECK2-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX9]], i64 [[TMP62]]3105// CHECK2-NEXT: [[TMP64:%.*]] = getelementptr i32, ptr [[ARRAYIDX10]], i32 13106// CHECK2-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i643107// CHECK2-NEXT: [[TMP66:%.*]] = ptrtoint ptr [[TMP64]] to i643108// CHECK2-NEXT: [[TMP67:%.*]] = sub nuw i64 [[TMP66]], [[TMP65]]3109// CHECK2-NEXT: [[TMP68:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i643110// CHECK2-NEXT: [[TMP69:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 13111// CHECK2-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 03112// CHECK2-NEXT: store i64 [[TMP68]], ptr [[TMP70]], align 83113// CHECK2-NEXT: [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 13114// CHECK2-NEXT: store i64 [[TMP67]], ptr [[TMP71]], align 83115// CHECK2-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 23116// CHECK2-NEXT: store i8 3, ptr [[TMP72]], align 83117// CHECK2-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR11]], align 83118// CHECK2-NEXT: [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP51]], i32 0, i32 23119// CHECK2-NEXT: store i32 0, ptr [[TMP73]], align 83120// CHECK2-NEXT: [[TMP74:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP50]], i32 2, ptr [[TMP52]], i32 0, ptr null)3121// CHECK2-NEXT: [[TMP75:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..8)3122// CHECK2-NEXT: [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP75]], i32 0, i32 03123// CHECK2-NEXT: [[TMP77:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR13]], i64 0, i64 03124// CHECK2-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 03125// CHECK2-NEXT: [[TMP78:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i643126// CHECK2-NEXT: [[TMP79:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 03127// CHECK2-NEXT: [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 03128// CHECK2-NEXT: store i64 [[TMP78]], ptr [[TMP80]], align 83129// CHECK2-NEXT: [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 13130// CHECK2-NEXT: store i64 4, ptr [[TMP81]], align 83131// CHECK2-NEXT: [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 23132// CHECK2-NEXT: store i8 4, ptr [[TMP82]], align 83133// CHECK2-NEXT: [[TMP83:%.*]] = load i8, ptr [[B]], align 13134// CHECK2-NEXT: [[TMP84:%.*]] = sext i8 [[TMP83]] to i643135// CHECK2-NEXT: [[TMP85:%.*]] = mul nsw i64 4, [[TMP2]]3136// CHECK2-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP85]]3137// CHECK2-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX15]], i64 [[TMP84]]3138// CHECK2-NEXT: [[TMP86:%.*]] = load i8, ptr [[B]], align 13139// CHECK2-NEXT: [[TMP87:%.*]] = sext i8 [[TMP86]] to i643140// CHECK2-NEXT: [[TMP88:%.*]] = mul nsw i64 9, [[TMP2]]3141// CHECK2-NEXT: [[ARRAYIDX17:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP88]]3142// CHECK2-NEXT: [[ARRAYIDX18:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX17]], i64 [[TMP87]]3143// CHECK2-NEXT: [[TMP89:%.*]] = getelementptr i32, ptr [[ARRAYIDX18]], i32 13144// CHECK2-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i643145// CHECK2-NEXT: [[TMP91:%.*]] = ptrtoint ptr [[TMP89]] to i643146// CHECK2-NEXT: [[TMP92:%.*]] = sub nuw i64 [[TMP91]], [[TMP90]]3147// CHECK2-NEXT: [[TMP93:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i643148// CHECK2-NEXT: [[TMP94:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 13149// CHECK2-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 03150// CHECK2-NEXT: store i64 [[TMP93]], ptr [[TMP95]], align 83151// CHECK2-NEXT: [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 13152// CHECK2-NEXT: store i64 [[TMP92]], ptr [[TMP96]], align 83153// CHECK2-NEXT: [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 23154// CHECK2-NEXT: store i8 4, ptr [[TMP97]], align 83155// CHECK2-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR19]], align 83156// CHECK2-NEXT: [[TMP98:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP76]], i32 0, i32 23157// CHECK2-NEXT: store i32 0, ptr [[TMP98]], align 83158// CHECK2-NEXT: [[TMP99:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP75]], i32 2, ptr [[TMP77]], i32 0, ptr null)3159// CHECK2-NEXT: [[TMP100:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..10)3160// CHECK2-NEXT: [[TMP101:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP100]], i32 0, i32 03161// CHECK2-NEXT: [[TMP102:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR21]], i64 0, i64 03162// CHECK2-NEXT: [[TMP103:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 03163// CHECK2-NEXT: [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 03164// CHECK2-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP104]], align 83165// CHECK2-NEXT: [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 13166// CHECK2-NEXT: store i64 4, ptr [[TMP105]], align 83167// CHECK2-NEXT: [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 23168// CHECK2-NEXT: store i8 3, ptr [[TMP106]], align 83169// CHECK2-NEXT: [[ARRAYIDX22:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 13170// CHECK2-NEXT: [[TMP107:%.*]] = ptrtoint ptr [[ARRAYIDX22]] to i643171// CHECK2-NEXT: [[TMP108:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 13172// CHECK2-NEXT: [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 03173// CHECK2-NEXT: store i64 [[TMP107]], ptr [[TMP109]], align 83174// CHECK2-NEXT: [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 13175// CHECK2-NEXT: store i64 4, ptr [[TMP110]], align 83176// CHECK2-NEXT: [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 23177// CHECK2-NEXT: store i8 3, ptr [[TMP111]], align 83178// CHECK2-NEXT: [[TMP112:%.*]] = mul nsw i64 0, [[TMP2]]3179// CHECK2-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP112]]3180// CHECK2-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX23]], i64 33181// CHECK2-NEXT: [[TMP113:%.*]] = load i32, ptr @a, align 43182// CHECK2-NEXT: [[TMP114:%.*]] = sext i32 [[TMP113]] to i643183// CHECK2-NEXT: [[LEN_SUB_1:%.*]] = sub nsw i64 [[TMP114]], 13184// CHECK2-NEXT: [[TMP115:%.*]] = load i32, ptr @a, align 43185// CHECK2-NEXT: [[TMP116:%.*]] = sext i32 [[TMP115]] to i643186// CHECK2-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP116]]3187// CHECK2-NEXT: [[TMP117:%.*]] = mul nsw i64 [[LB_ADD_LEN]], [[TMP2]]3188// CHECK2-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP117]]3189// CHECK2-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[LEN_SUB_1]]3190// CHECK2-NEXT: [[TMP118:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 13191// CHECK2-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i643192// CHECK2-NEXT: [[TMP120:%.*]] = ptrtoint ptr [[TMP118]] to i643193// CHECK2-NEXT: [[TMP121:%.*]] = sub nuw i64 [[TMP120]], [[TMP119]]3194// CHECK2-NEXT: [[TMP122:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i643195// CHECK2-NEXT: [[TMP123:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 23196// CHECK2-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 03197// CHECK2-NEXT: store i64 [[TMP122]], ptr [[TMP124]], align 83198// CHECK2-NEXT: [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 13199// CHECK2-NEXT: store i64 [[TMP121]], ptr [[TMP125]], align 83200// CHECK2-NEXT: [[TMP126:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 23201// CHECK2-NEXT: store i8 3, ptr [[TMP126]], align 83202// CHECK2-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR27]], align 83203// CHECK2-NEXT: [[TMP127:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP100]], i32 3, ptr [[TMP102]], i32 0, ptr null)3204// CHECK2-NEXT: [[TMP128:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..12)3205// CHECK2-NEXT: [[TMP129:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP128]], i32 0, i32 03206// CHECK2-NEXT: [[TMP130:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP128]])3207// CHECK2-NEXT: store i8 0, ptr [[FLAG]], align 13208// CHECK2-NEXT: [[TMP131:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..14)3209// CHECK2-NEXT: [[TMP132:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP131]], i32 0, i32 03210// CHECK2-NEXT: [[TMP133:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP131]])3211// CHECK2-NEXT: [[TMP134:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_14]], ptr [[AGG_CAPTURED30]], i32 0, i32 03212// CHECK2-NEXT: store ptr [[C]], ptr [[TMP134]], align 83213// CHECK2-NEXT: [[TMP135:%.*]] = load i8, ptr [[B]], align 13214// CHECK2-NEXT: [[TOBOOL:%.*]] = icmp ne i8 [[TMP135]], 03215// CHECK2-NEXT: [[TMP136:%.*]] = select i1 [[TOBOOL]], i32 2, i32 03216// CHECK2-NEXT: [[TMP137:%.*]] = or i32 [[TMP136]], 13217// CHECK2-NEXT: [[TMP138:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 [[TMP137]], i64 40, i64 8, ptr @.omp_task_entry..16)3218// CHECK2-NEXT: [[TMP139:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP138]], i32 0, i32 03219// CHECK2-NEXT: [[TMP140:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP139]], i32 0, i32 03220// CHECK2-NEXT: [[TMP141:%.*]] = load ptr, ptr [[TMP140]], align 83221// CHECK2-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP141]], ptr align 8 [[AGG_CAPTURED30]], i64 8, i1 false)3222// CHECK2-NEXT: [[TMP142:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP138]])3223// CHECK2-NEXT: [[TMP143:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 256, i64 1, ptr @.omp_task_entry..21)3224// CHECK2-NEXT: [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP143]], i32 0, i32 03225// CHECK2-NEXT: [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP143]], i32 0, i32 23226// CHECK2-NEXT: [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP145]], i32 0, i32 03227// CHECK2-NEXT: [[TMP147:%.*]] = load i32, ptr [[C]], align 1283228// CHECK2-NEXT: store i32 [[TMP147]], ptr [[TMP146]], align 1283229// CHECK2-NEXT: [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP144]], i32 0, i32 23230// CHECK2-NEXT: store i32 0, ptr [[TMP148]], align 163231// CHECK2-NEXT: [[TMP149:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP143]])3232// CHECK2-NEXT: [[TMP150:%.*]] = load i32, ptr @a, align 43233// CHECK2-NEXT: store i32 [[TMP150]], ptr [[RETVAL]], align 43234// CHECK2-NEXT: [[TMP151:%.*]] = load ptr, ptr [[SAVED_STACK]], align 83235// CHECK2-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP151]])3236// CHECK2-NEXT: [[ARRAY_BEGIN32:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 03237// CHECK2-NEXT: [[TMP152:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN32]], i64 23238// CHECK2-NEXT: br label [[ARRAYDESTROY_BODY:%.*]]3239// CHECK2: arraydestroy.body:3240// CHECK2-NEXT: [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP152]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]3241// CHECK2-NEXT: [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -13242// CHECK2-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR4:[0-9]+]]3243// CHECK2-NEXT: [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN32]]3244// CHECK2-NEXT: br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE33:%.*]], label [[ARRAYDESTROY_BODY]]3245// CHECK2: arraydestroy.done33:3246// CHECK2-NEXT: [[TMP153:%.*]] = load i32, ptr [[RETVAL]], align 43247// CHECK2-NEXT: ret i32 [[TMP153]]3248//3249//3250// CHECK2-LABEL: define {{[^@]+}}@_ZN1SC1Ev3251// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] align 2 {3252// CHECK2-NEXT: entry:3253// CHECK2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 83254// CHECK2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 83255// CHECK2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83256// CHECK2-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])3257// CHECK2-NEXT: ret void3258//3259//3260// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry.3261// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {3262// CHECK2-NEXT: entry:3263// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43264// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83265// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83266// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83267// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83268// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83269// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43270// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83271// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43272// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83273// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43274// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83275// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 03276// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23277// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03278// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83279// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])3280// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])3281// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])3282// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])3283// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META12:![0-9]+]]3284// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META12]]3285// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META12]]3286// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META12]]3287// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META12]]3288// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]3289// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]3290// CHECK2-NEXT: store i32 15, ptr @a, align 4, !noalias [[META12]]3291// CHECK2-NEXT: [[TMP9:%.*]] = load i32, ptr @a, align 4, !noalias [[META12]]3292// CHECK2-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP9]] to i83293// CHECK2-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP8]], align 83294// CHECK2-NEXT: store i8 [[CONV_I]], ptr [[TMP10]], align 13295// CHECK2-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON:%.*]], ptr [[TMP8]], i32 0, i32 13296// CHECK2-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 83297// CHECK2-NEXT: store i32 10, ptr [[TMP12]], align 43298// CHECK2-NEXT: ret i32 03299//3300//3301// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..23302// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3303// CHECK2-NEXT: entry:3304// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43305// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83306// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83307// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83308// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83309// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83310// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43311// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83312// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43313// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83314// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43315// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83316// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 03317// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23318// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03319// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83320// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])3321// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META16:![0-9]+]])3322// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])3323// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])3324// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META22:![0-9]+]]3325// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META22]]3326// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META22]]3327// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META22]]3328// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META22]]3329// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]3330// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]3331// CHECK2-NEXT: store i32 15, ptr @a, align 4, !noalias [[META22]]3332// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 83333// CHECK2-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP9]], i64 0, i64 13334// CHECK2-NEXT: store i32 10, ptr [[ARRAYIDX_I]], align 43335// CHECK2-NEXT: ret i32 03336//3337//3338// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..43339// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3340// CHECK2-NEXT: entry:3341// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43342// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83343// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83344// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83345// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83346// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83347// CHECK2-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 43348// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43349// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83350// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43351// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83352// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43353// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83354// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP3]], i32 0, i32 03355// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23356// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03357// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83358// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META23:![0-9]+]])3359// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META26:![0-9]+]])3360// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])3361// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])3362// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32:![0-9]+]]3363// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]3364// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META32]]3365// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META32]]3366// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]3367// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]3368// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]3369// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]3370// CHECK2-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 43371// CHECK2-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [3372// CHECK2-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]3373// CHECK2-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]3374// CHECK2-NEXT: ]3375// CHECK2: .untied.done..i:3376// CHECK2-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]3377// CHECK2-NEXT: br label [[CLEANUP_I:%.*]]3378// CHECK2: .untied.jmp..i:3379// CHECK2-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]3380// CHECK2-NEXT: store i32 1, ptr [[TMP11]], align 43381// CHECK2-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32]]3382// CHECK2-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]3383// CHECK2-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])3384// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT:%.*]]3385// CHECK2: .untied.jmp.1.i:3386// CHECK2-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32]]3387// CHECK2-NEXT: call void @__kmpc_critical(ptr @[[GLOB1]], i32 [[TMP15]], ptr @.gomp_critical_user_.var)3388// CHECK2-NEXT: store i32 1, ptr @a, align 4, !noalias [[META32]]3389// CHECK2-NEXT: call void @__kmpc_end_critical(ptr @[[GLOB1]], i32 [[TMP15]], ptr @.gomp_critical_user_.var)3390// CHECK2-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]3391// CHECK2-NEXT: br label [[CLEANUP_I]]3392// CHECK2: cleanup.i:3393// CHECK2-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]3394// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT]]3395// CHECK2: .omp_outlined..3.exit:3396// CHECK2-NEXT: ret i32 03397//3398//3399// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..63400// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3401// CHECK2-NEXT: entry:3402// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43403// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83404// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83405// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83406// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83407// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83408// CHECK2-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 43409// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43410// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83411// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43412// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83413// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43414// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83415// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 03416// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23417// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03418// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83419// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META33:![0-9]+]])3420// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META36:![0-9]+]])3421// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META38:![0-9]+]])3422// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])3423// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42:![0-9]+]]3424// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]3425// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META42]]3426// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META42]]3427// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]3428// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]3429// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]3430// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]3431// CHECK2-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 43432// CHECK2-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [3433// CHECK2-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]3434// CHECK2-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]3435// CHECK2-NEXT: ]3436// CHECK2: .untied.done..i:3437// CHECK2-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]3438// CHECK2-NEXT: br label [[CLEANUP_I:%.*]]3439// CHECK2: .untied.jmp..i:3440// CHECK2-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]3441// CHECK2-NEXT: store i32 1, ptr [[TMP11]], align 43442// CHECK2-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42]]3443// CHECK2-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]3444// CHECK2-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])3445// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT:%.*]]3446// CHECK2: .untied.jmp.1.i:3447// CHECK2-NEXT: store i32 1, ptr @a, align 4, !noalias [[META42]]3448// CHECK2-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]3449// CHECK2-NEXT: br label [[CLEANUP_I]]3450// CHECK2: cleanup.i:3451// CHECK2-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]3452// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT]]3453// CHECK2: .omp_outlined..5.exit:3454// CHECK2-NEXT: ret i32 03455//3456//3457// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..83458// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3459// CHECK2-NEXT: entry:3460// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43461// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83462// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83463// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83464// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83465// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83466// CHECK2-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 43467// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43468// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83469// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43470// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83471// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43472// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83473// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP3]], i32 0, i32 03474// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23475// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03476// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83477// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])3478// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META46:![0-9]+]])3479// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META48:![0-9]+]])3480// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META50:![0-9]+]])3481// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52:![0-9]+]]3482// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]3483// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META52]]3484// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META52]]3485// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]3486// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]3487// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]3488// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]3489// CHECK2-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 43490// CHECK2-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [3491// CHECK2-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]3492// CHECK2-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]3493// CHECK2-NEXT: ]3494// CHECK2: .untied.done..i:3495// CHECK2-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]3496// CHECK2-NEXT: br label [[CLEANUP_I:%.*]]3497// CHECK2: .untied.jmp..i:3498// CHECK2-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]3499// CHECK2-NEXT: store i32 1, ptr [[TMP11]], align 43500// CHECK2-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52]]3501// CHECK2-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]3502// CHECK2-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])3503// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT:%.*]]3504// CHECK2: .untied.jmp.1.i:3505// CHECK2-NEXT: store i32 1, ptr @a, align 4, !noalias [[META52]]3506// CHECK2-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]3507// CHECK2-NEXT: br label [[CLEANUP_I]]3508// CHECK2: cleanup.i:3509// CHECK2-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]3510// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT]]3511// CHECK2: .omp_outlined..7.exit:3512// CHECK2-NEXT: ret i32 03513//3514//3515// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..103516// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3517// CHECK2-NEXT: entry:3518// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43519// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83520// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83521// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83522// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83523// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83524// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43525// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83526// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43527// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83528// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43529// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83530// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP3]], i32 0, i32 03531// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23532// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03533// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83534// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META53:![0-9]+]])3535// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META56:![0-9]+]])3536// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META58:![0-9]+]])3537// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META60:![0-9]+]])3538// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META62:![0-9]+]]3539// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META62]]3540// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META62]]3541// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META62]]3542// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META62]]3543// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]3544// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]3545// CHECK2-NEXT: store i32 2, ptr @a, align 4, !noalias [[META62]]3546// CHECK2-NEXT: ret i32 03547//3548//3549// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..123550// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3551// CHECK2-NEXT: entry:3552// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43553// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83554// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83555// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83556// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83557// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83558// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43559// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83560// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43561// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83562// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43563// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83564// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP3]], i32 0, i32 03565// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23566// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03567// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83568// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META63:![0-9]+]])3569// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META66:![0-9]+]])3570// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META68:![0-9]+]])3571// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META70:![0-9]+]])3572// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META72:![0-9]+]]3573// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META72]]3574// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META72]]3575// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META72]]3576// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META72]]3577// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]3578// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]3579// CHECK2-NEXT: store i32 2, ptr @a, align 4, !noalias [[META72]]3580// CHECK2-NEXT: ret i32 03581//3582//3583// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..143584// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3585// CHECK2-NEXT: entry:3586// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43587// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83588// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83589// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83590// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83591// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83592// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43593// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83594// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43595// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83596// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43597// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83598// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP3]], i32 0, i32 03599// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23600// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03601// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83602// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META73:![0-9]+]])3603// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META76:![0-9]+]])3604// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META78:![0-9]+]])3605// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META80:![0-9]+]])3606// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META82:![0-9]+]]3607// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META82]]3608// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META82]]3609// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META82]]3610// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META82]]3611// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]3612// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]3613// CHECK2-NEXT: store i32 3, ptr @a, align 4, !noalias [[META82]]3614// CHECK2-NEXT: ret i32 03615//3616//3617// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..163618// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3619// CHECK2-NEXT: entry:3620// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43621// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83622// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83623// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83624// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83625// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83626// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43627// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83628// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43629// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83630// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43631// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83632// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP3]], i32 0, i32 03633// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23634// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03635// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83636// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META83:![0-9]+]])3637// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META86:![0-9]+]])3638// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META88:![0-9]+]])3639// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META90:![0-9]+]])3640// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META92:![0-9]+]]3641// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META92]]3642// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META92]]3643// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META92]]3644// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META92]]3645// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]3646// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]3647// CHECK2-NEXT: store i32 4, ptr @a, align 4, !noalias [[META92]]3648// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 83649// CHECK2-NEXT: store i32 5, ptr [[TMP9]], align 1283650// CHECK2-NEXT: ret i32 03651//3652//3653// CHECK2-LABEL: define {{[^@]+}}@.omp_task_privates_map.3654// CHECK2-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7:[0-9]+]] {3655// CHECK2-NEXT: entry:3656// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 83657// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83658// CHECK2-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 83659// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83660// CHECK2-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 83661// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP2]], i32 0, i32 03662// CHECK2-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 83663// CHECK2-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 83664// CHECK2-NEXT: ret void3665//3666//3667// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..193668// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3669// CHECK2-NEXT: entry:3670// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43671// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83672// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83673// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83674// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83675// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83676// CHECK2-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 83677// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43678// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83679// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43680// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83681// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43682// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83683// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP3]], i32 0, i32 03684// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23685// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03686// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1283687// CHECK2-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18]], ptr [[TMP3]], i32 0, i32 23688// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META93:![0-9]+]])3689// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META96:![0-9]+]])3690// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META98:![0-9]+]])3691// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META100:![0-9]+]])3692// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META102:![0-9]+]]3693// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META102]]3694// CHECK2-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]3695// CHECK2-NEXT: store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]3696// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META102]]3697// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]3698// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]3699// CHECK2-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]3700// CHECK2-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]3701// CHECK2-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]3702// CHECK2-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META102]]3703// CHECK2-NEXT: store i32 4, ptr [[TMP12]], align 1283704// CHECK2-NEXT: store i32 4, ptr @a, align 4, !noalias [[META102]]3705// CHECK2-NEXT: ret i32 03706//3707//3708// CHECK2-LABEL: define {{[^@]+}}@_ZN1SD1Ev3709// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {3710// CHECK2-NEXT: entry:3711// CHECK2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 83712// CHECK2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 83713// CHECK2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83714// CHECK2-NEXT: call void @_ZN1SD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR4]]3715// CHECK2-NEXT: ret void3716//3717//3718// CHECK2-LABEL: define {{[^@]+}}@.omp_task_privates_map..203719// CHECK2-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]]) #[[ATTR7]] {3720// CHECK2-NEXT: entry:3721// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 83722// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83723// CHECK2-NEXT: [[DOTADDR2:%.*]] = alloca ptr, align 83724// CHECK2-NEXT: [[DOTADDR3:%.*]] = alloca ptr, align 83725// CHECK2-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 83726// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83727// CHECK2-NEXT: store ptr [[TMP2]], ptr [[DOTADDR2]], align 83728// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTADDR3]], align 83729// CHECK2-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR]], align 83730// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP4]], i32 0, i32 03731// CHECK2-NEXT: [[TMP6:%.*]] = load ptr, ptr [[DOTADDR1]], align 83732// CHECK2-NEXT: store ptr [[TMP5]], ptr [[TMP6]], align 83733// CHECK2-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 23734// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[DOTADDR3]], align 83735// CHECK2-NEXT: store ptr [[TMP7]], ptr [[TMP8]], align 83736// CHECK2-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 33737// CHECK2-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTADDR2]], align 83738// CHECK2-NEXT: store ptr [[TMP9]], ptr [[TMP10]], align 83739// CHECK2-NEXT: ret void3740//3741//3742// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..213743// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3744// CHECK2-NEXT: entry:3745// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43746// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83747// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83748// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83749// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83750// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83751// CHECK2-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 83752// CHECK2-NEXT: [[DOTLOCAL_PTR_ADDR_I:%.*]] = alloca ptr, align 83753// CHECK2-NEXT: [[DOTLOCAL_PTR_ADDR1_I:%.*]] = alloca ptr, align 83754// CHECK2-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 43755// CHECK2-NEXT: [[REF_TMP_I:%.*]] = alloca [[STRUCT_S:%.*]], align 43756// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43757// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83758// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43759// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83760// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43761// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83762// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP3]], i32 0, i32 03763// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23764// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03765// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1283766// CHECK2-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP3]], i32 0, i32 23767// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META103:![0-9]+]])3768// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META106:![0-9]+]])3769// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META108:![0-9]+]])3770// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META110:![0-9]+]])3771// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112:![0-9]+]]3772// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]3773// CHECK2-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]3774// CHECK2-NEXT: store ptr @.omp_task_privates_map..20, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]3775// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]3776// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]3777// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]3778// CHECK2-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]3779// CHECK2-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]3780// CHECK2-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR1_I]]) #[[ATTR4]]3781// CHECK2-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META112]]3782// CHECK2-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR_I]], align 8, !noalias [[META112]]3783// CHECK2-NEXT: [[TMP14:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR1_I]], align 8, !noalias [[META112]]3784// CHECK2-NEXT: [[TMP15:%.*]] = load ptr, ptr [[TMP14]], align 83785// CHECK2-NEXT: [[TMP16:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]3786// CHECK2-NEXT: [[TMP17:%.*]] = load i32, ptr [[TMP16]], align 43787// CHECK2-NEXT: switch i32 [[TMP17]], label [[DOTUNTIED_DONE__I:%.*]] [3788// CHECK2-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]3789// CHECK2-NEXT: i32 1, label [[DOTUNTIED_JMP_2_I:%.*]]3790// CHECK2-NEXT: i32 2, label [[DOTUNTIED_JMP_3_I:%.*]]3791// CHECK2-NEXT: i32 3, label [[DOTUNTIED_JMP_5_I:%.*]]3792// CHECK2-NEXT: i32 4, label [[DOTUNTIED_JMP_7_I:%.*]]3793// CHECK2-NEXT: i32 5, label [[DOTUNTIED_JMP_10_I:%.*]]3794// CHECK2-NEXT: ]3795// CHECK2: .untied.done..i:3796// CHECK2-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]3797// CHECK2-NEXT: br label [[CLEANUP_I:%.*]]3798// CHECK2: .untied.jmp..i:3799// CHECK2-NEXT: [[TMP18:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]3800// CHECK2-NEXT: store i32 1, ptr [[TMP18]], align 43801// CHECK2-NEXT: [[TMP19:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3802// CHECK2-NEXT: [[TMP20:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]3803// CHECK2-NEXT: [[TMP21:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP19]], ptr [[TMP20]])3804// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT:%.*]]3805// CHECK2: .untied.jmp.2.i:3806// CHECK2-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP13]])3807// CHECK2-NEXT: [[TMP22:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3808// CHECK2-NEXT: [[DOTS2__VOID_ADDR_I:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP22]], i64 4, ptr inttoptr (i64 7 to ptr))3809// CHECK2-NEXT: store ptr [[DOTS2__VOID_ADDR_I]], ptr [[TMP14]], align 83810// CHECK2-NEXT: [[TMP23:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]3811// CHECK2-NEXT: store i32 2, ptr [[TMP23]], align 43812// CHECK2-NEXT: [[TMP24:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3813// CHECK2-NEXT: [[TMP25:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]3814// CHECK2-NEXT: [[TMP26:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP24]], ptr [[TMP25]])3815// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]3816// CHECK2: .untied.jmp.3.i:3817// CHECK2-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP15]])3818// CHECK2-NEXT: store i32 0, ptr [[TMP15]], align 43819// CHECK2-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3820// CHECK2-NEXT: [[TMP28:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP27]], i32 1, i64 256, i64 1, ptr @.omp_task_entry..19)3821// CHECK2-NEXT: [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP28]], i32 0, i32 23822// CHECK2-NEXT: [[TMP30:%.*]] = load i32, ptr [[TMP12]], align 1283823// CHECK2-NEXT: store i32 [[TMP30]], ptr [[TMP29]], align 1283824// CHECK2-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3825// CHECK2-NEXT: [[TMP32:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP31]], ptr [[TMP28]])3826// CHECK2-NEXT: [[TMP33:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]3827// CHECK2-NEXT: store i32 3, ptr [[TMP33]], align 43828// CHECK2-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3829// CHECK2-NEXT: [[TMP35:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]3830// CHECK2-NEXT: [[TMP36:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP34]], ptr [[TMP35]])3831// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]3832// CHECK2: .untied.jmp.5.i:3833// CHECK2-NEXT: [[TMP37:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3834// CHECK2-NEXT: [[TMP38:%.*]] = call i32 @__kmpc_omp_taskyield(ptr @[[GLOB1]], i32 [[TMP37]], i32 0)3835// CHECK2-NEXT: [[TMP39:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]3836// CHECK2-NEXT: store i32 4, ptr [[TMP39]], align 43837// CHECK2-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3838// CHECK2-NEXT: [[TMP41:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]3839// CHECK2-NEXT: [[TMP42:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP40]], ptr [[TMP41]])3840// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]3841// CHECK2: .untied.jmp.7.i:3842// CHECK2-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]])3843// CHECK2-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TMP13]], ptr align 4 [[REF_TMP_I]], i64 4, i1 false)3844// CHECK2-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]]) #[[ATTR4]]3845// CHECK2-NEXT: store i32 10, ptr [[TMP15]], align 43846// CHECK2-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3847// CHECK2-NEXT: [[TMP44:%.*]] = call i32 @__kmpc_omp_taskwait(ptr @[[GLOB1]], i32 [[TMP43]])3848// CHECK2-NEXT: [[TMP45:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]3849// CHECK2-NEXT: store i32 5, ptr [[TMP45]], align 43850// CHECK2-NEXT: [[TMP46:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3851// CHECK2-NEXT: [[TMP47:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]3852// CHECK2-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP46]], ptr [[TMP47]])3853// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]3854// CHECK2: .untied.jmp.10.i:3855// CHECK2-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP15]]) #[[ATTR4]]3856// CHECK2-NEXT: [[TMP49:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112]]3857// CHECK2-NEXT: call void @__kmpc_free(i32 [[TMP49]], ptr [[TMP15]], ptr inttoptr (i64 7 to ptr))3858// CHECK2-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP13]]) #[[ATTR4]]3859// CHECK2-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]3860// CHECK2-NEXT: br label [[CLEANUP_I]]3861// CHECK2: cleanup.i:3862// CHECK2-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]3863// CHECK2-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]3864// CHECK2: .omp_outlined..17.exit:3865// CHECK2-NEXT: ret i32 03866//3867//3868// CHECK2-LABEL: define {{[^@]+}}@_ZN1SC2Ev3869// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {3870// CHECK2-NEXT: entry:3871// CHECK2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 83872// CHECK2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 83873// CHECK2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83874// CHECK2-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 03875// CHECK2-NEXT: store i32 0, ptr [[A]], align 43876// CHECK2-NEXT: ret void3877//3878//3879// CHECK2-LABEL: define {{[^@]+}}@_ZN1SD2Ev3880// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {3881// CHECK2-NEXT: entry:3882// CHECK2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 83883// CHECK2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 83884// CHECK2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83885// CHECK2-NEXT: ret void3886//3887//3888// CHECK2-LABEL: define {{[^@]+}}@__cxx_global_var_init3889// CHECK2-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {3890// CHECK2-NEXT: entry:3891// CHECK2-NEXT: call void @_ZN2S1C1Ev(ptr noundef nonnull align 4 dereferenceable(4) @s1)3892// CHECK2-NEXT: ret void3893//3894//3895// CHECK2-LABEL: define {{[^@]+}}@_ZN2S1C1Ev3896// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {3897// CHECK2-NEXT: entry:3898// CHECK2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 83899// CHECK2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 83900// CHECK2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83901// CHECK2-NEXT: call void @_ZN2S1C2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])3902// CHECK2-NEXT: ret void3903//3904//3905// CHECK2-LABEL: define {{[^@]+}}@_ZN2S1C2Ev3906// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {3907// CHECK2-NEXT: entry:3908// CHECK2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 83909// CHECK2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 83910// CHECK2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83911// CHECK2-NEXT: call void @_ZN2S18taskinitEv(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])3912// CHECK2-NEXT: ret void3913//3914//3915// CHECK2-LABEL: define {{[^@]+}}@_ZN2S18taskinitEv3916// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) #[[ATTR1]] align 2 {3917// CHECK2-NEXT: entry:3918// CHECK2-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 83919// CHECK2-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_21:%.*]], align 83920// CHECK2-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])3921// CHECK2-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 83922// CHECK2-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83923// CHECK2-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_21]], ptr [[AGG_CAPTURED]], i32 0, i32 03924// CHECK2-NEXT: store ptr [[THIS1]], ptr [[TMP1]], align 83925// CHECK2-NEXT: [[TMP2:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..23)3926// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP2]], i32 0, i32 03927// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP3]], i32 0, i32 03928// CHECK2-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 83929// CHECK2-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP5]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)3930// CHECK2-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP2]])3931// CHECK2-NEXT: ret void3932//3933//3934// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..233935// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {3936// CHECK2-NEXT: entry:3937// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 43938// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 83939// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 83940// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 83941// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 83942// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 83943// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 43944// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 83945// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 43946// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 83947// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 43948// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 83949// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP3]], i32 0, i32 03950// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 23951// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 03952// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 83953// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META113:![0-9]+]])3954// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META116:![0-9]+]])3955// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META118:![0-9]+]])3956// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META120:![0-9]+]])3957// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122:![0-9]+]]3958// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]3959// CHECK2-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]3960// CHECK2-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]3961// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]3962// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]3963// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]3964// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 83965// CHECK2-NEXT: store i32 0, ptr [[TMP9]], align 43966// CHECK2-NEXT: ret i32 03967//3968//3969// CHECK2-LABEL: define {{[^@]+}}@_Z4xxxxv3970// CHECK2-SAME: () #[[ATTR1]] {3971// CHECK2-NEXT: entry:3972// CHECK2-NEXT: call void @_Z6foobarIvEvv()3973// CHECK2-NEXT: ret void3974//3975//3976// CHECK2-LABEL: define {{[^@]+}}@_Z6foobarIvEvv3977// CHECK2-SAME: () #[[ATTR1]] {3978// CHECK2-NEXT: entry:3979// CHECK2-NEXT: [[A:%.*]] = alloca float, align 43980// CHECK2-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB1]], i32 1, ptr @_Z6foobarIvEvv.omp_outlined, ptr [[A]])3981// CHECK2-NEXT: ret void3982//3983//3984// CHECK2-LABEL: define {{[^@]+}}@_Z6foobarIvEvv.omp_outlined3985// CHECK2-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR8:[0-9]+]] {3986// CHECK2-NEXT: entry:3987// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83988// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83989// CHECK2-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 83990// CHECK2-NEXT: [[B:%.*]] = alloca double, align 83991// CHECK2-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_23:%.*]], align 83992// CHECK2-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83993// CHECK2-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83994// CHECK2-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 83995// CHECK2-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 83996// CHECK2-NEXT: [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83997// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 43998// CHECK2-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB1]], i32 [[TMP2]])3999// CHECK2-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 04000// CHECK2-NEXT: br i1 [[TMP4]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]4001// CHECK2: omp_if.then:4002// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_23]], ptr [[AGG_CAPTURED]], i32 0, i32 04003// CHECK2-NEXT: store ptr [[TMP0]], ptr [[TMP5]], align 84004// CHECK2-NEXT: [[TMP6:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i64 48, i64 8, ptr @.omp_task_entry..26)4005// CHECK2-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP6]], i32 0, i32 04006// CHECK2-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP7]], i32 0, i32 04007// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 84008// CHECK2-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP9]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)4009// CHECK2-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24]], ptr [[TMP6]], i32 0, i32 14010// CHECK2-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_25:%.*]], ptr [[TMP10]], i32 0, i32 04011// CHECK2-NEXT: [[TMP12:%.*]] = load double, ptr [[B]], align 84012// CHECK2-NEXT: store double [[TMP12]], ptr [[TMP11]], align 84013// CHECK2-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP2]], ptr [[TMP6]])4014// CHECK2-NEXT: call void @__kmpc_end_single(ptr @[[GLOB1]], i32 [[TMP2]])4015// CHECK2-NEXT: br label [[OMP_IF_END]]4016// CHECK2: omp_if.end:4017// CHECK2-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2:[0-9]+]], i32 [[TMP2]])4018// CHECK2-NEXT: ret void4019//4020//4021// CHECK2-LABEL: define {{[^@]+}}@.omp_task_privates_map..254022// CHECK2-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {4023// CHECK2-NEXT: entry:4024// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 84025// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84026// CHECK2-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 84027// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84028// CHECK2-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 84029// CHECK2-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_25:%.*]], ptr [[TMP2]], i32 0, i32 04030// CHECK2-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 84031// CHECK2-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 84032// CHECK2-NEXT: ret void4033//4034//4035// CHECK2-LABEL: define {{[^@]+}}@.omp_task_entry..264036// CHECK2-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4037// CHECK2-NEXT: entry:4038// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44039// CHECK2-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84040// CHECK2-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84041// CHECK2-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84042// CHECK2-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84043// CHECK2-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84044// CHECK2-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 84045// CHECK2-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44046// CHECK2-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84047// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44048// CHECK2-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84049// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44050// CHECK2-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84051// CHECK2-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP3]], i32 0, i32 04052// CHECK2-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24053// CHECK2-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04054// CHECK2-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84055// CHECK2-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24]], ptr [[TMP3]], i32 0, i32 14056// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META123:![0-9]+]])4057// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META126:![0-9]+]])4058// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META128:![0-9]+]])4059// CHECK2-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META130:![0-9]+]])4060// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META132:![0-9]+]]4061// CHECK2-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META132]]4062// CHECK2-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META132]]4063// CHECK2-NEXT: store ptr @.omp_task_privates_map..25, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META132]]4064// CHECK2-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META132]]4065// CHECK2-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]4066// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]4067// CHECK2-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META132]]4068// CHECK2-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META132]]4069// CHECK2-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]4070// CHECK2-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META132]]4071// CHECK2-NEXT: [[TMP13:%.*]] = load double, ptr [[TMP12]], align 84072// CHECK2-NEXT: [[TMP14:%.*]] = load ptr, ptr [[TMP9]], align 84073// CHECK2-NEXT: [[TMP15:%.*]] = load float, ptr [[TMP14]], align 44074// CHECK2-NEXT: [[CONV_I:%.*]] = fpext float [[TMP15]] to double4075// CHECK2-NEXT: [[ADD_I:%.*]] = fadd double [[CONV_I]], [[TMP13]]4076// CHECK2-NEXT: [[CONV1_I:%.*]] = fptrunc double [[ADD_I]] to float4077// CHECK2-NEXT: store float [[CONV1_I]], ptr [[TMP14]], align 44078// CHECK2-NEXT: ret i32 04079//4080//4081// CHECK2-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_task_codegen.cpp4082// CHECK2-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {4083// CHECK2-NEXT: entry:4084// CHECK2-NEXT: call void @__cxx_global_var_init()4085// CHECK2-NEXT: ret void4086//4087//4088// CHECK2-51-LABEL: define {{[^@]+}}@main4089// CHECK2-51-SAME: () #[[ATTR0:[0-9]+]] {4090// CHECK2-51-NEXT: entry:4091// CHECK2-51-NEXT: [[RETVAL:%.*]] = alloca i32, align 44092// CHECK2-51-NEXT: [[B:%.*]] = alloca i8, align 14093// CHECK2-51-NEXT: [[S:%.*]] = alloca [2 x %struct.S], align 44094// CHECK2-51-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 84095// CHECK2-51-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 84096// CHECK2-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 84097// CHECK2-51-NEXT: [[AGG_CAPTURED1:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 84098// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 84099// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 84100// CHECK2-51-NEXT: [[AGG_CAPTURED3:%.*]] = alloca [[STRUCT_ANON_2:%.*]], align 14101// CHECK2-51-NEXT: [[AGG_CAPTURED4:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 14102// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR5:%.*]] = alloca [2 x %struct.kmp_depend_info], align 84103// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR11:%.*]] = alloca i64, align 84104// CHECK2-51-NEXT: [[AGG_CAPTURED12:%.*]] = alloca [[STRUCT_ANON_6:%.*]], align 14105// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR13:%.*]] = alloca [2 x %struct.kmp_depend_info], align 84106// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR19:%.*]] = alloca i64, align 84107// CHECK2-51-NEXT: [[AGG_CAPTURED20:%.*]] = alloca [[STRUCT_ANON_8:%.*]], align 14108// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR21:%.*]] = alloca [3 x %struct.kmp_depend_info], align 84109// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR27:%.*]] = alloca i64, align 84110// CHECK2-51-NEXT: [[AGG_CAPTURED28:%.*]] = alloca [[STRUCT_ANON_10:%.*]], align 14111// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR29:%.*]] = alloca [3 x %struct.kmp_depend_info], align 84112// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR37:%.*]] = alloca i64, align 84113// CHECK2-51-NEXT: [[AGG_CAPTURED38:%.*]] = alloca [[STRUCT_ANON_12:%.*]], align 14114// CHECK2-51-NEXT: [[FLAG:%.*]] = alloca i8, align 14115// CHECK2-51-NEXT: [[AGG_CAPTURED39:%.*]] = alloca [[STRUCT_ANON_14:%.*]], align 14116// CHECK2-51-NEXT: [[C:%.*]] = alloca i32, align 1284117// CHECK2-51-NEXT: [[AGG_CAPTURED40:%.*]] = alloca [[STRUCT_ANON_16:%.*]], align 84118// CHECK2-51-NEXT: [[AGG_CAPTURED41:%.*]] = alloca [[STRUCT_ANON_18:%.*]], align 14119// CHECK2-51-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])4120// CHECK2-51-NEXT: store i32 0, ptr [[RETVAL]], align 44121// CHECK2-51-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 04122// CHECK2-51-NEXT: [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 24123// CHECK2-51-NEXT: br label [[ARRAYCTOR_LOOP:%.*]]4124// CHECK2-51: arrayctor.loop:4125// CHECK2-51-NEXT: [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]4126// CHECK2-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])4127// CHECK2-51-NEXT: [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 14128// CHECK2-51-NEXT: [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]4129// CHECK2-51-NEXT: br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]4130// CHECK2-51: arrayctor.cont:4131// CHECK2-51-NEXT: [[TMP1:%.*]] = load i32, ptr @a, align 44132// CHECK2-51-NEXT: [[TMP2:%.*]] = zext i32 [[TMP1]] to i644133// CHECK2-51-NEXT: [[TMP3:%.*]] = call ptr @llvm.stacksave.p0()4134// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[SAVED_STACK]], align 84135// CHECK2-51-NEXT: [[TMP4:%.*]] = mul nuw i64 10, [[TMP2]]4136// CHECK2-51-NEXT: [[VLA:%.*]] = alloca i32, i64 [[TMP4]], align 164137// CHECK2-51-NEXT: store i64 [[TMP2]], ptr [[__VLA_EXPR0]], align 84138// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 04139// CHECK2-51-NEXT: store ptr [[B]], ptr [[TMP5]], align 84140// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 14141// CHECK2-51-NEXT: store ptr [[S]], ptr [[TMP6]], align 84142// CHECK2-51-NEXT: [[TMP7:%.*]] = load i8, ptr [[B]], align 14143// CHECK2-51-NEXT: [[CONV:%.*]] = sext i8 [[TMP7]] to i324144// CHECK2-51-NEXT: [[TMP8:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 33, i64 40, i64 16, ptr @.omp_task_entry.)4145// CHECK2-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP8]], i32 0, i32 04146// CHECK2-51-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP9]], i32 0, i32 04147// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TMP10]], align 84148// CHECK2-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP11]], ptr align 8 [[AGG_CAPTURED]], i64 16, i1 false)4149// CHECK2-51-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP9]], i32 0, i32 44150// CHECK2-51-NEXT: store i32 [[CONV]], ptr [[TMP12]], align 84151// CHECK2-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP8]])4152// CHECK2-51-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_0]], ptr [[AGG_CAPTURED1]], i32 0, i32 04153// CHECK2-51-NEXT: store ptr [[S]], ptr [[TMP14]], align 84154// CHECK2-51-NEXT: [[TMP15:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..2)4155// CHECK2-51-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP15]], i32 0, i32 04156// CHECK2-51-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP16]], i32 0, i32 04157// CHECK2-51-NEXT: [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 84158// CHECK2-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP18]], ptr align 8 [[AGG_CAPTURED1]], i64 8, i1 false)4159// CHECK2-51-NEXT: [[TMP19:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 04160// CHECK2-51-NEXT: [[TMP20:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP19]], i64 04161// CHECK2-51-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 04162// CHECK2-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP21]], align 84163// CHECK2-51-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 14164// CHECK2-51-NEXT: store i64 4, ptr [[TMP22]], align 84165// CHECK2-51-NEXT: [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP20]], i32 0, i32 24166// CHECK2-51-NEXT: store i8 1, ptr [[TMP23]], align 84167// CHECK2-51-NEXT: [[TMP24:%.*]] = ptrtoint ptr [[B]] to i644168// CHECK2-51-NEXT: [[TMP25:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 14169// CHECK2-51-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 04170// CHECK2-51-NEXT: store i64 [[TMP24]], ptr [[TMP26]], align 84171// CHECK2-51-NEXT: [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 14172// CHECK2-51-NEXT: store i64 1, ptr [[TMP27]], align 84173// CHECK2-51-NEXT: [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP25]], i32 0, i32 24174// CHECK2-51-NEXT: store i8 1, ptr [[TMP28]], align 84175// CHECK2-51-NEXT: [[TMP29:%.*]] = ptrtoint ptr [[S]] to i644176// CHECK2-51-NEXT: [[TMP30:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 24177// CHECK2-51-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 04178// CHECK2-51-NEXT: store i64 [[TMP29]], ptr [[TMP31]], align 84179// CHECK2-51-NEXT: [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 14180// CHECK2-51-NEXT: store i64 8, ptr [[TMP32]], align 84181// CHECK2-51-NEXT: [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP30]], i32 0, i32 24182// CHECK2-51-NEXT: store i8 1, ptr [[TMP33]], align 84183// CHECK2-51-NEXT: [[TMP34:%.*]] = mul nsw i64 0, [[TMP2]]4184// CHECK2-51-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP34]]4185// CHECK2-51-NEXT: [[TMP35:%.*]] = mul nsw i64 9, [[TMP2]]4186// CHECK2-51-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP35]]4187// CHECK2-51-NEXT: [[TMP36:%.*]] = getelementptr i32, ptr [[ARRAYIDX2]], i32 14188// CHECK2-51-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i644189// CHECK2-51-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP36]] to i644190// CHECK2-51-NEXT: [[TMP39:%.*]] = sub nuw i64 [[TMP38]], [[TMP37]]4191// CHECK2-51-NEXT: [[TMP40:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i644192// CHECK2-51-NEXT: [[TMP41:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 34193// CHECK2-51-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 04194// CHECK2-51-NEXT: store i64 [[TMP40]], ptr [[TMP42]], align 84195// CHECK2-51-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 14196// CHECK2-51-NEXT: store i64 [[TMP39]], ptr [[TMP43]], align 84197// CHECK2-51-NEXT: [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 24198// CHECK2-51-NEXT: store i8 1, ptr [[TMP44]], align 84199// CHECK2-51-NEXT: store i64 4, ptr [[DEP_COUNTER_ADDR]], align 84200// CHECK2-51-NEXT: [[TMP45:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP15]], i32 4, ptr [[TMP19]], i32 0, ptr null)4201// CHECK2-51-NEXT: [[TMP46:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..4)4202// CHECK2-51-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP46]], i32 0, i32 04203// CHECK2-51-NEXT: [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP47]], i32 0, i32 24204// CHECK2-51-NEXT: store i32 0, ptr [[TMP48]], align 84205// CHECK2-51-NEXT: [[TMP49:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP46]])4206// CHECK2-51-NEXT: [[TMP50:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..6)4207// CHECK2-51-NEXT: [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP50]], i32 0, i32 04208// CHECK2-51-NEXT: [[TMP52:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR5]], i64 0, i64 04209// CHECK2-51-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 04210// CHECK2-51-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[ARRAYIDX6]] to i644211// CHECK2-51-NEXT: [[TMP54:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 04212// CHECK2-51-NEXT: [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 04213// CHECK2-51-NEXT: store i64 [[TMP53]], ptr [[TMP55]], align 84214// CHECK2-51-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 14215// CHECK2-51-NEXT: store i64 4, ptr [[TMP56]], align 84216// CHECK2-51-NEXT: [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 24217// CHECK2-51-NEXT: store i8 3, ptr [[TMP57]], align 84218// CHECK2-51-NEXT: [[TMP58:%.*]] = load i8, ptr [[B]], align 14219// CHECK2-51-NEXT: [[TMP59:%.*]] = sext i8 [[TMP58]] to i644220// CHECK2-51-NEXT: [[TMP60:%.*]] = mul nsw i64 4, [[TMP2]]4221// CHECK2-51-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP60]]4222// CHECK2-51-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX7]], i64 [[TMP59]]4223// CHECK2-51-NEXT: [[TMP61:%.*]] = load i8, ptr [[B]], align 14224// CHECK2-51-NEXT: [[TMP62:%.*]] = sext i8 [[TMP61]] to i644225// CHECK2-51-NEXT: [[TMP63:%.*]] = mul nsw i64 9, [[TMP2]]4226// CHECK2-51-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP63]]4227// CHECK2-51-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX9]], i64 [[TMP62]]4228// CHECK2-51-NEXT: [[TMP64:%.*]] = getelementptr i32, ptr [[ARRAYIDX10]], i32 14229// CHECK2-51-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i644230// CHECK2-51-NEXT: [[TMP66:%.*]] = ptrtoint ptr [[TMP64]] to i644231// CHECK2-51-NEXT: [[TMP67:%.*]] = sub nuw i64 [[TMP66]], [[TMP65]]4232// CHECK2-51-NEXT: [[TMP68:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i644233// CHECK2-51-NEXT: [[TMP69:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 14234// CHECK2-51-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 04235// CHECK2-51-NEXT: store i64 [[TMP68]], ptr [[TMP70]], align 84236// CHECK2-51-NEXT: [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 14237// CHECK2-51-NEXT: store i64 [[TMP67]], ptr [[TMP71]], align 84238// CHECK2-51-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 24239// CHECK2-51-NEXT: store i8 3, ptr [[TMP72]], align 84240// CHECK2-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR11]], align 84241// CHECK2-51-NEXT: [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP51]], i32 0, i32 24242// CHECK2-51-NEXT: store i32 0, ptr [[TMP73]], align 84243// CHECK2-51-NEXT: [[TMP74:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP50]], i32 2, ptr [[TMP52]], i32 0, ptr null)4244// CHECK2-51-NEXT: [[TMP75:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..8)4245// CHECK2-51-NEXT: [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP75]], i32 0, i32 04246// CHECK2-51-NEXT: [[TMP77:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR13]], i64 0, i64 04247// CHECK2-51-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 04248// CHECK2-51-NEXT: [[TMP78:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i644249// CHECK2-51-NEXT: [[TMP79:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 04250// CHECK2-51-NEXT: [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 04251// CHECK2-51-NEXT: store i64 [[TMP78]], ptr [[TMP80]], align 84252// CHECK2-51-NEXT: [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 14253// CHECK2-51-NEXT: store i64 4, ptr [[TMP81]], align 84254// CHECK2-51-NEXT: [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP79]], i32 0, i32 24255// CHECK2-51-NEXT: store i8 4, ptr [[TMP82]], align 84256// CHECK2-51-NEXT: [[TMP83:%.*]] = load i8, ptr [[B]], align 14257// CHECK2-51-NEXT: [[TMP84:%.*]] = sext i8 [[TMP83]] to i644258// CHECK2-51-NEXT: [[TMP85:%.*]] = mul nsw i64 4, [[TMP2]]4259// CHECK2-51-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP85]]4260// CHECK2-51-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX15]], i64 [[TMP84]]4261// CHECK2-51-NEXT: [[TMP86:%.*]] = load i8, ptr [[B]], align 14262// CHECK2-51-NEXT: [[TMP87:%.*]] = sext i8 [[TMP86]] to i644263// CHECK2-51-NEXT: [[TMP88:%.*]] = mul nsw i64 9, [[TMP2]]4264// CHECK2-51-NEXT: [[ARRAYIDX17:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP88]]4265// CHECK2-51-NEXT: [[ARRAYIDX18:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX17]], i64 [[TMP87]]4266// CHECK2-51-NEXT: [[TMP89:%.*]] = getelementptr i32, ptr [[ARRAYIDX18]], i32 14267// CHECK2-51-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i644268// CHECK2-51-NEXT: [[TMP91:%.*]] = ptrtoint ptr [[TMP89]] to i644269// CHECK2-51-NEXT: [[TMP92:%.*]] = sub nuw i64 [[TMP91]], [[TMP90]]4270// CHECK2-51-NEXT: [[TMP93:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i644271// CHECK2-51-NEXT: [[TMP94:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 14272// CHECK2-51-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 04273// CHECK2-51-NEXT: store i64 [[TMP93]], ptr [[TMP95]], align 84274// CHECK2-51-NEXT: [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 14275// CHECK2-51-NEXT: store i64 [[TMP92]], ptr [[TMP96]], align 84276// CHECK2-51-NEXT: [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 24277// CHECK2-51-NEXT: store i8 4, ptr [[TMP97]], align 84278// CHECK2-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR19]], align 84279// CHECK2-51-NEXT: [[TMP98:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP76]], i32 0, i32 24280// CHECK2-51-NEXT: store i32 0, ptr [[TMP98]], align 84281// CHECK2-51-NEXT: [[TMP99:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP75]], i32 2, ptr [[TMP77]], i32 0, ptr null)4282// CHECK2-51-NEXT: [[TMP100:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..10)4283// CHECK2-51-NEXT: [[TMP101:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP100]], i32 0, i32 04284// CHECK2-51-NEXT: [[TMP102:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR21]], i64 0, i64 04285// CHECK2-51-NEXT: [[TMP103:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 04286// CHECK2-51-NEXT: [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 04287// CHECK2-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP104]], align 84288// CHECK2-51-NEXT: [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 14289// CHECK2-51-NEXT: store i64 4, ptr [[TMP105]], align 84290// CHECK2-51-NEXT: [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP103]], i32 0, i32 24291// CHECK2-51-NEXT: store i8 3, ptr [[TMP106]], align 84292// CHECK2-51-NEXT: [[ARRAYIDX22:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 14293// CHECK2-51-NEXT: [[TMP107:%.*]] = ptrtoint ptr [[ARRAYIDX22]] to i644294// CHECK2-51-NEXT: [[TMP108:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 14295// CHECK2-51-NEXT: [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 04296// CHECK2-51-NEXT: store i64 [[TMP107]], ptr [[TMP109]], align 84297// CHECK2-51-NEXT: [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 14298// CHECK2-51-NEXT: store i64 4, ptr [[TMP110]], align 84299// CHECK2-51-NEXT: [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP108]], i32 0, i32 24300// CHECK2-51-NEXT: store i8 3, ptr [[TMP111]], align 84301// CHECK2-51-NEXT: [[TMP112:%.*]] = mul nsw i64 0, [[TMP2]]4302// CHECK2-51-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP112]]4303// CHECK2-51-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX23]], i64 34304// CHECK2-51-NEXT: [[TMP113:%.*]] = load i32, ptr @a, align 44305// CHECK2-51-NEXT: [[TMP114:%.*]] = sext i32 [[TMP113]] to i644306// CHECK2-51-NEXT: [[LEN_SUB_1:%.*]] = sub nsw i64 [[TMP114]], 14307// CHECK2-51-NEXT: [[TMP115:%.*]] = load i32, ptr @a, align 44308// CHECK2-51-NEXT: [[TMP116:%.*]] = sext i32 [[TMP115]] to i644309// CHECK2-51-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP116]]4310// CHECK2-51-NEXT: [[TMP117:%.*]] = mul nsw i64 [[LB_ADD_LEN]], [[TMP2]]4311// CHECK2-51-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP117]]4312// CHECK2-51-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[LEN_SUB_1]]4313// CHECK2-51-NEXT: [[TMP118:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 14314// CHECK2-51-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i644315// CHECK2-51-NEXT: [[TMP120:%.*]] = ptrtoint ptr [[TMP118]] to i644316// CHECK2-51-NEXT: [[TMP121:%.*]] = sub nuw i64 [[TMP120]], [[TMP119]]4317// CHECK2-51-NEXT: [[TMP122:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i644318// CHECK2-51-NEXT: [[TMP123:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 24319// CHECK2-51-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 04320// CHECK2-51-NEXT: store i64 [[TMP122]], ptr [[TMP124]], align 84321// CHECK2-51-NEXT: [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 14322// CHECK2-51-NEXT: store i64 [[TMP121]], ptr [[TMP125]], align 84323// CHECK2-51-NEXT: [[TMP126:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 24324// CHECK2-51-NEXT: store i8 3, ptr [[TMP126]], align 84325// CHECK2-51-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR27]], align 84326// CHECK2-51-NEXT: [[TMP127:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP100]], i32 3, ptr [[TMP102]], i32 0, ptr null)4327// CHECK2-51-NEXT: [[TMP128:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..12)4328// CHECK2-51-NEXT: [[TMP129:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP128]], i32 0, i32 04329// CHECK2-51-NEXT: [[TMP130:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR29]], i64 0, i64 04330// CHECK2-51-NEXT: [[TMP131:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP130]], i64 04331// CHECK2-51-NEXT: [[TMP132:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP131]], i32 0, i32 04332// CHECK2-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP132]], align 84333// CHECK2-51-NEXT: [[TMP133:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP131]], i32 0, i32 14334// CHECK2-51-NEXT: store i64 4, ptr [[TMP133]], align 84335// CHECK2-51-NEXT: [[TMP134:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP131]], i32 0, i32 24336// CHECK2-51-NEXT: store i8 8, ptr [[TMP134]], align 84337// CHECK2-51-NEXT: [[ARRAYIDX30:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 14338// CHECK2-51-NEXT: [[TMP135:%.*]] = ptrtoint ptr [[ARRAYIDX30]] to i644339// CHECK2-51-NEXT: [[TMP136:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP130]], i64 14340// CHECK2-51-NEXT: [[TMP137:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP136]], i32 0, i32 04341// CHECK2-51-NEXT: store i64 [[TMP135]], ptr [[TMP137]], align 84342// CHECK2-51-NEXT: [[TMP138:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP136]], i32 0, i32 14343// CHECK2-51-NEXT: store i64 4, ptr [[TMP138]], align 84344// CHECK2-51-NEXT: [[TMP139:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP136]], i32 0, i32 24345// CHECK2-51-NEXT: store i8 8, ptr [[TMP139]], align 84346// CHECK2-51-NEXT: [[TMP140:%.*]] = mul nsw i64 0, [[TMP2]]4347// CHECK2-51-NEXT: [[ARRAYIDX31:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP140]]4348// CHECK2-51-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX31]], i64 34349// CHECK2-51-NEXT: [[TMP141:%.*]] = load i32, ptr @a, align 44350// CHECK2-51-NEXT: [[TMP142:%.*]] = sext i32 [[TMP141]] to i644351// CHECK2-51-NEXT: [[LEN_SUB_133:%.*]] = sub nsw i64 [[TMP142]], 14352// CHECK2-51-NEXT: [[TMP143:%.*]] = load i32, ptr @a, align 44353// CHECK2-51-NEXT: [[TMP144:%.*]] = sext i32 [[TMP143]] to i644354// CHECK2-51-NEXT: [[LB_ADD_LEN34:%.*]] = add nsw i64 -1, [[TMP144]]4355// CHECK2-51-NEXT: [[TMP145:%.*]] = mul nsw i64 [[LB_ADD_LEN34]], [[TMP2]]4356// CHECK2-51-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP145]]4357// CHECK2-51-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX35]], i64 [[LEN_SUB_133]]4358// CHECK2-51-NEXT: [[TMP146:%.*]] = getelementptr i32, ptr [[ARRAYIDX36]], i32 14359// CHECK2-51-NEXT: [[TMP147:%.*]] = ptrtoint ptr [[ARRAYIDX32]] to i644360// CHECK2-51-NEXT: [[TMP148:%.*]] = ptrtoint ptr [[TMP146]] to i644361// CHECK2-51-NEXT: [[TMP149:%.*]] = sub nuw i64 [[TMP148]], [[TMP147]]4362// CHECK2-51-NEXT: [[TMP150:%.*]] = ptrtoint ptr [[ARRAYIDX32]] to i644363// CHECK2-51-NEXT: [[TMP151:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP130]], i64 24364// CHECK2-51-NEXT: [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP151]], i32 0, i32 04365// CHECK2-51-NEXT: store i64 [[TMP150]], ptr [[TMP152]], align 84366// CHECK2-51-NEXT: [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP151]], i32 0, i32 14367// CHECK2-51-NEXT: store i64 [[TMP149]], ptr [[TMP153]], align 84368// CHECK2-51-NEXT: [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP151]], i32 0, i32 24369// CHECK2-51-NEXT: store i8 8, ptr [[TMP154]], align 84370// CHECK2-51-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR37]], align 84371// CHECK2-51-NEXT: [[TMP155:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP128]], i32 3, ptr [[TMP130]], i32 0, ptr null)4372// CHECK2-51-NEXT: [[TMP156:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..14)4373// CHECK2-51-NEXT: [[TMP157:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP156]], i32 0, i32 04374// CHECK2-51-NEXT: [[TMP158:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP156]])4375// CHECK2-51-NEXT: store i8 0, ptr [[FLAG]], align 14376// CHECK2-51-NEXT: [[TMP159:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..16)4377// CHECK2-51-NEXT: [[TMP160:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP159]], i32 0, i32 04378// CHECK2-51-NEXT: [[TMP161:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP159]])4379// CHECK2-51-NEXT: [[TMP162:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_16]], ptr [[AGG_CAPTURED40]], i32 0, i32 04380// CHECK2-51-NEXT: store ptr [[C]], ptr [[TMP162]], align 84381// CHECK2-51-NEXT: [[TMP163:%.*]] = load i8, ptr [[B]], align 14382// CHECK2-51-NEXT: [[TOBOOL:%.*]] = icmp ne i8 [[TMP163]], 04383// CHECK2-51-NEXT: [[TMP164:%.*]] = select i1 [[TOBOOL]], i32 2, i32 04384// CHECK2-51-NEXT: [[TMP165:%.*]] = or i32 [[TMP164]], 14385// CHECK2-51-NEXT: [[TMP166:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 [[TMP165]], i64 40, i64 8, ptr @.omp_task_entry..18)4386// CHECK2-51-NEXT: [[TMP167:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_17:%.*]], ptr [[TMP166]], i32 0, i32 04387// CHECK2-51-NEXT: [[TMP168:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP167]], i32 0, i32 04388// CHECK2-51-NEXT: [[TMP169:%.*]] = load ptr, ptr [[TMP168]], align 84389// CHECK2-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP169]], ptr align 8 [[AGG_CAPTURED40]], i64 8, i1 false)4390// CHECK2-51-NEXT: [[TMP170:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP166]])4391// CHECK2-51-NEXT: [[TMP171:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 0, i64 256, i64 1, ptr @.omp_task_entry..23)4392// CHECK2-51-NEXT: [[TMP172:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21:%.*]], ptr [[TMP171]], i32 0, i32 04393// CHECK2-51-NEXT: [[TMP173:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21]], ptr [[TMP171]], i32 0, i32 24394// CHECK2-51-NEXT: [[TMP174:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22:%.*]], ptr [[TMP173]], i32 0, i32 04395// CHECK2-51-NEXT: [[TMP175:%.*]] = load i32, ptr [[C]], align 1284396// CHECK2-51-NEXT: store i32 [[TMP175]], ptr [[TMP174]], align 1284397// CHECK2-51-NEXT: [[TMP176:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP172]], i32 0, i32 24398// CHECK2-51-NEXT: store i32 0, ptr [[TMP176]], align 164399// CHECK2-51-NEXT: [[TMP177:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP171]])4400// CHECK2-51-NEXT: [[TMP178:%.*]] = load i32, ptr @a, align 44401// CHECK2-51-NEXT: store i32 [[TMP178]], ptr [[RETVAL]], align 44402// CHECK2-51-NEXT: [[TMP179:%.*]] = load ptr, ptr [[SAVED_STACK]], align 84403// CHECK2-51-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP179]])4404// CHECK2-51-NEXT: [[ARRAY_BEGIN42:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 04405// CHECK2-51-NEXT: [[TMP180:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN42]], i64 24406// CHECK2-51-NEXT: br label [[ARRAYDESTROY_BODY:%.*]]4407// CHECK2-51: arraydestroy.body:4408// CHECK2-51-NEXT: [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP180]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]4409// CHECK2-51-NEXT: [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -14410// CHECK2-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR4:[0-9]+]]4411// CHECK2-51-NEXT: [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN42]]4412// CHECK2-51-NEXT: br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE43:%.*]], label [[ARRAYDESTROY_BODY]]4413// CHECK2-51: arraydestroy.done43:4414// CHECK2-51-NEXT: [[TMP181:%.*]] = load i32, ptr [[RETVAL]], align 44415// CHECK2-51-NEXT: ret i32 [[TMP181]]4416//4417//4418// CHECK2-51-LABEL: define {{[^@]+}}@_ZN1SC1Ev4419// CHECK2-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] align 2 {4420// CHECK2-51-NEXT: entry:4421// CHECK2-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 84422// CHECK2-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 84423// CHECK2-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 84424// CHECK2-51-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])4425// CHECK2-51-NEXT: ret void4426//4427//4428// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry.4429// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {4430// CHECK2-51-NEXT: entry:4431// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44432// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84433// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84434// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84435// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84436// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84437// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44438// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84439// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44440// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84441// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44442// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84443// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 04444// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24445// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04446// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84447// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])4448// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])4449// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])4450// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])4451// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META12:![0-9]+]]4452// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META12]]4453// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META12]]4454// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META12]]4455// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META12]]4456// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]4457// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]4458// CHECK2-51-NEXT: store i32 15, ptr @a, align 4, !noalias [[META12]]4459// CHECK2-51-NEXT: [[TMP9:%.*]] = load i32, ptr @a, align 4, !noalias [[META12]]4460// CHECK2-51-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP9]] to i84461// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP8]], align 84462// CHECK2-51-NEXT: store i8 [[CONV_I]], ptr [[TMP10]], align 14463// CHECK2-51-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON:%.*]], ptr [[TMP8]], i32 0, i32 14464// CHECK2-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 84465// CHECK2-51-NEXT: store i32 10, ptr [[TMP12]], align 44466// CHECK2-51-NEXT: ret i32 04467//4468//4469// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..24470// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4471// CHECK2-51-NEXT: entry:4472// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44473// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84474// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84475// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84476// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84477// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84478// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44479// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84480// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44481// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84482// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44483// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84484// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 04485// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24486// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04487// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84488// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])4489// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META16:![0-9]+]])4490// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])4491// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])4492// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META22:![0-9]+]]4493// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META22]]4494// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META22]]4495// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META22]]4496// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META22]]4497// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]4498// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]4499// CHECK2-51-NEXT: store i32 15, ptr @a, align 4, !noalias [[META22]]4500// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 84501// CHECK2-51-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP9]], i64 0, i64 14502// CHECK2-51-NEXT: store i32 10, ptr [[ARRAYIDX_I]], align 44503// CHECK2-51-NEXT: ret i32 04504//4505//4506// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..44507// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4508// CHECK2-51-NEXT: entry:4509// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44510// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84511// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84512// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84513// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84514// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84515// CHECK2-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 44516// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44517// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84518// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44519// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84520// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44521// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84522// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP3]], i32 0, i32 04523// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24524// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04525// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84526// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META23:![0-9]+]])4527// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META26:![0-9]+]])4528// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])4529// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])4530// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32:![0-9]+]]4531// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]4532// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META32]]4533// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META32]]4534// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]4535// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]4536// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]4537// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]4538// CHECK2-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 44539// CHECK2-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [4540// CHECK2-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]4541// CHECK2-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]4542// CHECK2-51-NEXT: ]4543// CHECK2-51: .untied.done..i:4544// CHECK2-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]4545// CHECK2-51-NEXT: br label [[CLEANUP_I:%.*]]4546// CHECK2-51: .untied.jmp..i:4547// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]4548// CHECK2-51-NEXT: store i32 1, ptr [[TMP11]], align 44549// CHECK2-51-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32]]4550// CHECK2-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]4551// CHECK2-51-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])4552// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT:%.*]]4553// CHECK2-51: .untied.jmp.1.i:4554// CHECK2-51-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32]]4555// CHECK2-51-NEXT: call void @__kmpc_critical(ptr @[[GLOB1]], i32 [[TMP15]], ptr @.gomp_critical_user_.var)4556// CHECK2-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META32]]4557// CHECK2-51-NEXT: call void @__kmpc_end_critical(ptr @[[GLOB1]], i32 [[TMP15]], ptr @.gomp_critical_user_.var)4558// CHECK2-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]4559// CHECK2-51-NEXT: br label [[CLEANUP_I]]4560// CHECK2-51: cleanup.i:4561// CHECK2-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]4562// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT]]4563// CHECK2-51: .omp_outlined..3.exit:4564// CHECK2-51-NEXT: ret i32 04565//4566//4567// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..64568// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4569// CHECK2-51-NEXT: entry:4570// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44571// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84572// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84573// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84574// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84575// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84576// CHECK2-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 44577// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44578// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84579// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44580// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84581// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44582// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84583// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 04584// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24585// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04586// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84587// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META33:![0-9]+]])4588// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META36:![0-9]+]])4589// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META38:![0-9]+]])4590// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])4591// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42:![0-9]+]]4592// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]4593// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META42]]4594// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META42]]4595// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]4596// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]4597// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]4598// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]4599// CHECK2-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 44600// CHECK2-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [4601// CHECK2-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]4602// CHECK2-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]4603// CHECK2-51-NEXT: ]4604// CHECK2-51: .untied.done..i:4605// CHECK2-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]4606// CHECK2-51-NEXT: br label [[CLEANUP_I:%.*]]4607// CHECK2-51: .untied.jmp..i:4608// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]4609// CHECK2-51-NEXT: store i32 1, ptr [[TMP11]], align 44610// CHECK2-51-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42]]4611// CHECK2-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]4612// CHECK2-51-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])4613// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT:%.*]]4614// CHECK2-51: .untied.jmp.1.i:4615// CHECK2-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META42]]4616// CHECK2-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]4617// CHECK2-51-NEXT: br label [[CLEANUP_I]]4618// CHECK2-51: cleanup.i:4619// CHECK2-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]4620// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT]]4621// CHECK2-51: .omp_outlined..5.exit:4622// CHECK2-51-NEXT: ret i32 04623//4624//4625// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..84626// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4627// CHECK2-51-NEXT: entry:4628// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44629// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84630// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84631// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84632// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84633// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84634// CHECK2-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 44635// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44636// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84637// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44638// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84639// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44640// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84641// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP3]], i32 0, i32 04642// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24643// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04644// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84645// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])4646// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META46:![0-9]+]])4647// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META48:![0-9]+]])4648// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META50:![0-9]+]])4649// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52:![0-9]+]]4650// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]4651// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META52]]4652// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META52]]4653// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]4654// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]4655// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]4656// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]4657// CHECK2-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 44658// CHECK2-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [4659// CHECK2-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]4660// CHECK2-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]4661// CHECK2-51-NEXT: ]4662// CHECK2-51: .untied.done..i:4663// CHECK2-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]4664// CHECK2-51-NEXT: br label [[CLEANUP_I:%.*]]4665// CHECK2-51: .untied.jmp..i:4666// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]4667// CHECK2-51-NEXT: store i32 1, ptr [[TMP11]], align 44668// CHECK2-51-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52]]4669// CHECK2-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]4670// CHECK2-51-NEXT: [[TMP14:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP12]], ptr [[TMP13]])4671// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT:%.*]]4672// CHECK2-51: .untied.jmp.1.i:4673// CHECK2-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META52]]4674// CHECK2-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]4675// CHECK2-51-NEXT: br label [[CLEANUP_I]]4676// CHECK2-51: cleanup.i:4677// CHECK2-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]4678// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT]]4679// CHECK2-51: .omp_outlined..7.exit:4680// CHECK2-51-NEXT: ret i32 04681//4682//4683// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..104684// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4685// CHECK2-51-NEXT: entry:4686// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44687// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84688// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84689// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84690// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84691// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84692// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44693// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84694// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44695// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84696// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44697// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84698// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP3]], i32 0, i32 04699// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24700// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04701// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84702// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META53:![0-9]+]])4703// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META56:![0-9]+]])4704// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META58:![0-9]+]])4705// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META60:![0-9]+]])4706// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META62:![0-9]+]]4707// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META62]]4708// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META62]]4709// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META62]]4710// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META62]]4711// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]4712// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]4713// CHECK2-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META62]]4714// CHECK2-51-NEXT: ret i32 04715//4716//4717// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..124718// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4719// CHECK2-51-NEXT: entry:4720// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44721// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84722// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84723// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84724// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84725// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84726// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44727// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84728// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44729// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84730// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44731// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84732// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP3]], i32 0, i32 04733// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24734// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04735// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84736// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META63:![0-9]+]])4737// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META66:![0-9]+]])4738// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META68:![0-9]+]])4739// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META70:![0-9]+]])4740// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META72:![0-9]+]]4741// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META72]]4742// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META72]]4743// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META72]]4744// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META72]]4745// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]4746// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]4747// CHECK2-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META72]]4748// CHECK2-51-NEXT: ret i32 04749//4750//4751// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..144752// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4753// CHECK2-51-NEXT: entry:4754// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44755// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84756// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84757// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84758// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84759// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84760// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44761// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84762// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44763// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84764// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44765// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84766// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP3]], i32 0, i32 04767// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24768// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04769// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84770// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META73:![0-9]+]])4771// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META76:![0-9]+]])4772// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META78:![0-9]+]])4773// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META80:![0-9]+]])4774// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META82:![0-9]+]]4775// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META82]]4776// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META82]]4777// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META82]]4778// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META82]]4779// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]4780// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]4781// CHECK2-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META82]]4782// CHECK2-51-NEXT: ret i32 04783//4784//4785// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..164786// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4787// CHECK2-51-NEXT: entry:4788// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44789// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84790// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84791// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84792// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84793// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84794// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44795// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84796// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44797// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84798// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44799// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84800// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP3]], i32 0, i32 04801// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24802// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04803// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84804// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META83:![0-9]+]])4805// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META86:![0-9]+]])4806// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META88:![0-9]+]])4807// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META90:![0-9]+]])4808// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META92:![0-9]+]]4809// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META92]]4810// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META92]]4811// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META92]]4812// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META92]]4813// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]4814// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]4815// CHECK2-51-NEXT: store i32 3, ptr @a, align 4, !noalias [[META92]]4816// CHECK2-51-NEXT: ret i32 04817//4818//4819// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..184820// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4821// CHECK2-51-NEXT: entry:4822// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44823// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84824// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84825// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84826// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84827// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84828// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44829// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84830// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44831// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84832// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44833// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84834// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_17:%.*]], ptr [[TMP3]], i32 0, i32 04835// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24836// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04837// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 84838// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META93:![0-9]+]])4839// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META96:![0-9]+]])4840// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META98:![0-9]+]])4841// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META100:![0-9]+]])4842// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META102:![0-9]+]]4843// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META102]]4844// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]4845// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]4846// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META102]]4847// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]4848// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]4849// CHECK2-51-NEXT: store i32 4, ptr @a, align 4, !noalias [[META102]]4850// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 84851// CHECK2-51-NEXT: store i32 5, ptr [[TMP9]], align 1284852// CHECK2-51-NEXT: ret i32 04853//4854//4855// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_privates_map.4856// CHECK2-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7:[0-9]+]] {4857// CHECK2-51-NEXT: entry:4858// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 84859// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84860// CHECK2-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 84861// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84862// CHECK2-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 84863// CHECK2-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP2]], i32 0, i32 04864// CHECK2-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 84865// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 84866// CHECK2-51-NEXT: ret void4867//4868//4869// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..214870// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4871// CHECK2-51-NEXT: entry:4872// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44873// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84874// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84875// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84876// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84877// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84878// CHECK2-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 84879// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44880// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84881// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44882// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84883// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44884// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84885// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_20:%.*]], ptr [[TMP3]], i32 0, i32 04886// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24887// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04888// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1284889// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_20]], ptr [[TMP3]], i32 0, i32 24890// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META103:![0-9]+]])4891// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META106:![0-9]+]])4892// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META108:![0-9]+]])4893// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META110:![0-9]+]])4894// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112:![0-9]+]]4895// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]4896// CHECK2-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]4897// CHECK2-51-NEXT: store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]4898// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]4899// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]4900// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]4901// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]4902// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]4903// CHECK2-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]4904// CHECK2-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META112]]4905// CHECK2-51-NEXT: store i32 4, ptr [[TMP12]], align 1284906// CHECK2-51-NEXT: store i32 4, ptr @a, align 4, !noalias [[META112]]4907// CHECK2-51-NEXT: ret i32 04908//4909//4910// CHECK2-51-LABEL: define {{[^@]+}}@_ZN1SD1Ev4911// CHECK2-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {4912// CHECK2-51-NEXT: entry:4913// CHECK2-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 84914// CHECK2-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 84915// CHECK2-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 84916// CHECK2-51-NEXT: call void @_ZN1SD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR4]]4917// CHECK2-51-NEXT: ret void4918//4919//4920// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..224921// CHECK2-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]]) #[[ATTR7]] {4922// CHECK2-51-NEXT: entry:4923// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 84924// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84925// CHECK2-51-NEXT: [[DOTADDR2:%.*]] = alloca ptr, align 84926// CHECK2-51-NEXT: [[DOTADDR3:%.*]] = alloca ptr, align 84927// CHECK2-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 84928// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84929// CHECK2-51-NEXT: store ptr [[TMP2]], ptr [[DOTADDR2]], align 84930// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTADDR3]], align 84931// CHECK2-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR]], align 84932// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22:%.*]], ptr [[TMP4]], i32 0, i32 04933// CHECK2-51-NEXT: [[TMP6:%.*]] = load ptr, ptr [[DOTADDR1]], align 84934// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[TMP6]], align 84935// CHECK2-51-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22]], ptr [[TMP4]], i32 0, i32 24936// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[DOTADDR3]], align 84937// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[TMP8]], align 84938// CHECK2-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22]], ptr [[TMP4]], i32 0, i32 34939// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTADDR2]], align 84940// CHECK2-51-NEXT: store ptr [[TMP9]], ptr [[TMP10]], align 84941// CHECK2-51-NEXT: ret void4942//4943//4944// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..234945// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {4946// CHECK2-51-NEXT: entry:4947// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 44948// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 84949// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 84950// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 84951// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 84952// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 84953// CHECK2-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 84954// CHECK2-51-NEXT: [[DOTLOCAL_PTR_ADDR_I:%.*]] = alloca ptr, align 84955// CHECK2-51-NEXT: [[DOTLOCAL_PTR_ADDR1_I:%.*]] = alloca ptr, align 84956// CHECK2-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 44957// CHECK2-51-NEXT: [[REF_TMP_I:%.*]] = alloca [[STRUCT_S:%.*]], align 44958// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 44959// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 84960// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 44961// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 84962// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 44963// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 84964// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21:%.*]], ptr [[TMP3]], i32 0, i32 04965// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 24966// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 04967// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1284968// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21]], ptr [[TMP3]], i32 0, i32 24969// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META113:![0-9]+]])4970// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META116:![0-9]+]])4971// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META118:![0-9]+]])4972// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META120:![0-9]+]])4973// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122:![0-9]+]]4974// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]4975// CHECK2-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]4976// CHECK2-51-NEXT: store ptr @.omp_task_privates_map..22, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]4977// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]4978// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]4979// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]4980// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]4981// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]4982// CHECK2-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR1_I]]) #[[ATTR4]]4983// CHECK2-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META122]]4984// CHECK2-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR_I]], align 8, !noalias [[META122]]4985// CHECK2-51-NEXT: [[TMP14:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR1_I]], align 8, !noalias [[META122]]4986// CHECK2-51-NEXT: [[TMP15:%.*]] = load ptr, ptr [[TMP14]], align 84987// CHECK2-51-NEXT: [[TMP16:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]4988// CHECK2-51-NEXT: [[TMP17:%.*]] = load i32, ptr [[TMP16]], align 44989// CHECK2-51-NEXT: switch i32 [[TMP17]], label [[DOTUNTIED_DONE__I:%.*]] [4990// CHECK2-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]4991// CHECK2-51-NEXT: i32 1, label [[DOTUNTIED_JMP_2_I:%.*]]4992// CHECK2-51-NEXT: i32 2, label [[DOTUNTIED_JMP_3_I:%.*]]4993// CHECK2-51-NEXT: i32 3, label [[DOTUNTIED_JMP_5_I:%.*]]4994// CHECK2-51-NEXT: i32 4, label [[DOTUNTIED_JMP_7_I:%.*]]4995// CHECK2-51-NEXT: i32 5, label [[DOTUNTIED_JMP_10_I:%.*]]4996// CHECK2-51-NEXT: ]4997// CHECK2-51: .untied.done..i:4998// CHECK2-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META122]]4999// CHECK2-51-NEXT: br label [[CLEANUP_I:%.*]]5000// CHECK2-51: .untied.jmp..i:5001// CHECK2-51-NEXT: [[TMP18:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]5002// CHECK2-51-NEXT: store i32 1, ptr [[TMP18]], align 45003// CHECK2-51-NEXT: [[TMP19:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5004// CHECK2-51-NEXT: [[TMP20:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]5005// CHECK2-51-NEXT: [[TMP21:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP19]], ptr [[TMP20]])5006// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT:%.*]]5007// CHECK2-51: .untied.jmp.2.i:5008// CHECK2-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP13]])5009// CHECK2-51-NEXT: [[TMP22:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5010// CHECK2-51-NEXT: [[DOTS2__VOID_ADDR_I:%.*]] = call ptr @__kmpc_alloc(i32 [[TMP22]], i64 4, ptr inttoptr (i64 7 to ptr))5011// CHECK2-51-NEXT: store ptr [[DOTS2__VOID_ADDR_I]], ptr [[TMP14]], align 85012// CHECK2-51-NEXT: [[TMP23:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]5013// CHECK2-51-NEXT: store i32 2, ptr [[TMP23]], align 45014// CHECK2-51-NEXT: [[TMP24:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5015// CHECK2-51-NEXT: [[TMP25:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]5016// CHECK2-51-NEXT: [[TMP26:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP24]], ptr [[TMP25]])5017// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]5018// CHECK2-51: .untied.jmp.3.i:5019// CHECK2-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP15]])5020// CHECK2-51-NEXT: store i32 0, ptr [[TMP15]], align 45021// CHECK2-51-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5022// CHECK2-51-NEXT: [[TMP28:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP27]], i32 1, i64 256, i64 1, ptr @.omp_task_entry..21)5023// CHECK2-51-NEXT: [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_20:%.*]], ptr [[TMP28]], i32 0, i32 25024// CHECK2-51-NEXT: [[TMP30:%.*]] = load i32, ptr [[TMP12]], align 1285025// CHECK2-51-NEXT: store i32 [[TMP30]], ptr [[TMP29]], align 1285026// CHECK2-51-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5027// CHECK2-51-NEXT: [[TMP32:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP31]], ptr [[TMP28]])5028// CHECK2-51-NEXT: [[TMP33:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]5029// CHECK2-51-NEXT: store i32 3, ptr [[TMP33]], align 45030// CHECK2-51-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5031// CHECK2-51-NEXT: [[TMP35:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]5032// CHECK2-51-NEXT: [[TMP36:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP34]], ptr [[TMP35]])5033// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]5034// CHECK2-51: .untied.jmp.5.i:5035// CHECK2-51-NEXT: [[TMP37:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5036// CHECK2-51-NEXT: [[TMP38:%.*]] = call i32 @__kmpc_omp_taskyield(ptr @[[GLOB1]], i32 [[TMP37]], i32 0)5037// CHECK2-51-NEXT: [[TMP39:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]5038// CHECK2-51-NEXT: store i32 4, ptr [[TMP39]], align 45039// CHECK2-51-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5040// CHECK2-51-NEXT: [[TMP41:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]5041// CHECK2-51-NEXT: [[TMP42:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP40]], ptr [[TMP41]])5042// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]5043// CHECK2-51: .untied.jmp.7.i:5044// CHECK2-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]])5045// CHECK2-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TMP13]], ptr align 4 [[REF_TMP_I]], i64 4, i1 false)5046// CHECK2-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]]) #[[ATTR4]]5047// CHECK2-51-NEXT: store i32 10, ptr [[TMP15]], align 45048// CHECK2-51-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5049// CHECK2-51-NEXT: [[TMP44:%.*]] = call i32 @__kmpc_omp_taskwait(ptr @[[GLOB1]], i32 [[TMP43]])5050// CHECK2-51-NEXT: [[TMP45:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]5051// CHECK2-51-NEXT: store i32 5, ptr [[TMP45]], align 45052// CHECK2-51-NEXT: [[TMP46:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5053// CHECK2-51-NEXT: [[TMP47:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]5054// CHECK2-51-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP46]], ptr [[TMP47]])5055// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]5056// CHECK2-51: .untied.jmp.10.i:5057// CHECK2-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP15]]) #[[ATTR4]]5058// CHECK2-51-NEXT: [[TMP49:%.*]] = load i32, ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122]]5059// CHECK2-51-NEXT: call void @__kmpc_free(i32 [[TMP49]], ptr [[TMP15]], ptr inttoptr (i64 7 to ptr))5060// CHECK2-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP13]]) #[[ATTR4]]5061// CHECK2-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META122]]5062// CHECK2-51-NEXT: br label [[CLEANUP_I]]5063// CHECK2-51: cleanup.i:5064// CHECK2-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META122]]5065// CHECK2-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]5066// CHECK2-51: .omp_outlined..19.exit:5067// CHECK2-51-NEXT: ret i32 05068//5069//5070// CHECK2-51-LABEL: define {{[^@]+}}@_ZN1SC2Ev5071// CHECK2-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {5072// CHECK2-51-NEXT: entry:5073// CHECK2-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 85074// CHECK2-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 85075// CHECK2-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85076// CHECK2-51-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 05077// CHECK2-51-NEXT: store i32 0, ptr [[A]], align 45078// CHECK2-51-NEXT: ret void5079//5080//5081// CHECK2-51-LABEL: define {{[^@]+}}@_ZN1SD2Ev5082// CHECK2-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {5083// CHECK2-51-NEXT: entry:5084// CHECK2-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 85085// CHECK2-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 85086// CHECK2-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85087// CHECK2-51-NEXT: ret void5088//5089//5090// CHECK2-51-LABEL: define {{[^@]+}}@__cxx_global_var_init5091// CHECK2-51-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {5092// CHECK2-51-NEXT: entry:5093// CHECK2-51-NEXT: call void @_ZN2S1C1Ev(ptr noundef nonnull align 4 dereferenceable(4) @s1)5094// CHECK2-51-NEXT: ret void5095//5096//5097// CHECK2-51-LABEL: define {{[^@]+}}@_ZN2S1C1Ev5098// CHECK2-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {5099// CHECK2-51-NEXT: entry:5100// CHECK2-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 85101// CHECK2-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 85102// CHECK2-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85103// CHECK2-51-NEXT: call void @_ZN2S1C2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])5104// CHECK2-51-NEXT: ret void5105//5106//5107// CHECK2-51-LABEL: define {{[^@]+}}@_ZN2S1C2Ev5108// CHECK2-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {5109// CHECK2-51-NEXT: entry:5110// CHECK2-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 85111// CHECK2-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 85112// CHECK2-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85113// CHECK2-51-NEXT: call void @_ZN2S18taskinitEv(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])5114// CHECK2-51-NEXT: ret void5115//5116//5117// CHECK2-51-LABEL: define {{[^@]+}}@_ZN2S18taskinitEv5118// CHECK2-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) #[[ATTR1]] align 2 {5119// CHECK2-51-NEXT: entry:5120// CHECK2-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 85121// CHECK2-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_23:%.*]], align 85122// CHECK2-51-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])5123// CHECK2-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 85124// CHECK2-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85125// CHECK2-51-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_23]], ptr [[AGG_CAPTURED]], i32 0, i32 05126// CHECK2-51-NEXT: store ptr [[THIS1]], ptr [[TMP1]], align 85127// CHECK2-51-NEXT: [[TMP2:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..25)5128// CHECK2-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP2]], i32 0, i32 05129// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP3]], i32 0, i32 05130// CHECK2-51-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 85131// CHECK2-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP5]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)5132// CHECK2-51-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP2]])5133// CHECK2-51-NEXT: ret void5134//5135//5136// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..255137// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {5138// CHECK2-51-NEXT: entry:5139// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 45140// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 85141// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 85142// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 85143// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 85144// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 85145// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 45146// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85147// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 45148// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85149// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 45150// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 85151// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP3]], i32 0, i32 05152// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 25153// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 05154// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 85155// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META123:![0-9]+]])5156// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META126:![0-9]+]])5157// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META128:![0-9]+]])5158// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META130:![0-9]+]])5159// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META132:![0-9]+]]5160// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META132]]5161// CHECK2-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META132]]5162// CHECK2-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META132]]5163// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META132]]5164// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]5165// CHECK2-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]5166// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 85167// CHECK2-51-NEXT: store i32 0, ptr [[TMP9]], align 45168// CHECK2-51-NEXT: ret i32 05169//5170//5171// CHECK2-51-LABEL: define {{[^@]+}}@_Z4xxxxv5172// CHECK2-51-SAME: () #[[ATTR1]] {5173// CHECK2-51-NEXT: entry:5174// CHECK2-51-NEXT: call void @_Z6foobarIvEvv()5175// CHECK2-51-NEXT: ret void5176//5177//5178// CHECK2-51-LABEL: define {{[^@]+}}@_Z6foobarIvEvv5179// CHECK2-51-SAME: () #[[ATTR1]] {5180// CHECK2-51-NEXT: entry:5181// CHECK2-51-NEXT: [[A:%.*]] = alloca float, align 45182// CHECK2-51-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB1]], i32 1, ptr @_Z6foobarIvEvv.omp_outlined, ptr [[A]])5183// CHECK2-51-NEXT: ret void5184//5185//5186// CHECK2-51-LABEL: define {{[^@]+}}@_Z6foobarIvEvv.omp_outlined5187// CHECK2-51-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR8:[0-9]+]] {5188// CHECK2-51-NEXT: entry:5189// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85190// CHECK2-51-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85191// CHECK2-51-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 85192// CHECK2-51-NEXT: [[B:%.*]] = alloca double, align 85193// CHECK2-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_25:%.*]], align 85194// CHECK2-51-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85195// CHECK2-51-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85196// CHECK2-51-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 85197// CHECK2-51-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 85198// CHECK2-51-NEXT: [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85199// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 45200// CHECK2-51-NEXT: [[TMP3:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB1]], i32 [[TMP2]])5201// CHECK2-51-NEXT: [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 05202// CHECK2-51-NEXT: br i1 [[TMP4]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]5203// CHECK2-51: omp_if.then:5204// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_25]], ptr [[AGG_CAPTURED]], i32 0, i32 05205// CHECK2-51-NEXT: store ptr [[TMP0]], ptr [[TMP5]], align 85206// CHECK2-51-NEXT: [[TMP6:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP2]], i32 1, i64 48, i64 8, ptr @.omp_task_entry..28)5207// CHECK2-51-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26:%.*]], ptr [[TMP6]], i32 0, i32 05208// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP7]], i32 0, i32 05209// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 85210// CHECK2-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP9]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)5211// CHECK2-51-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26]], ptr [[TMP6]], i32 0, i32 15212// CHECK2-51-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_27:%.*]], ptr [[TMP10]], i32 0, i32 05213// CHECK2-51-NEXT: [[TMP12:%.*]] = load double, ptr [[B]], align 85214// CHECK2-51-NEXT: store double [[TMP12]], ptr [[TMP11]], align 85215// CHECK2-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[TMP2]], ptr [[TMP6]])5216// CHECK2-51-NEXT: call void @__kmpc_end_single(ptr @[[GLOB1]], i32 [[TMP2]])5217// CHECK2-51-NEXT: br label [[OMP_IF_END]]5218// CHECK2-51: omp_if.end:5219// CHECK2-51-NEXT: call void @__kmpc_barrier(ptr @[[GLOB2:[0-9]+]], i32 [[TMP2]])5220// CHECK2-51-NEXT: ret void5221//5222//5223// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..275224// CHECK2-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {5225// CHECK2-51-NEXT: entry:5226// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 85227// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85228// CHECK2-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 85229// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85230// CHECK2-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 85231// CHECK2-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_27:%.*]], ptr [[TMP2]], i32 0, i32 05232// CHECK2-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 85233// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 85234// CHECK2-51-NEXT: ret void5235//5236//5237// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..285238// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {5239// CHECK2-51-NEXT: entry:5240// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 45241// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 85242// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 85243// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 85244// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 85245// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 85246// CHECK2-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 85247// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 45248// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85249// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 45250// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85251// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 45252// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 85253// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26:%.*]], ptr [[TMP3]], i32 0, i32 05254// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 25255// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 05256// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 85257// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26]], ptr [[TMP3]], i32 0, i32 15258// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META133:![0-9]+]])5259// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META136:![0-9]+]])5260// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META138:![0-9]+]])5261// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META140:![0-9]+]])5262// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META142:![0-9]+]]5263// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META142]]5264// CHECK2-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META142]]5265// CHECK2-51-NEXT: store ptr @.omp_task_privates_map..27, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META142]]5266// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META142]]5267// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META142]]5268// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META142]]5269// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META142]]5270// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META142]]5271// CHECK2-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]5272// CHECK2-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META142]]5273// CHECK2-51-NEXT: [[TMP13:%.*]] = load double, ptr [[TMP12]], align 85274// CHECK2-51-NEXT: [[TMP14:%.*]] = load ptr, ptr [[TMP9]], align 85275// CHECK2-51-NEXT: [[TMP15:%.*]] = load float, ptr [[TMP14]], align 45276// CHECK2-51-NEXT: [[CONV_I:%.*]] = fpext float [[TMP15]] to double5277// CHECK2-51-NEXT: [[ADD_I:%.*]] = fadd double [[CONV_I]], [[TMP13]]5278// CHECK2-51-NEXT: [[CONV1_I:%.*]] = fptrunc double [[ADD_I]] to float5279// CHECK2-51-NEXT: store float [[CONV1_I]], ptr [[TMP14]], align 45280// CHECK2-51-NEXT: ret i32 05281//5282//5283// CHECK2-51-LABEL: define {{[^@]+}}@_Z19test_omp_all_memoryv5284// CHECK2-51-SAME: () #[[ATTR1]] {5285// CHECK2-51-NEXT: entry:5286// CHECK2-51-NEXT: [[A:%.*]] = alloca i32, align 45287// CHECK2-51-NEXT: [[B:%.*]] = alloca i32, align 45288// CHECK2-51-NEXT: [[C:%.*]] = alloca i32, align 45289// CHECK2-51-NEXT: [[D:%.*]] = alloca i32, align 45290// CHECK2-51-NEXT: [[E:%.*]] = alloca i32, align 45291// CHECK2-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_28:%.*]], align 15292// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [2 x %struct.kmp_depend_info], align 85293// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 85294// CHECK2-51-NEXT: [[AGG_CAPTURED1:%.*]] = alloca [[STRUCT_ANON_31:%.*]], align 15295// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR2:%.*]] = alloca [2 x %struct.kmp_depend_info], align 85296// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR3:%.*]] = alloca i64, align 85297// CHECK2-51-NEXT: [[AGG_CAPTURED4:%.*]] = alloca [[STRUCT_ANON_34:%.*]], align 15298// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR5:%.*]] = alloca [2 x %struct.kmp_depend_info], align 85299// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR6:%.*]] = alloca i64, align 85300// CHECK2-51-NEXT: [[AGG_CAPTURED7:%.*]] = alloca [[STRUCT_ANON_37:%.*]], align 15301// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR8:%.*]] = alloca [2 x %struct.kmp_depend_info], align 85302// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR9:%.*]] = alloca i64, align 85303// CHECK2-51-NEXT: [[AGG_CAPTURED10:%.*]] = alloca [[STRUCT_ANON_40:%.*]], align 15304// CHECK2-51-NEXT: [[DOTDEP_ARR_ADDR11:%.*]] = alloca [1 x %struct.kmp_depend_info], align 85305// CHECK2-51-NEXT: [[DEP_COUNTER_ADDR12:%.*]] = alloca i64, align 85306// CHECK2-51-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])5307// CHECK2-51-NEXT: [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..31)5308// CHECK2-51-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29:%.*]], ptr [[TMP1]], i32 0, i32 05309// CHECK2-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29]], ptr [[TMP1]], i32 0, i32 15310// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_30:%.*]], ptr [[TMP3]], i32 0, i32 05311// CHECK2-51-NEXT: [[TMP5:%.*]] = load i32, ptr [[A]], align 45312// CHECK2-51-NEXT: store i32 [[TMP5]], ptr [[TMP4]], align 85313// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 05314// CHECK2-51-NEXT: [[TMP7:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP6]], i64 05315// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP7]], i32 0, i32 05316// CHECK2-51-NEXT: store i64 0, ptr [[TMP8]], align 85317// CHECK2-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP7]], i32 0, i32 15318// CHECK2-51-NEXT: store i64 0, ptr [[TMP9]], align 85319// CHECK2-51-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP7]], i32 0, i32 25320// CHECK2-51-NEXT: store i8 -128, ptr [[TMP10]], align 85321// CHECK2-51-NEXT: [[TMP11:%.*]] = ptrtoint ptr [[A]] to i645322// CHECK2-51-NEXT: [[TMP12:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP6]], i64 15323// CHECK2-51-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP12]], i32 0, i32 05324// CHECK2-51-NEXT: store i64 [[TMP11]], ptr [[TMP13]], align 85325// CHECK2-51-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP12]], i32 0, i32 15326// CHECK2-51-NEXT: store i64 4, ptr [[TMP14]], align 85327// CHECK2-51-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP12]], i32 0, i32 25328// CHECK2-51-NEXT: store i8 1, ptr [[TMP15]], align 85329// CHECK2-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR]], align 85330// CHECK2-51-NEXT: [[TMP16:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP1]], i32 2, ptr [[TMP6]], i32 0, ptr null)5331// CHECK2-51-NEXT: [[TMP17:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..34)5332// CHECK2-51-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32:%.*]], ptr [[TMP17]], i32 0, i32 05333// CHECK2-51-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32]], ptr [[TMP17]], i32 0, i32 15334// CHECK2-51-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_33:%.*]], ptr [[TMP19]], i32 0, i32 05335// CHECK2-51-NEXT: [[TMP21:%.*]] = load i32, ptr [[A]], align 45336// CHECK2-51-NEXT: store i32 [[TMP21]], ptr [[TMP20]], align 85337// CHECK2-51-NEXT: [[TMP22:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR2]], i64 0, i64 05338// CHECK2-51-NEXT: [[TMP23:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP22]], i64 05339// CHECK2-51-NEXT: [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP23]], i32 0, i32 05340// CHECK2-51-NEXT: store i64 0, ptr [[TMP24]], align 85341// CHECK2-51-NEXT: [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP23]], i32 0, i32 15342// CHECK2-51-NEXT: store i64 0, ptr [[TMP25]], align 85343// CHECK2-51-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP23]], i32 0, i32 25344// CHECK2-51-NEXT: store i8 -128, ptr [[TMP26]], align 85345// CHECK2-51-NEXT: [[TMP27:%.*]] = ptrtoint ptr [[A]] to i645346// CHECK2-51-NEXT: [[TMP28:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP22]], i64 15347// CHECK2-51-NEXT: [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP28]], i32 0, i32 05348// CHECK2-51-NEXT: store i64 [[TMP27]], ptr [[TMP29]], align 85349// CHECK2-51-NEXT: [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP28]], i32 0, i32 15350// CHECK2-51-NEXT: store i64 4, ptr [[TMP30]], align 85351// CHECK2-51-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP28]], i32 0, i32 25352// CHECK2-51-NEXT: store i8 1, ptr [[TMP31]], align 85353// CHECK2-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR3]], align 85354// CHECK2-51-NEXT: [[TMP32:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP17]], i32 2, ptr [[TMP22]], i32 0, ptr null)5355// CHECK2-51-NEXT: [[TMP33:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..37)5356// CHECK2-51-NEXT: [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35:%.*]], ptr [[TMP33]], i32 0, i32 05357// CHECK2-51-NEXT: [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35]], ptr [[TMP33]], i32 0, i32 15358// CHECK2-51-NEXT: [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_36:%.*]], ptr [[TMP35]], i32 0, i32 05359// CHECK2-51-NEXT: [[TMP37:%.*]] = load i32, ptr [[A]], align 45360// CHECK2-51-NEXT: store i32 [[TMP37]], ptr [[TMP36]], align 85361// CHECK2-51-NEXT: [[TMP38:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR5]], i64 0, i64 05362// CHECK2-51-NEXT: [[TMP39:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP38]], i64 05363// CHECK2-51-NEXT: [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP39]], i32 0, i32 05364// CHECK2-51-NEXT: store i64 0, ptr [[TMP40]], align 85365// CHECK2-51-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP39]], i32 0, i32 15366// CHECK2-51-NEXT: store i64 0, ptr [[TMP41]], align 85367// CHECK2-51-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP39]], i32 0, i32 25368// CHECK2-51-NEXT: store i8 -128, ptr [[TMP42]], align 85369// CHECK2-51-NEXT: [[TMP43:%.*]] = ptrtoint ptr [[A]] to i645370// CHECK2-51-NEXT: [[TMP44:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP38]], i64 15371// CHECK2-51-NEXT: [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP44]], i32 0, i32 05372// CHECK2-51-NEXT: store i64 [[TMP43]], ptr [[TMP45]], align 85373// CHECK2-51-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP44]], i32 0, i32 15374// CHECK2-51-NEXT: store i64 4, ptr [[TMP46]], align 85375// CHECK2-51-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP44]], i32 0, i32 25376// CHECK2-51-NEXT: store i8 1, ptr [[TMP47]], align 85377// CHECK2-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR6]], align 85378// CHECK2-51-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP33]], i32 2, ptr [[TMP38]], i32 0, ptr null)5379// CHECK2-51-NEXT: [[TMP49:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..40)5380// CHECK2-51-NEXT: [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38:%.*]], ptr [[TMP49]], i32 0, i32 05381// CHECK2-51-NEXT: [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38]], ptr [[TMP49]], i32 0, i32 15382// CHECK2-51-NEXT: [[TMP52:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_39:%.*]], ptr [[TMP51]], i32 0, i32 05383// CHECK2-51-NEXT: [[TMP53:%.*]] = load i32, ptr [[A]], align 45384// CHECK2-51-NEXT: store i32 [[TMP53]], ptr [[TMP52]], align 85385// CHECK2-51-NEXT: [[TMP54:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR8]], i64 0, i64 05386// CHECK2-51-NEXT: [[TMP55:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i64 05387// CHECK2-51-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP55]], i32 0, i32 05388// CHECK2-51-NEXT: store i64 0, ptr [[TMP56]], align 85389// CHECK2-51-NEXT: [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP55]], i32 0, i32 15390// CHECK2-51-NEXT: store i64 0, ptr [[TMP57]], align 85391// CHECK2-51-NEXT: [[TMP58:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP55]], i32 0, i32 25392// CHECK2-51-NEXT: store i8 -128, ptr [[TMP58]], align 85393// CHECK2-51-NEXT: [[TMP59:%.*]] = ptrtoint ptr [[A]] to i645394// CHECK2-51-NEXT: [[TMP60:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i64 15395// CHECK2-51-NEXT: [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP60]], i32 0, i32 05396// CHECK2-51-NEXT: store i64 [[TMP59]], ptr [[TMP61]], align 85397// CHECK2-51-NEXT: [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP60]], i32 0, i32 15398// CHECK2-51-NEXT: store i64 4, ptr [[TMP62]], align 85399// CHECK2-51-NEXT: [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP60]], i32 0, i32 25400// CHECK2-51-NEXT: store i8 1, ptr [[TMP63]], align 85401// CHECK2-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR9]], align 85402// CHECK2-51-NEXT: [[TMP64:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP49]], i32 2, ptr [[TMP54]], i32 0, ptr null)5403// CHECK2-51-NEXT: [[TMP65:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..43)5404// CHECK2-51-NEXT: [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_41:%.*]], ptr [[TMP65]], i32 0, i32 05405// CHECK2-51-NEXT: [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_41]], ptr [[TMP65]], i32 0, i32 15406// CHECK2-51-NEXT: [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_42:%.*]], ptr [[TMP67]], i32 0, i32 05407// CHECK2-51-NEXT: [[TMP69:%.*]] = load i32, ptr [[A]], align 45408// CHECK2-51-NEXT: store i32 [[TMP69]], ptr [[TMP68]], align 85409// CHECK2-51-NEXT: [[TMP70:%.*]] = getelementptr inbounds [1 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR11]], i64 0, i64 05410// CHECK2-51-NEXT: [[TMP71:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP70]], i64 05411// CHECK2-51-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP71]], i32 0, i32 05412// CHECK2-51-NEXT: store i64 0, ptr [[TMP72]], align 85413// CHECK2-51-NEXT: [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP71]], i32 0, i32 15414// CHECK2-51-NEXT: store i64 0, ptr [[TMP73]], align 85415// CHECK2-51-NEXT: [[TMP74:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP71]], i32 0, i32 25416// CHECK2-51-NEXT: store i8 -128, ptr [[TMP74]], align 85417// CHECK2-51-NEXT: store i64 1, ptr [[DEP_COUNTER_ADDR12]], align 85418// CHECK2-51-NEXT: [[TMP75:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP65]], i32 1, ptr [[TMP70]], i32 0, ptr null)5419// CHECK2-51-NEXT: ret void5420//5421//5422// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..305423// CHECK2-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {5424// CHECK2-51-NEXT: entry:5425// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 85426// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85427// CHECK2-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 85428// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85429// CHECK2-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 85430// CHECK2-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_30:%.*]], ptr [[TMP2]], i32 0, i32 05431// CHECK2-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 85432// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 85433// CHECK2-51-NEXT: ret void5434//5435//5436// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..315437// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {5438// CHECK2-51-NEXT: entry:5439// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 45440// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 85441// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 85442// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 85443// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 85444// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 85445// CHECK2-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 85446// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 45447// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85448// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 45449// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85450// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 45451// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 85452// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29:%.*]], ptr [[TMP3]], i32 0, i32 05453// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 25454// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 05455// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 85456// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29]], ptr [[TMP3]], i32 0, i32 15457// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META145:![0-9]+]])5458// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META148:![0-9]+]])5459// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META150:![0-9]+]])5460// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META152:![0-9]+]])5461// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META154:![0-9]+]]5462// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META154]]5463// CHECK2-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META154]]5464// CHECK2-51-NEXT: store ptr @.omp_task_privates_map..30, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META154]]5465// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META154]]5466// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META154]]5467// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META154]]5468// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META154]]5469// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META154]]5470// CHECK2-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]5471// CHECK2-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META154]]5472// CHECK2-51-NEXT: store i32 13, ptr [[TMP12]], align 45473// CHECK2-51-NEXT: ret i32 05474//5475//5476// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..335477// CHECK2-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {5478// CHECK2-51-NEXT: entry:5479// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 85480// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85481// CHECK2-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 85482// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85483// CHECK2-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 85484// CHECK2-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_33:%.*]], ptr [[TMP2]], i32 0, i32 05485// CHECK2-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 85486// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 85487// CHECK2-51-NEXT: ret void5488//5489//5490// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..345491// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {5492// CHECK2-51-NEXT: entry:5493// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 45494// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 85495// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 85496// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 85497// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 85498// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 85499// CHECK2-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 85500// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 45501// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85502// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 45503// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85504// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 45505// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 85506// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32:%.*]], ptr [[TMP3]], i32 0, i32 05507// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 25508// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 05509// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 85510// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32]], ptr [[TMP3]], i32 0, i32 15511// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META155:![0-9]+]])5512// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META158:![0-9]+]])5513// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META160:![0-9]+]])5514// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META162:![0-9]+]])5515// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META164:![0-9]+]]5516// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META164]]5517// CHECK2-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META164]]5518// CHECK2-51-NEXT: store ptr @.omp_task_privates_map..33, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META164]]5519// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META164]]5520// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META164]]5521// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META164]]5522// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META164]]5523// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META164]]5524// CHECK2-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]5525// CHECK2-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META164]]5526// CHECK2-51-NEXT: store i32 14, ptr [[TMP12]], align 45527// CHECK2-51-NEXT: ret i32 05528//5529//5530// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..365531// CHECK2-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {5532// CHECK2-51-NEXT: entry:5533// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 85534// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85535// CHECK2-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 85536// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85537// CHECK2-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 85538// CHECK2-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_36:%.*]], ptr [[TMP2]], i32 0, i32 05539// CHECK2-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 85540// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 85541// CHECK2-51-NEXT: ret void5542//5543//5544// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..375545// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {5546// CHECK2-51-NEXT: entry:5547// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 45548// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 85549// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 85550// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 85551// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 85552// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 85553// CHECK2-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 85554// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 45555// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85556// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 45557// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85558// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 45559// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 85560// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35:%.*]], ptr [[TMP3]], i32 0, i32 05561// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 25562// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 05563// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 85564// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35]], ptr [[TMP3]], i32 0, i32 15565// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META165:![0-9]+]])5566// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META168:![0-9]+]])5567// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META170:![0-9]+]])5568// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META172:![0-9]+]])5569// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META174:![0-9]+]]5570// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META174]]5571// CHECK2-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META174]]5572// CHECK2-51-NEXT: store ptr @.omp_task_privates_map..36, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META174]]5573// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META174]]5574// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META174]]5575// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META174]]5576// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META174]]5577// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META174]]5578// CHECK2-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]5579// CHECK2-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META174]]5580// CHECK2-51-NEXT: store i32 15, ptr [[TMP12]], align 45581// CHECK2-51-NEXT: ret i32 05582//5583//5584// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..395585// CHECK2-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {5586// CHECK2-51-NEXT: entry:5587// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 85588// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85589// CHECK2-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 85590// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85591// CHECK2-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 85592// CHECK2-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_39:%.*]], ptr [[TMP2]], i32 0, i32 05593// CHECK2-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 85594// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 85595// CHECK2-51-NEXT: ret void5596//5597//5598// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..405599// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {5600// CHECK2-51-NEXT: entry:5601// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 45602// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 85603// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 85604// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 85605// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 85606// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 85607// CHECK2-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 85608// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 45609// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85610// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 45611// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85612// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 45613// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 85614// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38:%.*]], ptr [[TMP3]], i32 0, i32 05615// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 25616// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 05617// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 85618// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38]], ptr [[TMP3]], i32 0, i32 15619// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META175:![0-9]+]])5620// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META178:![0-9]+]])5621// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META180:![0-9]+]])5622// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META182:![0-9]+]])5623// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META184:![0-9]+]]5624// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META184]]5625// CHECK2-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META184]]5626// CHECK2-51-NEXT: store ptr @.omp_task_privates_map..39, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META184]]5627// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META184]]5628// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META184]]5629// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META184]]5630// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META184]]5631// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META184]]5632// CHECK2-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]5633// CHECK2-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META184]]5634// CHECK2-51-NEXT: store i32 16, ptr [[TMP12]], align 45635// CHECK2-51-NEXT: ret i32 05636//5637//5638// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..425639// CHECK2-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {5640// CHECK2-51-NEXT: entry:5641// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 85642// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85643// CHECK2-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 85644// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85645// CHECK2-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 85646// CHECK2-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_42:%.*]], ptr [[TMP2]], i32 0, i32 05647// CHECK2-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 85648// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 85649// CHECK2-51-NEXT: ret void5650//5651//5652// CHECK2-51-LABEL: define {{[^@]+}}@.omp_task_entry..435653// CHECK2-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {5654// CHECK2-51-NEXT: entry:5655// CHECK2-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 45656// CHECK2-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 85657// CHECK2-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 85658// CHECK2-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 85659// CHECK2-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 85660// CHECK2-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 85661// CHECK2-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 85662// CHECK2-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 45663// CHECK2-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 85664// CHECK2-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 45665// CHECK2-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 85666// CHECK2-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 45667// CHECK2-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 85668// CHECK2-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_41:%.*]], ptr [[TMP3]], i32 0, i32 05669// CHECK2-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 25670// CHECK2-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 05671// CHECK2-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 85672// CHECK2-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_41]], ptr [[TMP3]], i32 0, i32 15673// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META185:![0-9]+]])5674// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META188:![0-9]+]])5675// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META190:![0-9]+]])5676// CHECK2-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META192:![0-9]+]])5677// CHECK2-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META194:![0-9]+]]5678// CHECK2-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META194]]5679// CHECK2-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META194]]5680// CHECK2-51-NEXT: store ptr @.omp_task_privates_map..42, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META194]]5681// CHECK2-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META194]]5682// CHECK2-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META194]]5683// CHECK2-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META194]]5684// CHECK2-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META194]]5685// CHECK2-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META194]]5686// CHECK2-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]5687// CHECK2-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META194]]5688// CHECK2-51-NEXT: store i32 17, ptr [[TMP12]], align 45689// CHECK2-51-NEXT: ret i32 05690//5691//5692// CHECK2-51-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_task_codegen.cpp5693// CHECK2-51-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {5694// CHECK2-51-NEXT: entry:5695// CHECK2-51-NEXT: call void @__cxx_global_var_init()5696// CHECK2-51-NEXT: ret void5697//5698//5699// CHECK3-LABEL: define {{[^@]+}}@main5700// CHECK3-SAME: () #[[ATTR0:[0-9]+]] {5701// CHECK3-NEXT: entry:5702// CHECK3-NEXT: [[RETVAL:%.*]] = alloca i32, align 45703// CHECK3-NEXT: [[B:%.*]] = alloca i8, align 15704// CHECK3-NEXT: [[S:%.*]] = alloca [2 x %struct.S], align 45705// CHECK3-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 85706// CHECK3-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 85707// CHECK3-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 85708// CHECK3-NEXT: [[AGG_CAPTURED2:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 85709// CHECK3-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 85710// CHECK3-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 85711// CHECK3-NEXT: [[AGG_CAPTURED6:%.*]] = alloca [[STRUCT_ANON_2:%.*]], align 15712// CHECK3-NEXT: [[AGG_CAPTURED9:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 15713// CHECK3-NEXT: [[DOTDEP_ARR_ADDR11:%.*]] = alloca [2 x %struct.kmp_depend_info], align 85714// CHECK3-NEXT: [[DEP_COUNTER_ADDR17:%.*]] = alloca i64, align 85715// CHECK3-NEXT: [[AGG_CAPTURED19:%.*]] = alloca [[STRUCT_ANON_6:%.*]], align 15716// CHECK3-NEXT: [[DOTDEP_ARR_ADDR21:%.*]] = alloca [2 x %struct.kmp_depend_info], align 85717// CHECK3-NEXT: [[DEP_COUNTER_ADDR27:%.*]] = alloca i64, align 85718// CHECK3-NEXT: [[AGG_CAPTURED29:%.*]] = alloca [[STRUCT_ANON_8:%.*]], align 15719// CHECK3-NEXT: [[DOTDEP_ARR_ADDR31:%.*]] = alloca [3 x %struct.kmp_depend_info], align 85720// CHECK3-NEXT: [[DEP_COUNTER_ADDR37:%.*]] = alloca i64, align 85721// CHECK3-NEXT: [[AGG_CAPTURED39:%.*]] = alloca [[STRUCT_ANON_10:%.*]], align 15722// CHECK3-NEXT: [[FLAG:%.*]] = alloca i8, align 15723// CHECK3-NEXT: [[AGG_CAPTURED42:%.*]] = alloca [[STRUCT_ANON_12:%.*]], align 15724// CHECK3-NEXT: [[C:%.*]] = alloca i32, align 1285725// CHECK3-NEXT: [[AGG_CAPTURED45:%.*]] = alloca [[STRUCT_ANON_14:%.*]], align 85726// CHECK3-NEXT: [[AGG_CAPTURED48:%.*]] = alloca [[STRUCT_ANON_16:%.*]], align 15727// CHECK3-NEXT: store i32 0, ptr [[RETVAL]], align 45728// CHECK3-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 05729// CHECK3-NEXT: [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 25730// CHECK3-NEXT: br label [[ARRAYCTOR_LOOP:%.*]]5731// CHECK3: arrayctor.loop:5732// CHECK3-NEXT: [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]5733// CHECK3-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])5734// CHECK3-NEXT: [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 15735// CHECK3-NEXT: [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]5736// CHECK3-NEXT: br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]5737// CHECK3: arrayctor.cont:5738// CHECK3-NEXT: [[TMP0:%.*]] = load i32, ptr @a, align 45739// CHECK3-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i645740// CHECK3-NEXT: [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()5741// CHECK3-NEXT: store ptr [[TMP2]], ptr [[SAVED_STACK]], align 85742// CHECK3-NEXT: [[TMP3:%.*]] = mul nuw i64 10, [[TMP1]]5743// CHECK3-NEXT: [[VLA:%.*]] = alloca i32, i64 [[TMP3]], align 165744// CHECK3-NEXT: store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 85745// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 05746// CHECK3-NEXT: store ptr [[B]], ptr [[TMP4]], align 85747// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 15748// CHECK3-NEXT: store ptr [[S]], ptr [[TMP5]], align 85749// CHECK3-NEXT: [[TMP6:%.*]] = load i8, ptr [[B]], align 15750// CHECK3-NEXT: [[CONV:%.*]] = sext i8 [[TMP6]] to i325751// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3:[0-9]+]])5752// CHECK3-NEXT: [[TMP7:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1:[0-9]+]], i32 [[OMP_GLOBAL_THREAD_NUM]], i32 33, i64 40, i64 16, ptr @.omp_task_entry.)5753// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP7]], i32 0, i32 05754// CHECK3-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP8]], i32 0, i32 05755// CHECK3-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 85756// CHECK3-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP10]], ptr align 8 [[AGG_CAPTURED]], i64 16, i1 false)5757// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP8]], i32 0, i32 45758// CHECK3-NEXT: store i32 [[CONV]], ptr [[TMP11]], align 85759// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3]])5760// CHECK3-NEXT: [[TMP12:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM1]], ptr [[TMP7]])5761// CHECK3-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_0]], ptr [[AGG_CAPTURED2]], i32 0, i32 05762// CHECK3-NEXT: store ptr [[S]], ptr [[TMP13]], align 85763// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM3:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB5:[0-9]+]])5764// CHECK3-NEXT: [[TMP14:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..2)5765// CHECK3-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP14]], i32 0, i32 05766// CHECK3-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP15]], i32 0, i32 05767// CHECK3-NEXT: [[TMP17:%.*]] = load ptr, ptr [[TMP16]], align 85768// CHECK3-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP17]], ptr align 8 [[AGG_CAPTURED2]], i64 8, i1 false)5769// CHECK3-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 05770// CHECK3-NEXT: [[TMP19:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP18]], i64 05771// CHECK3-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 05772// CHECK3-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP20]], align 85773// CHECK3-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 15774// CHECK3-NEXT: store i64 4, ptr [[TMP21]], align 85775// CHECK3-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 25776// CHECK3-NEXT: store i8 1, ptr [[TMP22]], align 85777// CHECK3-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i645778// CHECK3-NEXT: [[TMP24:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 15779// CHECK3-NEXT: [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 05780// CHECK3-NEXT: store i64 [[TMP23]], ptr [[TMP25]], align 85781// CHECK3-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 15782// CHECK3-NEXT: store i64 1, ptr [[TMP26]], align 85783// CHECK3-NEXT: [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 25784// CHECK3-NEXT: store i8 1, ptr [[TMP27]], align 85785// CHECK3-NEXT: [[TMP28:%.*]] = ptrtoint ptr [[S]] to i645786// CHECK3-NEXT: [[TMP29:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 25787// CHECK3-NEXT: [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 05788// CHECK3-NEXT: store i64 [[TMP28]], ptr [[TMP30]], align 85789// CHECK3-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 15790// CHECK3-NEXT: store i64 8, ptr [[TMP31]], align 85791// CHECK3-NEXT: [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 25792// CHECK3-NEXT: store i8 1, ptr [[TMP32]], align 85793// CHECK3-NEXT: [[TMP33:%.*]] = mul nsw i64 0, [[TMP1]]5794// CHECK3-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP33]]5795// CHECK3-NEXT: [[TMP34:%.*]] = mul nsw i64 9, [[TMP1]]5796// CHECK3-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP34]]5797// CHECK3-NEXT: [[TMP35:%.*]] = getelementptr i32, ptr [[ARRAYIDX4]], i32 15798// CHECK3-NEXT: [[TMP36:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i645799// CHECK3-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[TMP35]] to i645800// CHECK3-NEXT: [[TMP38:%.*]] = sub nuw i64 [[TMP37]], [[TMP36]]5801// CHECK3-NEXT: [[TMP39:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i645802// CHECK3-NEXT: [[TMP40:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 35803// CHECK3-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 05804// CHECK3-NEXT: store i64 [[TMP39]], ptr [[TMP41]], align 85805// CHECK3-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 15806// CHECK3-NEXT: store i64 [[TMP38]], ptr [[TMP42]], align 85807// CHECK3-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 25808// CHECK3-NEXT: store i8 1, ptr [[TMP43]], align 85809// CHECK3-NEXT: store i64 4, ptr [[DEP_COUNTER_ADDR]], align 85810// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM5:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB5]])5811// CHECK3-NEXT: [[TMP44:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM5]], ptr [[TMP14]], i32 4, ptr [[TMP18]], i32 0, ptr null)5812// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM7:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7:[0-9]+]])5813// CHECK3-NEXT: [[TMP45:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM7]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..4)5814// CHECK3-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP45]], i32 0, i32 05815// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM8:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7]])5816// CHECK3-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP46]], i32 0, i32 25817// CHECK3-NEXT: store i32 0, ptr [[TMP47]], align 85818// CHECK3-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8]], ptr [[TMP45]])5819// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM10:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9:[0-9]+]])5820// CHECK3-NEXT: [[TMP49:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM10]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..6)5821// CHECK3-NEXT: [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP49]], i32 0, i32 05822// CHECK3-NEXT: [[TMP51:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR11]], i64 0, i64 05823// CHECK3-NEXT: [[ARRAYIDX12:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 05824// CHECK3-NEXT: [[TMP52:%.*]] = ptrtoint ptr [[ARRAYIDX12]] to i645825// CHECK3-NEXT: [[TMP53:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP51]], i64 05826// CHECK3-NEXT: [[TMP54:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 05827// CHECK3-NEXT: store i64 [[TMP52]], ptr [[TMP54]], align 85828// CHECK3-NEXT: [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 15829// CHECK3-NEXT: store i64 4, ptr [[TMP55]], align 85830// CHECK3-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 25831// CHECK3-NEXT: store i8 3, ptr [[TMP56]], align 85832// CHECK3-NEXT: [[TMP57:%.*]] = load i8, ptr [[B]], align 15833// CHECK3-NEXT: [[TMP58:%.*]] = sext i8 [[TMP57]] to i645834// CHECK3-NEXT: [[TMP59:%.*]] = mul nsw i64 4, [[TMP1]]5835// CHECK3-NEXT: [[ARRAYIDX13:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP59]]5836// CHECK3-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX13]], i64 [[TMP58]]5837// CHECK3-NEXT: [[TMP60:%.*]] = load i8, ptr [[B]], align 15838// CHECK3-NEXT: [[TMP61:%.*]] = sext i8 [[TMP60]] to i645839// CHECK3-NEXT: [[TMP62:%.*]] = mul nsw i64 9, [[TMP1]]5840// CHECK3-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP62]]5841// CHECK3-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX15]], i64 [[TMP61]]5842// CHECK3-NEXT: [[TMP63:%.*]] = getelementptr i32, ptr [[ARRAYIDX16]], i32 15843// CHECK3-NEXT: [[TMP64:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i645844// CHECK3-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[TMP63]] to i645845// CHECK3-NEXT: [[TMP66:%.*]] = sub nuw i64 [[TMP65]], [[TMP64]]5846// CHECK3-NEXT: [[TMP67:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i645847// CHECK3-NEXT: [[TMP68:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP51]], i64 15848// CHECK3-NEXT: [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 05849// CHECK3-NEXT: store i64 [[TMP67]], ptr [[TMP69]], align 85850// CHECK3-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 15851// CHECK3-NEXT: store i64 [[TMP66]], ptr [[TMP70]], align 85852// CHECK3-NEXT: [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 25853// CHECK3-NEXT: store i8 3, ptr [[TMP71]], align 85854// CHECK3-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR17]], align 85855// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM18:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9]])5856// CHECK3-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP50]], i32 0, i32 25857// CHECK3-NEXT: store i32 0, ptr [[TMP72]], align 85858// CHECK3-NEXT: [[TMP73:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM18]], ptr [[TMP49]], i32 2, ptr [[TMP51]], i32 0, ptr null)5859// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM20:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11:[0-9]+]])5860// CHECK3-NEXT: [[TMP74:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM20]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..8)5861// CHECK3-NEXT: [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP74]], i32 0, i32 05862// CHECK3-NEXT: [[TMP76:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR21]], i64 0, i64 05863// CHECK3-NEXT: [[ARRAYIDX22:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 05864// CHECK3-NEXT: [[TMP77:%.*]] = ptrtoint ptr [[ARRAYIDX22]] to i645865// CHECK3-NEXT: [[TMP78:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP76]], i64 05866// CHECK3-NEXT: [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 05867// CHECK3-NEXT: store i64 [[TMP77]], ptr [[TMP79]], align 85868// CHECK3-NEXT: [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 15869// CHECK3-NEXT: store i64 4, ptr [[TMP80]], align 85870// CHECK3-NEXT: [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 25871// CHECK3-NEXT: store i8 4, ptr [[TMP81]], align 85872// CHECK3-NEXT: [[TMP82:%.*]] = load i8, ptr [[B]], align 15873// CHECK3-NEXT: [[TMP83:%.*]] = sext i8 [[TMP82]] to i645874// CHECK3-NEXT: [[TMP84:%.*]] = mul nsw i64 4, [[TMP1]]5875// CHECK3-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP84]]5876// CHECK3-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX23]], i64 [[TMP83]]5877// CHECK3-NEXT: [[TMP85:%.*]] = load i8, ptr [[B]], align 15878// CHECK3-NEXT: [[TMP86:%.*]] = sext i8 [[TMP85]] to i645879// CHECK3-NEXT: [[TMP87:%.*]] = mul nsw i64 9, [[TMP1]]5880// CHECK3-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP87]]5881// CHECK3-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[TMP86]]5882// CHECK3-NEXT: [[TMP88:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 15883// CHECK3-NEXT: [[TMP89:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i645884// CHECK3-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[TMP88]] to i645885// CHECK3-NEXT: [[TMP91:%.*]] = sub nuw i64 [[TMP90]], [[TMP89]]5886// CHECK3-NEXT: [[TMP92:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i645887// CHECK3-NEXT: [[TMP93:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP76]], i64 15888// CHECK3-NEXT: [[TMP94:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 05889// CHECK3-NEXT: store i64 [[TMP92]], ptr [[TMP94]], align 85890// CHECK3-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 15891// CHECK3-NEXT: store i64 [[TMP91]], ptr [[TMP95]], align 85892// CHECK3-NEXT: [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 25893// CHECK3-NEXT: store i8 4, ptr [[TMP96]], align 85894// CHECK3-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR27]], align 85895// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM28:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11]])5896// CHECK3-NEXT: [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP75]], i32 0, i32 25897// CHECK3-NEXT: store i32 0, ptr [[TMP97]], align 85898// CHECK3-NEXT: [[TMP98:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM28]], ptr [[TMP74]], i32 2, ptr [[TMP76]], i32 0, ptr null)5899// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM30:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB13:[0-9]+]])5900// CHECK3-NEXT: [[TMP99:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM30]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..10)5901// CHECK3-NEXT: [[TMP100:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP99]], i32 0, i32 05902// CHECK3-NEXT: [[TMP101:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR31]], i64 0, i64 05903// CHECK3-NEXT: [[TMP102:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 05904// CHECK3-NEXT: [[TMP103:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 05905// CHECK3-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP103]], align 85906// CHECK3-NEXT: [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 15907// CHECK3-NEXT: store i64 4, ptr [[TMP104]], align 85908// CHECK3-NEXT: [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 25909// CHECK3-NEXT: store i8 3, ptr [[TMP105]], align 85910// CHECK3-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 15911// CHECK3-NEXT: [[TMP106:%.*]] = ptrtoint ptr [[ARRAYIDX32]] to i645912// CHECK3-NEXT: [[TMP107:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 15913// CHECK3-NEXT: [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 05914// CHECK3-NEXT: store i64 [[TMP106]], ptr [[TMP108]], align 85915// CHECK3-NEXT: [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 15916// CHECK3-NEXT: store i64 4, ptr [[TMP109]], align 85917// CHECK3-NEXT: [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 25918// CHECK3-NEXT: store i8 3, ptr [[TMP110]], align 85919// CHECK3-NEXT: [[TMP111:%.*]] = mul nsw i64 0, [[TMP1]]5920// CHECK3-NEXT: [[ARRAYIDX33:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP111]]5921// CHECK3-NEXT: [[ARRAYIDX34:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX33]], i64 35922// CHECK3-NEXT: [[TMP112:%.*]] = load i32, ptr @a, align 45923// CHECK3-NEXT: [[TMP113:%.*]] = sext i32 [[TMP112]] to i645924// CHECK3-NEXT: [[LEN_SUB_1:%.*]] = sub nsw i64 [[TMP113]], 15925// CHECK3-NEXT: [[TMP114:%.*]] = load i32, ptr @a, align 45926// CHECK3-NEXT: [[TMP115:%.*]] = sext i32 [[TMP114]] to i645927// CHECK3-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP115]]5928// CHECK3-NEXT: [[TMP116:%.*]] = mul nsw i64 [[LB_ADD_LEN]], [[TMP1]]5929// CHECK3-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP116]]5930// CHECK3-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX35]], i64 [[LEN_SUB_1]]5931// CHECK3-NEXT: [[TMP117:%.*]] = getelementptr i32, ptr [[ARRAYIDX36]], i32 15932// CHECK3-NEXT: [[TMP118:%.*]] = ptrtoint ptr [[ARRAYIDX34]] to i645933// CHECK3-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[TMP117]] to i645934// CHECK3-NEXT: [[TMP120:%.*]] = sub nuw i64 [[TMP119]], [[TMP118]]5935// CHECK3-NEXT: [[TMP121:%.*]] = ptrtoint ptr [[ARRAYIDX34]] to i645936// CHECK3-NEXT: [[TMP122:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 25937// CHECK3-NEXT: [[TMP123:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 05938// CHECK3-NEXT: store i64 [[TMP121]], ptr [[TMP123]], align 85939// CHECK3-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 15940// CHECK3-NEXT: store i64 [[TMP120]], ptr [[TMP124]], align 85941// CHECK3-NEXT: [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 25942// CHECK3-NEXT: store i8 3, ptr [[TMP125]], align 85943// CHECK3-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR37]], align 85944// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM38:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB13]])5945// CHECK3-NEXT: [[TMP126:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM38]], ptr [[TMP99]], i32 3, ptr [[TMP101]], i32 0, ptr null)5946// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM40:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15:[0-9]+]])5947// CHECK3-NEXT: [[TMP127:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM40]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..12)5948// CHECK3-NEXT: [[TMP128:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP127]], i32 0, i32 05949// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM41:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15]])5950// CHECK3-NEXT: [[TMP129:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM41]], ptr [[TMP127]])5951// CHECK3-NEXT: store i8 0, ptr [[FLAG]], align 15952// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM43:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB17:[0-9]+]])5953// CHECK3-NEXT: [[TMP130:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM43]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..14)5954// CHECK3-NEXT: [[TMP131:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP130]], i32 0, i32 05955// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM44:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB17]])5956// CHECK3-NEXT: [[TMP132:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM44]], ptr [[TMP130]])5957// CHECK3-NEXT: [[TMP133:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_14]], ptr [[AGG_CAPTURED45]], i32 0, i32 05958// CHECK3-NEXT: store ptr [[C]], ptr [[TMP133]], align 85959// CHECK3-NEXT: [[TMP134:%.*]] = load i8, ptr [[B]], align 15960// CHECK3-NEXT: [[TOBOOL:%.*]] = icmp ne i8 [[TMP134]], 05961// CHECK3-NEXT: [[TMP135:%.*]] = select i1 [[TOBOOL]], i32 2, i32 05962// CHECK3-NEXT: [[TMP136:%.*]] = or i32 [[TMP135]], 15963// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM46:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB19:[0-9]+]])5964// CHECK3-NEXT: [[TMP137:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM46]], i32 [[TMP136]], i64 40, i64 8, ptr @.omp_task_entry..16)5965// CHECK3-NEXT: [[TMP138:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP137]], i32 0, i32 05966// CHECK3-NEXT: [[TMP139:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP138]], i32 0, i32 05967// CHECK3-NEXT: [[TMP140:%.*]] = load ptr, ptr [[TMP139]], align 85968// CHECK3-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP140]], ptr align 8 [[AGG_CAPTURED45]], i64 8, i1 false)5969// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM47:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB19]])5970// CHECK3-NEXT: [[TMP141:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM47]], ptr [[TMP137]])5971// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM49:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21:[0-9]+]])5972// CHECK3-NEXT: [[TMP142:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM49]], i32 0, i64 256, i64 1, ptr @.omp_task_entry..21)5973// CHECK3-NEXT: [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP142]], i32 0, i32 05974// CHECK3-NEXT: [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP142]], i32 0, i32 25975// CHECK3-NEXT: [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP144]], i32 0, i32 05976// CHECK3-NEXT: [[TMP146:%.*]] = load i32, ptr [[C]], align 1285977// CHECK3-NEXT: store i32 [[TMP146]], ptr [[TMP145]], align 1285978// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM50:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])5979// CHECK3-NEXT: [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP143]], i32 0, i32 25980// CHECK3-NEXT: store i32 0, ptr [[TMP147]], align 165981// CHECK3-NEXT: [[TMP148:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM50]], ptr [[TMP142]])5982// CHECK3-NEXT: [[TMP149:%.*]] = load i32, ptr @a, align 45983// CHECK3-NEXT: store i32 [[TMP149]], ptr [[RETVAL]], align 45984// CHECK3-NEXT: [[TMP150:%.*]] = load ptr, ptr [[SAVED_STACK]], align 85985// CHECK3-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP150]])5986// CHECK3-NEXT: [[ARRAY_BEGIN51:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 05987// CHECK3-NEXT: [[TMP151:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN51]], i64 25988// CHECK3-NEXT: br label [[ARRAYDESTROY_BODY:%.*]]5989// CHECK3: arraydestroy.body:5990// CHECK3-NEXT: [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP151]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]5991// CHECK3-NEXT: [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -15992// CHECK3-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR4:[0-9]+]]5993// CHECK3-NEXT: [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN51]]5994// CHECK3-NEXT: br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE52:%.*]], label [[ARRAYDESTROY_BODY]]5995// CHECK3: arraydestroy.done52:5996// CHECK3-NEXT: [[TMP152:%.*]] = load i32, ptr [[RETVAL]], align 45997// CHECK3-NEXT: ret i32 [[TMP152]]5998//5999//6000// CHECK3-LABEL: define {{[^@]+}}@_ZN1SC1Ev6001// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] align 2 {6002// CHECK3-NEXT: entry:6003// CHECK3-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 86004// CHECK3-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 86005// CHECK3-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86006// CHECK3-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])6007// CHECK3-NEXT: ret void6008//6009//6010// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry.6011// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {6012// CHECK3-NEXT: entry:6013// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46014// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86015// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86016// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86017// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86018// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86019// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46020// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86021// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46022// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86023// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46024// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86025// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 06026// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26027// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06028// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86029// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])6030// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])6031// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])6032// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])6033// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META12:![0-9]+]]6034// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META12]]6035// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META12]]6036// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META12]]6037// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META12]]6038// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]6039// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]6040// CHECK3-NEXT: store i32 15, ptr @a, align 4, !noalias [[META12]]6041// CHECK3-NEXT: [[TMP9:%.*]] = load i32, ptr @a, align 4, !noalias [[META12]]6042// CHECK3-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP9]] to i86043// CHECK3-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP8]], align 86044// CHECK3-NEXT: store i8 [[CONV_I]], ptr [[TMP10]], align 16045// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON:%.*]], ptr [[TMP8]], i32 0, i32 16046// CHECK3-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 86047// CHECK3-NEXT: store i32 10, ptr [[TMP12]], align 46048// CHECK3-NEXT: ret i32 06049//6050//6051// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..26052// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6053// CHECK3-NEXT: entry:6054// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46055// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86056// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86057// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86058// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86059// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86060// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46061// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86062// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46063// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86064// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46065// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86066// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 06067// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26068// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06069// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86070// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])6071// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META16:![0-9]+]])6072// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])6073// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])6074// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META22:![0-9]+]]6075// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META22]]6076// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META22]]6077// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META22]]6078// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META22]]6079// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]6080// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]6081// CHECK3-NEXT: store i32 15, ptr @a, align 4, !noalias [[META22]]6082// CHECK3-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 86083// CHECK3-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP9]], i64 0, i64 16084// CHECK3-NEXT: store i32 10, ptr [[ARRAYIDX_I]], align 46085// CHECK3-NEXT: ret i32 06086//6087//6088// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..46089// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6090// CHECK3-NEXT: entry:6091// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46092// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86093// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86094// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86095// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86096// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86097// CHECK3-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 46098// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46099// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86100// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46101// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86102// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46103// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86104// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP3]], i32 0, i32 06105// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26106// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06107// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86108// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META23:![0-9]+]])6109// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META26:![0-9]+]])6110// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])6111// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])6112// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32:![0-9]+]]6113// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]6114// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META32]]6115// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META32]]6116// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]6117// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]6118// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]6119// CHECK3-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]6120// CHECK3-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 46121// CHECK3-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [6122// CHECK3-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]6123// CHECK3-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]6124// CHECK3-NEXT: ]6125// CHECK3: .untied.done..i:6126// CHECK3-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]6127// CHECK3-NEXT: br label [[CLEANUP_I:%.*]]6128// CHECK3: .untied.jmp..i:6129// CHECK3-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]6130// CHECK3-NEXT: store i32 1, ptr [[TMP11]], align 46131// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7]])6132// CHECK3-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]6133// CHECK3-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])6134// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT:%.*]]6135// CHECK3: .untied.jmp.1.i:6136// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM2_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])6137// CHECK3-NEXT: call void @__kmpc_critical(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2_I]], ptr @.gomp_critical_user_.var)6138// CHECK3-NEXT: store i32 1, ptr @a, align 4, !noalias [[META32]]6139// CHECK3-NEXT: call void @__kmpc_end_critical(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2_I]], ptr @.gomp_critical_user_.var)6140// CHECK3-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]6141// CHECK3-NEXT: br label [[CLEANUP_I]]6142// CHECK3: cleanup.i:6143// CHECK3-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]6144// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT]]6145// CHECK3: .omp_outlined..3.exit:6146// CHECK3-NEXT: ret i32 06147//6148//6149// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..66150// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6151// CHECK3-NEXT: entry:6152// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46153// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86154// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86155// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86156// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86157// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86158// CHECK3-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 46159// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46160// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86161// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46162// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86163// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46164// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86165// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 06166// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26167// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06168// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86169// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META33:![0-9]+]])6170// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META36:![0-9]+]])6171// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META38:![0-9]+]])6172// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])6173// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42:![0-9]+]]6174// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]6175// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META42]]6176// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META42]]6177// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]6178// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]6179// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]6180// CHECK3-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]6181// CHECK3-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 46182// CHECK3-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [6183// CHECK3-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]6184// CHECK3-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]6185// CHECK3-NEXT: ]6186// CHECK3: .untied.done..i:6187// CHECK3-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]6188// CHECK3-NEXT: br label [[CLEANUP_I:%.*]]6189// CHECK3: .untied.jmp..i:6190// CHECK3-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]6191// CHECK3-NEXT: store i32 1, ptr [[TMP11]], align 46192// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9]])6193// CHECK3-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]6194// CHECK3-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])6195// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT:%.*]]6196// CHECK3: .untied.jmp.1.i:6197// CHECK3-NEXT: store i32 1, ptr @a, align 4, !noalias [[META42]]6198// CHECK3-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]6199// CHECK3-NEXT: br label [[CLEANUP_I]]6200// CHECK3: cleanup.i:6201// CHECK3-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]6202// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT]]6203// CHECK3: .omp_outlined..5.exit:6204// CHECK3-NEXT: ret i32 06205//6206//6207// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..86208// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6209// CHECK3-NEXT: entry:6210// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46211// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86212// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86213// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86214// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86215// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86216// CHECK3-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 46217// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46218// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86219// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46220// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86221// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46222// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86223// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP3]], i32 0, i32 06224// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26225// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06226// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86227// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])6228// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META46:![0-9]+]])6229// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META48:![0-9]+]])6230// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META50:![0-9]+]])6231// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52:![0-9]+]]6232// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]6233// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META52]]6234// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META52]]6235// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]6236// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]6237// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]6238// CHECK3-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]6239// CHECK3-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 46240// CHECK3-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [6241// CHECK3-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]6242// CHECK3-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]6243// CHECK3-NEXT: ]6244// CHECK3: .untied.done..i:6245// CHECK3-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]6246// CHECK3-NEXT: br label [[CLEANUP_I:%.*]]6247// CHECK3: .untied.jmp..i:6248// CHECK3-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]6249// CHECK3-NEXT: store i32 1, ptr [[TMP11]], align 46250// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11]])6251// CHECK3-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]6252// CHECK3-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])6253// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT:%.*]]6254// CHECK3: .untied.jmp.1.i:6255// CHECK3-NEXT: store i32 1, ptr @a, align 4, !noalias [[META52]]6256// CHECK3-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]6257// CHECK3-NEXT: br label [[CLEANUP_I]]6258// CHECK3: cleanup.i:6259// CHECK3-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]6260// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT]]6261// CHECK3: .omp_outlined..7.exit:6262// CHECK3-NEXT: ret i32 06263//6264//6265// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..106266// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6267// CHECK3-NEXT: entry:6268// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46269// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86270// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86271// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86272// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86273// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86274// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46275// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86276// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46277// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86278// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46279// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86280// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP3]], i32 0, i32 06281// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26282// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06283// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86284// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META53:![0-9]+]])6285// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META56:![0-9]+]])6286// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META58:![0-9]+]])6287// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META60:![0-9]+]])6288// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META62:![0-9]+]]6289// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META62]]6290// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META62]]6291// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META62]]6292// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META62]]6293// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]6294// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]6295// CHECK3-NEXT: store i32 2, ptr @a, align 4, !noalias [[META62]]6296// CHECK3-NEXT: ret i32 06297//6298//6299// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..126300// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6301// CHECK3-NEXT: entry:6302// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46303// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86304// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86305// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86306// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86307// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86308// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46309// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86310// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46311// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86312// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46313// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86314// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP3]], i32 0, i32 06315// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26316// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06317// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86318// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META63:![0-9]+]])6319// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META66:![0-9]+]])6320// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META68:![0-9]+]])6321// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META70:![0-9]+]])6322// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META72:![0-9]+]]6323// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META72]]6324// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META72]]6325// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META72]]6326// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META72]]6327// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]6328// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]6329// CHECK3-NEXT: store i32 2, ptr @a, align 4, !noalias [[META72]]6330// CHECK3-NEXT: ret i32 06331//6332//6333// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..146334// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6335// CHECK3-NEXT: entry:6336// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46337// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86338// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86339// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86340// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86341// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86342// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46343// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86344// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46345// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86346// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46347// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86348// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP3]], i32 0, i32 06349// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26350// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06351// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86352// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META73:![0-9]+]])6353// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META76:![0-9]+]])6354// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META78:![0-9]+]])6355// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META80:![0-9]+]])6356// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META82:![0-9]+]]6357// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META82]]6358// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META82]]6359// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META82]]6360// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META82]]6361// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]6362// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]6363// CHECK3-NEXT: store i32 3, ptr @a, align 4, !noalias [[META82]]6364// CHECK3-NEXT: ret i32 06365//6366//6367// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..166368// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6369// CHECK3-NEXT: entry:6370// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46371// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86372// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86373// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86374// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86375// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86376// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46377// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86378// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46379// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86380// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46381// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86382// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP3]], i32 0, i32 06383// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26384// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06385// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86386// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META83:![0-9]+]])6387// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META86:![0-9]+]])6388// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META88:![0-9]+]])6389// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META90:![0-9]+]])6390// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META92:![0-9]+]]6391// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META92]]6392// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META92]]6393// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META92]]6394// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META92]]6395// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]6396// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]6397// CHECK3-NEXT: store i32 4, ptr @a, align 4, !noalias [[META92]]6398// CHECK3-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 86399// CHECK3-NEXT: store i32 5, ptr [[TMP9]], align 1286400// CHECK3-NEXT: ret i32 06401//6402//6403// CHECK3-LABEL: define {{[^@]+}}@.omp_task_privates_map.6404// CHECK3-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7:[0-9]+]] {6405// CHECK3-NEXT: entry:6406// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 86407// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86408// CHECK3-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 86409// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86410// CHECK3-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 86411// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP2]], i32 0, i32 06412// CHECK3-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 86413// CHECK3-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 86414// CHECK3-NEXT: ret void6415//6416//6417// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..196418// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6419// CHECK3-NEXT: entry:6420// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46421// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86422// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86423// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86424// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86425// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86426// CHECK3-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 86427// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46428// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86429// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46430// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86431// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46432// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86433// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP3]], i32 0, i32 06434// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26435// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06436// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1286437// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18]], ptr [[TMP3]], i32 0, i32 26438// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META93:![0-9]+]])6439// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META96:![0-9]+]])6440// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META98:![0-9]+]])6441// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META100:![0-9]+]])6442// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META102:![0-9]+]]6443// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META102]]6444// CHECK3-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]6445// CHECK3-NEXT: store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]6446// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META102]]6447// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]6448// CHECK3-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]6449// CHECK3-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]6450// CHECK3-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]6451// CHECK3-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]6452// CHECK3-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META102]]6453// CHECK3-NEXT: store i32 4, ptr [[TMP12]], align 1286454// CHECK3-NEXT: store i32 4, ptr @a, align 4, !noalias [[META102]]6455// CHECK3-NEXT: ret i32 06456//6457//6458// CHECK3-LABEL: define {{[^@]+}}@_ZN1SD1Ev6459// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {6460// CHECK3-NEXT: entry:6461// CHECK3-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 86462// CHECK3-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 86463// CHECK3-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86464// CHECK3-NEXT: call void @_ZN1SD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR4]]6465// CHECK3-NEXT: ret void6466//6467//6468// CHECK3-LABEL: define {{[^@]+}}@.omp_task_privates_map..206469// CHECK3-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]]) #[[ATTR7]] {6470// CHECK3-NEXT: entry:6471// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 86472// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86473// CHECK3-NEXT: [[DOTADDR2:%.*]] = alloca ptr, align 86474// CHECK3-NEXT: [[DOTADDR3:%.*]] = alloca ptr, align 86475// CHECK3-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 86476// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86477// CHECK3-NEXT: store ptr [[TMP2]], ptr [[DOTADDR2]], align 86478// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTADDR3]], align 86479// CHECK3-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR]], align 86480// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP4]], i32 0, i32 06481// CHECK3-NEXT: [[TMP6:%.*]] = load ptr, ptr [[DOTADDR1]], align 86482// CHECK3-NEXT: store ptr [[TMP5]], ptr [[TMP6]], align 86483// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 16484// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[DOTADDR2]], align 86485// CHECK3-NEXT: store ptr [[TMP7]], ptr [[TMP8]], align 86486// CHECK3-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 26487// CHECK3-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTADDR3]], align 86488// CHECK3-NEXT: store ptr [[TMP9]], ptr [[TMP10]], align 86489// CHECK3-NEXT: ret void6490//6491//6492// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..216493// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6494// CHECK3-NEXT: entry:6495// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46496// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86497// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86498// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86499// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86500// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86501// CHECK3-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 86502// CHECK3-NEXT: [[DOTLOCAL_PTR_ADDR_I:%.*]] = alloca ptr, align 86503// CHECK3-NEXT: [[DOTLOCAL_PTR_ADDR1_I:%.*]] = alloca ptr, align 86504// CHECK3-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 46505// CHECK3-NEXT: [[S1_I:%.*]] = alloca [[STRUCT_S:%.*]], align 46506// CHECK3-NEXT: [[S2_I:%.*]] = alloca [[STRUCT_S]], align 46507// CHECK3-NEXT: [[REF_TMP_I:%.*]] = alloca [[STRUCT_S]], align 46508// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46509// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86510// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46511// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86512// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46513// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86514// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP3]], i32 0, i32 06515// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26516// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06517// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1286518// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP3]], i32 0, i32 26519// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META103:![0-9]+]])6520// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META106:![0-9]+]])6521// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META108:![0-9]+]])6522// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META110:![0-9]+]])6523// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112:![0-9]+]]6524// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]6525// CHECK3-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]6526// CHECK3-NEXT: store ptr @.omp_task_privates_map..20, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]6527// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]6528// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]6529// CHECK3-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]6530// CHECK3-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]6531// CHECK3-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]6532// CHECK3-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR1_I]]) #[[ATTR4]]6533// CHECK3-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META112]]6534// CHECK3-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR_I]], align 8, !noalias [[META112]]6535// CHECK3-NEXT: [[TMP14:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR1_I]], align 8, !noalias [[META112]]6536// CHECK3-NEXT: [[TMP15:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]6537// CHECK3-NEXT: [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 46538// CHECK3-NEXT: switch i32 [[TMP16]], label [[DOTUNTIED_DONE__I:%.*]] [6539// CHECK3-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]6540// CHECK3-NEXT: i32 1, label [[DOTUNTIED_JMP_2_I:%.*]]6541// CHECK3-NEXT: i32 2, label [[DOTUNTIED_JMP_6_I:%.*]]6542// CHECK3-NEXT: i32 3, label [[DOTUNTIED_JMP_10_I:%.*]]6543// CHECK3-NEXT: i32 4, label [[DOTUNTIED_JMP_15_I:%.*]]6544// CHECK3-NEXT: ]6545// CHECK3: .untied.done..i:6546// CHECK3-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]6547// CHECK3-NEXT: br label [[CLEANUP_I:%.*]]6548// CHECK3: .untied.jmp..i:6549// CHECK3-NEXT: [[TMP17:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]6550// CHECK3-NEXT: store i32 1, ptr [[TMP17]], align 46551// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])6552// CHECK3-NEXT: [[TMP18:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]6553// CHECK3-NEXT: [[TMP19:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP18]])6554// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT:%.*]]6555// CHECK3: .untied.jmp.2.i:6556// CHECK3-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S1_I]])6557// CHECK3-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S2_I]])6558// CHECK3-NEXT: store i32 0, ptr [[S2_I]], align 4, !noalias [[META112]]6559// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM3_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23:[0-9]+]])6560// CHECK3-NEXT: [[TMP20:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3_I]], i32 1, i64 256, i64 1, ptr @.omp_task_entry..19)6561// CHECK3-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP20]], i32 0, i32 26562// CHECK3-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP12]], align 1286563// CHECK3-NEXT: store i32 [[TMP22]], ptr [[TMP21]], align 1286564// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM4_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23]])6565// CHECK3-NEXT: [[TMP23:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM4_I]], ptr [[TMP20]])6566// CHECK3-NEXT: [[TMP24:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]6567// CHECK3-NEXT: store i32 2, ptr [[TMP24]], align 46568// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM5_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])6569// CHECK3-NEXT: [[TMP25:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]6570// CHECK3-NEXT: [[TMP26:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM5_I]], ptr [[TMP25]])6571// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]6572// CHECK3: .untied.jmp.6.i:6573// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM8_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])6574// CHECK3-NEXT: [[TMP27:%.*]] = call i32 @__kmpc_omp_taskyield(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8_I]], i32 0)6575// CHECK3-NEXT: [[TMP28:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]6576// CHECK3-NEXT: store i32 3, ptr [[TMP28]], align 46577// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM9_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])6578// CHECK3-NEXT: [[TMP29:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]6579// CHECK3-NEXT: [[TMP30:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM9_I]], ptr [[TMP29]])6580// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]6581// CHECK3: .untied.jmp.10.i:6582// CHECK3-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]])6583// CHECK3-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[S1_I]], ptr align 4 [[REF_TMP_I]], i64 4, i1 false), !noalias [[META112]]6584// CHECK3-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]]) #[[ATTR4]]6585// CHECK3-NEXT: store i32 10, ptr [[S2_I]], align 4, !noalias [[META112]]6586// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM13_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])6587// CHECK3-NEXT: [[TMP31:%.*]] = call i32 @__kmpc_omp_taskwait(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM13_I]])6588// CHECK3-NEXT: [[TMP32:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]6589// CHECK3-NEXT: store i32 4, ptr [[TMP32]], align 46590// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM14_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])6591// CHECK3-NEXT: [[TMP33:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]6592// CHECK3-NEXT: [[TMP34:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM14_I]], ptr [[TMP33]])6593// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]6594// CHECK3: .untied.jmp.15.i:6595// CHECK3-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S2_I]]) #[[ATTR4]]6596// CHECK3-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S1_I]]) #[[ATTR4]]6597// CHECK3-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]6598// CHECK3-NEXT: br label [[CLEANUP_I]]6599// CHECK3: cleanup.i:6600// CHECK3-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]6601// CHECK3-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]6602// CHECK3: .omp_outlined..17.exit:6603// CHECK3-NEXT: ret i32 06604//6605//6606// CHECK3-LABEL: define {{[^@]+}}@_ZN1SC2Ev6607// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {6608// CHECK3-NEXT: entry:6609// CHECK3-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 86610// CHECK3-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 86611// CHECK3-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86612// CHECK3-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 06613// CHECK3-NEXT: store i32 0, ptr [[A]], align 46614// CHECK3-NEXT: ret void6615//6616//6617// CHECK3-LABEL: define {{[^@]+}}@_ZN1SD2Ev6618// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {6619// CHECK3-NEXT: entry:6620// CHECK3-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 86621// CHECK3-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 86622// CHECK3-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86623// CHECK3-NEXT: ret void6624//6625//6626// CHECK3-LABEL: define {{[^@]+}}@__cxx_global_var_init6627// CHECK3-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {6628// CHECK3-NEXT: entry:6629// CHECK3-NEXT: call void @_ZN2S1C1Ev(ptr noundef nonnull align 4 dereferenceable(4) @s1)6630// CHECK3-NEXT: ret void6631//6632//6633// CHECK3-LABEL: define {{[^@]+}}@_ZN2S1C1Ev6634// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {6635// CHECK3-NEXT: entry:6636// CHECK3-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 86637// CHECK3-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 86638// CHECK3-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86639// CHECK3-NEXT: call void @_ZN2S1C2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])6640// CHECK3-NEXT: ret void6641//6642//6643// CHECK3-LABEL: define {{[^@]+}}@_ZN2S1C2Ev6644// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {6645// CHECK3-NEXT: entry:6646// CHECK3-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 86647// CHECK3-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 86648// CHECK3-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86649// CHECK3-NEXT: call void @_ZN2S18taskinitEv(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])6650// CHECK3-NEXT: ret void6651//6652//6653// CHECK3-LABEL: define {{[^@]+}}@_ZN2S18taskinitEv6654// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) #[[ATTR1]] align 2 {6655// CHECK3-NEXT: entry:6656// CHECK3-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 86657// CHECK3-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_21:%.*]], align 86658// CHECK3-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 86659// CHECK3-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86660// CHECK3-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_21]], ptr [[AGG_CAPTURED]], i32 0, i32 06661// CHECK3-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 86662// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB25:[0-9]+]])6663// CHECK3-NEXT: [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..23)6664// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP1]], i32 0, i32 06665// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP2]], i32 0, i32 06666// CHECK3-NEXT: [[TMP4:%.*]] = load ptr, ptr [[TMP3]], align 86667// CHECK3-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP4]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)6668// CHECK3-NEXT: [[OMP_GLOBAL_THREAD_NUM2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB25]])6669// CHECK3-NEXT: [[TMP5:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2]], ptr [[TMP1]])6670// CHECK3-NEXT: ret void6671//6672//6673// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry..236674// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {6675// CHECK3-NEXT: entry:6676// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 46677// CHECK3-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 86678// CHECK3-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 86679// CHECK3-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 86680// CHECK3-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 86681// CHECK3-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 86682// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca i32, align 46683// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 86684// CHECK3-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 46685// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 86686// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 46687// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 86688// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP3]], i32 0, i32 06689// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 26690// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 06691// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 86692// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META113:![0-9]+]])6693// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META116:![0-9]+]])6694// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META118:![0-9]+]])6695// CHECK3-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META120:![0-9]+]])6696// CHECK3-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122:![0-9]+]]6697// CHECK3-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]6698// CHECK3-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]6699// CHECK3-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]6700// CHECK3-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]6701// CHECK3-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]6702// CHECK3-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]6703// CHECK3-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 86704// CHECK3-NEXT: store i32 0, ptr [[TMP9]], align 46705// CHECK3-NEXT: ret i32 06706//6707//6708// CHECK3-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_task_codegen.cpp6709// CHECK3-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {6710// CHECK3-NEXT: entry:6711// CHECK3-NEXT: call void @__cxx_global_var_init()6712// CHECK3-NEXT: ret void6713//6714//6715// CHECK4-LABEL: define {{[^@]+}}@main6716// CHECK4-SAME: () #[[ATTR0:[0-9]+]] {6717// CHECK4-NEXT: entry:6718// CHECK4-NEXT: [[RETVAL:%.*]] = alloca i32, align 46719// CHECK4-NEXT: [[B:%.*]] = alloca i8, align 16720// CHECK4-NEXT: [[S:%.*]] = alloca [2 x %struct.S], align 46721// CHECK4-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 86722// CHECK4-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 86723// CHECK4-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 86724// CHECK4-NEXT: [[AGG_CAPTURED2:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 86725// CHECK4-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 86726// CHECK4-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 86727// CHECK4-NEXT: [[AGG_CAPTURED6:%.*]] = alloca [[STRUCT_ANON_2:%.*]], align 16728// CHECK4-NEXT: [[AGG_CAPTURED9:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 16729// CHECK4-NEXT: [[DOTDEP_ARR_ADDR11:%.*]] = alloca [2 x %struct.kmp_depend_info], align 86730// CHECK4-NEXT: [[DEP_COUNTER_ADDR17:%.*]] = alloca i64, align 86731// CHECK4-NEXT: [[AGG_CAPTURED19:%.*]] = alloca [[STRUCT_ANON_6:%.*]], align 16732// CHECK4-NEXT: [[DOTDEP_ARR_ADDR21:%.*]] = alloca [2 x %struct.kmp_depend_info], align 86733// CHECK4-NEXT: [[DEP_COUNTER_ADDR27:%.*]] = alloca i64, align 86734// CHECK4-NEXT: [[AGG_CAPTURED29:%.*]] = alloca [[STRUCT_ANON_8:%.*]], align 16735// CHECK4-NEXT: [[DOTDEP_ARR_ADDR31:%.*]] = alloca [3 x %struct.kmp_depend_info], align 86736// CHECK4-NEXT: [[DEP_COUNTER_ADDR37:%.*]] = alloca i64, align 86737// CHECK4-NEXT: [[AGG_CAPTURED39:%.*]] = alloca [[STRUCT_ANON_10:%.*]], align 16738// CHECK4-NEXT: [[FLAG:%.*]] = alloca i8, align 16739// CHECK4-NEXT: [[AGG_CAPTURED42:%.*]] = alloca [[STRUCT_ANON_12:%.*]], align 16740// CHECK4-NEXT: [[C:%.*]] = alloca i32, align 1286741// CHECK4-NEXT: [[AGG_CAPTURED45:%.*]] = alloca [[STRUCT_ANON_14:%.*]], align 86742// CHECK4-NEXT: [[AGG_CAPTURED48:%.*]] = alloca [[STRUCT_ANON_16:%.*]], align 16743// CHECK4-NEXT: store i32 0, ptr [[RETVAL]], align 46744// CHECK4-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 06745// CHECK4-NEXT: [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 26746// CHECK4-NEXT: br label [[ARRAYCTOR_LOOP:%.*]]6747// CHECK4: arrayctor.loop:6748// CHECK4-NEXT: [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]6749// CHECK4-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])6750// CHECK4-NEXT: [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 16751// CHECK4-NEXT: [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]6752// CHECK4-NEXT: br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]6753// CHECK4: arrayctor.cont:6754// CHECK4-NEXT: [[TMP0:%.*]] = load i32, ptr @a, align 46755// CHECK4-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i646756// CHECK4-NEXT: [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()6757// CHECK4-NEXT: store ptr [[TMP2]], ptr [[SAVED_STACK]], align 86758// CHECK4-NEXT: [[TMP3:%.*]] = mul nuw i64 10, [[TMP1]]6759// CHECK4-NEXT: [[VLA:%.*]] = alloca i32, i64 [[TMP3]], align 166760// CHECK4-NEXT: store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 86761// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 06762// CHECK4-NEXT: store ptr [[B]], ptr [[TMP4]], align 86763// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 16764// CHECK4-NEXT: store ptr [[S]], ptr [[TMP5]], align 86765// CHECK4-NEXT: [[TMP6:%.*]] = load i8, ptr [[B]], align 16766// CHECK4-NEXT: [[CONV:%.*]] = sext i8 [[TMP6]] to i326767// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3:[0-9]+]])6768// CHECK4-NEXT: [[TMP7:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1:[0-9]+]], i32 [[OMP_GLOBAL_THREAD_NUM]], i32 33, i64 40, i64 16, ptr @.omp_task_entry.)6769// CHECK4-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP7]], i32 0, i32 06770// CHECK4-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP8]], i32 0, i32 06771// CHECK4-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 86772// CHECK4-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP10]], ptr align 8 [[AGG_CAPTURED]], i64 16, i1 false)6773// CHECK4-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP8]], i32 0, i32 46774// CHECK4-NEXT: store i32 [[CONV]], ptr [[TMP11]], align 86775// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3]])6776// CHECK4-NEXT: [[TMP12:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM1]], ptr [[TMP7]])6777// CHECK4-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_0]], ptr [[AGG_CAPTURED2]], i32 0, i32 06778// CHECK4-NEXT: store ptr [[S]], ptr [[TMP13]], align 86779// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM3:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB5:[0-9]+]])6780// CHECK4-NEXT: [[TMP14:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..2)6781// CHECK4-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP14]], i32 0, i32 06782// CHECK4-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP15]], i32 0, i32 06783// CHECK4-NEXT: [[TMP17:%.*]] = load ptr, ptr [[TMP16]], align 86784// CHECK4-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP17]], ptr align 8 [[AGG_CAPTURED2]], i64 8, i1 false)6785// CHECK4-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 06786// CHECK4-NEXT: [[TMP19:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP18]], i64 06787// CHECK4-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 06788// CHECK4-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP20]], align 86789// CHECK4-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 16790// CHECK4-NEXT: store i64 4, ptr [[TMP21]], align 86791// CHECK4-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 26792// CHECK4-NEXT: store i8 1, ptr [[TMP22]], align 86793// CHECK4-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i646794// CHECK4-NEXT: [[TMP24:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 16795// CHECK4-NEXT: [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 06796// CHECK4-NEXT: store i64 [[TMP23]], ptr [[TMP25]], align 86797// CHECK4-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 16798// CHECK4-NEXT: store i64 1, ptr [[TMP26]], align 86799// CHECK4-NEXT: [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 26800// CHECK4-NEXT: store i8 1, ptr [[TMP27]], align 86801// CHECK4-NEXT: [[TMP28:%.*]] = ptrtoint ptr [[S]] to i646802// CHECK4-NEXT: [[TMP29:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 26803// CHECK4-NEXT: [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 06804// CHECK4-NEXT: store i64 [[TMP28]], ptr [[TMP30]], align 86805// CHECK4-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 16806// CHECK4-NEXT: store i64 8, ptr [[TMP31]], align 86807// CHECK4-NEXT: [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 26808// CHECK4-NEXT: store i8 1, ptr [[TMP32]], align 86809// CHECK4-NEXT: [[TMP33:%.*]] = mul nsw i64 0, [[TMP1]]6810// CHECK4-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP33]]6811// CHECK4-NEXT: [[TMP34:%.*]] = mul nsw i64 9, [[TMP1]]6812// CHECK4-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP34]]6813// CHECK4-NEXT: [[TMP35:%.*]] = getelementptr i32, ptr [[ARRAYIDX4]], i32 16814// CHECK4-NEXT: [[TMP36:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i646815// CHECK4-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[TMP35]] to i646816// CHECK4-NEXT: [[TMP38:%.*]] = sub nuw i64 [[TMP37]], [[TMP36]]6817// CHECK4-NEXT: [[TMP39:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i646818// CHECK4-NEXT: [[TMP40:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 36819// CHECK4-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 06820// CHECK4-NEXT: store i64 [[TMP39]], ptr [[TMP41]], align 86821// CHECK4-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 16822// CHECK4-NEXT: store i64 [[TMP38]], ptr [[TMP42]], align 86823// CHECK4-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 26824// CHECK4-NEXT: store i8 1, ptr [[TMP43]], align 86825// CHECK4-NEXT: store i64 4, ptr [[DEP_COUNTER_ADDR]], align 86826// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM5:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB5]])6827// CHECK4-NEXT: [[TMP44:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM5]], ptr [[TMP14]], i32 4, ptr [[TMP18]], i32 0, ptr null)6828// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM7:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7:[0-9]+]])6829// CHECK4-NEXT: [[TMP45:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM7]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..4)6830// CHECK4-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP45]], i32 0, i32 06831// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM8:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7]])6832// CHECK4-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP46]], i32 0, i32 26833// CHECK4-NEXT: store i32 0, ptr [[TMP47]], align 86834// CHECK4-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8]], ptr [[TMP45]])6835// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM10:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9:[0-9]+]])6836// CHECK4-NEXT: [[TMP49:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM10]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..6)6837// CHECK4-NEXT: [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP49]], i32 0, i32 06838// CHECK4-NEXT: [[TMP51:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR11]], i64 0, i64 06839// CHECK4-NEXT: [[ARRAYIDX12:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 06840// CHECK4-NEXT: [[TMP52:%.*]] = ptrtoint ptr [[ARRAYIDX12]] to i646841// CHECK4-NEXT: [[TMP53:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP51]], i64 06842// CHECK4-NEXT: [[TMP54:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 06843// CHECK4-NEXT: store i64 [[TMP52]], ptr [[TMP54]], align 86844// CHECK4-NEXT: [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 16845// CHECK4-NEXT: store i64 4, ptr [[TMP55]], align 86846// CHECK4-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 26847// CHECK4-NEXT: store i8 3, ptr [[TMP56]], align 86848// CHECK4-NEXT: [[TMP57:%.*]] = load i8, ptr [[B]], align 16849// CHECK4-NEXT: [[TMP58:%.*]] = sext i8 [[TMP57]] to i646850// CHECK4-NEXT: [[TMP59:%.*]] = mul nsw i64 4, [[TMP1]]6851// CHECK4-NEXT: [[ARRAYIDX13:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP59]]6852// CHECK4-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX13]], i64 [[TMP58]]6853// CHECK4-NEXT: [[TMP60:%.*]] = load i8, ptr [[B]], align 16854// CHECK4-NEXT: [[TMP61:%.*]] = sext i8 [[TMP60]] to i646855// CHECK4-NEXT: [[TMP62:%.*]] = mul nsw i64 9, [[TMP1]]6856// CHECK4-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP62]]6857// CHECK4-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX15]], i64 [[TMP61]]6858// CHECK4-NEXT: [[TMP63:%.*]] = getelementptr i32, ptr [[ARRAYIDX16]], i32 16859// CHECK4-NEXT: [[TMP64:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i646860// CHECK4-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[TMP63]] to i646861// CHECK4-NEXT: [[TMP66:%.*]] = sub nuw i64 [[TMP65]], [[TMP64]]6862// CHECK4-NEXT: [[TMP67:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i646863// CHECK4-NEXT: [[TMP68:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP51]], i64 16864// CHECK4-NEXT: [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 06865// CHECK4-NEXT: store i64 [[TMP67]], ptr [[TMP69]], align 86866// CHECK4-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 16867// CHECK4-NEXT: store i64 [[TMP66]], ptr [[TMP70]], align 86868// CHECK4-NEXT: [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 26869// CHECK4-NEXT: store i8 3, ptr [[TMP71]], align 86870// CHECK4-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR17]], align 86871// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM18:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9]])6872// CHECK4-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP50]], i32 0, i32 26873// CHECK4-NEXT: store i32 0, ptr [[TMP72]], align 86874// CHECK4-NEXT: [[TMP73:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM18]], ptr [[TMP49]], i32 2, ptr [[TMP51]], i32 0, ptr null)6875// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM20:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11:[0-9]+]])6876// CHECK4-NEXT: [[TMP74:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM20]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..8)6877// CHECK4-NEXT: [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP74]], i32 0, i32 06878// CHECK4-NEXT: [[TMP76:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR21]], i64 0, i64 06879// CHECK4-NEXT: [[ARRAYIDX22:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 06880// CHECK4-NEXT: [[TMP77:%.*]] = ptrtoint ptr [[ARRAYIDX22]] to i646881// CHECK4-NEXT: [[TMP78:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP76]], i64 06882// CHECK4-NEXT: [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 06883// CHECK4-NEXT: store i64 [[TMP77]], ptr [[TMP79]], align 86884// CHECK4-NEXT: [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 16885// CHECK4-NEXT: store i64 4, ptr [[TMP80]], align 86886// CHECK4-NEXT: [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 26887// CHECK4-NEXT: store i8 4, ptr [[TMP81]], align 86888// CHECK4-NEXT: [[TMP82:%.*]] = load i8, ptr [[B]], align 16889// CHECK4-NEXT: [[TMP83:%.*]] = sext i8 [[TMP82]] to i646890// CHECK4-NEXT: [[TMP84:%.*]] = mul nsw i64 4, [[TMP1]]6891// CHECK4-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP84]]6892// CHECK4-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX23]], i64 [[TMP83]]6893// CHECK4-NEXT: [[TMP85:%.*]] = load i8, ptr [[B]], align 16894// CHECK4-NEXT: [[TMP86:%.*]] = sext i8 [[TMP85]] to i646895// CHECK4-NEXT: [[TMP87:%.*]] = mul nsw i64 9, [[TMP1]]6896// CHECK4-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP87]]6897// CHECK4-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[TMP86]]6898// CHECK4-NEXT: [[TMP88:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 16899// CHECK4-NEXT: [[TMP89:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i646900// CHECK4-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[TMP88]] to i646901// CHECK4-NEXT: [[TMP91:%.*]] = sub nuw i64 [[TMP90]], [[TMP89]]6902// CHECK4-NEXT: [[TMP92:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i646903// CHECK4-NEXT: [[TMP93:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP76]], i64 16904// CHECK4-NEXT: [[TMP94:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 06905// CHECK4-NEXT: store i64 [[TMP92]], ptr [[TMP94]], align 86906// CHECK4-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 16907// CHECK4-NEXT: store i64 [[TMP91]], ptr [[TMP95]], align 86908// CHECK4-NEXT: [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 26909// CHECK4-NEXT: store i8 4, ptr [[TMP96]], align 86910// CHECK4-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR27]], align 86911// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM28:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11]])6912// CHECK4-NEXT: [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP75]], i32 0, i32 26913// CHECK4-NEXT: store i32 0, ptr [[TMP97]], align 86914// CHECK4-NEXT: [[TMP98:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM28]], ptr [[TMP74]], i32 2, ptr [[TMP76]], i32 0, ptr null)6915// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM30:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB13:[0-9]+]])6916// CHECK4-NEXT: [[TMP99:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM30]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..10)6917// CHECK4-NEXT: [[TMP100:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP99]], i32 0, i32 06918// CHECK4-NEXT: [[TMP101:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR31]], i64 0, i64 06919// CHECK4-NEXT: [[TMP102:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 06920// CHECK4-NEXT: [[TMP103:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 06921// CHECK4-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP103]], align 86922// CHECK4-NEXT: [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 16923// CHECK4-NEXT: store i64 4, ptr [[TMP104]], align 86924// CHECK4-NEXT: [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 26925// CHECK4-NEXT: store i8 3, ptr [[TMP105]], align 86926// CHECK4-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 16927// CHECK4-NEXT: [[TMP106:%.*]] = ptrtoint ptr [[ARRAYIDX32]] to i646928// CHECK4-NEXT: [[TMP107:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 16929// CHECK4-NEXT: [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 06930// CHECK4-NEXT: store i64 [[TMP106]], ptr [[TMP108]], align 86931// CHECK4-NEXT: [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 16932// CHECK4-NEXT: store i64 4, ptr [[TMP109]], align 86933// CHECK4-NEXT: [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 26934// CHECK4-NEXT: store i8 3, ptr [[TMP110]], align 86935// CHECK4-NEXT: [[TMP111:%.*]] = mul nsw i64 0, [[TMP1]]6936// CHECK4-NEXT: [[ARRAYIDX33:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP111]]6937// CHECK4-NEXT: [[ARRAYIDX34:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX33]], i64 36938// CHECK4-NEXT: [[TMP112:%.*]] = load i32, ptr @a, align 46939// CHECK4-NEXT: [[TMP113:%.*]] = sext i32 [[TMP112]] to i646940// CHECK4-NEXT: [[LEN_SUB_1:%.*]] = sub nsw i64 [[TMP113]], 16941// CHECK4-NEXT: [[TMP114:%.*]] = load i32, ptr @a, align 46942// CHECK4-NEXT: [[TMP115:%.*]] = sext i32 [[TMP114]] to i646943// CHECK4-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP115]]6944// CHECK4-NEXT: [[TMP116:%.*]] = mul nsw i64 [[LB_ADD_LEN]], [[TMP1]]6945// CHECK4-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP116]]6946// CHECK4-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX35]], i64 [[LEN_SUB_1]]6947// CHECK4-NEXT: [[TMP117:%.*]] = getelementptr i32, ptr [[ARRAYIDX36]], i32 16948// CHECK4-NEXT: [[TMP118:%.*]] = ptrtoint ptr [[ARRAYIDX34]] to i646949// CHECK4-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[TMP117]] to i646950// CHECK4-NEXT: [[TMP120:%.*]] = sub nuw i64 [[TMP119]], [[TMP118]]6951// CHECK4-NEXT: [[TMP121:%.*]] = ptrtoint ptr [[ARRAYIDX34]] to i646952// CHECK4-NEXT: [[TMP122:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 26953// CHECK4-NEXT: [[TMP123:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 06954// CHECK4-NEXT: store i64 [[TMP121]], ptr [[TMP123]], align 86955// CHECK4-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 16956// CHECK4-NEXT: store i64 [[TMP120]], ptr [[TMP124]], align 86957// CHECK4-NEXT: [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 26958// CHECK4-NEXT: store i8 3, ptr [[TMP125]], align 86959// CHECK4-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR37]], align 86960// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM38:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB13]])6961// CHECK4-NEXT: [[TMP126:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM38]], ptr [[TMP99]], i32 3, ptr [[TMP101]], i32 0, ptr null)6962// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM40:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15:[0-9]+]])6963// CHECK4-NEXT: [[TMP127:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM40]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..12)6964// CHECK4-NEXT: [[TMP128:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP127]], i32 0, i32 06965// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM41:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15]])6966// CHECK4-NEXT: [[TMP129:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM41]], ptr [[TMP127]])6967// CHECK4-NEXT: store i8 0, ptr [[FLAG]], align 16968// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM43:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB17:[0-9]+]])6969// CHECK4-NEXT: [[TMP130:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM43]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..14)6970// CHECK4-NEXT: [[TMP131:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP130]], i32 0, i32 06971// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM44:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB17]])6972// CHECK4-NEXT: [[TMP132:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM44]], ptr [[TMP130]])6973// CHECK4-NEXT: [[TMP133:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_14]], ptr [[AGG_CAPTURED45]], i32 0, i32 06974// CHECK4-NEXT: store ptr [[C]], ptr [[TMP133]], align 86975// CHECK4-NEXT: [[TMP134:%.*]] = load i8, ptr [[B]], align 16976// CHECK4-NEXT: [[TOBOOL:%.*]] = icmp ne i8 [[TMP134]], 06977// CHECK4-NEXT: [[TMP135:%.*]] = select i1 [[TOBOOL]], i32 2, i32 06978// CHECK4-NEXT: [[TMP136:%.*]] = or i32 [[TMP135]], 16979// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM46:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB19:[0-9]+]])6980// CHECK4-NEXT: [[TMP137:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM46]], i32 [[TMP136]], i64 40, i64 8, ptr @.omp_task_entry..16)6981// CHECK4-NEXT: [[TMP138:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP137]], i32 0, i32 06982// CHECK4-NEXT: [[TMP139:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP138]], i32 0, i32 06983// CHECK4-NEXT: [[TMP140:%.*]] = load ptr, ptr [[TMP139]], align 86984// CHECK4-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP140]], ptr align 8 [[AGG_CAPTURED45]], i64 8, i1 false)6985// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM47:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB19]])6986// CHECK4-NEXT: [[TMP141:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM47]], ptr [[TMP137]])6987// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM49:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21:[0-9]+]])6988// CHECK4-NEXT: [[TMP142:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM49]], i32 0, i64 256, i64 1, ptr @.omp_task_entry..21)6989// CHECK4-NEXT: [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP142]], i32 0, i32 06990// CHECK4-NEXT: [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP142]], i32 0, i32 26991// CHECK4-NEXT: [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP144]], i32 0, i32 06992// CHECK4-NEXT: [[TMP146:%.*]] = load i32, ptr [[C]], align 1286993// CHECK4-NEXT: store i32 [[TMP146]], ptr [[TMP145]], align 1286994// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM50:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])6995// CHECK4-NEXT: [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP143]], i32 0, i32 26996// CHECK4-NEXT: store i32 0, ptr [[TMP147]], align 166997// CHECK4-NEXT: [[TMP148:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM50]], ptr [[TMP142]])6998// CHECK4-NEXT: [[TMP149:%.*]] = load i32, ptr @a, align 46999// CHECK4-NEXT: store i32 [[TMP149]], ptr [[RETVAL]], align 47000// CHECK4-NEXT: [[TMP150:%.*]] = load ptr, ptr [[SAVED_STACK]], align 87001// CHECK4-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP150]])7002// CHECK4-NEXT: [[ARRAY_BEGIN51:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 07003// CHECK4-NEXT: [[TMP151:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN51]], i64 27004// CHECK4-NEXT: br label [[ARRAYDESTROY_BODY:%.*]]7005// CHECK4: arraydestroy.body:7006// CHECK4-NEXT: [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP151]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]7007// CHECK4-NEXT: [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -17008// CHECK4-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR4:[0-9]+]]7009// CHECK4-NEXT: [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN51]]7010// CHECK4-NEXT: br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE52:%.*]], label [[ARRAYDESTROY_BODY]]7011// CHECK4: arraydestroy.done52:7012// CHECK4-NEXT: [[TMP152:%.*]] = load i32, ptr [[RETVAL]], align 47013// CHECK4-NEXT: ret i32 [[TMP152]]7014//7015//7016// CHECK4-LABEL: define {{[^@]+}}@_ZN1SC1Ev7017// CHECK4-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] align 2 {7018// CHECK4-NEXT: entry:7019// CHECK4-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 87020// CHECK4-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 87021// CHECK4-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 87022// CHECK4-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])7023// CHECK4-NEXT: ret void7024//7025//7026// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry.7027// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {7028// CHECK4-NEXT: entry:7029// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47030// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87031// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87032// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87033// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87034// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87035// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47036// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87037// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47038// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87039// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47040// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87041// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 07042// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27043// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07044// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87045// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])7046// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])7047// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])7048// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])7049// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META12:![0-9]+]]7050// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META12]]7051// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META12]]7052// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META12]]7053// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META12]]7054// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]7055// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]7056// CHECK4-NEXT: store i32 15, ptr @a, align 4, !noalias [[META12]]7057// CHECK4-NEXT: [[TMP9:%.*]] = load i32, ptr @a, align 4, !noalias [[META12]]7058// CHECK4-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP9]] to i87059// CHECK4-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP8]], align 87060// CHECK4-NEXT: store i8 [[CONV_I]], ptr [[TMP10]], align 17061// CHECK4-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON:%.*]], ptr [[TMP8]], i32 0, i32 17062// CHECK4-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 87063// CHECK4-NEXT: store i32 10, ptr [[TMP12]], align 47064// CHECK4-NEXT: ret i32 07065//7066//7067// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..27068// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7069// CHECK4-NEXT: entry:7070// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47071// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87072// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87073// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87074// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87075// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87076// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47077// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87078// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47079// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87080// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47081// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87082// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 07083// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27084// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07085// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87086// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])7087// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META16:![0-9]+]])7088// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])7089// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])7090// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META22:![0-9]+]]7091// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META22]]7092// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META22]]7093// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META22]]7094// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META22]]7095// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]7096// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]7097// CHECK4-NEXT: store i32 15, ptr @a, align 4, !noalias [[META22]]7098// CHECK4-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 87099// CHECK4-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP9]], i64 0, i64 17100// CHECK4-NEXT: store i32 10, ptr [[ARRAYIDX_I]], align 47101// CHECK4-NEXT: ret i32 07102//7103//7104// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..47105// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7106// CHECK4-NEXT: entry:7107// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47108// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87109// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87110// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87111// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87112// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87113// CHECK4-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 47114// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47115// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87116// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47117// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87118// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47119// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87120// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP3]], i32 0, i32 07121// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27122// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07123// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87124// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META23:![0-9]+]])7125// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META26:![0-9]+]])7126// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])7127// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])7128// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32:![0-9]+]]7129// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]7130// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META32]]7131// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META32]]7132// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]7133// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]7134// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]7135// CHECK4-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]7136// CHECK4-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 47137// CHECK4-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [7138// CHECK4-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]7139// CHECK4-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]7140// CHECK4-NEXT: ]7141// CHECK4: .untied.done..i:7142// CHECK4-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]7143// CHECK4-NEXT: br label [[CLEANUP_I:%.*]]7144// CHECK4: .untied.jmp..i:7145// CHECK4-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]7146// CHECK4-NEXT: store i32 1, ptr [[TMP11]], align 47147// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7]])7148// CHECK4-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]7149// CHECK4-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])7150// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT:%.*]]7151// CHECK4: .untied.jmp.1.i:7152// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM2_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])7153// CHECK4-NEXT: call void @__kmpc_critical(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2_I]], ptr @.gomp_critical_user_.var)7154// CHECK4-NEXT: store i32 1, ptr @a, align 4, !noalias [[META32]]7155// CHECK4-NEXT: call void @__kmpc_end_critical(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2_I]], ptr @.gomp_critical_user_.var)7156// CHECK4-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]7157// CHECK4-NEXT: br label [[CLEANUP_I]]7158// CHECK4: cleanup.i:7159// CHECK4-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]7160// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT]]7161// CHECK4: .omp_outlined..3.exit:7162// CHECK4-NEXT: ret i32 07163//7164//7165// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..67166// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7167// CHECK4-NEXT: entry:7168// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47169// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87170// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87171// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87172// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87173// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87174// CHECK4-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 47175// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47176// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87177// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47178// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87179// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47180// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87181// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 07182// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27183// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07184// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87185// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META33:![0-9]+]])7186// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META36:![0-9]+]])7187// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META38:![0-9]+]])7188// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])7189// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42:![0-9]+]]7190// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]7191// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META42]]7192// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META42]]7193// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]7194// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]7195// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]7196// CHECK4-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]7197// CHECK4-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 47198// CHECK4-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [7199// CHECK4-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]7200// CHECK4-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]7201// CHECK4-NEXT: ]7202// CHECK4: .untied.done..i:7203// CHECK4-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]7204// CHECK4-NEXT: br label [[CLEANUP_I:%.*]]7205// CHECK4: .untied.jmp..i:7206// CHECK4-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]7207// CHECK4-NEXT: store i32 1, ptr [[TMP11]], align 47208// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9]])7209// CHECK4-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]7210// CHECK4-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])7211// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT:%.*]]7212// CHECK4: .untied.jmp.1.i:7213// CHECK4-NEXT: store i32 1, ptr @a, align 4, !noalias [[META42]]7214// CHECK4-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]7215// CHECK4-NEXT: br label [[CLEANUP_I]]7216// CHECK4: cleanup.i:7217// CHECK4-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]7218// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT]]7219// CHECK4: .omp_outlined..5.exit:7220// CHECK4-NEXT: ret i32 07221//7222//7223// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..87224// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7225// CHECK4-NEXT: entry:7226// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47227// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87228// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87229// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87230// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87231// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87232// CHECK4-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 47233// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47234// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87235// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47236// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87237// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47238// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87239// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP3]], i32 0, i32 07240// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27241// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07242// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87243// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])7244// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META46:![0-9]+]])7245// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META48:![0-9]+]])7246// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META50:![0-9]+]])7247// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52:![0-9]+]]7248// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]7249// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META52]]7250// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META52]]7251// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]7252// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]7253// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]7254// CHECK4-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]7255// CHECK4-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 47256// CHECK4-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [7257// CHECK4-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]7258// CHECK4-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]7259// CHECK4-NEXT: ]7260// CHECK4: .untied.done..i:7261// CHECK4-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]7262// CHECK4-NEXT: br label [[CLEANUP_I:%.*]]7263// CHECK4: .untied.jmp..i:7264// CHECK4-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]7265// CHECK4-NEXT: store i32 1, ptr [[TMP11]], align 47266// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11]])7267// CHECK4-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]7268// CHECK4-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])7269// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT:%.*]]7270// CHECK4: .untied.jmp.1.i:7271// CHECK4-NEXT: store i32 1, ptr @a, align 4, !noalias [[META52]]7272// CHECK4-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]7273// CHECK4-NEXT: br label [[CLEANUP_I]]7274// CHECK4: cleanup.i:7275// CHECK4-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]7276// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT]]7277// CHECK4: .omp_outlined..7.exit:7278// CHECK4-NEXT: ret i32 07279//7280//7281// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..107282// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7283// CHECK4-NEXT: entry:7284// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47285// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87286// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87287// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87288// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87289// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87290// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47291// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87292// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47293// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87294// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47295// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87296// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP3]], i32 0, i32 07297// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27298// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07299// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87300// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META53:![0-9]+]])7301// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META56:![0-9]+]])7302// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META58:![0-9]+]])7303// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META60:![0-9]+]])7304// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META62:![0-9]+]]7305// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META62]]7306// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META62]]7307// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META62]]7308// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META62]]7309// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]7310// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]7311// CHECK4-NEXT: store i32 2, ptr @a, align 4, !noalias [[META62]]7312// CHECK4-NEXT: ret i32 07313//7314//7315// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..127316// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7317// CHECK4-NEXT: entry:7318// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47319// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87320// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87321// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87322// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87323// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87324// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47325// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87326// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47327// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87328// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47329// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87330// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP3]], i32 0, i32 07331// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27332// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07333// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87334// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META63:![0-9]+]])7335// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META66:![0-9]+]])7336// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META68:![0-9]+]])7337// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META70:![0-9]+]])7338// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META72:![0-9]+]]7339// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META72]]7340// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META72]]7341// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META72]]7342// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META72]]7343// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]7344// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]7345// CHECK4-NEXT: store i32 2, ptr @a, align 4, !noalias [[META72]]7346// CHECK4-NEXT: ret i32 07347//7348//7349// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..147350// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7351// CHECK4-NEXT: entry:7352// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47353// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87354// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87355// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87356// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87357// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87358// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47359// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87360// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47361// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87362// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47363// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87364// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP3]], i32 0, i32 07365// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27366// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07367// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87368// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META73:![0-9]+]])7369// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META76:![0-9]+]])7370// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META78:![0-9]+]])7371// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META80:![0-9]+]])7372// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META82:![0-9]+]]7373// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META82]]7374// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META82]]7375// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META82]]7376// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META82]]7377// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]7378// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]7379// CHECK4-NEXT: store i32 3, ptr @a, align 4, !noalias [[META82]]7380// CHECK4-NEXT: ret i32 07381//7382//7383// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..167384// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7385// CHECK4-NEXT: entry:7386// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47387// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87388// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87389// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87390// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87391// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87392// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47393// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87394// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47395// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87396// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47397// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87398// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP3]], i32 0, i32 07399// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27400// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07401// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87402// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META83:![0-9]+]])7403// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META86:![0-9]+]])7404// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META88:![0-9]+]])7405// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META90:![0-9]+]])7406// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META92:![0-9]+]]7407// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META92]]7408// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META92]]7409// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META92]]7410// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META92]]7411// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]7412// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]7413// CHECK4-NEXT: store i32 4, ptr @a, align 4, !noalias [[META92]]7414// CHECK4-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 87415// CHECK4-NEXT: store i32 5, ptr [[TMP9]], align 1287416// CHECK4-NEXT: ret i32 07417//7418//7419// CHECK4-LABEL: define {{[^@]+}}@.omp_task_privates_map.7420// CHECK4-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7:[0-9]+]] {7421// CHECK4-NEXT: entry:7422// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 87423// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87424// CHECK4-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 87425// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87426// CHECK4-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 87427// CHECK4-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP2]], i32 0, i32 07428// CHECK4-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 87429// CHECK4-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 87430// CHECK4-NEXT: ret void7431//7432//7433// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..197434// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7435// CHECK4-NEXT: entry:7436// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47437// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87438// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87439// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87440// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87441// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87442// CHECK4-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 87443// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47444// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87445// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47446// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87447// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47448// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87449// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP3]], i32 0, i32 07450// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27451// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07452// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1287453// CHECK4-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18]], ptr [[TMP3]], i32 0, i32 27454// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META93:![0-9]+]])7455// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META96:![0-9]+]])7456// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META98:![0-9]+]])7457// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META100:![0-9]+]])7458// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META102:![0-9]+]]7459// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META102]]7460// CHECK4-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]7461// CHECK4-NEXT: store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]7462// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META102]]7463// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]7464// CHECK4-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]7465// CHECK4-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]7466// CHECK4-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]7467// CHECK4-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]7468// CHECK4-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META102]]7469// CHECK4-NEXT: store i32 4, ptr [[TMP12]], align 1287470// CHECK4-NEXT: store i32 4, ptr @a, align 4, !noalias [[META102]]7471// CHECK4-NEXT: ret i32 07472//7473//7474// CHECK4-LABEL: define {{[^@]+}}@_ZN1SD1Ev7475// CHECK4-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {7476// CHECK4-NEXT: entry:7477// CHECK4-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 87478// CHECK4-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 87479// CHECK4-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 87480// CHECK4-NEXT: call void @_ZN1SD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR4]]7481// CHECK4-NEXT: ret void7482//7483//7484// CHECK4-LABEL: define {{[^@]+}}@.omp_task_privates_map..207485// CHECK4-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]]) #[[ATTR7]] {7486// CHECK4-NEXT: entry:7487// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 87488// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87489// CHECK4-NEXT: [[DOTADDR2:%.*]] = alloca ptr, align 87490// CHECK4-NEXT: [[DOTADDR3:%.*]] = alloca ptr, align 87491// CHECK4-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 87492// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87493// CHECK4-NEXT: store ptr [[TMP2]], ptr [[DOTADDR2]], align 87494// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTADDR3]], align 87495// CHECK4-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR]], align 87496// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP4]], i32 0, i32 07497// CHECK4-NEXT: [[TMP6:%.*]] = load ptr, ptr [[DOTADDR1]], align 87498// CHECK4-NEXT: store ptr [[TMP5]], ptr [[TMP6]], align 87499// CHECK4-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 17500// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[DOTADDR2]], align 87501// CHECK4-NEXT: store ptr [[TMP7]], ptr [[TMP8]], align 87502// CHECK4-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 27503// CHECK4-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTADDR3]], align 87504// CHECK4-NEXT: store ptr [[TMP9]], ptr [[TMP10]], align 87505// CHECK4-NEXT: ret void7506//7507//7508// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..217509// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7510// CHECK4-NEXT: entry:7511// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47512// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87513// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87514// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87515// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87516// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87517// CHECK4-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 87518// CHECK4-NEXT: [[DOTLOCAL_PTR_ADDR_I:%.*]] = alloca ptr, align 87519// CHECK4-NEXT: [[DOTLOCAL_PTR_ADDR1_I:%.*]] = alloca ptr, align 87520// CHECK4-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 47521// CHECK4-NEXT: [[S1_I:%.*]] = alloca [[STRUCT_S:%.*]], align 47522// CHECK4-NEXT: [[S2_I:%.*]] = alloca [[STRUCT_S]], align 47523// CHECK4-NEXT: [[REF_TMP_I:%.*]] = alloca [[STRUCT_S]], align 47524// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47525// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87526// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47527// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87528// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47529// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87530// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP3]], i32 0, i32 07531// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27532// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07533// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1287534// CHECK4-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP3]], i32 0, i32 27535// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META103:![0-9]+]])7536// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META106:![0-9]+]])7537// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META108:![0-9]+]])7538// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META110:![0-9]+]])7539// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112:![0-9]+]]7540// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]7541// CHECK4-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]7542// CHECK4-NEXT: store ptr @.omp_task_privates_map..20, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]7543// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]7544// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]7545// CHECK4-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]7546// CHECK4-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]7547// CHECK4-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]7548// CHECK4-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR1_I]]) #[[ATTR4]]7549// CHECK4-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META112]]7550// CHECK4-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR_I]], align 8, !noalias [[META112]]7551// CHECK4-NEXT: [[TMP14:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR1_I]], align 8, !noalias [[META112]]7552// CHECK4-NEXT: [[TMP15:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]7553// CHECK4-NEXT: [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 47554// CHECK4-NEXT: switch i32 [[TMP16]], label [[DOTUNTIED_DONE__I:%.*]] [7555// CHECK4-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]7556// CHECK4-NEXT: i32 1, label [[DOTUNTIED_JMP_2_I:%.*]]7557// CHECK4-NEXT: i32 2, label [[DOTUNTIED_JMP_6_I:%.*]]7558// CHECK4-NEXT: i32 3, label [[DOTUNTIED_JMP_10_I:%.*]]7559// CHECK4-NEXT: i32 4, label [[DOTUNTIED_JMP_15_I:%.*]]7560// CHECK4-NEXT: ]7561// CHECK4: .untied.done..i:7562// CHECK4-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]7563// CHECK4-NEXT: br label [[CLEANUP_I:%.*]]7564// CHECK4: .untied.jmp..i:7565// CHECK4-NEXT: [[TMP17:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]7566// CHECK4-NEXT: store i32 1, ptr [[TMP17]], align 47567// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])7568// CHECK4-NEXT: [[TMP18:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]7569// CHECK4-NEXT: [[TMP19:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP18]])7570// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT:%.*]]7571// CHECK4: .untied.jmp.2.i:7572// CHECK4-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S1_I]])7573// CHECK4-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S2_I]])7574// CHECK4-NEXT: store i32 0, ptr [[S2_I]], align 4, !noalias [[META112]]7575// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM3_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23:[0-9]+]])7576// CHECK4-NEXT: [[TMP20:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3_I]], i32 1, i64 256, i64 1, ptr @.omp_task_entry..19)7577// CHECK4-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP20]], i32 0, i32 27578// CHECK4-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP12]], align 1287579// CHECK4-NEXT: store i32 [[TMP22]], ptr [[TMP21]], align 1287580// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM4_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23]])7581// CHECK4-NEXT: [[TMP23:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM4_I]], ptr [[TMP20]])7582// CHECK4-NEXT: [[TMP24:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]7583// CHECK4-NEXT: store i32 2, ptr [[TMP24]], align 47584// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM5_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])7585// CHECK4-NEXT: [[TMP25:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]7586// CHECK4-NEXT: [[TMP26:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM5_I]], ptr [[TMP25]])7587// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]7588// CHECK4: .untied.jmp.6.i:7589// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM8_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])7590// CHECK4-NEXT: [[TMP27:%.*]] = call i32 @__kmpc_omp_taskyield(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8_I]], i32 0)7591// CHECK4-NEXT: [[TMP28:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]7592// CHECK4-NEXT: store i32 3, ptr [[TMP28]], align 47593// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM9_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])7594// CHECK4-NEXT: [[TMP29:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]7595// CHECK4-NEXT: [[TMP30:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM9_I]], ptr [[TMP29]])7596// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]7597// CHECK4: .untied.jmp.10.i:7598// CHECK4-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]])7599// CHECK4-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[S1_I]], ptr align 4 [[REF_TMP_I]], i64 4, i1 false), !noalias [[META112]]7600// CHECK4-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]]) #[[ATTR4]]7601// CHECK4-NEXT: store i32 10, ptr [[S2_I]], align 4, !noalias [[META112]]7602// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM13_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])7603// CHECK4-NEXT: [[TMP31:%.*]] = call i32 @__kmpc_omp_taskwait(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM13_I]])7604// CHECK4-NEXT: [[TMP32:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]7605// CHECK4-NEXT: store i32 4, ptr [[TMP32]], align 47606// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM14_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])7607// CHECK4-NEXT: [[TMP33:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]7608// CHECK4-NEXT: [[TMP34:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM14_I]], ptr [[TMP33]])7609// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]7610// CHECK4: .untied.jmp.15.i:7611// CHECK4-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S2_I]]) #[[ATTR4]]7612// CHECK4-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S1_I]]) #[[ATTR4]]7613// CHECK4-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]7614// CHECK4-NEXT: br label [[CLEANUP_I]]7615// CHECK4: cleanup.i:7616// CHECK4-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]7617// CHECK4-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]7618// CHECK4: .omp_outlined..17.exit:7619// CHECK4-NEXT: ret i32 07620//7621//7622// CHECK4-LABEL: define {{[^@]+}}@_ZN1SC2Ev7623// CHECK4-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {7624// CHECK4-NEXT: entry:7625// CHECK4-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 87626// CHECK4-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 87627// CHECK4-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 87628// CHECK4-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 07629// CHECK4-NEXT: store i32 0, ptr [[A]], align 47630// CHECK4-NEXT: ret void7631//7632//7633// CHECK4-LABEL: define {{[^@]+}}@_ZN1SD2Ev7634// CHECK4-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {7635// CHECK4-NEXT: entry:7636// CHECK4-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 87637// CHECK4-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 87638// CHECK4-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 87639// CHECK4-NEXT: ret void7640//7641//7642// CHECK4-LABEL: define {{[^@]+}}@__cxx_global_var_init7643// CHECK4-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {7644// CHECK4-NEXT: entry:7645// CHECK4-NEXT: call void @_ZN2S1C1Ev(ptr noundef nonnull align 4 dereferenceable(4) @s1)7646// CHECK4-NEXT: ret void7647//7648//7649// CHECK4-LABEL: define {{[^@]+}}@_ZN2S1C1Ev7650// CHECK4-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {7651// CHECK4-NEXT: entry:7652// CHECK4-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 87653// CHECK4-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 87654// CHECK4-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 87655// CHECK4-NEXT: call void @_ZN2S1C2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])7656// CHECK4-NEXT: ret void7657//7658//7659// CHECK4-LABEL: define {{[^@]+}}@_ZN2S1C2Ev7660// CHECK4-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {7661// CHECK4-NEXT: entry:7662// CHECK4-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 87663// CHECK4-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 87664// CHECK4-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 87665// CHECK4-NEXT: call void @_ZN2S18taskinitEv(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])7666// CHECK4-NEXT: ret void7667//7668//7669// CHECK4-LABEL: define {{[^@]+}}@_ZN2S18taskinitEv7670// CHECK4-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) #[[ATTR1]] align 2 {7671// CHECK4-NEXT: entry:7672// CHECK4-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 87673// CHECK4-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_21:%.*]], align 87674// CHECK4-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 87675// CHECK4-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 87676// CHECK4-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_21]], ptr [[AGG_CAPTURED]], i32 0, i32 07677// CHECK4-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 87678// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB25:[0-9]+]])7679// CHECK4-NEXT: [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..23)7680// CHECK4-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP1]], i32 0, i32 07681// CHECK4-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP2]], i32 0, i32 07682// CHECK4-NEXT: [[TMP4:%.*]] = load ptr, ptr [[TMP3]], align 87683// CHECK4-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP4]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)7684// CHECK4-NEXT: [[OMP_GLOBAL_THREAD_NUM2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB25]])7685// CHECK4-NEXT: [[TMP5:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2]], ptr [[TMP1]])7686// CHECK4-NEXT: ret void7687//7688//7689// CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry..237690// CHECK4-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {7691// CHECK4-NEXT: entry:7692// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 47693// CHECK4-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 87694// CHECK4-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 87695// CHECK4-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 87696// CHECK4-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 87697// CHECK4-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 87698// CHECK4-NEXT: [[DOTADDR:%.*]] = alloca i32, align 47699// CHECK4-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 87700// CHECK4-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 47701// CHECK4-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 87702// CHECK4-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 47703// CHECK4-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 87704// CHECK4-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP3]], i32 0, i32 07705// CHECK4-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 27706// CHECK4-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 07707// CHECK4-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 87708// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META113:![0-9]+]])7709// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META116:![0-9]+]])7710// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META118:![0-9]+]])7711// CHECK4-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META120:![0-9]+]])7712// CHECK4-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122:![0-9]+]]7713// CHECK4-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]7714// CHECK4-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]7715// CHECK4-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]7716// CHECK4-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]7717// CHECK4-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]7718// CHECK4-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]7719// CHECK4-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 87720// CHECK4-NEXT: store i32 0, ptr [[TMP9]], align 47721// CHECK4-NEXT: ret i32 07722//7723//7724// CHECK4-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_task_codegen.cpp7725// CHECK4-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {7726// CHECK4-NEXT: entry:7727// CHECK4-NEXT: call void @__cxx_global_var_init()7728// CHECK4-NEXT: ret void7729//7730//7731// CHECK3-51-LABEL: define {{[^@]+}}@main7732// CHECK3-51-SAME: () #[[ATTR0:[0-9]+]] {7733// CHECK3-51-NEXT: entry:7734// CHECK3-51-NEXT: [[RETVAL:%.*]] = alloca i32, align 47735// CHECK3-51-NEXT: [[B:%.*]] = alloca i8, align 17736// CHECK3-51-NEXT: [[S:%.*]] = alloca [2 x %struct.S], align 47737// CHECK3-51-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 87738// CHECK3-51-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 87739// CHECK3-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 87740// CHECK3-51-NEXT: [[AGG_CAPTURED2:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 87741// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 87742// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 87743// CHECK3-51-NEXT: [[AGG_CAPTURED6:%.*]] = alloca [[STRUCT_ANON_2:%.*]], align 17744// CHECK3-51-NEXT: [[AGG_CAPTURED9:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 17745// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR11:%.*]] = alloca [2 x %struct.kmp_depend_info], align 87746// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR17:%.*]] = alloca i64, align 87747// CHECK3-51-NEXT: [[AGG_CAPTURED19:%.*]] = alloca [[STRUCT_ANON_6:%.*]], align 17748// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR21:%.*]] = alloca [2 x %struct.kmp_depend_info], align 87749// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR27:%.*]] = alloca i64, align 87750// CHECK3-51-NEXT: [[AGG_CAPTURED29:%.*]] = alloca [[STRUCT_ANON_8:%.*]], align 17751// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR31:%.*]] = alloca [3 x %struct.kmp_depend_info], align 87752// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR37:%.*]] = alloca i64, align 87753// CHECK3-51-NEXT: [[AGG_CAPTURED39:%.*]] = alloca [[STRUCT_ANON_10:%.*]], align 17754// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR41:%.*]] = alloca [3 x %struct.kmp_depend_info], align 87755// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR49:%.*]] = alloca i64, align 87756// CHECK3-51-NEXT: [[AGG_CAPTURED51:%.*]] = alloca [[STRUCT_ANON_12:%.*]], align 17757// CHECK3-51-NEXT: [[FLAG:%.*]] = alloca i8, align 17758// CHECK3-51-NEXT: [[AGG_CAPTURED54:%.*]] = alloca [[STRUCT_ANON_14:%.*]], align 17759// CHECK3-51-NEXT: [[C:%.*]] = alloca i32, align 1287760// CHECK3-51-NEXT: [[AGG_CAPTURED57:%.*]] = alloca [[STRUCT_ANON_16:%.*]], align 87761// CHECK3-51-NEXT: [[AGG_CAPTURED60:%.*]] = alloca [[STRUCT_ANON_18:%.*]], align 17762// CHECK3-51-NEXT: store i32 0, ptr [[RETVAL]], align 47763// CHECK3-51-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 07764// CHECK3-51-NEXT: [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 27765// CHECK3-51-NEXT: br label [[ARRAYCTOR_LOOP:%.*]]7766// CHECK3-51: arrayctor.loop:7767// CHECK3-51-NEXT: [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]7768// CHECK3-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])7769// CHECK3-51-NEXT: [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 17770// CHECK3-51-NEXT: [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]7771// CHECK3-51-NEXT: br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]7772// CHECK3-51: arrayctor.cont:7773// CHECK3-51-NEXT: [[TMP0:%.*]] = load i32, ptr @a, align 47774// CHECK3-51-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i647775// CHECK3-51-NEXT: [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()7776// CHECK3-51-NEXT: store ptr [[TMP2]], ptr [[SAVED_STACK]], align 87777// CHECK3-51-NEXT: [[TMP3:%.*]] = mul nuw i64 10, [[TMP1]]7778// CHECK3-51-NEXT: [[VLA:%.*]] = alloca i32, i64 [[TMP3]], align 167779// CHECK3-51-NEXT: store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 87780// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 07781// CHECK3-51-NEXT: store ptr [[B]], ptr [[TMP4]], align 87782// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 17783// CHECK3-51-NEXT: store ptr [[S]], ptr [[TMP5]], align 87784// CHECK3-51-NEXT: [[TMP6:%.*]] = load i8, ptr [[B]], align 17785// CHECK3-51-NEXT: [[CONV:%.*]] = sext i8 [[TMP6]] to i327786// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3:[0-9]+]])7787// CHECK3-51-NEXT: [[TMP7:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1:[0-9]+]], i32 [[OMP_GLOBAL_THREAD_NUM]], i32 33, i64 40, i64 16, ptr @.omp_task_entry.)7788// CHECK3-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP7]], i32 0, i32 07789// CHECK3-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP8]], i32 0, i32 07790// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 87791// CHECK3-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP10]], ptr align 8 [[AGG_CAPTURED]], i64 16, i1 false)7792// CHECK3-51-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP8]], i32 0, i32 47793// CHECK3-51-NEXT: store i32 [[CONV]], ptr [[TMP11]], align 87794// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3]])7795// CHECK3-51-NEXT: [[TMP12:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM1]], ptr [[TMP7]])7796// CHECK3-51-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_0]], ptr [[AGG_CAPTURED2]], i32 0, i32 07797// CHECK3-51-NEXT: store ptr [[S]], ptr [[TMP13]], align 87798// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM3:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB5:[0-9]+]])7799// CHECK3-51-NEXT: [[TMP14:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..2)7800// CHECK3-51-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP14]], i32 0, i32 07801// CHECK3-51-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP15]], i32 0, i32 07802// CHECK3-51-NEXT: [[TMP17:%.*]] = load ptr, ptr [[TMP16]], align 87803// CHECK3-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP17]], ptr align 8 [[AGG_CAPTURED2]], i64 8, i1 false)7804// CHECK3-51-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 07805// CHECK3-51-NEXT: [[TMP19:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP18]], i64 07806// CHECK3-51-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 07807// CHECK3-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP20]], align 87808// CHECK3-51-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 17809// CHECK3-51-NEXT: store i64 4, ptr [[TMP21]], align 87810// CHECK3-51-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 27811// CHECK3-51-NEXT: store i8 1, ptr [[TMP22]], align 87812// CHECK3-51-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i647813// CHECK3-51-NEXT: [[TMP24:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 17814// CHECK3-51-NEXT: [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 07815// CHECK3-51-NEXT: store i64 [[TMP23]], ptr [[TMP25]], align 87816// CHECK3-51-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 17817// CHECK3-51-NEXT: store i64 1, ptr [[TMP26]], align 87818// CHECK3-51-NEXT: [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 27819// CHECK3-51-NEXT: store i8 1, ptr [[TMP27]], align 87820// CHECK3-51-NEXT: [[TMP28:%.*]] = ptrtoint ptr [[S]] to i647821// CHECK3-51-NEXT: [[TMP29:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 27822// CHECK3-51-NEXT: [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 07823// CHECK3-51-NEXT: store i64 [[TMP28]], ptr [[TMP30]], align 87824// CHECK3-51-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 17825// CHECK3-51-NEXT: store i64 8, ptr [[TMP31]], align 87826// CHECK3-51-NEXT: [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 27827// CHECK3-51-NEXT: store i8 1, ptr [[TMP32]], align 87828// CHECK3-51-NEXT: [[TMP33:%.*]] = mul nsw i64 0, [[TMP1]]7829// CHECK3-51-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP33]]7830// CHECK3-51-NEXT: [[TMP34:%.*]] = mul nsw i64 9, [[TMP1]]7831// CHECK3-51-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP34]]7832// CHECK3-51-NEXT: [[TMP35:%.*]] = getelementptr i32, ptr [[ARRAYIDX4]], i32 17833// CHECK3-51-NEXT: [[TMP36:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i647834// CHECK3-51-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[TMP35]] to i647835// CHECK3-51-NEXT: [[TMP38:%.*]] = sub nuw i64 [[TMP37]], [[TMP36]]7836// CHECK3-51-NEXT: [[TMP39:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i647837// CHECK3-51-NEXT: [[TMP40:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 37838// CHECK3-51-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 07839// CHECK3-51-NEXT: store i64 [[TMP39]], ptr [[TMP41]], align 87840// CHECK3-51-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 17841// CHECK3-51-NEXT: store i64 [[TMP38]], ptr [[TMP42]], align 87842// CHECK3-51-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 27843// CHECK3-51-NEXT: store i8 1, ptr [[TMP43]], align 87844// CHECK3-51-NEXT: store i64 4, ptr [[DEP_COUNTER_ADDR]], align 87845// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM5:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB5]])7846// CHECK3-51-NEXT: [[TMP44:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM5]], ptr [[TMP14]], i32 4, ptr [[TMP18]], i32 0, ptr null)7847// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM7:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7:[0-9]+]])7848// CHECK3-51-NEXT: [[TMP45:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM7]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..4)7849// CHECK3-51-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP45]], i32 0, i32 07850// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM8:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7]])7851// CHECK3-51-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP46]], i32 0, i32 27852// CHECK3-51-NEXT: store i32 0, ptr [[TMP47]], align 87853// CHECK3-51-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8]], ptr [[TMP45]])7854// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM10:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9:[0-9]+]])7855// CHECK3-51-NEXT: [[TMP49:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM10]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..6)7856// CHECK3-51-NEXT: [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP49]], i32 0, i32 07857// CHECK3-51-NEXT: [[TMP51:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR11]], i64 0, i64 07858// CHECK3-51-NEXT: [[ARRAYIDX12:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 07859// CHECK3-51-NEXT: [[TMP52:%.*]] = ptrtoint ptr [[ARRAYIDX12]] to i647860// CHECK3-51-NEXT: [[TMP53:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP51]], i64 07861// CHECK3-51-NEXT: [[TMP54:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 07862// CHECK3-51-NEXT: store i64 [[TMP52]], ptr [[TMP54]], align 87863// CHECK3-51-NEXT: [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 17864// CHECK3-51-NEXT: store i64 4, ptr [[TMP55]], align 87865// CHECK3-51-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 27866// CHECK3-51-NEXT: store i8 3, ptr [[TMP56]], align 87867// CHECK3-51-NEXT: [[TMP57:%.*]] = load i8, ptr [[B]], align 17868// CHECK3-51-NEXT: [[TMP58:%.*]] = sext i8 [[TMP57]] to i647869// CHECK3-51-NEXT: [[TMP59:%.*]] = mul nsw i64 4, [[TMP1]]7870// CHECK3-51-NEXT: [[ARRAYIDX13:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP59]]7871// CHECK3-51-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX13]], i64 [[TMP58]]7872// CHECK3-51-NEXT: [[TMP60:%.*]] = load i8, ptr [[B]], align 17873// CHECK3-51-NEXT: [[TMP61:%.*]] = sext i8 [[TMP60]] to i647874// CHECK3-51-NEXT: [[TMP62:%.*]] = mul nsw i64 9, [[TMP1]]7875// CHECK3-51-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP62]]7876// CHECK3-51-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX15]], i64 [[TMP61]]7877// CHECK3-51-NEXT: [[TMP63:%.*]] = getelementptr i32, ptr [[ARRAYIDX16]], i32 17878// CHECK3-51-NEXT: [[TMP64:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i647879// CHECK3-51-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[TMP63]] to i647880// CHECK3-51-NEXT: [[TMP66:%.*]] = sub nuw i64 [[TMP65]], [[TMP64]]7881// CHECK3-51-NEXT: [[TMP67:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i647882// CHECK3-51-NEXT: [[TMP68:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP51]], i64 17883// CHECK3-51-NEXT: [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 07884// CHECK3-51-NEXT: store i64 [[TMP67]], ptr [[TMP69]], align 87885// CHECK3-51-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 17886// CHECK3-51-NEXT: store i64 [[TMP66]], ptr [[TMP70]], align 87887// CHECK3-51-NEXT: [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 27888// CHECK3-51-NEXT: store i8 3, ptr [[TMP71]], align 87889// CHECK3-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR17]], align 87890// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM18:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9]])7891// CHECK3-51-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP50]], i32 0, i32 27892// CHECK3-51-NEXT: store i32 0, ptr [[TMP72]], align 87893// CHECK3-51-NEXT: [[TMP73:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM18]], ptr [[TMP49]], i32 2, ptr [[TMP51]], i32 0, ptr null)7894// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM20:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11:[0-9]+]])7895// CHECK3-51-NEXT: [[TMP74:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM20]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..8)7896// CHECK3-51-NEXT: [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP74]], i32 0, i32 07897// CHECK3-51-NEXT: [[TMP76:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR21]], i64 0, i64 07898// CHECK3-51-NEXT: [[ARRAYIDX22:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 07899// CHECK3-51-NEXT: [[TMP77:%.*]] = ptrtoint ptr [[ARRAYIDX22]] to i647900// CHECK3-51-NEXT: [[TMP78:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP76]], i64 07901// CHECK3-51-NEXT: [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 07902// CHECK3-51-NEXT: store i64 [[TMP77]], ptr [[TMP79]], align 87903// CHECK3-51-NEXT: [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 17904// CHECK3-51-NEXT: store i64 4, ptr [[TMP80]], align 87905// CHECK3-51-NEXT: [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 27906// CHECK3-51-NEXT: store i8 4, ptr [[TMP81]], align 87907// CHECK3-51-NEXT: [[TMP82:%.*]] = load i8, ptr [[B]], align 17908// CHECK3-51-NEXT: [[TMP83:%.*]] = sext i8 [[TMP82]] to i647909// CHECK3-51-NEXT: [[TMP84:%.*]] = mul nsw i64 4, [[TMP1]]7910// CHECK3-51-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP84]]7911// CHECK3-51-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX23]], i64 [[TMP83]]7912// CHECK3-51-NEXT: [[TMP85:%.*]] = load i8, ptr [[B]], align 17913// CHECK3-51-NEXT: [[TMP86:%.*]] = sext i8 [[TMP85]] to i647914// CHECK3-51-NEXT: [[TMP87:%.*]] = mul nsw i64 9, [[TMP1]]7915// CHECK3-51-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP87]]7916// CHECK3-51-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[TMP86]]7917// CHECK3-51-NEXT: [[TMP88:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 17918// CHECK3-51-NEXT: [[TMP89:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i647919// CHECK3-51-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[TMP88]] to i647920// CHECK3-51-NEXT: [[TMP91:%.*]] = sub nuw i64 [[TMP90]], [[TMP89]]7921// CHECK3-51-NEXT: [[TMP92:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i647922// CHECK3-51-NEXT: [[TMP93:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP76]], i64 17923// CHECK3-51-NEXT: [[TMP94:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 07924// CHECK3-51-NEXT: store i64 [[TMP92]], ptr [[TMP94]], align 87925// CHECK3-51-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 17926// CHECK3-51-NEXT: store i64 [[TMP91]], ptr [[TMP95]], align 87927// CHECK3-51-NEXT: [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 27928// CHECK3-51-NEXT: store i8 4, ptr [[TMP96]], align 87929// CHECK3-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR27]], align 87930// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM28:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11]])7931// CHECK3-51-NEXT: [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP75]], i32 0, i32 27932// CHECK3-51-NEXT: store i32 0, ptr [[TMP97]], align 87933// CHECK3-51-NEXT: [[TMP98:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM28]], ptr [[TMP74]], i32 2, ptr [[TMP76]], i32 0, ptr null)7934// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM30:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB13:[0-9]+]])7935// CHECK3-51-NEXT: [[TMP99:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM30]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..10)7936// CHECK3-51-NEXT: [[TMP100:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP99]], i32 0, i32 07937// CHECK3-51-NEXT: [[TMP101:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR31]], i64 0, i64 07938// CHECK3-51-NEXT: [[TMP102:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 07939// CHECK3-51-NEXT: [[TMP103:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 07940// CHECK3-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP103]], align 87941// CHECK3-51-NEXT: [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 17942// CHECK3-51-NEXT: store i64 4, ptr [[TMP104]], align 87943// CHECK3-51-NEXT: [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 27944// CHECK3-51-NEXT: store i8 3, ptr [[TMP105]], align 87945// CHECK3-51-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 17946// CHECK3-51-NEXT: [[TMP106:%.*]] = ptrtoint ptr [[ARRAYIDX32]] to i647947// CHECK3-51-NEXT: [[TMP107:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 17948// CHECK3-51-NEXT: [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 07949// CHECK3-51-NEXT: store i64 [[TMP106]], ptr [[TMP108]], align 87950// CHECK3-51-NEXT: [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 17951// CHECK3-51-NEXT: store i64 4, ptr [[TMP109]], align 87952// CHECK3-51-NEXT: [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 27953// CHECK3-51-NEXT: store i8 3, ptr [[TMP110]], align 87954// CHECK3-51-NEXT: [[TMP111:%.*]] = mul nsw i64 0, [[TMP1]]7955// CHECK3-51-NEXT: [[ARRAYIDX33:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP111]]7956// CHECK3-51-NEXT: [[ARRAYIDX34:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX33]], i64 37957// CHECK3-51-NEXT: [[TMP112:%.*]] = load i32, ptr @a, align 47958// CHECK3-51-NEXT: [[TMP113:%.*]] = sext i32 [[TMP112]] to i647959// CHECK3-51-NEXT: [[LEN_SUB_1:%.*]] = sub nsw i64 [[TMP113]], 17960// CHECK3-51-NEXT: [[TMP114:%.*]] = load i32, ptr @a, align 47961// CHECK3-51-NEXT: [[TMP115:%.*]] = sext i32 [[TMP114]] to i647962// CHECK3-51-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP115]]7963// CHECK3-51-NEXT: [[TMP116:%.*]] = mul nsw i64 [[LB_ADD_LEN]], [[TMP1]]7964// CHECK3-51-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP116]]7965// CHECK3-51-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX35]], i64 [[LEN_SUB_1]]7966// CHECK3-51-NEXT: [[TMP117:%.*]] = getelementptr i32, ptr [[ARRAYIDX36]], i32 17967// CHECK3-51-NEXT: [[TMP118:%.*]] = ptrtoint ptr [[ARRAYIDX34]] to i647968// CHECK3-51-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[TMP117]] to i647969// CHECK3-51-NEXT: [[TMP120:%.*]] = sub nuw i64 [[TMP119]], [[TMP118]]7970// CHECK3-51-NEXT: [[TMP121:%.*]] = ptrtoint ptr [[ARRAYIDX34]] to i647971// CHECK3-51-NEXT: [[TMP122:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 27972// CHECK3-51-NEXT: [[TMP123:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 07973// CHECK3-51-NEXT: store i64 [[TMP121]], ptr [[TMP123]], align 87974// CHECK3-51-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 17975// CHECK3-51-NEXT: store i64 [[TMP120]], ptr [[TMP124]], align 87976// CHECK3-51-NEXT: [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 27977// CHECK3-51-NEXT: store i8 3, ptr [[TMP125]], align 87978// CHECK3-51-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR37]], align 87979// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM38:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB13]])7980// CHECK3-51-NEXT: [[TMP126:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM38]], ptr [[TMP99]], i32 3, ptr [[TMP101]], i32 0, ptr null)7981// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM40:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15:[0-9]+]])7982// CHECK3-51-NEXT: [[TMP127:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM40]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..12)7983// CHECK3-51-NEXT: [[TMP128:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP127]], i32 0, i32 07984// CHECK3-51-NEXT: [[TMP129:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR41]], i64 0, i64 07985// CHECK3-51-NEXT: [[TMP130:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP129]], i64 07986// CHECK3-51-NEXT: [[TMP131:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP130]], i32 0, i32 07987// CHECK3-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP131]], align 87988// CHECK3-51-NEXT: [[TMP132:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP130]], i32 0, i32 17989// CHECK3-51-NEXT: store i64 4, ptr [[TMP132]], align 87990// CHECK3-51-NEXT: [[TMP133:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP130]], i32 0, i32 27991// CHECK3-51-NEXT: store i8 8, ptr [[TMP133]], align 87992// CHECK3-51-NEXT: [[ARRAYIDX42:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 17993// CHECK3-51-NEXT: [[TMP134:%.*]] = ptrtoint ptr [[ARRAYIDX42]] to i647994// CHECK3-51-NEXT: [[TMP135:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP129]], i64 17995// CHECK3-51-NEXT: [[TMP136:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP135]], i32 0, i32 07996// CHECK3-51-NEXT: store i64 [[TMP134]], ptr [[TMP136]], align 87997// CHECK3-51-NEXT: [[TMP137:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP135]], i32 0, i32 17998// CHECK3-51-NEXT: store i64 4, ptr [[TMP137]], align 87999// CHECK3-51-NEXT: [[TMP138:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP135]], i32 0, i32 28000// CHECK3-51-NEXT: store i8 8, ptr [[TMP138]], align 88001// CHECK3-51-NEXT: [[TMP139:%.*]] = mul nsw i64 0, [[TMP1]]8002// CHECK3-51-NEXT: [[ARRAYIDX43:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP139]]8003// CHECK3-51-NEXT: [[ARRAYIDX44:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX43]], i64 38004// CHECK3-51-NEXT: [[TMP140:%.*]] = load i32, ptr @a, align 48005// CHECK3-51-NEXT: [[TMP141:%.*]] = sext i32 [[TMP140]] to i648006// CHECK3-51-NEXT: [[LEN_SUB_145:%.*]] = sub nsw i64 [[TMP141]], 18007// CHECK3-51-NEXT: [[TMP142:%.*]] = load i32, ptr @a, align 48008// CHECK3-51-NEXT: [[TMP143:%.*]] = sext i32 [[TMP142]] to i648009// CHECK3-51-NEXT: [[LB_ADD_LEN46:%.*]] = add nsw i64 -1, [[TMP143]]8010// CHECK3-51-NEXT: [[TMP144:%.*]] = mul nsw i64 [[LB_ADD_LEN46]], [[TMP1]]8011// CHECK3-51-NEXT: [[ARRAYIDX47:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP144]]8012// CHECK3-51-NEXT: [[ARRAYIDX48:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX47]], i64 [[LEN_SUB_145]]8013// CHECK3-51-NEXT: [[TMP145:%.*]] = getelementptr i32, ptr [[ARRAYIDX48]], i32 18014// CHECK3-51-NEXT: [[TMP146:%.*]] = ptrtoint ptr [[ARRAYIDX44]] to i648015// CHECK3-51-NEXT: [[TMP147:%.*]] = ptrtoint ptr [[TMP145]] to i648016// CHECK3-51-NEXT: [[TMP148:%.*]] = sub nuw i64 [[TMP147]], [[TMP146]]8017// CHECK3-51-NEXT: [[TMP149:%.*]] = ptrtoint ptr [[ARRAYIDX44]] to i648018// CHECK3-51-NEXT: [[TMP150:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP129]], i64 28019// CHECK3-51-NEXT: [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP150]], i32 0, i32 08020// CHECK3-51-NEXT: store i64 [[TMP149]], ptr [[TMP151]], align 88021// CHECK3-51-NEXT: [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP150]], i32 0, i32 18022// CHECK3-51-NEXT: store i64 [[TMP148]], ptr [[TMP152]], align 88023// CHECK3-51-NEXT: [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP150]], i32 0, i32 28024// CHECK3-51-NEXT: store i8 8, ptr [[TMP153]], align 88025// CHECK3-51-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR49]], align 88026// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM50:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15]])8027// CHECK3-51-NEXT: [[TMP154:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM50]], ptr [[TMP127]], i32 3, ptr [[TMP129]], i32 0, ptr null)8028// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM52:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB17:[0-9]+]])8029// CHECK3-51-NEXT: [[TMP155:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM52]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..14)8030// CHECK3-51-NEXT: [[TMP156:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP155]], i32 0, i32 08031// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM53:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB17]])8032// CHECK3-51-NEXT: [[TMP157:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM53]], ptr [[TMP155]])8033// CHECK3-51-NEXT: store i8 0, ptr [[FLAG]], align 18034// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM55:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB19:[0-9]+]])8035// CHECK3-51-NEXT: [[TMP158:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM55]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..16)8036// CHECK3-51-NEXT: [[TMP159:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP158]], i32 0, i32 08037// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM56:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB19]])8038// CHECK3-51-NEXT: [[TMP160:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM56]], ptr [[TMP158]])8039// CHECK3-51-NEXT: [[TMP161:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_16]], ptr [[AGG_CAPTURED57]], i32 0, i32 08040// CHECK3-51-NEXT: store ptr [[C]], ptr [[TMP161]], align 88041// CHECK3-51-NEXT: [[TMP162:%.*]] = load i8, ptr [[B]], align 18042// CHECK3-51-NEXT: [[TOBOOL:%.*]] = icmp ne i8 [[TMP162]], 08043// CHECK3-51-NEXT: [[TMP163:%.*]] = select i1 [[TOBOOL]], i32 2, i32 08044// CHECK3-51-NEXT: [[TMP164:%.*]] = or i32 [[TMP163]], 18045// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM58:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21:[0-9]+]])8046// CHECK3-51-NEXT: [[TMP165:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM58]], i32 [[TMP164]], i64 40, i64 8, ptr @.omp_task_entry..18)8047// CHECK3-51-NEXT: [[TMP166:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_17:%.*]], ptr [[TMP165]], i32 0, i32 08048// CHECK3-51-NEXT: [[TMP167:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP166]], i32 0, i32 08049// CHECK3-51-NEXT: [[TMP168:%.*]] = load ptr, ptr [[TMP167]], align 88050// CHECK3-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP168]], ptr align 8 [[AGG_CAPTURED57]], i64 8, i1 false)8051// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM59:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])8052// CHECK3-51-NEXT: [[TMP169:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM59]], ptr [[TMP165]])8053// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM61:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23:[0-9]+]])8054// CHECK3-51-NEXT: [[TMP170:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM61]], i32 0, i64 256, i64 1, ptr @.omp_task_entry..23)8055// CHECK3-51-NEXT: [[TMP171:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21:%.*]], ptr [[TMP170]], i32 0, i32 08056// CHECK3-51-NEXT: [[TMP172:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21]], ptr [[TMP170]], i32 0, i32 28057// CHECK3-51-NEXT: [[TMP173:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22:%.*]], ptr [[TMP172]], i32 0, i32 08058// CHECK3-51-NEXT: [[TMP174:%.*]] = load i32, ptr [[C]], align 1288059// CHECK3-51-NEXT: store i32 [[TMP174]], ptr [[TMP173]], align 1288060// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM62:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23]])8061// CHECK3-51-NEXT: [[TMP175:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP171]], i32 0, i32 28062// CHECK3-51-NEXT: store i32 0, ptr [[TMP175]], align 168063// CHECK3-51-NEXT: [[TMP176:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM62]], ptr [[TMP170]])8064// CHECK3-51-NEXT: [[TMP177:%.*]] = load i32, ptr @a, align 48065// CHECK3-51-NEXT: store i32 [[TMP177]], ptr [[RETVAL]], align 48066// CHECK3-51-NEXT: [[TMP178:%.*]] = load ptr, ptr [[SAVED_STACK]], align 88067// CHECK3-51-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP178]])8068// CHECK3-51-NEXT: [[ARRAY_BEGIN63:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 08069// CHECK3-51-NEXT: [[TMP179:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN63]], i64 28070// CHECK3-51-NEXT: br label [[ARRAYDESTROY_BODY:%.*]]8071// CHECK3-51: arraydestroy.body:8072// CHECK3-51-NEXT: [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP179]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]8073// CHECK3-51-NEXT: [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -18074// CHECK3-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR4:[0-9]+]]8075// CHECK3-51-NEXT: [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN63]]8076// CHECK3-51-NEXT: br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE64:%.*]], label [[ARRAYDESTROY_BODY]]8077// CHECK3-51: arraydestroy.done64:8078// CHECK3-51-NEXT: [[TMP180:%.*]] = load i32, ptr [[RETVAL]], align 48079// CHECK3-51-NEXT: ret i32 [[TMP180]]8080//8081//8082// CHECK3-51-LABEL: define {{[^@]+}}@_ZN1SC1Ev8083// CHECK3-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] align 2 {8084// CHECK3-51-NEXT: entry:8085// CHECK3-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 88086// CHECK3-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 88087// CHECK3-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 88088// CHECK3-51-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])8089// CHECK3-51-NEXT: ret void8090//8091//8092// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry.8093// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {8094// CHECK3-51-NEXT: entry:8095// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48096// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88097// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88098// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88099// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88100// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88101// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48102// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88103// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48104// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88105// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48106// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88107// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 08108// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28109// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08110// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88111// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])8112// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])8113// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])8114// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])8115// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META12:![0-9]+]]8116// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META12]]8117// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META12]]8118// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META12]]8119// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META12]]8120// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]8121// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]8122// CHECK3-51-NEXT: store i32 15, ptr @a, align 4, !noalias [[META12]]8123// CHECK3-51-NEXT: [[TMP9:%.*]] = load i32, ptr @a, align 4, !noalias [[META12]]8124// CHECK3-51-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP9]] to i88125// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP8]], align 88126// CHECK3-51-NEXT: store i8 [[CONV_I]], ptr [[TMP10]], align 18127// CHECK3-51-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON:%.*]], ptr [[TMP8]], i32 0, i32 18128// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 88129// CHECK3-51-NEXT: store i32 10, ptr [[TMP12]], align 48130// CHECK3-51-NEXT: ret i32 08131//8132//8133// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..28134// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8135// CHECK3-51-NEXT: entry:8136// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48137// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88138// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88139// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88140// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88141// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88142// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48143// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88144// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48145// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88146// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48147// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88148// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 08149// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28150// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08151// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88152// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])8153// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META16:![0-9]+]])8154// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])8155// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])8156// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META22:![0-9]+]]8157// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META22]]8158// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META22]]8159// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META22]]8160// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META22]]8161// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]8162// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]8163// CHECK3-51-NEXT: store i32 15, ptr @a, align 4, !noalias [[META22]]8164// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 88165// CHECK3-51-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP9]], i64 0, i64 18166// CHECK3-51-NEXT: store i32 10, ptr [[ARRAYIDX_I]], align 48167// CHECK3-51-NEXT: ret i32 08168//8169//8170// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..48171// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8172// CHECK3-51-NEXT: entry:8173// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48174// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88175// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88176// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88177// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88178// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88179// CHECK3-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 48180// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48181// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88182// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48183// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88184// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48185// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88186// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP3]], i32 0, i32 08187// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28188// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08189// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88190// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META23:![0-9]+]])8191// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META26:![0-9]+]])8192// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])8193// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])8194// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32:![0-9]+]]8195// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]8196// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META32]]8197// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META32]]8198// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]8199// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]8200// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]8201// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]8202// CHECK3-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 48203// CHECK3-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [8204// CHECK3-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]8205// CHECK3-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]8206// CHECK3-51-NEXT: ]8207// CHECK3-51: .untied.done..i:8208// CHECK3-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]8209// CHECK3-51-NEXT: br label [[CLEANUP_I:%.*]]8210// CHECK3-51: .untied.jmp..i:8211// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]8212// CHECK3-51-NEXT: store i32 1, ptr [[TMP11]], align 48213// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7]])8214// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]8215// CHECK3-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])8216// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT:%.*]]8217// CHECK3-51: .untied.jmp.1.i:8218// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM2_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])8219// CHECK3-51-NEXT: call void @__kmpc_critical(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2_I]], ptr @.gomp_critical_user_.var)8220// CHECK3-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META32]]8221// CHECK3-51-NEXT: call void @__kmpc_end_critical(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2_I]], ptr @.gomp_critical_user_.var)8222// CHECK3-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]8223// CHECK3-51-NEXT: br label [[CLEANUP_I]]8224// CHECK3-51: cleanup.i:8225// CHECK3-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]8226// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT]]8227// CHECK3-51: .omp_outlined..3.exit:8228// CHECK3-51-NEXT: ret i32 08229//8230//8231// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..68232// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8233// CHECK3-51-NEXT: entry:8234// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48235// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88236// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88237// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88238// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88239// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88240// CHECK3-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 48241// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48242// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88243// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48244// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88245// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48246// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88247// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 08248// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28249// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08250// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88251// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META33:![0-9]+]])8252// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META36:![0-9]+]])8253// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META38:![0-9]+]])8254// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])8255// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42:![0-9]+]]8256// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]8257// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META42]]8258// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META42]]8259// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]8260// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]8261// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]8262// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]8263// CHECK3-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 48264// CHECK3-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [8265// CHECK3-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]8266// CHECK3-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]8267// CHECK3-51-NEXT: ]8268// CHECK3-51: .untied.done..i:8269// CHECK3-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]8270// CHECK3-51-NEXT: br label [[CLEANUP_I:%.*]]8271// CHECK3-51: .untied.jmp..i:8272// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]8273// CHECK3-51-NEXT: store i32 1, ptr [[TMP11]], align 48274// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9]])8275// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]8276// CHECK3-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])8277// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT:%.*]]8278// CHECK3-51: .untied.jmp.1.i:8279// CHECK3-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META42]]8280// CHECK3-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]8281// CHECK3-51-NEXT: br label [[CLEANUP_I]]8282// CHECK3-51: cleanup.i:8283// CHECK3-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]8284// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT]]8285// CHECK3-51: .omp_outlined..5.exit:8286// CHECK3-51-NEXT: ret i32 08287//8288//8289// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..88290// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8291// CHECK3-51-NEXT: entry:8292// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48293// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88294// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88295// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88296// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88297// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88298// CHECK3-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 48299// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48300// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88301// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48302// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88303// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48304// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88305// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP3]], i32 0, i32 08306// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28307// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08308// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88309// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])8310// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META46:![0-9]+]])8311// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META48:![0-9]+]])8312// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META50:![0-9]+]])8313// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52:![0-9]+]]8314// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]8315// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META52]]8316// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META52]]8317// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]8318// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]8319// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]8320// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]8321// CHECK3-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 48322// CHECK3-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [8323// CHECK3-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]8324// CHECK3-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]8325// CHECK3-51-NEXT: ]8326// CHECK3-51: .untied.done..i:8327// CHECK3-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]8328// CHECK3-51-NEXT: br label [[CLEANUP_I:%.*]]8329// CHECK3-51: .untied.jmp..i:8330// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]8331// CHECK3-51-NEXT: store i32 1, ptr [[TMP11]], align 48332// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11]])8333// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]8334// CHECK3-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])8335// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT:%.*]]8336// CHECK3-51: .untied.jmp.1.i:8337// CHECK3-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META52]]8338// CHECK3-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]8339// CHECK3-51-NEXT: br label [[CLEANUP_I]]8340// CHECK3-51: cleanup.i:8341// CHECK3-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]8342// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT]]8343// CHECK3-51: .omp_outlined..7.exit:8344// CHECK3-51-NEXT: ret i32 08345//8346//8347// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..108348// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8349// CHECK3-51-NEXT: entry:8350// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48351// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88352// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88353// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88354// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88355// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88356// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48357// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88358// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48359// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88360// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48361// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88362// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP3]], i32 0, i32 08363// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28364// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08365// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88366// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META53:![0-9]+]])8367// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META56:![0-9]+]])8368// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META58:![0-9]+]])8369// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META60:![0-9]+]])8370// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META62:![0-9]+]]8371// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META62]]8372// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META62]]8373// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META62]]8374// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META62]]8375// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]8376// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]8377// CHECK3-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META62]]8378// CHECK3-51-NEXT: ret i32 08379//8380//8381// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..128382// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8383// CHECK3-51-NEXT: entry:8384// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48385// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88386// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88387// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88388// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88389// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88390// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48391// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88392// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48393// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88394// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48395// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88396// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP3]], i32 0, i32 08397// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28398// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08399// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88400// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META63:![0-9]+]])8401// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META66:![0-9]+]])8402// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META68:![0-9]+]])8403// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META70:![0-9]+]])8404// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META72:![0-9]+]]8405// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META72]]8406// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META72]]8407// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META72]]8408// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META72]]8409// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]8410// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]8411// CHECK3-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META72]]8412// CHECK3-51-NEXT: ret i32 08413//8414//8415// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..148416// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8417// CHECK3-51-NEXT: entry:8418// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48419// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88420// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88421// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88422// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88423// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88424// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48425// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88426// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48427// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88428// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48429// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88430// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP3]], i32 0, i32 08431// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28432// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08433// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88434// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META73:![0-9]+]])8435// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META76:![0-9]+]])8436// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META78:![0-9]+]])8437// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META80:![0-9]+]])8438// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META82:![0-9]+]]8439// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META82]]8440// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META82]]8441// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META82]]8442// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META82]]8443// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]8444// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]8445// CHECK3-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META82]]8446// CHECK3-51-NEXT: ret i32 08447//8448//8449// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..168450// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8451// CHECK3-51-NEXT: entry:8452// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48453// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88454// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88455// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88456// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88457// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88458// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48459// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88460// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48461// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88462// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48463// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88464// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP3]], i32 0, i32 08465// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28466// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08467// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88468// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META83:![0-9]+]])8469// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META86:![0-9]+]])8470// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META88:![0-9]+]])8471// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META90:![0-9]+]])8472// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META92:![0-9]+]]8473// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META92]]8474// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META92]]8475// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META92]]8476// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META92]]8477// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]8478// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]8479// CHECK3-51-NEXT: store i32 3, ptr @a, align 4, !noalias [[META92]]8480// CHECK3-51-NEXT: ret i32 08481//8482//8483// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..188484// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8485// CHECK3-51-NEXT: entry:8486// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48487// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88488// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88489// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88490// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88491// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88492// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48493// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88494// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48495// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88496// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48497// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88498// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_17:%.*]], ptr [[TMP3]], i32 0, i32 08499// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28500// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08501// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88502// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META93:![0-9]+]])8503// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META96:![0-9]+]])8504// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META98:![0-9]+]])8505// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META100:![0-9]+]])8506// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META102:![0-9]+]]8507// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META102]]8508// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]8509// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]8510// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META102]]8511// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]8512// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]8513// CHECK3-51-NEXT: store i32 4, ptr @a, align 4, !noalias [[META102]]8514// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 88515// CHECK3-51-NEXT: store i32 5, ptr [[TMP9]], align 1288516// CHECK3-51-NEXT: ret i32 08517//8518//8519// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_privates_map.8520// CHECK3-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7:[0-9]+]] {8521// CHECK3-51-NEXT: entry:8522// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 88523// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88524// CHECK3-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 88525// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88526// CHECK3-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 88527// CHECK3-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP2]], i32 0, i32 08528// CHECK3-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 88529// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 88530// CHECK3-51-NEXT: ret void8531//8532//8533// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..218534// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8535// CHECK3-51-NEXT: entry:8536// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48537// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88538// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88539// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88540// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88541// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88542// CHECK3-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 88543// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48544// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88545// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48546// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88547// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48548// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88549// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_20:%.*]], ptr [[TMP3]], i32 0, i32 08550// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28551// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08552// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1288553// CHECK3-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_20]], ptr [[TMP3]], i32 0, i32 28554// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META103:![0-9]+]])8555// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META106:![0-9]+]])8556// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META108:![0-9]+]])8557// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META110:![0-9]+]])8558// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112:![0-9]+]]8559// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]8560// CHECK3-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]8561// CHECK3-51-NEXT: store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]8562// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]8563// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]8564// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]8565// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]8566// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]8567// CHECK3-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]8568// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META112]]8569// CHECK3-51-NEXT: store i32 4, ptr [[TMP12]], align 1288570// CHECK3-51-NEXT: store i32 4, ptr @a, align 4, !noalias [[META112]]8571// CHECK3-51-NEXT: ret i32 08572//8573//8574// CHECK3-51-LABEL: define {{[^@]+}}@_ZN1SD1Ev8575// CHECK3-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {8576// CHECK3-51-NEXT: entry:8577// CHECK3-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 88578// CHECK3-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 88579// CHECK3-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 88580// CHECK3-51-NEXT: call void @_ZN1SD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR4]]8581// CHECK3-51-NEXT: ret void8582//8583//8584// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..228585// CHECK3-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]]) #[[ATTR7]] {8586// CHECK3-51-NEXT: entry:8587// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 88588// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88589// CHECK3-51-NEXT: [[DOTADDR2:%.*]] = alloca ptr, align 88590// CHECK3-51-NEXT: [[DOTADDR3:%.*]] = alloca ptr, align 88591// CHECK3-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 88592// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88593// CHECK3-51-NEXT: store ptr [[TMP2]], ptr [[DOTADDR2]], align 88594// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTADDR3]], align 88595// CHECK3-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR]], align 88596// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22:%.*]], ptr [[TMP4]], i32 0, i32 08597// CHECK3-51-NEXT: [[TMP6:%.*]] = load ptr, ptr [[DOTADDR1]], align 88598// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[TMP6]], align 88599// CHECK3-51-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22]], ptr [[TMP4]], i32 0, i32 18600// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[DOTADDR2]], align 88601// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[TMP8]], align 88602// CHECK3-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_22]], ptr [[TMP4]], i32 0, i32 28603// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTADDR3]], align 88604// CHECK3-51-NEXT: store ptr [[TMP9]], ptr [[TMP10]], align 88605// CHECK3-51-NEXT: ret void8606//8607//8608// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..238609// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8610// CHECK3-51-NEXT: entry:8611// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48612// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88613// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88614// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88615// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88616// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88617// CHECK3-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 88618// CHECK3-51-NEXT: [[DOTLOCAL_PTR_ADDR_I:%.*]] = alloca ptr, align 88619// CHECK3-51-NEXT: [[DOTLOCAL_PTR_ADDR1_I:%.*]] = alloca ptr, align 88620// CHECK3-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 48621// CHECK3-51-NEXT: [[S1_I:%.*]] = alloca [[STRUCT_S:%.*]], align 48622// CHECK3-51-NEXT: [[S2_I:%.*]] = alloca [[STRUCT_S]], align 48623// CHECK3-51-NEXT: [[REF_TMP_I:%.*]] = alloca [[STRUCT_S]], align 48624// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48625// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88626// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48627// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88628// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48629// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88630// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21:%.*]], ptr [[TMP3]], i32 0, i32 08631// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28632// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08633// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1288634// CHECK3-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_21]], ptr [[TMP3]], i32 0, i32 28635// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META113:![0-9]+]])8636// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META116:![0-9]+]])8637// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META118:![0-9]+]])8638// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META120:![0-9]+]])8639// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122:![0-9]+]]8640// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]8641// CHECK3-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]8642// CHECK3-51-NEXT: store ptr @.omp_task_privates_map..22, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]8643// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]8644// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]8645// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]8646// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]8647// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]8648// CHECK3-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR1_I]]) #[[ATTR4]]8649// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META122]]8650// CHECK3-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR_I]], align 8, !noalias [[META122]]8651// CHECK3-51-NEXT: [[TMP14:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR1_I]], align 8, !noalias [[META122]]8652// CHECK3-51-NEXT: [[TMP15:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]8653// CHECK3-51-NEXT: [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 48654// CHECK3-51-NEXT: switch i32 [[TMP16]], label [[DOTUNTIED_DONE__I:%.*]] [8655// CHECK3-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]8656// CHECK3-51-NEXT: i32 1, label [[DOTUNTIED_JMP_2_I:%.*]]8657// CHECK3-51-NEXT: i32 2, label [[DOTUNTIED_JMP_6_I:%.*]]8658// CHECK3-51-NEXT: i32 3, label [[DOTUNTIED_JMP_10_I:%.*]]8659// CHECK3-51-NEXT: i32 4, label [[DOTUNTIED_JMP_15_I:%.*]]8660// CHECK3-51-NEXT: ]8661// CHECK3-51: .untied.done..i:8662// CHECK3-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META122]]8663// CHECK3-51-NEXT: br label [[CLEANUP_I:%.*]]8664// CHECK3-51: .untied.jmp..i:8665// CHECK3-51-NEXT: [[TMP17:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]8666// CHECK3-51-NEXT: store i32 1, ptr [[TMP17]], align 48667// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23]])8668// CHECK3-51-NEXT: [[TMP18:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]8669// CHECK3-51-NEXT: [[TMP19:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP18]])8670// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT:%.*]]8671// CHECK3-51: .untied.jmp.2.i:8672// CHECK3-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S1_I]])8673// CHECK3-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S2_I]])8674// CHECK3-51-NEXT: store i32 0, ptr [[S2_I]], align 4, !noalias [[META122]]8675// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM3_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB25:[0-9]+]])8676// CHECK3-51-NEXT: [[TMP20:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3_I]], i32 1, i64 256, i64 1, ptr @.omp_task_entry..21)8677// CHECK3-51-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_20:%.*]], ptr [[TMP20]], i32 0, i32 28678// CHECK3-51-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP12]], align 1288679// CHECK3-51-NEXT: store i32 [[TMP22]], ptr [[TMP21]], align 1288680// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM4_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB25]])8681// CHECK3-51-NEXT: [[TMP23:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM4_I]], ptr [[TMP20]])8682// CHECK3-51-NEXT: [[TMP24:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]8683// CHECK3-51-NEXT: store i32 2, ptr [[TMP24]], align 48684// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM5_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23]])8685// CHECK3-51-NEXT: [[TMP25:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]8686// CHECK3-51-NEXT: [[TMP26:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM5_I]], ptr [[TMP25]])8687// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]8688// CHECK3-51: .untied.jmp.6.i:8689// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM8_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])8690// CHECK3-51-NEXT: [[TMP27:%.*]] = call i32 @__kmpc_omp_taskyield(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8_I]], i32 0)8691// CHECK3-51-NEXT: [[TMP28:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]8692// CHECK3-51-NEXT: store i32 3, ptr [[TMP28]], align 48693// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM9_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23]])8694// CHECK3-51-NEXT: [[TMP29:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]8695// CHECK3-51-NEXT: [[TMP30:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM9_I]], ptr [[TMP29]])8696// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]8697// CHECK3-51: .untied.jmp.10.i:8698// CHECK3-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]])8699// CHECK3-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[S1_I]], ptr align 4 [[REF_TMP_I]], i64 4, i1 false), !noalias [[META122]]8700// CHECK3-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]]) #[[ATTR4]]8701// CHECK3-51-NEXT: store i32 10, ptr [[S2_I]], align 4, !noalias [[META122]]8702// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM13_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])8703// CHECK3-51-NEXT: [[TMP31:%.*]] = call i32 @__kmpc_omp_taskwait(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM13_I]])8704// CHECK3-51-NEXT: [[TMP32:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]8705// CHECK3-51-NEXT: store i32 4, ptr [[TMP32]], align 48706// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM14_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23]])8707// CHECK3-51-NEXT: [[TMP33:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]8708// CHECK3-51-NEXT: [[TMP34:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM14_I]], ptr [[TMP33]])8709// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]8710// CHECK3-51: .untied.jmp.15.i:8711// CHECK3-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S2_I]]) #[[ATTR4]]8712// CHECK3-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S1_I]]) #[[ATTR4]]8713// CHECK3-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META122]]8714// CHECK3-51-NEXT: br label [[CLEANUP_I]]8715// CHECK3-51: cleanup.i:8716// CHECK3-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META122]]8717// CHECK3-51-NEXT: br label [[DOTOMP_OUTLINED__19_EXIT]]8718// CHECK3-51: .omp_outlined..19.exit:8719// CHECK3-51-NEXT: ret i32 08720//8721//8722// CHECK3-51-LABEL: define {{[^@]+}}@_ZN1SC2Ev8723// CHECK3-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {8724// CHECK3-51-NEXT: entry:8725// CHECK3-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 88726// CHECK3-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 88727// CHECK3-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 88728// CHECK3-51-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 08729// CHECK3-51-NEXT: store i32 0, ptr [[A]], align 48730// CHECK3-51-NEXT: ret void8731//8732//8733// CHECK3-51-LABEL: define {{[^@]+}}@_ZN1SD2Ev8734// CHECK3-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {8735// CHECK3-51-NEXT: entry:8736// CHECK3-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 88737// CHECK3-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 88738// CHECK3-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 88739// CHECK3-51-NEXT: ret void8740//8741//8742// CHECK3-51-LABEL: define {{[^@]+}}@__cxx_global_var_init8743// CHECK3-51-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {8744// CHECK3-51-NEXT: entry:8745// CHECK3-51-NEXT: call void @_ZN2S1C1Ev(ptr noundef nonnull align 4 dereferenceable(4) @s1)8746// CHECK3-51-NEXT: ret void8747//8748//8749// CHECK3-51-LABEL: define {{[^@]+}}@_ZN2S1C1Ev8750// CHECK3-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {8751// CHECK3-51-NEXT: entry:8752// CHECK3-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 88753// CHECK3-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 88754// CHECK3-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 88755// CHECK3-51-NEXT: call void @_ZN2S1C2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])8756// CHECK3-51-NEXT: ret void8757//8758//8759// CHECK3-51-LABEL: define {{[^@]+}}@_ZN2S1C2Ev8760// CHECK3-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {8761// CHECK3-51-NEXT: entry:8762// CHECK3-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 88763// CHECK3-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 88764// CHECK3-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 88765// CHECK3-51-NEXT: call void @_ZN2S18taskinitEv(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])8766// CHECK3-51-NEXT: ret void8767//8768//8769// CHECK3-51-LABEL: define {{[^@]+}}@_ZN2S18taskinitEv8770// CHECK3-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) #[[ATTR1]] align 2 {8771// CHECK3-51-NEXT: entry:8772// CHECK3-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 88773// CHECK3-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_23:%.*]], align 88774// CHECK3-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 88775// CHECK3-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 88776// CHECK3-51-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_23]], ptr [[AGG_CAPTURED]], i32 0, i32 08777// CHECK3-51-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 88778// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB27:[0-9]+]])8779// CHECK3-51-NEXT: [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..25)8780// CHECK3-51-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP1]], i32 0, i32 08781// CHECK3-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP2]], i32 0, i32 08782// CHECK3-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[TMP3]], align 88783// CHECK3-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP4]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)8784// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB27]])8785// CHECK3-51-NEXT: [[TMP5:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2]], ptr [[TMP1]])8786// CHECK3-51-NEXT: ret void8787//8788//8789// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..258790// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8791// CHECK3-51-NEXT: entry:8792// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48793// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88794// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88795// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88796// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88797// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88798// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48799// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88800// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48801// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88802// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 48803// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 88804// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_24:%.*]], ptr [[TMP3]], i32 0, i32 08805// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 28806// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 08807// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 88808// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META123:![0-9]+]])8809// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META126:![0-9]+]])8810// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META128:![0-9]+]])8811// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META130:![0-9]+]])8812// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META132:![0-9]+]]8813// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META132]]8814// CHECK3-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META132]]8815// CHECK3-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META132]]8816// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META132]]8817// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]8818// CHECK3-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META132]]8819// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 88820// CHECK3-51-NEXT: store i32 0, ptr [[TMP9]], align 48821// CHECK3-51-NEXT: ret i32 08822//8823//8824// CHECK3-51-LABEL: define {{[^@]+}}@_Z19test_omp_all_memoryv8825// CHECK3-51-SAME: () #[[ATTR1]] {8826// CHECK3-51-NEXT: entry:8827// CHECK3-51-NEXT: [[A:%.*]] = alloca i32, align 48828// CHECK3-51-NEXT: [[B:%.*]] = alloca i32, align 48829// CHECK3-51-NEXT: [[C:%.*]] = alloca i32, align 48830// CHECK3-51-NEXT: [[D:%.*]] = alloca i32, align 48831// CHECK3-51-NEXT: [[E:%.*]] = alloca i32, align 48832// CHECK3-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_25:%.*]], align 18833// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [2 x %struct.kmp_depend_info], align 88834// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 88835// CHECK3-51-NEXT: [[AGG_CAPTURED2:%.*]] = alloca [[STRUCT_ANON_28:%.*]], align 18836// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR4:%.*]] = alloca [2 x %struct.kmp_depend_info], align 88837// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR5:%.*]] = alloca i64, align 88838// CHECK3-51-NEXT: [[AGG_CAPTURED7:%.*]] = alloca [[STRUCT_ANON_31:%.*]], align 18839// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR9:%.*]] = alloca [2 x %struct.kmp_depend_info], align 88840// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR10:%.*]] = alloca i64, align 88841// CHECK3-51-NEXT: [[AGG_CAPTURED12:%.*]] = alloca [[STRUCT_ANON_34:%.*]], align 18842// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR14:%.*]] = alloca [2 x %struct.kmp_depend_info], align 88843// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR15:%.*]] = alloca i64, align 88844// CHECK3-51-NEXT: [[AGG_CAPTURED17:%.*]] = alloca [[STRUCT_ANON_37:%.*]], align 18845// CHECK3-51-NEXT: [[DOTDEP_ARR_ADDR19:%.*]] = alloca [1 x %struct.kmp_depend_info], align 88846// CHECK3-51-NEXT: [[DEP_COUNTER_ADDR20:%.*]] = alloca i64, align 88847// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB29:[0-9]+]])8848// CHECK3-51-NEXT: [[TMP0:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..28)8849// CHECK3-51-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26:%.*]], ptr [[TMP0]], i32 0, i32 08850// CHECK3-51-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26]], ptr [[TMP0]], i32 0, i32 18851// CHECK3-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_27:%.*]], ptr [[TMP2]], i32 0, i32 08852// CHECK3-51-NEXT: [[TMP4:%.*]] = load i32, ptr [[A]], align 48853// CHECK3-51-NEXT: store i32 [[TMP4]], ptr [[TMP3]], align 88854// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 08855// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP5]], i64 08856// CHECK3-51-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP6]], i32 0, i32 08857// CHECK3-51-NEXT: store i64 0, ptr [[TMP7]], align 88858// CHECK3-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP6]], i32 0, i32 18859// CHECK3-51-NEXT: store i64 0, ptr [[TMP8]], align 88860// CHECK3-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP6]], i32 0, i32 28861// CHECK3-51-NEXT: store i8 -128, ptr [[TMP9]], align 88862// CHECK3-51-NEXT: [[TMP10:%.*]] = ptrtoint ptr [[A]] to i648863// CHECK3-51-NEXT: [[TMP11:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP5]], i64 18864// CHECK3-51-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP11]], i32 0, i32 08865// CHECK3-51-NEXT: store i64 [[TMP10]], ptr [[TMP12]], align 88866// CHECK3-51-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP11]], i32 0, i32 18867// CHECK3-51-NEXT: store i64 4, ptr [[TMP13]], align 88868// CHECK3-51-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP11]], i32 0, i32 28869// CHECK3-51-NEXT: store i8 1, ptr [[TMP14]], align 88870// CHECK3-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR]], align 88871// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB29]])8872// CHECK3-51-NEXT: [[TMP15:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM1]], ptr [[TMP0]], i32 2, ptr [[TMP5]], i32 0, ptr null)8873// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM3:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB31:[0-9]+]])8874// CHECK3-51-NEXT: [[TMP16:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..31)8875// CHECK3-51-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29:%.*]], ptr [[TMP16]], i32 0, i32 08876// CHECK3-51-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29]], ptr [[TMP16]], i32 0, i32 18877// CHECK3-51-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_30:%.*]], ptr [[TMP18]], i32 0, i32 08878// CHECK3-51-NEXT: [[TMP20:%.*]] = load i32, ptr [[A]], align 48879// CHECK3-51-NEXT: store i32 [[TMP20]], ptr [[TMP19]], align 88880// CHECK3-51-NEXT: [[TMP21:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR4]], i64 0, i64 08881// CHECK3-51-NEXT: [[TMP22:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP21]], i64 08882// CHECK3-51-NEXT: [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP22]], i32 0, i32 08883// CHECK3-51-NEXT: store i64 0, ptr [[TMP23]], align 88884// CHECK3-51-NEXT: [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP22]], i32 0, i32 18885// CHECK3-51-NEXT: store i64 0, ptr [[TMP24]], align 88886// CHECK3-51-NEXT: [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP22]], i32 0, i32 28887// CHECK3-51-NEXT: store i8 -128, ptr [[TMP25]], align 88888// CHECK3-51-NEXT: [[TMP26:%.*]] = ptrtoint ptr [[A]] to i648889// CHECK3-51-NEXT: [[TMP27:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP21]], i64 18890// CHECK3-51-NEXT: [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP27]], i32 0, i32 08891// CHECK3-51-NEXT: store i64 [[TMP26]], ptr [[TMP28]], align 88892// CHECK3-51-NEXT: [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP27]], i32 0, i32 18893// CHECK3-51-NEXT: store i64 4, ptr [[TMP29]], align 88894// CHECK3-51-NEXT: [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP27]], i32 0, i32 28895// CHECK3-51-NEXT: store i8 1, ptr [[TMP30]], align 88896// CHECK3-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR5]], align 88897// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM6:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB31]])8898// CHECK3-51-NEXT: [[TMP31:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM6]], ptr [[TMP16]], i32 2, ptr [[TMP21]], i32 0, ptr null)8899// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM8:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB33:[0-9]+]])8900// CHECK3-51-NEXT: [[TMP32:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..34)8901// CHECK3-51-NEXT: [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32:%.*]], ptr [[TMP32]], i32 0, i32 08902// CHECK3-51-NEXT: [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32]], ptr [[TMP32]], i32 0, i32 18903// CHECK3-51-NEXT: [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_33:%.*]], ptr [[TMP34]], i32 0, i32 08904// CHECK3-51-NEXT: [[TMP36:%.*]] = load i32, ptr [[A]], align 48905// CHECK3-51-NEXT: store i32 [[TMP36]], ptr [[TMP35]], align 88906// CHECK3-51-NEXT: [[TMP37:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR9]], i64 0, i64 08907// CHECK3-51-NEXT: [[TMP38:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP37]], i64 08908// CHECK3-51-NEXT: [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP38]], i32 0, i32 08909// CHECK3-51-NEXT: store i64 0, ptr [[TMP39]], align 88910// CHECK3-51-NEXT: [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP38]], i32 0, i32 18911// CHECK3-51-NEXT: store i64 0, ptr [[TMP40]], align 88912// CHECK3-51-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP38]], i32 0, i32 28913// CHECK3-51-NEXT: store i8 -128, ptr [[TMP41]], align 88914// CHECK3-51-NEXT: [[TMP42:%.*]] = ptrtoint ptr [[A]] to i648915// CHECK3-51-NEXT: [[TMP43:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP37]], i64 18916// CHECK3-51-NEXT: [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP43]], i32 0, i32 08917// CHECK3-51-NEXT: store i64 [[TMP42]], ptr [[TMP44]], align 88918// CHECK3-51-NEXT: [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP43]], i32 0, i32 18919// CHECK3-51-NEXT: store i64 4, ptr [[TMP45]], align 88920// CHECK3-51-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP43]], i32 0, i32 28921// CHECK3-51-NEXT: store i8 1, ptr [[TMP46]], align 88922// CHECK3-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR10]], align 88923// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM11:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB33]])8924// CHECK3-51-NEXT: [[TMP47:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM11]], ptr [[TMP32]], i32 2, ptr [[TMP37]], i32 0, ptr null)8925// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM13:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB35:[0-9]+]])8926// CHECK3-51-NEXT: [[TMP48:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM13]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..37)8927// CHECK3-51-NEXT: [[TMP49:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35:%.*]], ptr [[TMP48]], i32 0, i32 08928// CHECK3-51-NEXT: [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35]], ptr [[TMP48]], i32 0, i32 18929// CHECK3-51-NEXT: [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_36:%.*]], ptr [[TMP50]], i32 0, i32 08930// CHECK3-51-NEXT: [[TMP52:%.*]] = load i32, ptr [[A]], align 48931// CHECK3-51-NEXT: store i32 [[TMP52]], ptr [[TMP51]], align 88932// CHECK3-51-NEXT: [[TMP53:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR14]], i64 0, i64 08933// CHECK3-51-NEXT: [[TMP54:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i64 08934// CHECK3-51-NEXT: [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 08935// CHECK3-51-NEXT: store i64 0, ptr [[TMP55]], align 88936// CHECK3-51-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 18937// CHECK3-51-NEXT: store i64 0, ptr [[TMP56]], align 88938// CHECK3-51-NEXT: [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP54]], i32 0, i32 28939// CHECK3-51-NEXT: store i8 -128, ptr [[TMP57]], align 88940// CHECK3-51-NEXT: [[TMP58:%.*]] = ptrtoint ptr [[A]] to i648941// CHECK3-51-NEXT: [[TMP59:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i64 18942// CHECK3-51-NEXT: [[TMP60:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP59]], i32 0, i32 08943// CHECK3-51-NEXT: store i64 [[TMP58]], ptr [[TMP60]], align 88944// CHECK3-51-NEXT: [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP59]], i32 0, i32 18945// CHECK3-51-NEXT: store i64 4, ptr [[TMP61]], align 88946// CHECK3-51-NEXT: [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP59]], i32 0, i32 28947// CHECK3-51-NEXT: store i8 1, ptr [[TMP62]], align 88948// CHECK3-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR15]], align 88949// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM16:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB35]])8950// CHECK3-51-NEXT: [[TMP63:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM16]], ptr [[TMP48]], i32 2, ptr [[TMP53]], i32 0, ptr null)8951// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM18:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB37:[0-9]+]])8952// CHECK3-51-NEXT: [[TMP64:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM18]], i32 1, i64 48, i64 1, ptr @.omp_task_entry..40)8953// CHECK3-51-NEXT: [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38:%.*]], ptr [[TMP64]], i32 0, i32 08954// CHECK3-51-NEXT: [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38]], ptr [[TMP64]], i32 0, i32 18955// CHECK3-51-NEXT: [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_39:%.*]], ptr [[TMP66]], i32 0, i32 08956// CHECK3-51-NEXT: [[TMP68:%.*]] = load i32, ptr [[A]], align 48957// CHECK3-51-NEXT: store i32 [[TMP68]], ptr [[TMP67]], align 88958// CHECK3-51-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR19]], i64 0, i64 08959// CHECK3-51-NEXT: [[TMP70:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i64 08960// CHECK3-51-NEXT: [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP70]], i32 0, i32 08961// CHECK3-51-NEXT: store i64 0, ptr [[TMP71]], align 88962// CHECK3-51-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP70]], i32 0, i32 18963// CHECK3-51-NEXT: store i64 0, ptr [[TMP72]], align 88964// CHECK3-51-NEXT: [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP70]], i32 0, i32 28965// CHECK3-51-NEXT: store i8 -128, ptr [[TMP73]], align 88966// CHECK3-51-NEXT: store i64 1, ptr [[DEP_COUNTER_ADDR20]], align 88967// CHECK3-51-NEXT: [[OMP_GLOBAL_THREAD_NUM21:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB37]])8968// CHECK3-51-NEXT: [[TMP74:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM21]], ptr [[TMP64]], i32 1, ptr [[TMP69]], i32 0, ptr null)8969// CHECK3-51-NEXT: ret void8970//8971//8972// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..278973// CHECK3-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {8974// CHECK3-51-NEXT: entry:8975// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 88976// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88977// CHECK3-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 88978// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 88979// CHECK3-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 88980// CHECK3-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_27:%.*]], ptr [[TMP2]], i32 0, i32 08981// CHECK3-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 88982// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 88983// CHECK3-51-NEXT: ret void8984//8985//8986// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..288987// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {8988// CHECK3-51-NEXT: entry:8989// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 48990// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 88991// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 88992// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 88993// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 88994// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 88995// CHECK3-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 88996// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 48997// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 88998// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 48999// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89000// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49001// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89002// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26:%.*]], ptr [[TMP3]], i32 0, i32 09003// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29004// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09005// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89006// CHECK3-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_26]], ptr [[TMP3]], i32 0, i32 19007// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META133:![0-9]+]])9008// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META136:![0-9]+]])9009// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META138:![0-9]+]])9010// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META140:![0-9]+]])9011// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META142:![0-9]+]]9012// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META142]]9013// CHECK3-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META142]]9014// CHECK3-51-NEXT: store ptr @.omp_task_privates_map..27, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META142]]9015// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META142]]9016// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META142]]9017// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META142]]9018// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META142]]9019// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META142]]9020// CHECK3-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]9021// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META142]]9022// CHECK3-51-NEXT: store i32 13, ptr [[TMP12]], align 49023// CHECK3-51-NEXT: ret i32 09024//9025//9026// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..309027// CHECK3-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {9028// CHECK3-51-NEXT: entry:9029// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 89030// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89031// CHECK3-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 89032// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89033// CHECK3-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 89034// CHECK3-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_30:%.*]], ptr [[TMP2]], i32 0, i32 09035// CHECK3-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 89036// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 89037// CHECK3-51-NEXT: ret void9038//9039//9040// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..319041// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9042// CHECK3-51-NEXT: entry:9043// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49044// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89045// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89046// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89047// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89048// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89049// CHECK3-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 89050// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49051// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89052// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49053// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89054// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49055// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89056// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29:%.*]], ptr [[TMP3]], i32 0, i32 09057// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29058// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09059// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89060// CHECK3-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_29]], ptr [[TMP3]], i32 0, i32 19061// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META143:![0-9]+]])9062// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META146:![0-9]+]])9063// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META148:![0-9]+]])9064// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META150:![0-9]+]])9065// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META152:![0-9]+]]9066// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META152]]9067// CHECK3-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META152]]9068// CHECK3-51-NEXT: store ptr @.omp_task_privates_map..30, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META152]]9069// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META152]]9070// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META152]]9071// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META152]]9072// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META152]]9073// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META152]]9074// CHECK3-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]9075// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META152]]9076// CHECK3-51-NEXT: store i32 14, ptr [[TMP12]], align 49077// CHECK3-51-NEXT: ret i32 09078//9079//9080// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..339081// CHECK3-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {9082// CHECK3-51-NEXT: entry:9083// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 89084// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89085// CHECK3-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 89086// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89087// CHECK3-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 89088// CHECK3-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_33:%.*]], ptr [[TMP2]], i32 0, i32 09089// CHECK3-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 89090// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 89091// CHECK3-51-NEXT: ret void9092//9093//9094// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..349095// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9096// CHECK3-51-NEXT: entry:9097// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49098// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89099// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89100// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89101// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89102// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89103// CHECK3-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 89104// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49105// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89106// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49107// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89108// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49109// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89110// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32:%.*]], ptr [[TMP3]], i32 0, i32 09111// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29112// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09113// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89114// CHECK3-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_32]], ptr [[TMP3]], i32 0, i32 19115// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META153:![0-9]+]])9116// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META156:![0-9]+]])9117// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META158:![0-9]+]])9118// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META160:![0-9]+]])9119// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META162:![0-9]+]]9120// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META162]]9121// CHECK3-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META162]]9122// CHECK3-51-NEXT: store ptr @.omp_task_privates_map..33, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META162]]9123// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META162]]9124// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META162]]9125// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META162]]9126// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META162]]9127// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META162]]9128// CHECK3-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]9129// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META162]]9130// CHECK3-51-NEXT: store i32 15, ptr [[TMP12]], align 49131// CHECK3-51-NEXT: ret i32 09132//9133//9134// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..369135// CHECK3-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {9136// CHECK3-51-NEXT: entry:9137// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 89138// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89139// CHECK3-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 89140// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89141// CHECK3-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 89142// CHECK3-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_36:%.*]], ptr [[TMP2]], i32 0, i32 09143// CHECK3-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 89144// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 89145// CHECK3-51-NEXT: ret void9146//9147//9148// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..379149// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9150// CHECK3-51-NEXT: entry:9151// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49152// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89153// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89154// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89155// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89156// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89157// CHECK3-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 89158// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49159// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89160// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49161// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89162// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49163// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89164// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35:%.*]], ptr [[TMP3]], i32 0, i32 09165// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29166// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09167// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89168// CHECK3-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_35]], ptr [[TMP3]], i32 0, i32 19169// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META163:![0-9]+]])9170// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META166:![0-9]+]])9171// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META168:![0-9]+]])9172// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META170:![0-9]+]])9173// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META172:![0-9]+]]9174// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META172]]9175// CHECK3-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META172]]9176// CHECK3-51-NEXT: store ptr @.omp_task_privates_map..36, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META172]]9177// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META172]]9178// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META172]]9179// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META172]]9180// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META172]]9181// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META172]]9182// CHECK3-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]9183// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META172]]9184// CHECK3-51-NEXT: store i32 16, ptr [[TMP12]], align 49185// CHECK3-51-NEXT: ret i32 09186//9187//9188// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..399189// CHECK3-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {9190// CHECK3-51-NEXT: entry:9191// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 89192// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89193// CHECK3-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 89194// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89195// CHECK3-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 89196// CHECK3-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_39:%.*]], ptr [[TMP2]], i32 0, i32 09197// CHECK3-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 89198// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 89199// CHECK3-51-NEXT: ret void9200//9201//9202// CHECK3-51-LABEL: define {{[^@]+}}@.omp_task_entry..409203// CHECK3-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9204// CHECK3-51-NEXT: entry:9205// CHECK3-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49206// CHECK3-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89207// CHECK3-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89208// CHECK3-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89209// CHECK3-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89210// CHECK3-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89211// CHECK3-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 89212// CHECK3-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49213// CHECK3-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89214// CHECK3-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49215// CHECK3-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89216// CHECK3-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49217// CHECK3-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89218// CHECK3-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38:%.*]], ptr [[TMP3]], i32 0, i32 09219// CHECK3-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29220// CHECK3-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09221// CHECK3-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89222// CHECK3-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_38]], ptr [[TMP3]], i32 0, i32 19223// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META173:![0-9]+]])9224// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META176:![0-9]+]])9225// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META178:![0-9]+]])9226// CHECK3-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META180:![0-9]+]])9227// CHECK3-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META182:![0-9]+]]9228// CHECK3-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META182]]9229// CHECK3-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META182]]9230// CHECK3-51-NEXT: store ptr @.omp_task_privates_map..39, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META182]]9231// CHECK3-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META182]]9232// CHECK3-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META182]]9233// CHECK3-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META182]]9234// CHECK3-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META182]]9235// CHECK3-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META182]]9236// CHECK3-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]9237// CHECK3-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META182]]9238// CHECK3-51-NEXT: store i32 17, ptr [[TMP12]], align 49239// CHECK3-51-NEXT: ret i32 09240//9241//9242// CHECK3-51-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_task_codegen.cpp9243// CHECK3-51-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {9244// CHECK3-51-NEXT: entry:9245// CHECK3-51-NEXT: call void @__cxx_global_var_init()9246// CHECK3-51-NEXT: ret void9247//9248//9249// CHECK4-51-LABEL: define {{[^@]+}}@main9250// CHECK4-51-SAME: () #[[ATTR0:[0-9]+]] {9251// CHECK4-51-NEXT: entry:9252// CHECK4-51-NEXT: [[RETVAL:%.*]] = alloca i32, align 49253// CHECK4-51-NEXT: [[B:%.*]] = alloca i8, align 19254// CHECK4-51-NEXT: [[S:%.*]] = alloca [2 x %struct.S], align 49255// CHECK4-51-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 89256// CHECK4-51-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 89257// CHECK4-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 89258// CHECK4-51-NEXT: [[AGG_CAPTURED2:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 89259// CHECK4-51-NEXT: [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 89260// CHECK4-51-NEXT: [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 89261// CHECK4-51-NEXT: [[AGG_CAPTURED6:%.*]] = alloca [[STRUCT_ANON_2:%.*]], align 19262// CHECK4-51-NEXT: [[AGG_CAPTURED9:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 19263// CHECK4-51-NEXT: [[DOTDEP_ARR_ADDR11:%.*]] = alloca [2 x %struct.kmp_depend_info], align 89264// CHECK4-51-NEXT: [[DEP_COUNTER_ADDR17:%.*]] = alloca i64, align 89265// CHECK4-51-NEXT: [[AGG_CAPTURED19:%.*]] = alloca [[STRUCT_ANON_6:%.*]], align 19266// CHECK4-51-NEXT: [[DOTDEP_ARR_ADDR21:%.*]] = alloca [2 x %struct.kmp_depend_info], align 89267// CHECK4-51-NEXT: [[DEP_COUNTER_ADDR27:%.*]] = alloca i64, align 89268// CHECK4-51-NEXT: [[AGG_CAPTURED29:%.*]] = alloca [[STRUCT_ANON_8:%.*]], align 19269// CHECK4-51-NEXT: [[DOTDEP_ARR_ADDR31:%.*]] = alloca [3 x %struct.kmp_depend_info], align 89270// CHECK4-51-NEXT: [[DEP_COUNTER_ADDR37:%.*]] = alloca i64, align 89271// CHECK4-51-NEXT: [[AGG_CAPTURED39:%.*]] = alloca [[STRUCT_ANON_10:%.*]], align 19272// CHECK4-51-NEXT: [[FLAG:%.*]] = alloca i8, align 19273// CHECK4-51-NEXT: [[AGG_CAPTURED42:%.*]] = alloca [[STRUCT_ANON_12:%.*]], align 19274// CHECK4-51-NEXT: [[C:%.*]] = alloca i32, align 1289275// CHECK4-51-NEXT: [[AGG_CAPTURED45:%.*]] = alloca [[STRUCT_ANON_14:%.*]], align 89276// CHECK4-51-NEXT: [[AGG_CAPTURED48:%.*]] = alloca [[STRUCT_ANON_16:%.*]], align 19277// CHECK4-51-NEXT: store i32 0, ptr [[RETVAL]], align 49278// CHECK4-51-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 09279// CHECK4-51-NEXT: [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 29280// CHECK4-51-NEXT: br label [[ARRAYCTOR_LOOP:%.*]]9281// CHECK4-51: arrayctor.loop:9282// CHECK4-51-NEXT: [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]9283// CHECK4-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])9284// CHECK4-51-NEXT: [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 19285// CHECK4-51-NEXT: [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]9286// CHECK4-51-NEXT: br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]9287// CHECK4-51: arrayctor.cont:9288// CHECK4-51-NEXT: [[TMP0:%.*]] = load i32, ptr @a, align 49289// CHECK4-51-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i649290// CHECK4-51-NEXT: [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()9291// CHECK4-51-NEXT: store ptr [[TMP2]], ptr [[SAVED_STACK]], align 89292// CHECK4-51-NEXT: [[TMP3:%.*]] = mul nuw i64 10, [[TMP1]]9293// CHECK4-51-NEXT: [[VLA:%.*]] = alloca i32, i64 [[TMP3]], align 169294// CHECK4-51-NEXT: store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 89295// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 09296// CHECK4-51-NEXT: store ptr [[B]], ptr [[TMP4]], align 89297// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 19298// CHECK4-51-NEXT: store ptr [[S]], ptr [[TMP5]], align 89299// CHECK4-51-NEXT: [[TMP6:%.*]] = load i8, ptr [[B]], align 19300// CHECK4-51-NEXT: [[CONV:%.*]] = sext i8 [[TMP6]] to i329301// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3:[0-9]+]])9302// CHECK4-51-NEXT: [[TMP7:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1:[0-9]+]], i32 [[OMP_GLOBAL_THREAD_NUM]], i32 33, i64 40, i64 16, ptr @.omp_task_entry.)9303// CHECK4-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP7]], i32 0, i32 09304// CHECK4-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP8]], i32 0, i32 09305// CHECK4-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 89306// CHECK4-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP10]], ptr align 8 [[AGG_CAPTURED]], i64 16, i1 false)9307// CHECK4-51-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP8]], i32 0, i32 49308// CHECK4-51-NEXT: store i32 [[CONV]], ptr [[TMP11]], align 89309// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3]])9310// CHECK4-51-NEXT: [[TMP12:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM1]], ptr [[TMP7]])9311// CHECK4-51-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_0]], ptr [[AGG_CAPTURED2]], i32 0, i32 09312// CHECK4-51-NEXT: store ptr [[S]], ptr [[TMP13]], align 89313// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM3:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB5:[0-9]+]])9314// CHECK4-51-NEXT: [[TMP14:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..2)9315// CHECK4-51-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP14]], i32 0, i32 09316// CHECK4-51-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP15]], i32 0, i32 09317// CHECK4-51-NEXT: [[TMP17:%.*]] = load ptr, ptr [[TMP16]], align 89318// CHECK4-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP17]], ptr align 8 [[AGG_CAPTURED2]], i64 8, i1 false)9319// CHECK4-51-NEXT: [[TMP18:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR]], i64 0, i64 09320// CHECK4-51-NEXT: [[TMP19:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], ptr [[TMP18]], i64 09321// CHECK4-51-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 09322// CHECK4-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP20]], align 89323// CHECK4-51-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 19324// CHECK4-51-NEXT: store i64 4, ptr [[TMP21]], align 89325// CHECK4-51-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i32 0, i32 29326// CHECK4-51-NEXT: store i8 1, ptr [[TMP22]], align 89327// CHECK4-51-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i649328// CHECK4-51-NEXT: [[TMP24:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 19329// CHECK4-51-NEXT: [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 09330// CHECK4-51-NEXT: store i64 [[TMP23]], ptr [[TMP25]], align 89331// CHECK4-51-NEXT: [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 19332// CHECK4-51-NEXT: store i64 1, ptr [[TMP26]], align 89333// CHECK4-51-NEXT: [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP24]], i32 0, i32 29334// CHECK4-51-NEXT: store i8 1, ptr [[TMP27]], align 89335// CHECK4-51-NEXT: [[TMP28:%.*]] = ptrtoint ptr [[S]] to i649336// CHECK4-51-NEXT: [[TMP29:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 29337// CHECK4-51-NEXT: [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 09338// CHECK4-51-NEXT: store i64 [[TMP28]], ptr [[TMP30]], align 89339// CHECK4-51-NEXT: [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 19340// CHECK4-51-NEXT: store i64 8, ptr [[TMP31]], align 89341// CHECK4-51-NEXT: [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP29]], i32 0, i32 29342// CHECK4-51-NEXT: store i8 1, ptr [[TMP32]], align 89343// CHECK4-51-NEXT: [[TMP33:%.*]] = mul nsw i64 0, [[TMP1]]9344// CHECK4-51-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP33]]9345// CHECK4-51-NEXT: [[TMP34:%.*]] = mul nsw i64 9, [[TMP1]]9346// CHECK4-51-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP34]]9347// CHECK4-51-NEXT: [[TMP35:%.*]] = getelementptr i32, ptr [[ARRAYIDX4]], i32 19348// CHECK4-51-NEXT: [[TMP36:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i649349// CHECK4-51-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[TMP35]] to i649350// CHECK4-51-NEXT: [[TMP38:%.*]] = sub nuw i64 [[TMP37]], [[TMP36]]9351// CHECK4-51-NEXT: [[TMP39:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i649352// CHECK4-51-NEXT: [[TMP40:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP18]], i64 39353// CHECK4-51-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 09354// CHECK4-51-NEXT: store i64 [[TMP39]], ptr [[TMP41]], align 89355// CHECK4-51-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 19356// CHECK4-51-NEXT: store i64 [[TMP38]], ptr [[TMP42]], align 89357// CHECK4-51-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP40]], i32 0, i32 29358// CHECK4-51-NEXT: store i8 1, ptr [[TMP43]], align 89359// CHECK4-51-NEXT: store i64 4, ptr [[DEP_COUNTER_ADDR]], align 89360// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM5:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB5]])9361// CHECK4-51-NEXT: [[TMP44:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM5]], ptr [[TMP14]], i32 4, ptr [[TMP18]], i32 0, ptr null)9362// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM7:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7:[0-9]+]])9363// CHECK4-51-NEXT: [[TMP45:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM7]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..4)9364// CHECK4-51-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP45]], i32 0, i32 09365// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM8:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7]])9366// CHECK4-51-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP46]], i32 0, i32 29367// CHECK4-51-NEXT: store i32 0, ptr [[TMP47]], align 89368// CHECK4-51-NEXT: [[TMP48:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8]], ptr [[TMP45]])9369// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM10:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9:[0-9]+]])9370// CHECK4-51-NEXT: [[TMP49:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM10]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..6)9371// CHECK4-51-NEXT: [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP49]], i32 0, i32 09372// CHECK4-51-NEXT: [[TMP51:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR11]], i64 0, i64 09373// CHECK4-51-NEXT: [[ARRAYIDX12:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 09374// CHECK4-51-NEXT: [[TMP52:%.*]] = ptrtoint ptr [[ARRAYIDX12]] to i649375// CHECK4-51-NEXT: [[TMP53:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP51]], i64 09376// CHECK4-51-NEXT: [[TMP54:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 09377// CHECK4-51-NEXT: store i64 [[TMP52]], ptr [[TMP54]], align 89378// CHECK4-51-NEXT: [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 19379// CHECK4-51-NEXT: store i64 4, ptr [[TMP55]], align 89380// CHECK4-51-NEXT: [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP53]], i32 0, i32 29381// CHECK4-51-NEXT: store i8 3, ptr [[TMP56]], align 89382// CHECK4-51-NEXT: [[TMP57:%.*]] = load i8, ptr [[B]], align 19383// CHECK4-51-NEXT: [[TMP58:%.*]] = sext i8 [[TMP57]] to i649384// CHECK4-51-NEXT: [[TMP59:%.*]] = mul nsw i64 4, [[TMP1]]9385// CHECK4-51-NEXT: [[ARRAYIDX13:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP59]]9386// CHECK4-51-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX13]], i64 [[TMP58]]9387// CHECK4-51-NEXT: [[TMP60:%.*]] = load i8, ptr [[B]], align 19388// CHECK4-51-NEXT: [[TMP61:%.*]] = sext i8 [[TMP60]] to i649389// CHECK4-51-NEXT: [[TMP62:%.*]] = mul nsw i64 9, [[TMP1]]9390// CHECK4-51-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP62]]9391// CHECK4-51-NEXT: [[ARRAYIDX16:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX15]], i64 [[TMP61]]9392// CHECK4-51-NEXT: [[TMP63:%.*]] = getelementptr i32, ptr [[ARRAYIDX16]], i32 19393// CHECK4-51-NEXT: [[TMP64:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i649394// CHECK4-51-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[TMP63]] to i649395// CHECK4-51-NEXT: [[TMP66:%.*]] = sub nuw i64 [[TMP65]], [[TMP64]]9396// CHECK4-51-NEXT: [[TMP67:%.*]] = ptrtoint ptr [[ARRAYIDX14]] to i649397// CHECK4-51-NEXT: [[TMP68:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP51]], i64 19398// CHECK4-51-NEXT: [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 09399// CHECK4-51-NEXT: store i64 [[TMP67]], ptr [[TMP69]], align 89400// CHECK4-51-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 19401// CHECK4-51-NEXT: store i64 [[TMP66]], ptr [[TMP70]], align 89402// CHECK4-51-NEXT: [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP68]], i32 0, i32 29403// CHECK4-51-NEXT: store i8 3, ptr [[TMP71]], align 89404// CHECK4-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR17]], align 89405// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM18:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9]])9406// CHECK4-51-NEXT: [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP50]], i32 0, i32 29407// CHECK4-51-NEXT: store i32 0, ptr [[TMP72]], align 89408// CHECK4-51-NEXT: [[TMP73:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM18]], ptr [[TMP49]], i32 2, ptr [[TMP51]], i32 0, ptr null)9409// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM20:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11:[0-9]+]])9410// CHECK4-51-NEXT: [[TMP74:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM20]], i32 0, i64 40, i64 1, ptr @.omp_task_entry..8)9411// CHECK4-51-NEXT: [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP74]], i32 0, i32 09412// CHECK4-51-NEXT: [[TMP76:%.*]] = getelementptr inbounds [2 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR21]], i64 0, i64 09413// CHECK4-51-NEXT: [[ARRAYIDX22:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 09414// CHECK4-51-NEXT: [[TMP77:%.*]] = ptrtoint ptr [[ARRAYIDX22]] to i649415// CHECK4-51-NEXT: [[TMP78:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP76]], i64 09416// CHECK4-51-NEXT: [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 09417// CHECK4-51-NEXT: store i64 [[TMP77]], ptr [[TMP79]], align 89418// CHECK4-51-NEXT: [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 19419// CHECK4-51-NEXT: store i64 4, ptr [[TMP80]], align 89420// CHECK4-51-NEXT: [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP78]], i32 0, i32 29421// CHECK4-51-NEXT: store i8 4, ptr [[TMP81]], align 89422// CHECK4-51-NEXT: [[TMP82:%.*]] = load i8, ptr [[B]], align 19423// CHECK4-51-NEXT: [[TMP83:%.*]] = sext i8 [[TMP82]] to i649424// CHECK4-51-NEXT: [[TMP84:%.*]] = mul nsw i64 4, [[TMP1]]9425// CHECK4-51-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP84]]9426// CHECK4-51-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX23]], i64 [[TMP83]]9427// CHECK4-51-NEXT: [[TMP85:%.*]] = load i8, ptr [[B]], align 19428// CHECK4-51-NEXT: [[TMP86:%.*]] = sext i8 [[TMP85]] to i649429// CHECK4-51-NEXT: [[TMP87:%.*]] = mul nsw i64 9, [[TMP1]]9430// CHECK4-51-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP87]]9431// CHECK4-51-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[TMP86]]9432// CHECK4-51-NEXT: [[TMP88:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 19433// CHECK4-51-NEXT: [[TMP89:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i649434// CHECK4-51-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[TMP88]] to i649435// CHECK4-51-NEXT: [[TMP91:%.*]] = sub nuw i64 [[TMP90]], [[TMP89]]9436// CHECK4-51-NEXT: [[TMP92:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i649437// CHECK4-51-NEXT: [[TMP93:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP76]], i64 19438// CHECK4-51-NEXT: [[TMP94:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 09439// CHECK4-51-NEXT: store i64 [[TMP92]], ptr [[TMP94]], align 89440// CHECK4-51-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 19441// CHECK4-51-NEXT: store i64 [[TMP91]], ptr [[TMP95]], align 89442// CHECK4-51-NEXT: [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP93]], i32 0, i32 29443// CHECK4-51-NEXT: store i8 4, ptr [[TMP96]], align 89444// CHECK4-51-NEXT: store i64 2, ptr [[DEP_COUNTER_ADDR27]], align 89445// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM28:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11]])9446// CHECK4-51-NEXT: [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP75]], i32 0, i32 29447// CHECK4-51-NEXT: store i32 0, ptr [[TMP97]], align 89448// CHECK4-51-NEXT: [[TMP98:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM28]], ptr [[TMP74]], i32 2, ptr [[TMP76]], i32 0, ptr null)9449// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM30:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB13:[0-9]+]])9450// CHECK4-51-NEXT: [[TMP99:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM30]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..10)9451// CHECK4-51-NEXT: [[TMP100:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP99]], i32 0, i32 09452// CHECK4-51-NEXT: [[TMP101:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], ptr [[DOTDEP_ARR_ADDR31]], i64 0, i64 09453// CHECK4-51-NEXT: [[TMP102:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 09454// CHECK4-51-NEXT: [[TMP103:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 09455// CHECK4-51-NEXT: store i64 ptrtoint (ptr @a to i64), ptr [[TMP103]], align 89456// CHECK4-51-NEXT: [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 19457// CHECK4-51-NEXT: store i64 4, ptr [[TMP104]], align 89458// CHECK4-51-NEXT: [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i32 0, i32 29459// CHECK4-51-NEXT: store i8 3, ptr [[TMP105]], align 89460// CHECK4-51-NEXT: [[ARRAYIDX32:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i64 0, i64 19461// CHECK4-51-NEXT: [[TMP106:%.*]] = ptrtoint ptr [[ARRAYIDX32]] to i649462// CHECK4-51-NEXT: [[TMP107:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 19463// CHECK4-51-NEXT: [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 09464// CHECK4-51-NEXT: store i64 [[TMP106]], ptr [[TMP108]], align 89465// CHECK4-51-NEXT: [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 19466// CHECK4-51-NEXT: store i64 4, ptr [[TMP109]], align 89467// CHECK4-51-NEXT: [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP107]], i32 0, i32 29468// CHECK4-51-NEXT: store i8 3, ptr [[TMP110]], align 89469// CHECK4-51-NEXT: [[TMP111:%.*]] = mul nsw i64 0, [[TMP1]]9470// CHECK4-51-NEXT: [[ARRAYIDX33:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP111]]9471// CHECK4-51-NEXT: [[ARRAYIDX34:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX33]], i64 39472// CHECK4-51-NEXT: [[TMP112:%.*]] = load i32, ptr @a, align 49473// CHECK4-51-NEXT: [[TMP113:%.*]] = sext i32 [[TMP112]] to i649474// CHECK4-51-NEXT: [[LEN_SUB_1:%.*]] = sub nsw i64 [[TMP113]], 19475// CHECK4-51-NEXT: [[TMP114:%.*]] = load i32, ptr @a, align 49476// CHECK4-51-NEXT: [[TMP115:%.*]] = sext i32 [[TMP114]] to i649477// CHECK4-51-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP115]]9478// CHECK4-51-NEXT: [[TMP116:%.*]] = mul nsw i64 [[LB_ADD_LEN]], [[TMP1]]9479// CHECK4-51-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP116]]9480// CHECK4-51-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX35]], i64 [[LEN_SUB_1]]9481// CHECK4-51-NEXT: [[TMP117:%.*]] = getelementptr i32, ptr [[ARRAYIDX36]], i32 19482// CHECK4-51-NEXT: [[TMP118:%.*]] = ptrtoint ptr [[ARRAYIDX34]] to i649483// CHECK4-51-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[TMP117]] to i649484// CHECK4-51-NEXT: [[TMP120:%.*]] = sub nuw i64 [[TMP119]], [[TMP118]]9485// CHECK4-51-NEXT: [[TMP121:%.*]] = ptrtoint ptr [[ARRAYIDX34]] to i649486// CHECK4-51-NEXT: [[TMP122:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP101]], i64 29487// CHECK4-51-NEXT: [[TMP123:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 09488// CHECK4-51-NEXT: store i64 [[TMP121]], ptr [[TMP123]], align 89489// CHECK4-51-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 19490// CHECK4-51-NEXT: store i64 [[TMP120]], ptr [[TMP124]], align 89491// CHECK4-51-NEXT: [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP122]], i32 0, i32 29492// CHECK4-51-NEXT: store i8 3, ptr [[TMP125]], align 89493// CHECK4-51-NEXT: store i64 3, ptr [[DEP_COUNTER_ADDR37]], align 89494// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM38:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB13]])9495// CHECK4-51-NEXT: [[TMP126:%.*]] = call i32 @__kmpc_omp_task_with_deps(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM38]], ptr [[TMP99]], i32 3, ptr [[TMP101]], i32 0, ptr null)9496// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM40:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15:[0-9]+]])9497// CHECK4-51-NEXT: [[TMP127:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM40]], i32 3, i64 40, i64 1, ptr @.omp_task_entry..12)9498// CHECK4-51-NEXT: [[TMP128:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP127]], i32 0, i32 09499// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM41:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB15]])9500// CHECK4-51-NEXT: [[TMP129:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM41]], ptr [[TMP127]])9501// CHECK4-51-NEXT: store i8 0, ptr [[FLAG]], align 19502// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM43:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB17:[0-9]+]])9503// CHECK4-51-NEXT: [[TMP130:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM43]], i32 1, i64 40, i64 1, ptr @.omp_task_entry..14)9504// CHECK4-51-NEXT: [[TMP131:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP130]], i32 0, i32 09505// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM44:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB17]])9506// CHECK4-51-NEXT: [[TMP132:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM44]], ptr [[TMP130]])9507// CHECK4-51-NEXT: [[TMP133:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_14]], ptr [[AGG_CAPTURED45]], i32 0, i32 09508// CHECK4-51-NEXT: store ptr [[C]], ptr [[TMP133]], align 89509// CHECK4-51-NEXT: [[TMP134:%.*]] = load i8, ptr [[B]], align 19510// CHECK4-51-NEXT: [[TOBOOL:%.*]] = icmp ne i8 [[TMP134]], 09511// CHECK4-51-NEXT: [[TMP135:%.*]] = select i1 [[TOBOOL]], i32 2, i32 09512// CHECK4-51-NEXT: [[TMP136:%.*]] = or i32 [[TMP135]], 19513// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM46:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB19:[0-9]+]])9514// CHECK4-51-NEXT: [[TMP137:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM46]], i32 [[TMP136]], i64 40, i64 8, ptr @.omp_task_entry..16)9515// CHECK4-51-NEXT: [[TMP138:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP137]], i32 0, i32 09516// CHECK4-51-NEXT: [[TMP139:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP138]], i32 0, i32 09517// CHECK4-51-NEXT: [[TMP140:%.*]] = load ptr, ptr [[TMP139]], align 89518// CHECK4-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP140]], ptr align 8 [[AGG_CAPTURED45]], i64 8, i1 false)9519// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM47:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB19]])9520// CHECK4-51-NEXT: [[TMP141:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM47]], ptr [[TMP137]])9521// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM49:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21:[0-9]+]])9522// CHECK4-51-NEXT: [[TMP142:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM49]], i32 0, i64 256, i64 1, ptr @.omp_task_entry..21)9523// CHECK4-51-NEXT: [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP142]], i32 0, i32 09524// CHECK4-51-NEXT: [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP142]], i32 0, i32 29525// CHECK4-51-NEXT: [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP144]], i32 0, i32 09526// CHECK4-51-NEXT: [[TMP146:%.*]] = load i32, ptr [[C]], align 1289527// CHECK4-51-NEXT: store i32 [[TMP146]], ptr [[TMP145]], align 1289528// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM50:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])9529// CHECK4-51-NEXT: [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP143]], i32 0, i32 29530// CHECK4-51-NEXT: store i32 0, ptr [[TMP147]], align 169531// CHECK4-51-NEXT: [[TMP148:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM50]], ptr [[TMP142]])9532// CHECK4-51-NEXT: [[TMP149:%.*]] = load i32, ptr @a, align 49533// CHECK4-51-NEXT: store i32 [[TMP149]], ptr [[RETVAL]], align 49534// CHECK4-51-NEXT: [[TMP150:%.*]] = load ptr, ptr [[SAVED_STACK]], align 89535// CHECK4-51-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP150]])9536// CHECK4-51-NEXT: [[ARRAY_BEGIN51:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S]], i32 0, i32 09537// CHECK4-51-NEXT: [[TMP151:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN51]], i64 29538// CHECK4-51-NEXT: br label [[ARRAYDESTROY_BODY:%.*]]9539// CHECK4-51: arraydestroy.body:9540// CHECK4-51-NEXT: [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP151]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]9541// CHECK4-51-NEXT: [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -19542// CHECK4-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR4:[0-9]+]]9543// CHECK4-51-NEXT: [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN51]]9544// CHECK4-51-NEXT: br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE52:%.*]], label [[ARRAYDESTROY_BODY]]9545// CHECK4-51: arraydestroy.done52:9546// CHECK4-51-NEXT: [[TMP152:%.*]] = load i32, ptr [[RETVAL]], align 49547// CHECK4-51-NEXT: ret i32 [[TMP152]]9548//9549//9550// CHECK4-51-LABEL: define {{[^@]+}}@_ZN1SC1Ev9551// CHECK4-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] align 2 {9552// CHECK4-51-NEXT: entry:9553// CHECK4-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 89554// CHECK4-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 89555// CHECK4-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 89556// CHECK4-51-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])9557// CHECK4-51-NEXT: ret void9558//9559//9560// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry.9561// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {9562// CHECK4-51-NEXT: entry:9563// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49564// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89565// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89566// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89567// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89568// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89569// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49570// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89571// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49572// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89573// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49574// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89575// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 09576// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29577// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09578// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89579// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])9580// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])9581// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])9582// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])9583// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META12:![0-9]+]]9584// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META12]]9585// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META12]]9586// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META12]]9587// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META12]]9588// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]9589// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META12]]9590// CHECK4-51-NEXT: store i32 15, ptr @a, align 4, !noalias [[META12]]9591// CHECK4-51-NEXT: [[TMP9:%.*]] = load i32, ptr @a, align 4, !noalias [[META12]]9592// CHECK4-51-NEXT: [[CONV_I:%.*]] = trunc i32 [[TMP9]] to i89593// CHECK4-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP8]], align 89594// CHECK4-51-NEXT: store i8 [[CONV_I]], ptr [[TMP10]], align 19595// CHECK4-51-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON:%.*]], ptr [[TMP8]], i32 0, i32 19596// CHECK4-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TMP11]], align 89597// CHECK4-51-NEXT: store i32 10, ptr [[TMP12]], align 49598// CHECK4-51-NEXT: ret i32 09599//9600//9601// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..29602// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9603// CHECK4-51-NEXT: entry:9604// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49605// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89606// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89607// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89608// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89609// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89610// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49611// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89612// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49613// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89614// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49615// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89616// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 09617// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29618// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09619// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89620// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])9621// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META16:![0-9]+]])9622// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])9623// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])9624// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META22:![0-9]+]]9625// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META22]]9626// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META22]]9627// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META22]]9628// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META22]]9629// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]9630// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META22]]9631// CHECK4-51-NEXT: store i32 15, ptr @a, align 4, !noalias [[META22]]9632// CHECK4-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 89633// CHECK4-51-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP9]], i64 0, i64 19634// CHECK4-51-NEXT: store i32 10, ptr [[ARRAYIDX_I]], align 49635// CHECK4-51-NEXT: ret i32 09636//9637//9638// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..49639// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9640// CHECK4-51-NEXT: entry:9641// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49642// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89643// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89644// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89645// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89646// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89647// CHECK4-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 49648// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49649// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89650// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49651// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89652// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49653// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89654// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_3:%.*]], ptr [[TMP3]], i32 0, i32 09655// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29656// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09657// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89658// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META23:![0-9]+]])9659// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META26:![0-9]+]])9660// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])9661// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])9662// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32:![0-9]+]]9663// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]9664// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META32]]9665// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META32]]9666// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]9667// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]9668// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]9669// CHECK4-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]9670// CHECK4-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 49671// CHECK4-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [9672// CHECK4-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]9673// CHECK4-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]9674// CHECK4-51-NEXT: ]9675// CHECK4-51: .untied.done..i:9676// CHECK4-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]9677// CHECK4-51-NEXT: br label [[CLEANUP_I:%.*]]9678// CHECK4-51: .untied.jmp..i:9679// CHECK4-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]9680// CHECK4-51-NEXT: store i32 1, ptr [[TMP11]], align 49681// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB7]])9682// CHECK4-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]9683// CHECK4-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])9684// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT:%.*]]9685// CHECK4-51: .untied.jmp.1.i:9686// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM2_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])9687// CHECK4-51-NEXT: call void @__kmpc_critical(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2_I]], ptr @.gomp_critical_user_.var)9688// CHECK4-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META32]]9689// CHECK4-51-NEXT: call void @__kmpc_end_critical(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2_I]], ptr @.gomp_critical_user_.var)9690// CHECK4-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]9691// CHECK4-51-NEXT: br label [[CLEANUP_I]]9692// CHECK4-51: cleanup.i:9693// CHECK4-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META32]]9694// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__3_EXIT]]9695// CHECK4-51: .omp_outlined..3.exit:9696// CHECK4-51-NEXT: ret i32 09697//9698//9699// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..69700// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9701// CHECK4-51-NEXT: entry:9702// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49703// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89704// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89705// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89706// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89707// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89708// CHECK4-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 49709// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49710// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89711// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49712// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89713// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49714// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89715// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 09716// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29717// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09718// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89719// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META33:![0-9]+]])9720// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META36:![0-9]+]])9721// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META38:![0-9]+]])9722// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])9723// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META42:![0-9]+]]9724// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]9725// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META42]]9726// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META42]]9727// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]9728// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]9729// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META42]]9730// CHECK4-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]9731// CHECK4-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 49732// CHECK4-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [9733// CHECK4-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]9734// CHECK4-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]9735// CHECK4-51-NEXT: ]9736// CHECK4-51: .untied.done..i:9737// CHECK4-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]9738// CHECK4-51-NEXT: br label [[CLEANUP_I:%.*]]9739// CHECK4-51: .untied.jmp..i:9740// CHECK4-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META42]]9741// CHECK4-51-NEXT: store i32 1, ptr [[TMP11]], align 49742// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB9]])9743// CHECK4-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META42]]9744// CHECK4-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])9745// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT:%.*]]9746// CHECK4-51: .untied.jmp.1.i:9747// CHECK4-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META42]]9748// CHECK4-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]9749// CHECK4-51-NEXT: br label [[CLEANUP_I]]9750// CHECK4-51: cleanup.i:9751// CHECK4-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META42]]9752// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__5_EXIT]]9753// CHECK4-51: .omp_outlined..5.exit:9754// CHECK4-51-NEXT: ret i32 09755//9756//9757// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..89758// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9759// CHECK4-51-NEXT: entry:9760// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49761// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89762// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89763// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89764// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89765// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89766// CHECK4-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 49767// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49768// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89769// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49770// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89771// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49772// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89773// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_7:%.*]], ptr [[TMP3]], i32 0, i32 09774// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29775// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09776// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89777// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])9778// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META46:![0-9]+]])9779// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META48:![0-9]+]])9780// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META50:![0-9]+]])9781// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META52:![0-9]+]]9782// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]9783// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META52]]9784// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META52]]9785// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]9786// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]9787// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META52]]9788// CHECK4-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]9789// CHECK4-51-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 49790// CHECK4-51-NEXT: switch i32 [[TMP10]], label [[DOTUNTIED_DONE__I:%.*]] [9791// CHECK4-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]9792// CHECK4-51-NEXT: i32 1, label [[DOTUNTIED_JMP_1_I:%.*]]9793// CHECK4-51-NEXT: ]9794// CHECK4-51: .untied.done..i:9795// CHECK4-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]9796// CHECK4-51-NEXT: br label [[CLEANUP_I:%.*]]9797// CHECK4-51: .untied.jmp..i:9798// CHECK4-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META52]]9799// CHECK4-51-NEXT: store i32 1, ptr [[TMP11]], align 49800// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB11]])9801// CHECK4-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META52]]9802// CHECK4-51-NEXT: [[TMP13:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP12]])9803// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT:%.*]]9804// CHECK4-51: .untied.jmp.1.i:9805// CHECK4-51-NEXT: store i32 1, ptr @a, align 4, !noalias [[META52]]9806// CHECK4-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]9807// CHECK4-51-NEXT: br label [[CLEANUP_I]]9808// CHECK4-51: cleanup.i:9809// CHECK4-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META52]]9810// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__7_EXIT]]9811// CHECK4-51: .omp_outlined..7.exit:9812// CHECK4-51-NEXT: ret i32 09813//9814//9815// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..109816// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9817// CHECK4-51-NEXT: entry:9818// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49819// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89820// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89821// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89822// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89823// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89824// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49825// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89826// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49827// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89828// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49829// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89830// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_9:%.*]], ptr [[TMP3]], i32 0, i32 09831// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29832// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09833// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89834// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META53:![0-9]+]])9835// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META56:![0-9]+]])9836// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META58:![0-9]+]])9837// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META60:![0-9]+]])9838// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META62:![0-9]+]]9839// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META62]]9840// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META62]]9841// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META62]]9842// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META62]]9843// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]9844// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META62]]9845// CHECK4-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META62]]9846// CHECK4-51-NEXT: ret i32 09847//9848//9849// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..129850// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9851// CHECK4-51-NEXT: entry:9852// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49853// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89854// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89855// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89856// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89857// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89858// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49859// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89860// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49861// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89862// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49863// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89864// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_11:%.*]], ptr [[TMP3]], i32 0, i32 09865// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29866// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09867// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89868// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META63:![0-9]+]])9869// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META66:![0-9]+]])9870// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META68:![0-9]+]])9871// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META70:![0-9]+]])9872// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META72:![0-9]+]]9873// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META72]]9874// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META72]]9875// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META72]]9876// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META72]]9877// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]9878// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META72]]9879// CHECK4-51-NEXT: store i32 2, ptr @a, align 4, !noalias [[META72]]9880// CHECK4-51-NEXT: ret i32 09881//9882//9883// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..149884// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9885// CHECK4-51-NEXT: entry:9886// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49887// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89888// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89889// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89890// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89891// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89892// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49893// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89894// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49895// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89896// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49897// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89898// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_13:%.*]], ptr [[TMP3]], i32 0, i32 09899// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29900// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09901// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89902// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META73:![0-9]+]])9903// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META76:![0-9]+]])9904// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META78:![0-9]+]])9905// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META80:![0-9]+]])9906// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META82:![0-9]+]]9907// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META82]]9908// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META82]]9909// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META82]]9910// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META82]]9911// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]9912// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META82]]9913// CHECK4-51-NEXT: store i32 3, ptr @a, align 4, !noalias [[META82]]9914// CHECK4-51-NEXT: ret i32 09915//9916//9917// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..169918// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9919// CHECK4-51-NEXT: entry:9920// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49921// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89922// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89923// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89924// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89925// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89926// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49927// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89928// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49929// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89930// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49931// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89932// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_15:%.*]], ptr [[TMP3]], i32 0, i32 09933// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29934// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09935// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 89936// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META83:![0-9]+]])9937// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META86:![0-9]+]])9938// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META88:![0-9]+]])9939// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META90:![0-9]+]])9940// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META92:![0-9]+]]9941// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META92]]9942// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META92]]9943// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META92]]9944// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META92]]9945// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]9946// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META92]]9947// CHECK4-51-NEXT: store i32 4, ptr @a, align 4, !noalias [[META92]]9948// CHECK4-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 89949// CHECK4-51-NEXT: store i32 5, ptr [[TMP9]], align 1289950// CHECK4-51-NEXT: ret i32 09951//9952//9953// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_privates_map.9954// CHECK4-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR7:[0-9]+]] {9955// CHECK4-51-NEXT: entry:9956// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 89957// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89958// CHECK4-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 89959// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89960// CHECK4-51-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 89961// CHECK4-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP2]], i32 0, i32 09962// CHECK4-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR1]], align 89963// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[TMP4]], align 89964// CHECK4-51-NEXT: ret void9965//9966//9967// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..199968// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {9969// CHECK4-51-NEXT: entry:9970// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 49971// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 89972// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 89973// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 89974// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 89975// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 89976// CHECK4-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 89977// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 49978// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 89979// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 49980// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 89981// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 49982// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 89983// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP3]], i32 0, i32 09984// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 29985// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 09986// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 1289987// CHECK4-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18]], ptr [[TMP3]], i32 0, i32 29988// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META93:![0-9]+]])9989// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META96:![0-9]+]])9990// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META98:![0-9]+]])9991// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META100:![0-9]+]])9992// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META102:![0-9]+]]9993// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META102]]9994// CHECK4-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]9995// CHECK4-51-NEXT: store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]9996// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META102]]9997// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]9998// CHECK4-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META102]]9999// CHECK4-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META102]]10000// CHECK4-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META102]]10001// CHECK4-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR4]]10002// CHECK4-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META102]]10003// CHECK4-51-NEXT: store i32 4, ptr [[TMP12]], align 12810004// CHECK4-51-NEXT: store i32 4, ptr @a, align 4, !noalias [[META102]]10005// CHECK4-51-NEXT: ret i32 010006//10007//10008// CHECK4-51-LABEL: define {{[^@]+}}@_ZN1SD1Ev10009// CHECK4-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {10010// CHECK4-51-NEXT: entry:10011// CHECK4-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 810012// CHECK4-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 810013// CHECK4-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 810014// CHECK4-51-NEXT: call void @_ZN1SD2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR4]]10015// CHECK4-51-NEXT: ret void10016//10017//10018// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_privates_map..2010019// CHECK4-51-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]]) #[[ATTR7]] {10020// CHECK4-51-NEXT: entry:10021// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 810022// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 810023// CHECK4-51-NEXT: [[DOTADDR2:%.*]] = alloca ptr, align 810024// CHECK4-51-NEXT: [[DOTADDR3:%.*]] = alloca ptr, align 810025// CHECK4-51-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 810026// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 810027// CHECK4-51-NEXT: store ptr [[TMP2]], ptr [[DOTADDR2]], align 810028// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTADDR3]], align 810029// CHECK4-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTADDR]], align 810030// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20:%.*]], ptr [[TMP4]], i32 0, i32 010031// CHECK4-51-NEXT: [[TMP6:%.*]] = load ptr, ptr [[DOTADDR1]], align 810032// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[TMP6]], align 810033// CHECK4-51-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 110034// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[DOTADDR2]], align 810035// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[TMP8]], align 810036// CHECK4-51-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_20]], ptr [[TMP4]], i32 0, i32 210037// CHECK4-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTADDR3]], align 810038// CHECK4-51-NEXT: store ptr [[TMP9]], ptr [[TMP10]], align 810039// CHECK4-51-NEXT: ret void10040//10041//10042// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..2110043// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {10044// CHECK4-51-NEXT: entry:10045// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 410046// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 810047// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 810048// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 810049// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 810050// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 810051// CHECK4-51-NEXT: [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 810052// CHECK4-51-NEXT: [[DOTLOCAL_PTR_ADDR_I:%.*]] = alloca ptr, align 810053// CHECK4-51-NEXT: [[DOTLOCAL_PTR_ADDR1_I:%.*]] = alloca ptr, align 810054// CHECK4-51-NEXT: [[CLEANUP_DEST_SLOT_I:%.*]] = alloca i32, align 410055// CHECK4-51-NEXT: [[S1_I:%.*]] = alloca [[STRUCT_S:%.*]], align 410056// CHECK4-51-NEXT: [[S2_I:%.*]] = alloca [[STRUCT_S]], align 410057// CHECK4-51-NEXT: [[REF_TMP_I:%.*]] = alloca [[STRUCT_S]], align 410058// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 410059// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 810060// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 410061// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 810062// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 410063// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 810064// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19:%.*]], ptr [[TMP3]], i32 0, i32 010065// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 210066// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 010067// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 12810068// CHECK4-51-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_19]], ptr [[TMP3]], i32 0, i32 210069// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META103:![0-9]+]])10070// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META106:![0-9]+]])10071// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META108:![0-9]+]])10072// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META110:![0-9]+]])10073// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META112:![0-9]+]]10074// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]10075// CHECK4-51-NEXT: store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]10076// CHECK4-51-NEXT: store ptr @.omp_task_privates_map..20, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]10077// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]10078// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]10079// CHECK4-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META112]]10080// CHECK4-51-NEXT: [[TMP10:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META112]]10081// CHECK4-51-NEXT: [[TMP11:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META112]]10082// CHECK4-51-NEXT: call void [[TMP10]](ptr [[TMP11]], ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR_I]], ptr [[DOTLOCAL_PTR_ADDR1_I]]) #[[ATTR4]]10083// CHECK4-51-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias [[META112]]10084// CHECK4-51-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR_I]], align 8, !noalias [[META112]]10085// CHECK4-51-NEXT: [[TMP14:%.*]] = load ptr, ptr [[DOTLOCAL_PTR_ADDR1_I]], align 8, !noalias [[META112]]10086// CHECK4-51-NEXT: [[TMP15:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]10087// CHECK4-51-NEXT: [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 410088// CHECK4-51-NEXT: switch i32 [[TMP16]], label [[DOTUNTIED_DONE__I:%.*]] [10089// CHECK4-51-NEXT: i32 0, label [[DOTUNTIED_JMP__I:%.*]]10090// CHECK4-51-NEXT: i32 1, label [[DOTUNTIED_JMP_2_I:%.*]]10091// CHECK4-51-NEXT: i32 2, label [[DOTUNTIED_JMP_6_I:%.*]]10092// CHECK4-51-NEXT: i32 3, label [[DOTUNTIED_JMP_10_I:%.*]]10093// CHECK4-51-NEXT: i32 4, label [[DOTUNTIED_JMP_15_I:%.*]]10094// CHECK4-51-NEXT: ]10095// CHECK4-51: .untied.done..i:10096// CHECK4-51-NEXT: store i32 1, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]10097// CHECK4-51-NEXT: br label [[CLEANUP_I:%.*]]10098// CHECK4-51: .untied.jmp..i:10099// CHECK4-51-NEXT: [[TMP17:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]10100// CHECK4-51-NEXT: store i32 1, ptr [[TMP17]], align 410101// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])10102// CHECK4-51-NEXT: [[TMP18:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]10103// CHECK4-51-NEXT: [[TMP19:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM_I]], ptr [[TMP18]])10104// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT:%.*]]10105// CHECK4-51: .untied.jmp.2.i:10106// CHECK4-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S1_I]])10107// CHECK4-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S2_I]])10108// CHECK4-51-NEXT: store i32 0, ptr [[S2_I]], align 4, !noalias [[META112]]10109// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM3_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23:[0-9]+]])10110// CHECK4-51-NEXT: [[TMP20:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM3_I]], i32 1, i64 256, i64 1, ptr @.omp_task_entry..19)10111// CHECK4-51-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_18:%.*]], ptr [[TMP20]], i32 0, i32 210112// CHECK4-51-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP12]], align 12810113// CHECK4-51-NEXT: store i32 [[TMP22]], ptr [[TMP21]], align 12810114// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM4_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB23]])10115// CHECK4-51-NEXT: [[TMP23:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM4_I]], ptr [[TMP20]])10116// CHECK4-51-NEXT: [[TMP24:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]10117// CHECK4-51-NEXT: store i32 2, ptr [[TMP24]], align 410118// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM5_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])10119// CHECK4-51-NEXT: [[TMP25:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]10120// CHECK4-51-NEXT: [[TMP26:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM5_I]], ptr [[TMP25]])10121// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]10122// CHECK4-51: .untied.jmp.6.i:10123// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM8_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])10124// CHECK4-51-NEXT: [[TMP27:%.*]] = call i32 @__kmpc_omp_taskyield(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM8_I]], i32 0)10125// CHECK4-51-NEXT: [[TMP28:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]10126// CHECK4-51-NEXT: store i32 3, ptr [[TMP28]], align 410127// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM9_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])10128// CHECK4-51-NEXT: [[TMP29:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]10129// CHECK4-51-NEXT: [[TMP30:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM9_I]], ptr [[TMP29]])10130// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]10131// CHECK4-51: .untied.jmp.10.i:10132// CHECK4-51-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]])10133// CHECK4-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[S1_I]], ptr align 4 [[REF_TMP_I]], i64 4, i1 false), !noalias [[META112]]10134// CHECK4-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[REF_TMP_I]]) #[[ATTR4]]10135// CHECK4-51-NEXT: store i32 10, ptr [[S2_I]], align 4, !noalias [[META112]]10136// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM13_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])10137// CHECK4-51-NEXT: [[TMP31:%.*]] = call i32 @__kmpc_omp_taskwait(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM13_I]])10138// CHECK4-51-NEXT: [[TMP32:%.*]] = load ptr, ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META112]]10139// CHECK4-51-NEXT: store i32 4, ptr [[TMP32]], align 410140// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM14_I:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB21]])10141// CHECK4-51-NEXT: [[TMP33:%.*]] = load ptr, ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META112]]10142// CHECK4-51-NEXT: [[TMP34:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM14_I]], ptr [[TMP33]])10143// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]10144// CHECK4-51: .untied.jmp.15.i:10145// CHECK4-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S2_I]]) #[[ATTR4]]10146// CHECK4-51-NEXT: call void @_ZN1SD1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[S1_I]]) #[[ATTR4]]10147// CHECK4-51-NEXT: store i32 0, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]10148// CHECK4-51-NEXT: br label [[CLEANUP_I]]10149// CHECK4-51: cleanup.i:10150// CHECK4-51-NEXT: [[CLEANUP_DEST_I:%.*]] = load i32, ptr [[CLEANUP_DEST_SLOT_I]], align 4, !noalias [[META112]]10151// CHECK4-51-NEXT: br label [[DOTOMP_OUTLINED__17_EXIT]]10152// CHECK4-51: .omp_outlined..17.exit:10153// CHECK4-51-NEXT: ret i32 010154//10155//10156// CHECK4-51-LABEL: define {{[^@]+}}@_ZN1SC2Ev10157// CHECK4-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {10158// CHECK4-51-NEXT: entry:10159// CHECK4-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 810160// CHECK4-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 810161// CHECK4-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 810162// CHECK4-51-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 010163// CHECK4-51-NEXT: store i32 0, ptr [[A]], align 410164// CHECK4-51-NEXT: ret void10165//10166//10167// CHECK4-51-LABEL: define {{[^@]+}}@_ZN1SD2Ev10168// CHECK4-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {10169// CHECK4-51-NEXT: entry:10170// CHECK4-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 810171// CHECK4-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 810172// CHECK4-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 810173// CHECK4-51-NEXT: ret void10174//10175//10176// CHECK4-51-LABEL: define {{[^@]+}}@__cxx_global_var_init10177// CHECK4-51-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {10178// CHECK4-51-NEXT: entry:10179// CHECK4-51-NEXT: call void @_ZN2S1C1Ev(ptr noundef nonnull align 4 dereferenceable(4) @s1)10180// CHECK4-51-NEXT: ret void10181//10182//10183// CHECK4-51-LABEL: define {{[^@]+}}@_ZN2S1C1Ev10184// CHECK4-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {10185// CHECK4-51-NEXT: entry:10186// CHECK4-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 810187// CHECK4-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 810188// CHECK4-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 810189// CHECK4-51-NEXT: call void @_ZN2S1C2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])10190// CHECK4-51-NEXT: ret void10191//10192//10193// CHECK4-51-LABEL: define {{[^@]+}}@_ZN2S1C2Ev10194// CHECK4-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] align 2 {10195// CHECK4-51-NEXT: entry:10196// CHECK4-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 810197// CHECK4-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 810198// CHECK4-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 810199// CHECK4-51-NEXT: call void @_ZN2S18taskinitEv(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])10200// CHECK4-51-NEXT: ret void10201//10202//10203// CHECK4-51-LABEL: define {{[^@]+}}@_ZN2S18taskinitEv10204// CHECK4-51-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) #[[ATTR1]] align 2 {10205// CHECK4-51-NEXT: entry:10206// CHECK4-51-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 810207// CHECK4-51-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_21:%.*]], align 810208// CHECK4-51-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 810209// CHECK4-51-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 810210// CHECK4-51-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON_21]], ptr [[AGG_CAPTURED]], i32 0, i32 010211// CHECK4-51-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 810212// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB25:[0-9]+]])10213// CHECK4-51-NEXT: [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM]], i32 1, i64 40, i64 8, ptr @.omp_task_entry..23)10214// CHECK4-51-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP1]], i32 0, i32 010215// CHECK4-51-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP2]], i32 0, i32 010216// CHECK4-51-NEXT: [[TMP4:%.*]] = load ptr, ptr [[TMP3]], align 810217// CHECK4-51-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP4]], ptr align 8 [[AGG_CAPTURED]], i64 8, i1 false)10218// CHECK4-51-NEXT: [[OMP_GLOBAL_THREAD_NUM2:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB25]])10219// CHECK4-51-NEXT: [[TMP5:%.*]] = call i32 @__kmpc_omp_task(ptr @[[GLOB1]], i32 [[OMP_GLOBAL_THREAD_NUM2]], ptr [[TMP1]])10220// CHECK4-51-NEXT: ret void10221//10222//10223// CHECK4-51-LABEL: define {{[^@]+}}@.omp_task_entry..2310224// CHECK4-51-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR3]] {10225// CHECK4-51-NEXT: entry:10226// CHECK4-51-NEXT: [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 410227// CHECK4-51-NEXT: [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 810228// CHECK4-51-NEXT: [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 810229// CHECK4-51-NEXT: [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 810230// CHECK4-51-NEXT: [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 810231// CHECK4-51-NEXT: [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 810232// CHECK4-51-NEXT: [[DOTADDR:%.*]] = alloca i32, align 410233// CHECK4-51-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 810234// CHECK4-51-NEXT: store i32 [[TMP0]], ptr [[DOTADDR]], align 410235// CHECK4-51-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 810236// CHECK4-51-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 410237// CHECK4-51-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 810238// CHECK4-51-NEXT: [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_22:%.*]], ptr [[TMP3]], i32 0, i32 010239// CHECK4-51-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 210240// CHECK4-51-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 010241// CHECK4-51-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 810242// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META113:![0-9]+]])10243// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META116:![0-9]+]])10244// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META118:![0-9]+]])10245// CHECK4-51-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META120:![0-9]+]])10246// CHECK4-51-NEXT: store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META122:![0-9]+]]10247// CHECK4-51-NEXT: store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META122]]10248// CHECK4-51-NEXT: store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META122]]10249// CHECK4-51-NEXT: store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META122]]10250// CHECK4-51-NEXT: store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META122]]10251// CHECK4-51-NEXT: store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]10252// CHECK4-51-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META122]]10253// CHECK4-51-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 810254// CHECK4-51-NEXT: store i32 0, ptr [[TMP9]], align 410255// CHECK4-51-NEXT: ret i32 010256//10257//10258// CHECK4-51-LABEL: define {{[^@]+}}@_GLOBAL__sub_I_task_codegen.cpp10259// CHECK4-51-SAME: () #[[ATTR7]] section "__TEXT,__StaticInit,regular,pure_instructions" {10260// CHECK4-51-NEXT: entry:10261// CHECK4-51-NEXT: call void @__cxx_global_var_init()10262// CHECK4-51-NEXT: ret void10263//10264// CHECK6-LABEL: define void @_Z14test_threadsetv()10265// CHECK6-NEXT: entry:10266// CHECK6-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_23:%.*]], align 110267// CHECK6-NEXT: [[AGG_CAPTURED2:%.*]] = alloca [[STRUCT_ANON_25:%.*]], align 110268// CHECK6-NEXT: call i32 @__kmpc_global_thread_num(ptr @[[GLOB_PTR:[0-9]+]])10269// CHECK6-NEXT: [[TMP0:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @1, i32 %omp_global_thread_num, i32 1, i64 40, i64 1, ptr @.omp_task_entry..[[ENTRY1:[0-9]+]])10270// CHECK6-NEXT: getelementptr inbounds nuw %struct.kmp_task_t_with_privates{{.*}}, ptr %0, i32 0, i32 010271// CHECK6-NEXT: call i32 @__kmpc_global_thread_num(ptr @[[GLOB_PTR:[0-9]+]])10272// CHECK6-NEXT: call i32 @__kmpc_omp_task(ptr @1, i32 %omp_global_thread_num1, ptr %0)10273// CHECK6-NEXT: call i32 @__kmpc_global_thread_num(ptr @[[GLOB_PTR2:[0-9]+]])10274// CHECK6-NEXT: [[TMP3:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @1, i32 %omp_global_thread_num3, i32 129, i64 40, i64 1, ptr @.omp_task_entry..[[ENTRY2:[0-9]+]])10275// CHECK6-NEXT: getelementptr inbounds nuw %struct.kmp_task_t_with_privates{{.*}}, ptr %3, i32 0, i32 010276// CHECK6-NEXT: call i32 @__kmpc_global_thread_num(ptr @[[GLOB_PTR2:[0-9]+]])10277// CHECK6-NEXT: call i32 @__kmpc_omp_task(ptr @1, i32 %omp_global_thread_num4, ptr %3)10278// CHECK6-NEXT: ret void10279