3373 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// Test host codegen.3// RUN: %clang_cc1 -DHAS_INT128 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK14// RUN: %clang_cc1 -DHAS_INT128 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s5// RUN: %clang_cc1 -DHAS_INT128 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK16// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK37// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s8// RUN: %clang_cc1 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK39 10// Test target codegen - host bc file has to be created first.11// RUN: %clang_cc1 -DHAS_INT128 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc12// RUN: %clang_cc1 -DHAS_INT128 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s --check-prefix=CHECK513// RUN: %clang_cc1 -DHAS_INT128 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t %s14// RUN: %clang_cc1 -DHAS_INT128 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK515// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm-bc %s -o %t-x86-host.bc16// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s --check-prefix=CHECK717// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o %t %s18// RUN: %clang_cc1 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK719 20// expected-no-diagnostics21#ifndef HEADER22#define HEADER23 24 25void mapWithPrivate() {26 int x, y;27 #pragma omp target teams private(x) map(x,y) private(y)28 ;29}30 31void mapWithFirstprivate() {32 int x, y;33 #pragma omp target teams firstprivate(x) map(x,y) firstprivate(y)34 ;35}36 37void mapWithReduction() {38 int x, y;39 #pragma omp target teams reduction(+:x) map(x,y) reduction(+:y)40 ;41}42 43void mapFrom() {44 int x;45 #pragma omp target teams firstprivate(x) map(from:x)46 ;47}48 49void mapTo() {50 int x;51 #pragma omp target teams firstprivate(x) map(to:x)52 ;53}54 55void mapAlloc() {56 int x;57 #pragma omp target teams firstprivate(x) map(alloc:x)58 ;59}60 61void mapArray() {62 int x[77], y[88], z[99];63 #pragma omp target teams private(x) firstprivate(y) reduction(+:z) map(x,y,z)64 ;65 #pragma omp target teams private(x) firstprivate(y) reduction(+:z) map(to:x,y,z)66 ;67}68 69# if HAS_INT12870void mapInt128() {71 __int128 x, y, z;72 #pragma omp target teams private(x) firstprivate(y) reduction(+:z) map(x,y,z)73 ;74 #pragma omp target teams private(x) firstprivate(y) reduction(+:z) map(from:x,y,z)75 ;76}77# endif78#endif79// CHECK1-LABEL: define {{[^@]+}}@_Z14mapWithPrivatev80// CHECK1-SAME: () #[[ATTR0:[0-9]+]] {81// CHECK1-NEXT: entry:82// CHECK1-NEXT: [[X:%.*]] = alloca i32, align 483// CHECK1-NEXT: [[Y:%.*]] = alloca i32, align 484// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 885// CHECK1-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 886// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 887// CHECK1-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 888// CHECK1-NEXT: [[TMP0:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 089// CHECK1-NEXT: store ptr [[X]], ptr [[TMP0]], align 890// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 091// CHECK1-NEXT: store ptr [[X]], ptr [[TMP1]], align 892// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 093// CHECK1-NEXT: store ptr null, ptr [[TMP2]], align 894// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 195// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP3]], align 896// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 197// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP4]], align 898// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 199// CHECK1-NEXT: store ptr null, ptr [[TMP5]], align 8100// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0101// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0102// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0103// CHECK1-NEXT: store i32 3, ptr [[TMP8]], align 4104// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1105// CHECK1-NEXT: store i32 2, ptr [[TMP9]], align 4106// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2107// CHECK1-NEXT: store ptr [[TMP6]], ptr [[TMP10]], align 8108// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3109// CHECK1-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8110// CHECK1-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4111// CHECK1-NEXT: store ptr @.offload_sizes, ptr [[TMP12]], align 8112// CHECK1-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5113// CHECK1-NEXT: store ptr @.offload_maptypes, ptr [[TMP13]], align 8114// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6115// CHECK1-NEXT: store ptr null, ptr [[TMP14]], align 8116// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7117// CHECK1-NEXT: store ptr null, ptr [[TMP15]], align 8118// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8119// CHECK1-NEXT: store i64 0, ptr [[TMP16]], align 8120// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9121// CHECK1-NEXT: store i64 0, ptr [[TMP17]], align 8122// CHECK1-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10123// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP18]], align 4124// CHECK1-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11125// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP19]], align 4126// CHECK1-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12127// CHECK1-NEXT: store i32 0, ptr [[TMP20]], align 4128// CHECK1-NEXT: [[TMP21:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.region_id, ptr [[KERNEL_ARGS]])129// CHECK1-NEXT: [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 0130// CHECK1-NEXT: br i1 [[TMP22]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]131// CHECK1: omp_offload.failed:132// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27() #[[ATTR2:[0-9]+]]133// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT]]134// CHECK1: omp_offload.cont:135// CHECK1-NEXT: ret void136//137//138// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27139// CHECK1-SAME: () #[[ATTR1:[0-9]+]] {140// CHECK1-NEXT: entry:141// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.omp_outlined)142// CHECK1-NEXT: ret void143//144//145// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.omp_outlined146// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR1]] {147// CHECK1-NEXT: entry:148// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8149// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8150// CHECK1-NEXT: [[X:%.*]] = alloca i32, align 4151// CHECK1-NEXT: [[Y:%.*]] = alloca i32, align 4152// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8153// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8154// CHECK1-NEXT: ret void155//156//157// CHECK1-LABEL: define {{[^@]+}}@_Z19mapWithFirstprivatev158// CHECK1-SAME: () #[[ATTR0]] {159// CHECK1-NEXT: entry:160// CHECK1-NEXT: [[X:%.*]] = alloca i32, align 4161// CHECK1-NEXT: [[Y:%.*]] = alloca i32, align 4162// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 8163// CHECK1-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 8164// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 8165// CHECK1-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8166// CHECK1-NEXT: [[TMP0:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0167// CHECK1-NEXT: store ptr [[X]], ptr [[TMP0]], align 8168// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0169// CHECK1-NEXT: store ptr [[X]], ptr [[TMP1]], align 8170// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0171// CHECK1-NEXT: store ptr null, ptr [[TMP2]], align 8172// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1173// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP3]], align 8174// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1175// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP4]], align 8176// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1177// CHECK1-NEXT: store ptr null, ptr [[TMP5]], align 8178// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0179// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0180// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0181// CHECK1-NEXT: store i32 3, ptr [[TMP8]], align 4182// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1183// CHECK1-NEXT: store i32 2, ptr [[TMP9]], align 4184// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2185// CHECK1-NEXT: store ptr [[TMP6]], ptr [[TMP10]], align 8186// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3187// CHECK1-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8188// CHECK1-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4189// CHECK1-NEXT: store ptr @.offload_sizes.1, ptr [[TMP12]], align 8190// CHECK1-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5191// CHECK1-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP13]], align 8192// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6193// CHECK1-NEXT: store ptr null, ptr [[TMP14]], align 8194// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7195// CHECK1-NEXT: store ptr null, ptr [[TMP15]], align 8196// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8197// CHECK1-NEXT: store i64 0, ptr [[TMP16]], align 8198// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9199// CHECK1-NEXT: store i64 0, ptr [[TMP17]], align 8200// CHECK1-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10201// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP18]], align 4202// CHECK1-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11203// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP19]], align 4204// CHECK1-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12205// CHECK1-NEXT: store i32 0, ptr [[TMP20]], align 4206// CHECK1-NEXT: [[TMP21:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.region_id, ptr [[KERNEL_ARGS]])207// CHECK1-NEXT: [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 0208// CHECK1-NEXT: br i1 [[TMP22]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]209// CHECK1: omp_offload.failed:210// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33(ptr [[X]], ptr [[Y]]) #[[ATTR2]]211// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT]]212// CHECK1: omp_offload.cont:213// CHECK1-NEXT: ret void214//215//216// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33217// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR1]] {218// CHECK1-NEXT: entry:219// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8220// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 8221// CHECK1-NEXT: [[X_CASTED:%.*]] = alloca i64, align 8222// CHECK1-NEXT: [[Y_CASTED:%.*]] = alloca i64, align 8223// CHECK1-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8224// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 8225// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8226// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 8227// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 4228// CHECK1-NEXT: store i32 [[TMP2]], ptr [[X_CASTED]], align 4229// CHECK1-NEXT: [[TMP3:%.*]] = load i64, ptr [[X_CASTED]], align 8230// CHECK1-NEXT: [[TMP4:%.*]] = load i32, ptr [[TMP1]], align 4231// CHECK1-NEXT: store i32 [[TMP4]], ptr [[Y_CASTED]], align 4232// CHECK1-NEXT: [[TMP5:%.*]] = load i64, ptr [[Y_CASTED]], align 8233// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.omp_outlined, i64 [[TMP3]], i64 [[TMP5]])234// CHECK1-NEXT: ret void235//236//237// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.omp_outlined238// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[X:%.*]], i64 noundef [[Y:%.*]]) #[[ATTR1]] {239// CHECK1-NEXT: entry:240// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8241// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8242// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca i64, align 8243// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca i64, align 8244// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8245// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8246// CHECK1-NEXT: store i64 [[X]], ptr [[X_ADDR]], align 8247// CHECK1-NEXT: store i64 [[Y]], ptr [[Y_ADDR]], align 8248// CHECK1-NEXT: ret void249//250//251// CHECK1-LABEL: define {{[^@]+}}@_Z16mapWithReductionv252// CHECK1-SAME: () #[[ATTR0]] {253// CHECK1-NEXT: entry:254// CHECK1-NEXT: [[X:%.*]] = alloca i32, align 4255// CHECK1-NEXT: [[Y:%.*]] = alloca i32, align 4256// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 8257// CHECK1-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 8258// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 8259// CHECK1-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8260// CHECK1-NEXT: [[TMP0:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0261// CHECK1-NEXT: store ptr [[X]], ptr [[TMP0]], align 8262// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0263// CHECK1-NEXT: store ptr [[X]], ptr [[TMP1]], align 8264// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0265// CHECK1-NEXT: store ptr null, ptr [[TMP2]], align 8266// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1267// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP3]], align 8268// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1269// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP4]], align 8270// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1271// CHECK1-NEXT: store ptr null, ptr [[TMP5]], align 8272// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0273// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0274// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0275// CHECK1-NEXT: store i32 3, ptr [[TMP8]], align 4276// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1277// CHECK1-NEXT: store i32 2, ptr [[TMP9]], align 4278// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2279// CHECK1-NEXT: store ptr [[TMP6]], ptr [[TMP10]], align 8280// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3281// CHECK1-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 8282// CHECK1-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4283// CHECK1-NEXT: store ptr @.offload_sizes.3, ptr [[TMP12]], align 8284// CHECK1-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5285// CHECK1-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP13]], align 8286// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6287// CHECK1-NEXT: store ptr null, ptr [[TMP14]], align 8288// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7289// CHECK1-NEXT: store ptr null, ptr [[TMP15]], align 8290// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8291// CHECK1-NEXT: store i64 0, ptr [[TMP16]], align 8292// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9293// CHECK1-NEXT: store i64 0, ptr [[TMP17]], align 8294// CHECK1-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10295// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP18]], align 4296// CHECK1-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11297// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP19]], align 4298// CHECK1-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12299// CHECK1-NEXT: store i32 0, ptr [[TMP20]], align 4300// CHECK1-NEXT: [[TMP21:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.region_id, ptr [[KERNEL_ARGS]])301// CHECK1-NEXT: [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 0302// CHECK1-NEXT: br i1 [[TMP22]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]303// CHECK1: omp_offload.failed:304// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39(ptr [[X]], ptr [[Y]]) #[[ATTR2]]305// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT]]306// CHECK1: omp_offload.cont:307// CHECK1-NEXT: ret void308//309//310// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39311// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR1]] {312// CHECK1-NEXT: entry:313// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8314// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 8315// CHECK1-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8316// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 8317// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8318// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 8319// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])320// CHECK1-NEXT: ret void321//322//323// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined324// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR1]] {325// CHECK1-NEXT: entry:326// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8327// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8328// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8329// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 8330// CHECK1-NEXT: [[X1:%.*]] = alloca i32, align 4331// CHECK1-NEXT: [[Y2:%.*]] = alloca i32, align 4332// CHECK1-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [2 x ptr], align 8333// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8334// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8335// CHECK1-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8336// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 8337// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8338// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 8339// CHECK1-NEXT: store i32 0, ptr [[X1]], align 4340// CHECK1-NEXT: store i32 0, ptr [[Y2]], align 4341// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 0342// CHECK1-NEXT: store ptr [[X1]], ptr [[TMP2]], align 8343// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 1344// CHECK1-NEXT: store ptr [[Y2]], ptr [[TMP3]], align 8345// CHECK1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8346// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 4347// CHECK1-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2:[0-9]+]], i32 [[TMP5]], i32 2, i64 16, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)348// CHECK1-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [349// CHECK1-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]350// CHECK1-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]351// CHECK1-NEXT: ]352// CHECK1: .omp.reduction.case1:353// CHECK1-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP0]], align 4354// CHECK1-NEXT: [[TMP8:%.*]] = load i32, ptr [[X1]], align 4355// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP7]], [[TMP8]]356// CHECK1-NEXT: store i32 [[ADD]], ptr [[TMP0]], align 4357// CHECK1-NEXT: [[TMP9:%.*]] = load i32, ptr [[TMP1]], align 4358// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[Y2]], align 4359// CHECK1-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]360// CHECK1-NEXT: store i32 [[ADD3]], ptr [[TMP1]], align 4361// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)362// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]363// CHECK1: .omp.reduction.case2:364// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[X1]], align 4365// CHECK1-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[TMP0]], i32 [[TMP11]] monotonic, align 4366// CHECK1-NEXT: [[TMP13:%.*]] = load i32, ptr [[Y2]], align 4367// CHECK1-NEXT: [[TMP14:%.*]] = atomicrmw add ptr [[TMP1]], i32 [[TMP13]] monotonic, align 4368// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)369// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]370// CHECK1: .omp.reduction.default:371// CHECK1-NEXT: ret void372//373//374// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined.omp.reduction.reduction_func375// CHECK1-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {376// CHECK1-NEXT: entry:377// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 8378// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8379// CHECK1-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 8380// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8381// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 8382// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8383// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP3]], i64 0, i64 0384// CHECK1-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 8385// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP2]], i64 0, i64 0386// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8387// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP3]], i64 0, i64 1388// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 8389// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP2]], i64 0, i64 1390// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TMP10]], align 8391// CHECK1-NEXT: [[TMP12:%.*]] = load i32, ptr [[TMP7]], align 4392// CHECK1-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP5]], align 4393// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]394// CHECK1-NEXT: store i32 [[ADD]], ptr [[TMP7]], align 4395// CHECK1-NEXT: [[TMP14:%.*]] = load i32, ptr [[TMP11]], align 4396// CHECK1-NEXT: [[TMP15:%.*]] = load i32, ptr [[TMP9]], align 4397// CHECK1-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]398// CHECK1-NEXT: store i32 [[ADD2]], ptr [[TMP11]], align 4399// CHECK1-NEXT: ret void400//401//402// CHECK1-LABEL: define {{[^@]+}}@_Z7mapFromv403// CHECK1-SAME: () #[[ATTR0]] {404// CHECK1-NEXT: entry:405// CHECK1-NEXT: [[X:%.*]] = alloca i32, align 4406// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8407// CHECK1-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8408// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8409// CHECK1-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8410// CHECK1-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0411// CHECK1-NEXT: store ptr [[X]], ptr [[TMP0]], align 8412// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0413// CHECK1-NEXT: store ptr [[X]], ptr [[TMP1]], align 8414// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0415// CHECK1-NEXT: store ptr null, ptr [[TMP2]], align 8416// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0417// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0418// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0419// CHECK1-NEXT: store i32 3, ptr [[TMP5]], align 4420// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1421// CHECK1-NEXT: store i32 1, ptr [[TMP6]], align 4422// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2423// CHECK1-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 8424// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3425// CHECK1-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8426// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4427// CHECK1-NEXT: store ptr @.offload_sizes.5, ptr [[TMP9]], align 8428// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5429// CHECK1-NEXT: store ptr @.offload_maptypes.6, ptr [[TMP10]], align 8430// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6431// CHECK1-NEXT: store ptr null, ptr [[TMP11]], align 8432// CHECK1-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7433// CHECK1-NEXT: store ptr null, ptr [[TMP12]], align 8434// CHECK1-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8435// CHECK1-NEXT: store i64 0, ptr [[TMP13]], align 8436// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9437// CHECK1-NEXT: store i64 0, ptr [[TMP14]], align 8438// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10439// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP15]], align 4440// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11441// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4442// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12443// CHECK1-NEXT: store i32 0, ptr [[TMP17]], align 4444// CHECK1-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.region_id, ptr [[KERNEL_ARGS]])445// CHECK1-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0446// CHECK1-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]447// CHECK1: omp_offload.failed:448// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45(ptr [[X]]) #[[ATTR2]]449// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT]]450// CHECK1: omp_offload.cont:451// CHECK1-NEXT: ret void452//453//454// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45455// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR1]] {456// CHECK1-NEXT: entry:457// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8458// CHECK1-NEXT: [[X_CASTED:%.*]] = alloca i64, align 8459// CHECK1-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8460// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8461// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4462// CHECK1-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 4463// CHECK1-NEXT: [[TMP2:%.*]] = load i64, ptr [[X_CASTED]], align 8464// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.omp_outlined, i64 [[TMP2]])465// CHECK1-NEXT: ret void466//467//468// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.omp_outlined469// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[X:%.*]]) #[[ATTR1]] {470// CHECK1-NEXT: entry:471// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8472// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8473// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca i64, align 8474// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8475// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8476// CHECK1-NEXT: store i64 [[X]], ptr [[X_ADDR]], align 8477// CHECK1-NEXT: ret void478//479//480// CHECK1-LABEL: define {{[^@]+}}@_Z5mapTov481// CHECK1-SAME: () #[[ATTR0]] {482// CHECK1-NEXT: entry:483// CHECK1-NEXT: [[X:%.*]] = alloca i32, align 4484// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8485// CHECK1-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8486// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8487// CHECK1-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8488// CHECK1-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0489// CHECK1-NEXT: store ptr [[X]], ptr [[TMP0]], align 8490// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0491// CHECK1-NEXT: store ptr [[X]], ptr [[TMP1]], align 8492// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0493// CHECK1-NEXT: store ptr null, ptr [[TMP2]], align 8494// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0495// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0496// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0497// CHECK1-NEXT: store i32 3, ptr [[TMP5]], align 4498// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1499// CHECK1-NEXT: store i32 1, ptr [[TMP6]], align 4500// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2501// CHECK1-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 8502// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3503// CHECK1-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8504// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4505// CHECK1-NEXT: store ptr @.offload_sizes.7, ptr [[TMP9]], align 8506// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5507// CHECK1-NEXT: store ptr @.offload_maptypes.8, ptr [[TMP10]], align 8508// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6509// CHECK1-NEXT: store ptr null, ptr [[TMP11]], align 8510// CHECK1-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7511// CHECK1-NEXT: store ptr null, ptr [[TMP12]], align 8512// CHECK1-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8513// CHECK1-NEXT: store i64 0, ptr [[TMP13]], align 8514// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9515// CHECK1-NEXT: store i64 0, ptr [[TMP14]], align 8516// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10517// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP15]], align 4518// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11519// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4520// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12521// CHECK1-NEXT: store i32 0, ptr [[TMP17]], align 4522// CHECK1-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.region_id, ptr [[KERNEL_ARGS]])523// CHECK1-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0524// CHECK1-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]525// CHECK1: omp_offload.failed:526// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51(ptr [[X]]) #[[ATTR2]]527// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT]]528// CHECK1: omp_offload.cont:529// CHECK1-NEXT: ret void530//531//532// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51533// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR1]] {534// CHECK1-NEXT: entry:535// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8536// CHECK1-NEXT: [[X_CASTED:%.*]] = alloca i64, align 8537// CHECK1-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8538// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8539// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4540// CHECK1-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 4541// CHECK1-NEXT: [[TMP2:%.*]] = load i64, ptr [[X_CASTED]], align 8542// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.omp_outlined, i64 [[TMP2]])543// CHECK1-NEXT: ret void544//545//546// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.omp_outlined547// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[X:%.*]]) #[[ATTR1]] {548// CHECK1-NEXT: entry:549// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8550// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8551// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca i64, align 8552// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8553// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8554// CHECK1-NEXT: store i64 [[X]], ptr [[X_ADDR]], align 8555// CHECK1-NEXT: ret void556//557//558// CHECK1-LABEL: define {{[^@]+}}@_Z8mapAllocv559// CHECK1-SAME: () #[[ATTR0]] {560// CHECK1-NEXT: entry:561// CHECK1-NEXT: [[X:%.*]] = alloca i32, align 4562// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8563// CHECK1-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8564// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8565// CHECK1-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8566// CHECK1-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0567// CHECK1-NEXT: store ptr [[X]], ptr [[TMP0]], align 8568// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0569// CHECK1-NEXT: store ptr [[X]], ptr [[TMP1]], align 8570// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0571// CHECK1-NEXT: store ptr null, ptr [[TMP2]], align 8572// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0573// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0574// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0575// CHECK1-NEXT: store i32 3, ptr [[TMP5]], align 4576// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1577// CHECK1-NEXT: store i32 1, ptr [[TMP6]], align 4578// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2579// CHECK1-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 8580// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3581// CHECK1-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8582// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4583// CHECK1-NEXT: store ptr @.offload_sizes.9, ptr [[TMP9]], align 8584// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5585// CHECK1-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP10]], align 8586// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6587// CHECK1-NEXT: store ptr null, ptr [[TMP11]], align 8588// CHECK1-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7589// CHECK1-NEXT: store ptr null, ptr [[TMP12]], align 8590// CHECK1-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8591// CHECK1-NEXT: store i64 0, ptr [[TMP13]], align 8592// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9593// CHECK1-NEXT: store i64 0, ptr [[TMP14]], align 8594// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10595// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP15]], align 4596// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11597// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4598// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12599// CHECK1-NEXT: store i32 0, ptr [[TMP17]], align 4600// CHECK1-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.region_id, ptr [[KERNEL_ARGS]])601// CHECK1-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0602// CHECK1-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]603// CHECK1: omp_offload.failed:604// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57(ptr [[X]]) #[[ATTR2]]605// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT]]606// CHECK1: omp_offload.cont:607// CHECK1-NEXT: ret void608//609//610// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57611// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR1]] {612// CHECK1-NEXT: entry:613// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8614// CHECK1-NEXT: [[X_CASTED:%.*]] = alloca i64, align 8615// CHECK1-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 8616// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8617// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4618// CHECK1-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 4619// CHECK1-NEXT: [[TMP2:%.*]] = load i64, ptr [[X_CASTED]], align 8620// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.omp_outlined, i64 [[TMP2]])621// CHECK1-NEXT: ret void622//623//624// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.omp_outlined625// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[X:%.*]]) #[[ATTR1]] {626// CHECK1-NEXT: entry:627// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8628// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8629// CHECK1-NEXT: [[X_ADDR:%.*]] = alloca i64, align 8630// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8631// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8632// CHECK1-NEXT: store i64 [[X]], ptr [[X_ADDR]], align 8633// CHECK1-NEXT: ret void634//635//636// CHECK1-LABEL: define {{[^@]+}}@_Z8mapArrayv637// CHECK1-SAME: () #[[ATTR0]] {638// CHECK1-NEXT: entry:639// CHECK1-NEXT: [[X:%.*]] = alloca [77 x i32], align 4640// CHECK1-NEXT: [[Y:%.*]] = alloca [88 x i32], align 4641// CHECK1-NEXT: [[Z:%.*]] = alloca [99 x i32], align 4642// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x ptr], align 8643// CHECK1-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x ptr], align 8644// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x ptr], align 8645// CHECK1-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8646// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [3 x ptr], align 8647// CHECK1-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [3 x ptr], align 8648// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [3 x ptr], align 8649// CHECK1-NEXT: [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8650// CHECK1-NEXT: [[TMP0:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0651// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP0]], align 8652// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0653// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP1]], align 8654// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0655// CHECK1-NEXT: store ptr null, ptr [[TMP2]], align 8656// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1657// CHECK1-NEXT: store ptr [[Z]], ptr [[TMP3]], align 8658// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1659// CHECK1-NEXT: store ptr [[Z]], ptr [[TMP4]], align 8660// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1661// CHECK1-NEXT: store ptr null, ptr [[TMP5]], align 8662// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2663// CHECK1-NEXT: store ptr [[X]], ptr [[TMP6]], align 8664// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2665// CHECK1-NEXT: store ptr [[X]], ptr [[TMP7]], align 8666// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2667// CHECK1-NEXT: store ptr null, ptr [[TMP8]], align 8668// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0669// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0670// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0671// CHECK1-NEXT: store i32 3, ptr [[TMP11]], align 4672// CHECK1-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1673// CHECK1-NEXT: store i32 3, ptr [[TMP12]], align 4674// CHECK1-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2675// CHECK1-NEXT: store ptr [[TMP9]], ptr [[TMP13]], align 8676// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3677// CHECK1-NEXT: store ptr [[TMP10]], ptr [[TMP14]], align 8678// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4679// CHECK1-NEXT: store ptr @.offload_sizes.11, ptr [[TMP15]], align 8680// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5681// CHECK1-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP16]], align 8682// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6683// CHECK1-NEXT: store ptr null, ptr [[TMP17]], align 8684// CHECK1-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7685// CHECK1-NEXT: store ptr null, ptr [[TMP18]], align 8686// CHECK1-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8687// CHECK1-NEXT: store i64 0, ptr [[TMP19]], align 8688// CHECK1-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9689// CHECK1-NEXT: store i64 0, ptr [[TMP20]], align 8690// CHECK1-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10691// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP21]], align 4692// CHECK1-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11693// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP22]], align 4694// CHECK1-NEXT: [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12695// CHECK1-NEXT: store i32 0, ptr [[TMP23]], align 4696// CHECK1-NEXT: [[TMP24:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.region_id, ptr [[KERNEL_ARGS]])697// CHECK1-NEXT: [[TMP25:%.*]] = icmp ne i32 [[TMP24]], 0698// CHECK1-NEXT: br i1 [[TMP25]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]699// CHECK1: omp_offload.failed:700// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63(ptr [[Y]], ptr [[Z]]) #[[ATTR2]]701// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT]]702// CHECK1: omp_offload.cont:703// CHECK1-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0704// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP26]], align 8705// CHECK1-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0706// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP27]], align 8707// CHECK1-NEXT: [[TMP28:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 0708// CHECK1-NEXT: store ptr null, ptr [[TMP28]], align 8709// CHECK1-NEXT: [[TMP29:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 1710// CHECK1-NEXT: store ptr [[Z]], ptr [[TMP29]], align 8711// CHECK1-NEXT: [[TMP30:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 1712// CHECK1-NEXT: store ptr [[Z]], ptr [[TMP30]], align 8713// CHECK1-NEXT: [[TMP31:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 1714// CHECK1-NEXT: store ptr null, ptr [[TMP31]], align 8715// CHECK1-NEXT: [[TMP32:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 2716// CHECK1-NEXT: store ptr [[X]], ptr [[TMP32]], align 8717// CHECK1-NEXT: [[TMP33:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 2718// CHECK1-NEXT: store ptr [[X]], ptr [[TMP33]], align 8719// CHECK1-NEXT: [[TMP34:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 2720// CHECK1-NEXT: store ptr null, ptr [[TMP34]], align 8721// CHECK1-NEXT: [[TMP35:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0722// CHECK1-NEXT: [[TMP36:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0723// CHECK1-NEXT: [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0724// CHECK1-NEXT: store i32 3, ptr [[TMP37]], align 4725// CHECK1-NEXT: [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1726// CHECK1-NEXT: store i32 3, ptr [[TMP38]], align 4727// CHECK1-NEXT: [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2728// CHECK1-NEXT: store ptr [[TMP35]], ptr [[TMP39]], align 8729// CHECK1-NEXT: [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3730// CHECK1-NEXT: store ptr [[TMP36]], ptr [[TMP40]], align 8731// CHECK1-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4732// CHECK1-NEXT: store ptr @.offload_sizes.13, ptr [[TMP41]], align 8733// CHECK1-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5734// CHECK1-NEXT: store ptr @.offload_maptypes.14, ptr [[TMP42]], align 8735// CHECK1-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6736// CHECK1-NEXT: store ptr null, ptr [[TMP43]], align 8737// CHECK1-NEXT: [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7738// CHECK1-NEXT: store ptr null, ptr [[TMP44]], align 8739// CHECK1-NEXT: [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8740// CHECK1-NEXT: store i64 0, ptr [[TMP45]], align 8741// CHECK1-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9742// CHECK1-NEXT: store i64 0, ptr [[TMP46]], align 8743// CHECK1-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10744// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4745// CHECK1-NEXT: [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11746// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP48]], align 4747// CHECK1-NEXT: [[TMP49:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12748// CHECK1-NEXT: store i32 0, ptr [[TMP49]], align 4749// CHECK1-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.region_id, ptr [[KERNEL_ARGS4]])750// CHECK1-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 0751// CHECK1-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]752// CHECK1: omp_offload.failed5:753// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65(ptr [[Y]], ptr [[Z]]) #[[ATTR2]]754// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT6]]755// CHECK1: omp_offload.cont6:756// CHECK1-NEXT: ret void757//758//759// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63760// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR1]] {761// CHECK1-NEXT: entry:762// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 8763// CHECK1-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 8764// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 8765// CHECK1-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 8766// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 8767// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 8768// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])769// CHECK1-NEXT: ret void770//771//772// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined773// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR1]] {774// CHECK1-NEXT: entry:775// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8776// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8777// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 8778// CHECK1-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 8779// CHECK1-NEXT: [[Y1:%.*]] = alloca [88 x i32], align 4780// CHECK1-NEXT: [[X:%.*]] = alloca [77 x i32], align 4781// CHECK1-NEXT: [[Z2:%.*]] = alloca [99 x i32], align 4782// CHECK1-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 8783// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8784// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8785// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 8786// CHECK1-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 8787// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 8788// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 8789// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[Y1]], ptr align 4 [[TMP0]], i64 352, i1 false)790// CHECK1-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [99 x i32], ptr [[Z2]], i32 0, i32 0791// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr i32, ptr [[ARRAY_BEGIN]], i64 99792// CHECK1-NEXT: [[OMP_ARRAYINIT_ISEMPTY:%.*]] = icmp eq ptr [[ARRAY_BEGIN]], [[TMP2]]793// CHECK1-NEXT: br i1 [[OMP_ARRAYINIT_ISEMPTY]], label [[OMP_ARRAYINIT_DONE:%.*]], label [[OMP_ARRAYINIT_BODY:%.*]]794// CHECK1: omp.arrayinit.body:795// CHECK1-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYINIT_BODY]] ]796// CHECK1-NEXT: store i32 0, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 4797// CHECK1-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 1798// CHECK1-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP2]]799// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYINIT_DONE]], label [[OMP_ARRAYINIT_BODY]]800// CHECK1: omp.arrayinit.done:801// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 0802// CHECK1-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 8803// CHECK1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8804// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 4805// CHECK1-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i64 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)806// CHECK1-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [807// CHECK1-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]808// CHECK1-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]809// CHECK1-NEXT: ]810// CHECK1: .omp.reduction.case1:811// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP1]], i64 99812// CHECK1-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP1]], [[TMP7]]813// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE6:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]814// CHECK1: omp.arraycpy.body:815// CHECK1-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]816// CHECK1-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST3:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT4:%.*]], [[OMP_ARRAYCPY_BODY]] ]817// CHECK1-NEXT: [[TMP8:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 4818// CHECK1-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 4819// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]820// CHECK1-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 4821// CHECK1-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT4]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], i32 1822// CHECK1-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 1823// CHECK1-NEXT: [[OMP_ARRAYCPY_DONE5:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT4]], [[TMP7]]824// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_DONE5]], label [[OMP_ARRAYCPY_DONE6]], label [[OMP_ARRAYCPY_BODY]]825// CHECK1: omp.arraycpy.done6:826// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)827// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]828// CHECK1: .omp.reduction.case2:829// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr [[TMP1]], i64 99830// CHECK1-NEXT: [[OMP_ARRAYCPY_ISEMPTY7:%.*]] = icmp eq ptr [[TMP1]], [[TMP10]]831// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY7]], label [[OMP_ARRAYCPY_DONE14:%.*]], label [[OMP_ARRAYCPY_BODY8:%.*]]832// CHECK1: omp.arraycpy.body8:833// CHECK1-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST9:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT12:%.*]], [[OMP_ARRAYCPY_BODY8]] ]834// CHECK1-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST10:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT11:%.*]], [[OMP_ARRAYCPY_BODY8]] ]835// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], align 4836// CHECK1-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 [[TMP11]] monotonic, align 4837// CHECK1-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT11]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 1838// CHECK1-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT12]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], i32 1839// CHECK1-NEXT: [[OMP_ARRAYCPY_DONE13:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT11]], [[TMP10]]840// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_DONE13]], label [[OMP_ARRAYCPY_DONE14]], label [[OMP_ARRAYCPY_BODY8]]841// CHECK1: omp.arraycpy.done14:842// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)843// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]844// CHECK1: .omp.reduction.default:845// CHECK1-NEXT: ret void846//847//848// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined.omp.reduction.reduction_func849// CHECK1-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR3]] {850// CHECK1-NEXT: entry:851// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 8852// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8853// CHECK1-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 8854// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8855// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 8856// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8857// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i64 0, i64 0858// CHECK1-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 8859// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i64 0, i64 0860// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8861// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP7]], i64 99862// CHECK1-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP7]], [[TMP8]]863// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE2:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]864// CHECK1: omp.arraycpy.body:865// CHECK1-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[TMP5]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]866// CHECK1-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[TMP7]], [[ENTRY]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]867// CHECK1-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 4868// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 4869// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]870// CHECK1-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 4871// CHECK1-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 1872// CHECK1-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 1873// CHECK1-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP8]]874// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYCPY_DONE2]], label [[OMP_ARRAYCPY_BODY]]875// CHECK1: omp.arraycpy.done2:876// CHECK1-NEXT: ret void877//878//879// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65880// CHECK1-SAME: (ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR1]] {881// CHECK1-NEXT: entry:882// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 8883// CHECK1-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 8884// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 8885// CHECK1-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 8886// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 8887// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 8888// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])889// CHECK1-NEXT: ret void890//891//892// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined893// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR1]] {894// CHECK1-NEXT: entry:895// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8896// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8897// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 8898// CHECK1-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 8899// CHECK1-NEXT: [[Y1:%.*]] = alloca [88 x i32], align 4900// CHECK1-NEXT: [[X:%.*]] = alloca [77 x i32], align 4901// CHECK1-NEXT: [[Z2:%.*]] = alloca [99 x i32], align 4902// CHECK1-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 8903// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8904// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8905// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 8906// CHECK1-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 8907// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 8908// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 8909// CHECK1-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[Y1]], ptr align 4 [[TMP0]], i64 352, i1 false)910// CHECK1-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [99 x i32], ptr [[Z2]], i32 0, i32 0911// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr i32, ptr [[ARRAY_BEGIN]], i64 99912// CHECK1-NEXT: [[OMP_ARRAYINIT_ISEMPTY:%.*]] = icmp eq ptr [[ARRAY_BEGIN]], [[TMP2]]913// CHECK1-NEXT: br i1 [[OMP_ARRAYINIT_ISEMPTY]], label [[OMP_ARRAYINIT_DONE:%.*]], label [[OMP_ARRAYINIT_BODY:%.*]]914// CHECK1: omp.arrayinit.body:915// CHECK1-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYINIT_BODY]] ]916// CHECK1-NEXT: store i32 0, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 4917// CHECK1-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 1918// CHECK1-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP2]]919// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYINIT_DONE]], label [[OMP_ARRAYINIT_BODY]]920// CHECK1: omp.arrayinit.done:921// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 0922// CHECK1-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 8923// CHECK1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8924// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 4925// CHECK1-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i64 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)926// CHECK1-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [927// CHECK1-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]928// CHECK1-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]929// CHECK1-NEXT: ]930// CHECK1: .omp.reduction.case1:931// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP1]], i64 99932// CHECK1-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP1]], [[TMP7]]933// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE6:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]934// CHECK1: omp.arraycpy.body:935// CHECK1-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]936// CHECK1-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST3:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT4:%.*]], [[OMP_ARRAYCPY_BODY]] ]937// CHECK1-NEXT: [[TMP8:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 4938// CHECK1-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 4939// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]940// CHECK1-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 4941// CHECK1-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT4]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], i32 1942// CHECK1-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 1943// CHECK1-NEXT: [[OMP_ARRAYCPY_DONE5:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT4]], [[TMP7]]944// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_DONE5]], label [[OMP_ARRAYCPY_DONE6]], label [[OMP_ARRAYCPY_BODY]]945// CHECK1: omp.arraycpy.done6:946// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)947// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]948// CHECK1: .omp.reduction.case2:949// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr [[TMP1]], i64 99950// CHECK1-NEXT: [[OMP_ARRAYCPY_ISEMPTY7:%.*]] = icmp eq ptr [[TMP1]], [[TMP10]]951// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY7]], label [[OMP_ARRAYCPY_DONE14:%.*]], label [[OMP_ARRAYCPY_BODY8:%.*]]952// CHECK1: omp.arraycpy.body8:953// CHECK1-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST9:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT12:%.*]], [[OMP_ARRAYCPY_BODY8]] ]954// CHECK1-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST10:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT11:%.*]], [[OMP_ARRAYCPY_BODY8]] ]955// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], align 4956// CHECK1-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 [[TMP11]] monotonic, align 4957// CHECK1-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT11]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 1958// CHECK1-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT12]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], i32 1959// CHECK1-NEXT: [[OMP_ARRAYCPY_DONE13:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT11]], [[TMP10]]960// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_DONE13]], label [[OMP_ARRAYCPY_DONE14]], label [[OMP_ARRAYCPY_BODY8]]961// CHECK1: omp.arraycpy.done14:962// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)963// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]964// CHECK1: .omp.reduction.default:965// CHECK1-NEXT: ret void966//967//968// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined.omp.reduction.reduction_func969// CHECK1-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR3]] {970// CHECK1-NEXT: entry:971// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 8972// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 8973// CHECK1-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 8974// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 8975// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 8976// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8977// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i64 0, i64 0978// CHECK1-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 8979// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i64 0, i64 0980// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8981// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP7]], i64 99982// CHECK1-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP7]], [[TMP8]]983// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE2:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]984// CHECK1: omp.arraycpy.body:985// CHECK1-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[TMP5]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]986// CHECK1-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[TMP7]], [[ENTRY]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]987// CHECK1-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 4988// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 4989// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]990// CHECK1-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 4991// CHECK1-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 1992// CHECK1-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 1993// CHECK1-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP8]]994// CHECK1-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYCPY_DONE2]], label [[OMP_ARRAYCPY_BODY]]995// CHECK1: omp.arraycpy.done2:996// CHECK1-NEXT: ret void997//998//999// CHECK1-LABEL: define {{[^@]+}}@_Z9mapInt128v1000// CHECK1-SAME: () #[[ATTR0]] {1001// CHECK1-NEXT: entry:1002// CHECK1-NEXT: [[X:%.*]] = alloca i128, align 161003// CHECK1-NEXT: [[Y:%.*]] = alloca i128, align 161004// CHECK1-NEXT: [[Z:%.*]] = alloca i128, align 161005// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x ptr], align 81006// CHECK1-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x ptr], align 81007// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x ptr], align 81008// CHECK1-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81009// CHECK1-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [3 x ptr], align 81010// CHECK1-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [3 x ptr], align 81011// CHECK1-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [3 x ptr], align 81012// CHECK1-NEXT: [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 81013// CHECK1-NEXT: [[TMP0:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01014// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP0]], align 81015// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01016// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP1]], align 81017// CHECK1-NEXT: [[TMP2:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 01018// CHECK1-NEXT: store ptr null, ptr [[TMP2]], align 81019// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 11020// CHECK1-NEXT: store ptr [[Z]], ptr [[TMP3]], align 81021// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 11022// CHECK1-NEXT: store ptr [[Z]], ptr [[TMP4]], align 81023// CHECK1-NEXT: [[TMP5:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 11024// CHECK1-NEXT: store ptr null, ptr [[TMP5]], align 81025// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 21026// CHECK1-NEXT: store ptr [[X]], ptr [[TMP6]], align 81027// CHECK1-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 21028// CHECK1-NEXT: store ptr [[X]], ptr [[TMP7]], align 81029// CHECK1-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 21030// CHECK1-NEXT: store ptr null, ptr [[TMP8]], align 81031// CHECK1-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01032// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01033// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01034// CHECK1-NEXT: store i32 3, ptr [[TMP11]], align 41035// CHECK1-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11036// CHECK1-NEXT: store i32 3, ptr [[TMP12]], align 41037// CHECK1-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21038// CHECK1-NEXT: store ptr [[TMP9]], ptr [[TMP13]], align 81039// CHECK1-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31040// CHECK1-NEXT: store ptr [[TMP10]], ptr [[TMP14]], align 81041// CHECK1-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41042// CHECK1-NEXT: store ptr @.offload_sizes.15, ptr [[TMP15]], align 81043// CHECK1-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51044// CHECK1-NEXT: store ptr @.offload_maptypes.16, ptr [[TMP16]], align 81045// CHECK1-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61046// CHECK1-NEXT: store ptr null, ptr [[TMP17]], align 81047// CHECK1-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71048// CHECK1-NEXT: store ptr null, ptr [[TMP18]], align 81049// CHECK1-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81050// CHECK1-NEXT: store i64 0, ptr [[TMP19]], align 81051// CHECK1-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91052// CHECK1-NEXT: store i64 0, ptr [[TMP20]], align 81053// CHECK1-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101054// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP21]], align 41055// CHECK1-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111056// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP22]], align 41057// CHECK1-NEXT: [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121058// CHECK1-NEXT: store i32 0, ptr [[TMP23]], align 41059// CHECK1-NEXT: [[TMP24:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72.region_id, ptr [[KERNEL_ARGS]])1060// CHECK1-NEXT: [[TMP25:%.*]] = icmp ne i32 [[TMP24]], 01061// CHECK1-NEXT: br i1 [[TMP25]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1062// CHECK1: omp_offload.failed:1063// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72(ptr [[Y]], ptr [[Z]]) #[[ATTR2]]1064// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT]]1065// CHECK1: omp_offload.cont:1066// CHECK1-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 01067// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP26]], align 81068// CHECK1-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 01069// CHECK1-NEXT: store ptr [[Y]], ptr [[TMP27]], align 81070// CHECK1-NEXT: [[TMP28:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 01071// CHECK1-NEXT: store ptr null, ptr [[TMP28]], align 81072// CHECK1-NEXT: [[TMP29:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 11073// CHECK1-NEXT: store ptr [[Z]], ptr [[TMP29]], align 81074// CHECK1-NEXT: [[TMP30:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 11075// CHECK1-NEXT: store ptr [[Z]], ptr [[TMP30]], align 81076// CHECK1-NEXT: [[TMP31:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 11077// CHECK1-NEXT: store ptr null, ptr [[TMP31]], align 81078// CHECK1-NEXT: [[TMP32:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 21079// CHECK1-NEXT: store ptr [[X]], ptr [[TMP32]], align 81080// CHECK1-NEXT: [[TMP33:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 21081// CHECK1-NEXT: store ptr [[X]], ptr [[TMP33]], align 81082// CHECK1-NEXT: [[TMP34:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 21083// CHECK1-NEXT: store ptr null, ptr [[TMP34]], align 81084// CHECK1-NEXT: [[TMP35:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 01085// CHECK1-NEXT: [[TMP36:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 01086// CHECK1-NEXT: [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 01087// CHECK1-NEXT: store i32 3, ptr [[TMP37]], align 41088// CHECK1-NEXT: [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11089// CHECK1-NEXT: store i32 3, ptr [[TMP38]], align 41090// CHECK1-NEXT: [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 21091// CHECK1-NEXT: store ptr [[TMP35]], ptr [[TMP39]], align 81092// CHECK1-NEXT: [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 31093// CHECK1-NEXT: store ptr [[TMP36]], ptr [[TMP40]], align 81094// CHECK1-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 41095// CHECK1-NEXT: store ptr @.offload_sizes.17, ptr [[TMP41]], align 81096// CHECK1-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 51097// CHECK1-NEXT: store ptr @.offload_maptypes.18, ptr [[TMP42]], align 81098// CHECK1-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 61099// CHECK1-NEXT: store ptr null, ptr [[TMP43]], align 81100// CHECK1-NEXT: [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 71101// CHECK1-NEXT: store ptr null, ptr [[TMP44]], align 81102// CHECK1-NEXT: [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 81103// CHECK1-NEXT: store i64 0, ptr [[TMP45]], align 81104// CHECK1-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 91105// CHECK1-NEXT: store i64 0, ptr [[TMP46]], align 81106// CHECK1-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 101107// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP47]], align 41108// CHECK1-NEXT: [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 111109// CHECK1-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP48]], align 41110// CHECK1-NEXT: [[TMP49:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 121111// CHECK1-NEXT: store i32 0, ptr [[TMP49]], align 41112// CHECK1-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74.region_id, ptr [[KERNEL_ARGS4]])1113// CHECK1-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 01114// CHECK1-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]1115// CHECK1: omp_offload.failed5:1116// CHECK1-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74(ptr [[Y]], ptr [[Z]]) #[[ATTR2]]1117// CHECK1-NEXT: br label [[OMP_OFFLOAD_CONT6]]1118// CHECK1: omp_offload.cont6:1119// CHECK1-NEXT: ret void1120//1121//1122// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l721123// CHECK1-SAME: (ptr noundef nonnull align 16 dereferenceable(16) [[Y:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Z:%.*]]) #[[ATTR1]] {1124// CHECK1-NEXT: entry:1125// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 81126// CHECK1-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 81127// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 81128// CHECK1-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 81129// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 81130// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 81131// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])1132// CHECK1-NEXT: ret void1133//1134//1135// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72.omp_outlined1136// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Y:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Z:%.*]]) #[[ATTR1]] {1137// CHECK1-NEXT: entry:1138// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81139// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81140// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 81141// CHECK1-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 81142// CHECK1-NEXT: [[Y1:%.*]] = alloca i128, align 161143// CHECK1-NEXT: [[X:%.*]] = alloca i128, align 161144// CHECK1-NEXT: [[Z2:%.*]] = alloca i128, align 161145// CHECK1-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 81146// CHECK1-NEXT: [[ATOMIC_TEMP:%.*]] = alloca i128, align 161147// CHECK1-NEXT: [[ATOMIC_TEMP3:%.*]] = alloca i128, align 161148// CHECK1-NEXT: [[TMP:%.*]] = alloca i128, align 161149// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81150// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81151// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 81152// CHECK1-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 81153// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 81154// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 81155// CHECK1-NEXT: [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 161156// CHECK1-NEXT: store i128 [[TMP2]], ptr [[Y1]], align 161157// CHECK1-NEXT: store i128 0, ptr [[Z2]], align 161158// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 01159// CHECK1-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 81160// CHECK1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81161// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 41162// CHECK1-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i64 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)1163// CHECK1-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [1164// CHECK1-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]1165// CHECK1-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]1166// CHECK1-NEXT: ]1167// CHECK1: .omp.reduction.case1:1168// CHECK1-NEXT: [[TMP7:%.*]] = load i128, ptr [[TMP1]], align 161169// CHECK1-NEXT: [[TMP8:%.*]] = load i128, ptr [[Z2]], align 161170// CHECK1-NEXT: [[ADD:%.*]] = add nsw i128 [[TMP7]], [[TMP8]]1171// CHECK1-NEXT: store i128 [[ADD]], ptr [[TMP1]], align 161172// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)1173// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]1174// CHECK1: .omp.reduction.case2:1175// CHECK1-NEXT: [[TMP9:%.*]] = load i128, ptr [[Z2]], align 161176// CHECK1-NEXT: call void @__atomic_load(i64 noundef 16, ptr noundef [[TMP1]], ptr noundef [[ATOMIC_TEMP]], i32 noundef signext 0)1177// CHECK1-NEXT: br label [[ATOMIC_CONT:%.*]]1178// CHECK1: atomic_cont:1179// CHECK1-NEXT: [[TMP10:%.*]] = load i128, ptr [[ATOMIC_TEMP]], align 161180// CHECK1-NEXT: store i128 [[TMP10]], ptr [[TMP]], align 161181// CHECK1-NEXT: [[TMP11:%.*]] = load i128, ptr [[TMP]], align 161182// CHECK1-NEXT: [[TMP12:%.*]] = load i128, ptr [[Z2]], align 161183// CHECK1-NEXT: [[ADD4:%.*]] = add nsw i128 [[TMP11]], [[TMP12]]1184// CHECK1-NEXT: store i128 [[ADD4]], ptr [[ATOMIC_TEMP3]], align 161185// CHECK1-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @__atomic_compare_exchange(i64 noundef 16, ptr noundef [[TMP1]], ptr noundef [[ATOMIC_TEMP]], ptr noundef [[ATOMIC_TEMP3]], i32 noundef signext 0, i32 noundef signext 0)1186// CHECK1-NEXT: br i1 [[CALL]], label [[ATOMIC_EXIT:%.*]], label [[ATOMIC_CONT]]1187// CHECK1: atomic_exit:1188// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)1189// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]1190// CHECK1: .omp.reduction.default:1191// CHECK1-NEXT: ret void1192//1193//1194// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72.omp_outlined.omp.reduction.reduction_func1195// CHECK1-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR3]] {1196// CHECK1-NEXT: entry:1197// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 81198// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81199// CHECK1-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 81200// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81201// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 81202// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81203// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i64 0, i64 01204// CHECK1-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 81205// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i64 0, i64 01206// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81207// CHECK1-NEXT: [[TMP8:%.*]] = load i128, ptr [[TMP7]], align 161208// CHECK1-NEXT: [[TMP9:%.*]] = load i128, ptr [[TMP5]], align 161209// CHECK1-NEXT: [[ADD:%.*]] = add nsw i128 [[TMP8]], [[TMP9]]1210// CHECK1-NEXT: store i128 [[ADD]], ptr [[TMP7]], align 161211// CHECK1-NEXT: ret void1212//1213//1214// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l741215// CHECK1-SAME: (ptr noundef nonnull align 16 dereferenceable(16) [[Y:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Z:%.*]]) #[[ATTR1]] {1216// CHECK1-NEXT: entry:1217// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 81218// CHECK1-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 81219// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 81220// CHECK1-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 81221// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 81222// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 81223// CHECK1-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])1224// CHECK1-NEXT: ret void1225//1226//1227// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74.omp_outlined1228// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Y:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Z:%.*]]) #[[ATTR1]] {1229// CHECK1-NEXT: entry:1230// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81231// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81232// CHECK1-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 81233// CHECK1-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 81234// CHECK1-NEXT: [[Y1:%.*]] = alloca i128, align 161235// CHECK1-NEXT: [[X:%.*]] = alloca i128, align 161236// CHECK1-NEXT: [[Z2:%.*]] = alloca i128, align 161237// CHECK1-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 81238// CHECK1-NEXT: [[ATOMIC_TEMP:%.*]] = alloca i128, align 161239// CHECK1-NEXT: [[ATOMIC_TEMP3:%.*]] = alloca i128, align 161240// CHECK1-NEXT: [[TMP:%.*]] = alloca i128, align 161241// CHECK1-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81242// CHECK1-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81243// CHECK1-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 81244// CHECK1-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 81245// CHECK1-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 81246// CHECK1-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 81247// CHECK1-NEXT: [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 161248// CHECK1-NEXT: store i128 [[TMP2]], ptr [[Y1]], align 161249// CHECK1-NEXT: store i128 0, ptr [[Z2]], align 161250// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 01251// CHECK1-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 81252// CHECK1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81253// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 41254// CHECK1-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i64 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)1255// CHECK1-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [1256// CHECK1-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]1257// CHECK1-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]1258// CHECK1-NEXT: ]1259// CHECK1: .omp.reduction.case1:1260// CHECK1-NEXT: [[TMP7:%.*]] = load i128, ptr [[TMP1]], align 161261// CHECK1-NEXT: [[TMP8:%.*]] = load i128, ptr [[Z2]], align 161262// CHECK1-NEXT: [[ADD:%.*]] = add nsw i128 [[TMP7]], [[TMP8]]1263// CHECK1-NEXT: store i128 [[ADD]], ptr [[TMP1]], align 161264// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)1265// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]1266// CHECK1: .omp.reduction.case2:1267// CHECK1-NEXT: [[TMP9:%.*]] = load i128, ptr [[Z2]], align 161268// CHECK1-NEXT: call void @__atomic_load(i64 noundef 16, ptr noundef [[TMP1]], ptr noundef [[ATOMIC_TEMP]], i32 noundef signext 0)1269// CHECK1-NEXT: br label [[ATOMIC_CONT:%.*]]1270// CHECK1: atomic_cont:1271// CHECK1-NEXT: [[TMP10:%.*]] = load i128, ptr [[ATOMIC_TEMP]], align 161272// CHECK1-NEXT: store i128 [[TMP10]], ptr [[TMP]], align 161273// CHECK1-NEXT: [[TMP11:%.*]] = load i128, ptr [[TMP]], align 161274// CHECK1-NEXT: [[TMP12:%.*]] = load i128, ptr [[Z2]], align 161275// CHECK1-NEXT: [[ADD4:%.*]] = add nsw i128 [[TMP11]], [[TMP12]]1276// CHECK1-NEXT: store i128 [[ADD4]], ptr [[ATOMIC_TEMP3]], align 161277// CHECK1-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @__atomic_compare_exchange(i64 noundef 16, ptr noundef [[TMP1]], ptr noundef [[ATOMIC_TEMP]], ptr noundef [[ATOMIC_TEMP3]], i32 noundef signext 0, i32 noundef signext 0)1278// CHECK1-NEXT: br i1 [[CALL]], label [[ATOMIC_EXIT:%.*]], label [[ATOMIC_CONT]]1279// CHECK1: atomic_exit:1280// CHECK1-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)1281// CHECK1-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]1282// CHECK1: .omp.reduction.default:1283// CHECK1-NEXT: ret void1284//1285//1286// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74.omp_outlined.omp.reduction.reduction_func1287// CHECK1-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR3]] {1288// CHECK1-NEXT: entry:1289// CHECK1-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 81290// CHECK1-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 81291// CHECK1-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 81292// CHECK1-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 81293// CHECK1-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 81294// CHECK1-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81295// CHECK1-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i64 0, i64 01296// CHECK1-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 81297// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i64 0, i64 01298// CHECK1-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81299// CHECK1-NEXT: [[TMP8:%.*]] = load i128, ptr [[TMP7]], align 161300// CHECK1-NEXT: [[TMP9:%.*]] = load i128, ptr [[TMP5]], align 161301// CHECK1-NEXT: [[ADD:%.*]] = add nsw i128 [[TMP8]], [[TMP9]]1302// CHECK1-NEXT: store i128 [[ADD]], ptr [[TMP7]], align 161303// CHECK1-NEXT: ret void1304//1305//1306// CHECK3-LABEL: define {{[^@]+}}@_Z14mapWithPrivatev1307// CHECK3-SAME: () #[[ATTR0:[0-9]+]] {1308// CHECK3-NEXT: entry:1309// CHECK3-NEXT: [[X:%.*]] = alloca i32, align 41310// CHECK3-NEXT: [[Y:%.*]] = alloca i32, align 41311// CHECK3-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 41312// CHECK3-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 41313// CHECK3-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 41314// CHECK3-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81315// CHECK3-NEXT: [[TMP0:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01316// CHECK3-NEXT: store ptr [[X]], ptr [[TMP0]], align 41317// CHECK3-NEXT: [[TMP1:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01318// CHECK3-NEXT: store ptr [[X]], ptr [[TMP1]], align 41319// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 01320// CHECK3-NEXT: store ptr null, ptr [[TMP2]], align 41321// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 11322// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP3]], align 41323// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 11324// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP4]], align 41325// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 11326// CHECK3-NEXT: store ptr null, ptr [[TMP5]], align 41327// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01328// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01329// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01330// CHECK3-NEXT: store i32 3, ptr [[TMP8]], align 41331// CHECK3-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11332// CHECK3-NEXT: store i32 2, ptr [[TMP9]], align 41333// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21334// CHECK3-NEXT: store ptr [[TMP6]], ptr [[TMP10]], align 41335// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31336// CHECK3-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 41337// CHECK3-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41338// CHECK3-NEXT: store ptr @.offload_sizes, ptr [[TMP12]], align 41339// CHECK3-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51340// CHECK3-NEXT: store ptr @.offload_maptypes, ptr [[TMP13]], align 41341// CHECK3-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61342// CHECK3-NEXT: store ptr null, ptr [[TMP14]], align 41343// CHECK3-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71344// CHECK3-NEXT: store ptr null, ptr [[TMP15]], align 41345// CHECK3-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81346// CHECK3-NEXT: store i64 0, ptr [[TMP16]], align 81347// CHECK3-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91348// CHECK3-NEXT: store i64 0, ptr [[TMP17]], align 81349// CHECK3-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101350// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP18]], align 41351// CHECK3-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111352// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP19]], align 41353// CHECK3-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121354// CHECK3-NEXT: store i32 0, ptr [[TMP20]], align 41355// CHECK3-NEXT: [[TMP21:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.region_id, ptr [[KERNEL_ARGS]])1356// CHECK3-NEXT: [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 01357// CHECK3-NEXT: br i1 [[TMP22]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1358// CHECK3: omp_offload.failed:1359// CHECK3-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27() #[[ATTR2:[0-9]+]]1360// CHECK3-NEXT: br label [[OMP_OFFLOAD_CONT]]1361// CHECK3: omp_offload.cont:1362// CHECK3-NEXT: ret void1363//1364//1365// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l271366// CHECK3-SAME: () #[[ATTR1:[0-9]+]] {1367// CHECK3-NEXT: entry:1368// CHECK3-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.omp_outlined)1369// CHECK3-NEXT: ret void1370//1371//1372// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.omp_outlined1373// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR1]] {1374// CHECK3-NEXT: entry:1375// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41376// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41377// CHECK3-NEXT: [[X:%.*]] = alloca i32, align 41378// CHECK3-NEXT: [[Y:%.*]] = alloca i32, align 41379// CHECK3-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41380// CHECK3-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41381// CHECK3-NEXT: ret void1382//1383//1384// CHECK3-LABEL: define {{[^@]+}}@_Z19mapWithFirstprivatev1385// CHECK3-SAME: () #[[ATTR0]] {1386// CHECK3-NEXT: entry:1387// CHECK3-NEXT: [[X:%.*]] = alloca i32, align 41388// CHECK3-NEXT: [[Y:%.*]] = alloca i32, align 41389// CHECK3-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 41390// CHECK3-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 41391// CHECK3-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 41392// CHECK3-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81393// CHECK3-NEXT: [[TMP0:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01394// CHECK3-NEXT: store ptr [[X]], ptr [[TMP0]], align 41395// CHECK3-NEXT: [[TMP1:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01396// CHECK3-NEXT: store ptr [[X]], ptr [[TMP1]], align 41397// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 01398// CHECK3-NEXT: store ptr null, ptr [[TMP2]], align 41399// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 11400// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP3]], align 41401// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 11402// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP4]], align 41403// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 11404// CHECK3-NEXT: store ptr null, ptr [[TMP5]], align 41405// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01406// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01407// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01408// CHECK3-NEXT: store i32 3, ptr [[TMP8]], align 41409// CHECK3-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11410// CHECK3-NEXT: store i32 2, ptr [[TMP9]], align 41411// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21412// CHECK3-NEXT: store ptr [[TMP6]], ptr [[TMP10]], align 41413// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31414// CHECK3-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 41415// CHECK3-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41416// CHECK3-NEXT: store ptr @.offload_sizes.1, ptr [[TMP12]], align 41417// CHECK3-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51418// CHECK3-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP13]], align 41419// CHECK3-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61420// CHECK3-NEXT: store ptr null, ptr [[TMP14]], align 41421// CHECK3-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71422// CHECK3-NEXT: store ptr null, ptr [[TMP15]], align 41423// CHECK3-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81424// CHECK3-NEXT: store i64 0, ptr [[TMP16]], align 81425// CHECK3-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91426// CHECK3-NEXT: store i64 0, ptr [[TMP17]], align 81427// CHECK3-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101428// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP18]], align 41429// CHECK3-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111430// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP19]], align 41431// CHECK3-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121432// CHECK3-NEXT: store i32 0, ptr [[TMP20]], align 41433// CHECK3-NEXT: [[TMP21:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.region_id, ptr [[KERNEL_ARGS]])1434// CHECK3-NEXT: [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 01435// CHECK3-NEXT: br i1 [[TMP22]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1436// CHECK3: omp_offload.failed:1437// CHECK3-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33(ptr [[X]], ptr [[Y]]) #[[ATTR2]]1438// CHECK3-NEXT: br label [[OMP_OFFLOAD_CONT]]1439// CHECK3: omp_offload.cont:1440// CHECK3-NEXT: ret void1441//1442//1443// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l331444// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR1]] {1445// CHECK3-NEXT: entry:1446// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 41447// CHECK3-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 41448// CHECK3-NEXT: [[X_CASTED:%.*]] = alloca i32, align 41449// CHECK3-NEXT: [[Y_CASTED:%.*]] = alloca i32, align 41450// CHECK3-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 41451// CHECK3-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 41452// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 41453// CHECK3-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 41454// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 41455// CHECK3-NEXT: store i32 [[TMP2]], ptr [[X_CASTED]], align 41456// CHECK3-NEXT: [[TMP3:%.*]] = load i32, ptr [[X_CASTED]], align 41457// CHECK3-NEXT: [[TMP4:%.*]] = load i32, ptr [[TMP1]], align 41458// CHECK3-NEXT: store i32 [[TMP4]], ptr [[Y_CASTED]], align 41459// CHECK3-NEXT: [[TMP5:%.*]] = load i32, ptr [[Y_CASTED]], align 41460// CHECK3-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.omp_outlined, i32 [[TMP3]], i32 [[TMP5]])1461// CHECK3-NEXT: ret void1462//1463//1464// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.omp_outlined1465// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR1]] {1466// CHECK3-NEXT: entry:1467// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41468// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41469// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca i32, align 41470// CHECK3-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 41471// CHECK3-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41472// CHECK3-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41473// CHECK3-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 41474// CHECK3-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 41475// CHECK3-NEXT: ret void1476//1477//1478// CHECK3-LABEL: define {{[^@]+}}@_Z16mapWithReductionv1479// CHECK3-SAME: () #[[ATTR0]] {1480// CHECK3-NEXT: entry:1481// CHECK3-NEXT: [[X:%.*]] = alloca i32, align 41482// CHECK3-NEXT: [[Y:%.*]] = alloca i32, align 41483// CHECK3-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 41484// CHECK3-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 41485// CHECK3-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 41486// CHECK3-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81487// CHECK3-NEXT: [[TMP0:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01488// CHECK3-NEXT: store ptr [[X]], ptr [[TMP0]], align 41489// CHECK3-NEXT: [[TMP1:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01490// CHECK3-NEXT: store ptr [[X]], ptr [[TMP1]], align 41491// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 01492// CHECK3-NEXT: store ptr null, ptr [[TMP2]], align 41493// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 11494// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP3]], align 41495// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 11496// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP4]], align 41497// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 11498// CHECK3-NEXT: store ptr null, ptr [[TMP5]], align 41499// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01500// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01501// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01502// CHECK3-NEXT: store i32 3, ptr [[TMP8]], align 41503// CHECK3-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11504// CHECK3-NEXT: store i32 2, ptr [[TMP9]], align 41505// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21506// CHECK3-NEXT: store ptr [[TMP6]], ptr [[TMP10]], align 41507// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31508// CHECK3-NEXT: store ptr [[TMP7]], ptr [[TMP11]], align 41509// CHECK3-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41510// CHECK3-NEXT: store ptr @.offload_sizes.3, ptr [[TMP12]], align 41511// CHECK3-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51512// CHECK3-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP13]], align 41513// CHECK3-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61514// CHECK3-NEXT: store ptr null, ptr [[TMP14]], align 41515// CHECK3-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71516// CHECK3-NEXT: store ptr null, ptr [[TMP15]], align 41517// CHECK3-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81518// CHECK3-NEXT: store i64 0, ptr [[TMP16]], align 81519// CHECK3-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91520// CHECK3-NEXT: store i64 0, ptr [[TMP17]], align 81521// CHECK3-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101522// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP18]], align 41523// CHECK3-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111524// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP19]], align 41525// CHECK3-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121526// CHECK3-NEXT: store i32 0, ptr [[TMP20]], align 41527// CHECK3-NEXT: [[TMP21:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.region_id, ptr [[KERNEL_ARGS]])1528// CHECK3-NEXT: [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 01529// CHECK3-NEXT: br i1 [[TMP22]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1530// CHECK3: omp_offload.failed:1531// CHECK3-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39(ptr [[X]], ptr [[Y]]) #[[ATTR2]]1532// CHECK3-NEXT: br label [[OMP_OFFLOAD_CONT]]1533// CHECK3: omp_offload.cont:1534// CHECK3-NEXT: ret void1535//1536//1537// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l391538// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR1]] {1539// CHECK3-NEXT: entry:1540// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 41541// CHECK3-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 41542// CHECK3-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 41543// CHECK3-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 41544// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 41545// CHECK3-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 41546// CHECK3-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])1547// CHECK3-NEXT: ret void1548//1549//1550// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined1551// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR1]] {1552// CHECK3-NEXT: entry:1553// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41554// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41555// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 41556// CHECK3-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 41557// CHECK3-NEXT: [[X1:%.*]] = alloca i32, align 41558// CHECK3-NEXT: [[Y2:%.*]] = alloca i32, align 41559// CHECK3-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [2 x ptr], align 41560// CHECK3-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41561// CHECK3-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41562// CHECK3-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 41563// CHECK3-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 41564// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 41565// CHECK3-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 41566// CHECK3-NEXT: store i32 0, ptr [[X1]], align 41567// CHECK3-NEXT: store i32 0, ptr [[Y2]], align 41568// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i32 0, i32 01569// CHECK3-NEXT: store ptr [[X1]], ptr [[TMP2]], align 41570// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i32 0, i32 11571// CHECK3-NEXT: store ptr [[Y2]], ptr [[TMP3]], align 41572// CHECK3-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41573// CHECK3-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 41574// CHECK3-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2:[0-9]+]], i32 [[TMP5]], i32 2, i32 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)1575// CHECK3-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [1576// CHECK3-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]1577// CHECK3-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]1578// CHECK3-NEXT: ]1579// CHECK3: .omp.reduction.case1:1580// CHECK3-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP0]], align 41581// CHECK3-NEXT: [[TMP8:%.*]] = load i32, ptr [[X1]], align 41582// CHECK3-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP7]], [[TMP8]]1583// CHECK3-NEXT: store i32 [[ADD]], ptr [[TMP0]], align 41584// CHECK3-NEXT: [[TMP9:%.*]] = load i32, ptr [[TMP1]], align 41585// CHECK3-NEXT: [[TMP10:%.*]] = load i32, ptr [[Y2]], align 41586// CHECK3-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]1587// CHECK3-NEXT: store i32 [[ADD3]], ptr [[TMP1]], align 41588// CHECK3-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)1589// CHECK3-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]1590// CHECK3: .omp.reduction.case2:1591// CHECK3-NEXT: [[TMP11:%.*]] = load i32, ptr [[X1]], align 41592// CHECK3-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[TMP0]], i32 [[TMP11]] monotonic, align 41593// CHECK3-NEXT: [[TMP13:%.*]] = load i32, ptr [[Y2]], align 41594// CHECK3-NEXT: [[TMP14:%.*]] = atomicrmw add ptr [[TMP1]], i32 [[TMP13]] monotonic, align 41595// CHECK3-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)1596// CHECK3-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]1597// CHECK3: .omp.reduction.default:1598// CHECK3-NEXT: ret void1599//1600//1601// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined.omp.reduction.reduction_func1602// CHECK3-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {1603// CHECK3-NEXT: entry:1604// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 41605// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 41606// CHECK3-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 41607// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 41608// CHECK3-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 41609// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 41610// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP3]], i32 0, i32 01611// CHECK3-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 41612// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP2]], i32 0, i32 01613// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 41614// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP3]], i32 0, i32 11615// CHECK3-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 41616// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP2]], i32 0, i32 11617// CHECK3-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TMP10]], align 41618// CHECK3-NEXT: [[TMP12:%.*]] = load i32, ptr [[TMP7]], align 41619// CHECK3-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP5]], align 41620// CHECK3-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]1621// CHECK3-NEXT: store i32 [[ADD]], ptr [[TMP7]], align 41622// CHECK3-NEXT: [[TMP14:%.*]] = load i32, ptr [[TMP11]], align 41623// CHECK3-NEXT: [[TMP15:%.*]] = load i32, ptr [[TMP9]], align 41624// CHECK3-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]1625// CHECK3-NEXT: store i32 [[ADD2]], ptr [[TMP11]], align 41626// CHECK3-NEXT: ret void1627//1628//1629// CHECK3-LABEL: define {{[^@]+}}@_Z7mapFromv1630// CHECK3-SAME: () #[[ATTR0]] {1631// CHECK3-NEXT: entry:1632// CHECK3-NEXT: [[X:%.*]] = alloca i32, align 41633// CHECK3-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 41634// CHECK3-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 41635// CHECK3-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 41636// CHECK3-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81637// CHECK3-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01638// CHECK3-NEXT: store ptr [[X]], ptr [[TMP0]], align 41639// CHECK3-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01640// CHECK3-NEXT: store ptr [[X]], ptr [[TMP1]], align 41641// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 01642// CHECK3-NEXT: store ptr null, ptr [[TMP2]], align 41643// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01644// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01645// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01646// CHECK3-NEXT: store i32 3, ptr [[TMP5]], align 41647// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11648// CHECK3-NEXT: store i32 1, ptr [[TMP6]], align 41649// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21650// CHECK3-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 41651// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31652// CHECK3-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 41653// CHECK3-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41654// CHECK3-NEXT: store ptr @.offload_sizes.5, ptr [[TMP9]], align 41655// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51656// CHECK3-NEXT: store ptr @.offload_maptypes.6, ptr [[TMP10]], align 41657// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61658// CHECK3-NEXT: store ptr null, ptr [[TMP11]], align 41659// CHECK3-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71660// CHECK3-NEXT: store ptr null, ptr [[TMP12]], align 41661// CHECK3-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81662// CHECK3-NEXT: store i64 0, ptr [[TMP13]], align 81663// CHECK3-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91664// CHECK3-NEXT: store i64 0, ptr [[TMP14]], align 81665// CHECK3-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101666// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP15]], align 41667// CHECK3-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111668// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 41669// CHECK3-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121670// CHECK3-NEXT: store i32 0, ptr [[TMP17]], align 41671// CHECK3-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.region_id, ptr [[KERNEL_ARGS]])1672// CHECK3-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 01673// CHECK3-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1674// CHECK3: omp_offload.failed:1675// CHECK3-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45(ptr [[X]]) #[[ATTR2]]1676// CHECK3-NEXT: br label [[OMP_OFFLOAD_CONT]]1677// CHECK3: omp_offload.cont:1678// CHECK3-NEXT: ret void1679//1680//1681// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l451682// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR1]] {1683// CHECK3-NEXT: entry:1684// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 41685// CHECK3-NEXT: [[X_CASTED:%.*]] = alloca i32, align 41686// CHECK3-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 41687// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 41688// CHECK3-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 41689// CHECK3-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 41690// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[X_CASTED]], align 41691// CHECK3-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.omp_outlined, i32 [[TMP2]])1692// CHECK3-NEXT: ret void1693//1694//1695// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.omp_outlined1696// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[X:%.*]]) #[[ATTR1]] {1697// CHECK3-NEXT: entry:1698// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41699// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41700// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca i32, align 41701// CHECK3-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41702// CHECK3-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41703// CHECK3-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 41704// CHECK3-NEXT: ret void1705//1706//1707// CHECK3-LABEL: define {{[^@]+}}@_Z5mapTov1708// CHECK3-SAME: () #[[ATTR0]] {1709// CHECK3-NEXT: entry:1710// CHECK3-NEXT: [[X:%.*]] = alloca i32, align 41711// CHECK3-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 41712// CHECK3-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 41713// CHECK3-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 41714// CHECK3-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81715// CHECK3-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01716// CHECK3-NEXT: store ptr [[X]], ptr [[TMP0]], align 41717// CHECK3-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01718// CHECK3-NEXT: store ptr [[X]], ptr [[TMP1]], align 41719// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 01720// CHECK3-NEXT: store ptr null, ptr [[TMP2]], align 41721// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01722// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01723// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01724// CHECK3-NEXT: store i32 3, ptr [[TMP5]], align 41725// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11726// CHECK3-NEXT: store i32 1, ptr [[TMP6]], align 41727// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21728// CHECK3-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 41729// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31730// CHECK3-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 41731// CHECK3-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41732// CHECK3-NEXT: store ptr @.offload_sizes.7, ptr [[TMP9]], align 41733// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51734// CHECK3-NEXT: store ptr @.offload_maptypes.8, ptr [[TMP10]], align 41735// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61736// CHECK3-NEXT: store ptr null, ptr [[TMP11]], align 41737// CHECK3-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71738// CHECK3-NEXT: store ptr null, ptr [[TMP12]], align 41739// CHECK3-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81740// CHECK3-NEXT: store i64 0, ptr [[TMP13]], align 81741// CHECK3-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91742// CHECK3-NEXT: store i64 0, ptr [[TMP14]], align 81743// CHECK3-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101744// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP15]], align 41745// CHECK3-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111746// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 41747// CHECK3-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121748// CHECK3-NEXT: store i32 0, ptr [[TMP17]], align 41749// CHECK3-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.region_id, ptr [[KERNEL_ARGS]])1750// CHECK3-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 01751// CHECK3-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1752// CHECK3: omp_offload.failed:1753// CHECK3-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51(ptr [[X]]) #[[ATTR2]]1754// CHECK3-NEXT: br label [[OMP_OFFLOAD_CONT]]1755// CHECK3: omp_offload.cont:1756// CHECK3-NEXT: ret void1757//1758//1759// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l511760// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR1]] {1761// CHECK3-NEXT: entry:1762// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 41763// CHECK3-NEXT: [[X_CASTED:%.*]] = alloca i32, align 41764// CHECK3-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 41765// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 41766// CHECK3-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 41767// CHECK3-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 41768// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[X_CASTED]], align 41769// CHECK3-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.omp_outlined, i32 [[TMP2]])1770// CHECK3-NEXT: ret void1771//1772//1773// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.omp_outlined1774// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[X:%.*]]) #[[ATTR1]] {1775// CHECK3-NEXT: entry:1776// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41777// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41778// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca i32, align 41779// CHECK3-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41780// CHECK3-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41781// CHECK3-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 41782// CHECK3-NEXT: ret void1783//1784//1785// CHECK3-LABEL: define {{[^@]+}}@_Z8mapAllocv1786// CHECK3-SAME: () #[[ATTR0]] {1787// CHECK3-NEXT: entry:1788// CHECK3-NEXT: [[X:%.*]] = alloca i32, align 41789// CHECK3-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 41790// CHECK3-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 41791// CHECK3-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 41792// CHECK3-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81793// CHECK3-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01794// CHECK3-NEXT: store ptr [[X]], ptr [[TMP0]], align 41795// CHECK3-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01796// CHECK3-NEXT: store ptr [[X]], ptr [[TMP1]], align 41797// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 01798// CHECK3-NEXT: store ptr null, ptr [[TMP2]], align 41799// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01800// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01801// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01802// CHECK3-NEXT: store i32 3, ptr [[TMP5]], align 41803// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11804// CHECK3-NEXT: store i32 1, ptr [[TMP6]], align 41805// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21806// CHECK3-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 41807// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31808// CHECK3-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 41809// CHECK3-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41810// CHECK3-NEXT: store ptr @.offload_sizes.9, ptr [[TMP9]], align 41811// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51812// CHECK3-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP10]], align 41813// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61814// CHECK3-NEXT: store ptr null, ptr [[TMP11]], align 41815// CHECK3-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71816// CHECK3-NEXT: store ptr null, ptr [[TMP12]], align 41817// CHECK3-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81818// CHECK3-NEXT: store i64 0, ptr [[TMP13]], align 81819// CHECK3-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91820// CHECK3-NEXT: store i64 0, ptr [[TMP14]], align 81821// CHECK3-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101822// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP15]], align 41823// CHECK3-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111824// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 41825// CHECK3-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121826// CHECK3-NEXT: store i32 0, ptr [[TMP17]], align 41827// CHECK3-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.region_id, ptr [[KERNEL_ARGS]])1828// CHECK3-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 01829// CHECK3-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1830// CHECK3: omp_offload.failed:1831// CHECK3-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57(ptr [[X]]) #[[ATTR2]]1832// CHECK3-NEXT: br label [[OMP_OFFLOAD_CONT]]1833// CHECK3: omp_offload.cont:1834// CHECK3-NEXT: ret void1835//1836//1837// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l571838// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR1]] {1839// CHECK3-NEXT: entry:1840// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 41841// CHECK3-NEXT: [[X_CASTED:%.*]] = alloca i32, align 41842// CHECK3-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 41843// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 41844// CHECK3-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 41845// CHECK3-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 41846// CHECK3-NEXT: [[TMP2:%.*]] = load i32, ptr [[X_CASTED]], align 41847// CHECK3-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.omp_outlined, i32 [[TMP2]])1848// CHECK3-NEXT: ret void1849//1850//1851// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.omp_outlined1852// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[X:%.*]]) #[[ATTR1]] {1853// CHECK3-NEXT: entry:1854// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41855// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41856// CHECK3-NEXT: [[X_ADDR:%.*]] = alloca i32, align 41857// CHECK3-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41858// CHECK3-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41859// CHECK3-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 41860// CHECK3-NEXT: ret void1861//1862//1863// CHECK3-LABEL: define {{[^@]+}}@_Z8mapArrayv1864// CHECK3-SAME: () #[[ATTR0]] {1865// CHECK3-NEXT: entry:1866// CHECK3-NEXT: [[X:%.*]] = alloca [77 x i32], align 41867// CHECK3-NEXT: [[Y:%.*]] = alloca [88 x i32], align 41868// CHECK3-NEXT: [[Z:%.*]] = alloca [99 x i32], align 41869// CHECK3-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x ptr], align 41870// CHECK3-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x ptr], align 41871// CHECK3-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x ptr], align 41872// CHECK3-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81873// CHECK3-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [3 x ptr], align 41874// CHECK3-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [3 x ptr], align 41875// CHECK3-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [3 x ptr], align 41876// CHECK3-NEXT: [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 81877// CHECK3-NEXT: [[TMP0:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01878// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP0]], align 41879// CHECK3-NEXT: [[TMP1:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01880// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP1]], align 41881// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 01882// CHECK3-NEXT: store ptr null, ptr [[TMP2]], align 41883// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 11884// CHECK3-NEXT: store ptr [[Z]], ptr [[TMP3]], align 41885// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 11886// CHECK3-NEXT: store ptr [[Z]], ptr [[TMP4]], align 41887// CHECK3-NEXT: [[TMP5:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 11888// CHECK3-NEXT: store ptr null, ptr [[TMP5]], align 41889// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 21890// CHECK3-NEXT: store ptr [[X]], ptr [[TMP6]], align 41891// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 21892// CHECK3-NEXT: store ptr [[X]], ptr [[TMP7]], align 41893// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 21894// CHECK3-NEXT: store ptr null, ptr [[TMP8]], align 41895// CHECK3-NEXT: [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01896// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01897// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01898// CHECK3-NEXT: store i32 3, ptr [[TMP11]], align 41899// CHECK3-NEXT: [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11900// CHECK3-NEXT: store i32 3, ptr [[TMP12]], align 41901// CHECK3-NEXT: [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21902// CHECK3-NEXT: store ptr [[TMP9]], ptr [[TMP13]], align 41903// CHECK3-NEXT: [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31904// CHECK3-NEXT: store ptr [[TMP10]], ptr [[TMP14]], align 41905// CHECK3-NEXT: [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41906// CHECK3-NEXT: store ptr @.offload_sizes.11, ptr [[TMP15]], align 41907// CHECK3-NEXT: [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51908// CHECK3-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP16]], align 41909// CHECK3-NEXT: [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61910// CHECK3-NEXT: store ptr null, ptr [[TMP17]], align 41911// CHECK3-NEXT: [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71912// CHECK3-NEXT: store ptr null, ptr [[TMP18]], align 41913// CHECK3-NEXT: [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81914// CHECK3-NEXT: store i64 0, ptr [[TMP19]], align 81915// CHECK3-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91916// CHECK3-NEXT: store i64 0, ptr [[TMP20]], align 81917// CHECK3-NEXT: [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101918// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP21]], align 41919// CHECK3-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111920// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP22]], align 41921// CHECK3-NEXT: [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121922// CHECK3-NEXT: store i32 0, ptr [[TMP23]], align 41923// CHECK3-NEXT: [[TMP24:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.region_id, ptr [[KERNEL_ARGS]])1924// CHECK3-NEXT: [[TMP25:%.*]] = icmp ne i32 [[TMP24]], 01925// CHECK3-NEXT: br i1 [[TMP25]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1926// CHECK3: omp_offload.failed:1927// CHECK3-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63(ptr [[Y]], ptr [[Z]]) #[[ATTR2]]1928// CHECK3-NEXT: br label [[OMP_OFFLOAD_CONT]]1929// CHECK3: omp_offload.cont:1930// CHECK3-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 01931// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP26]], align 41932// CHECK3-NEXT: [[TMP27:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 01933// CHECK3-NEXT: store ptr [[Y]], ptr [[TMP27]], align 41934// CHECK3-NEXT: [[TMP28:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i32 0, i32 01935// CHECK3-NEXT: store ptr null, ptr [[TMP28]], align 41936// CHECK3-NEXT: [[TMP29:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 11937// CHECK3-NEXT: store ptr [[Z]], ptr [[TMP29]], align 41938// CHECK3-NEXT: [[TMP30:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 11939// CHECK3-NEXT: store ptr [[Z]], ptr [[TMP30]], align 41940// CHECK3-NEXT: [[TMP31:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i32 0, i32 11941// CHECK3-NEXT: store ptr null, ptr [[TMP31]], align 41942// CHECK3-NEXT: [[TMP32:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 21943// CHECK3-NEXT: store ptr [[X]], ptr [[TMP32]], align 41944// CHECK3-NEXT: [[TMP33:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 21945// CHECK3-NEXT: store ptr [[X]], ptr [[TMP33]], align 41946// CHECK3-NEXT: [[TMP34:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i32 0, i32 21947// CHECK3-NEXT: store ptr null, ptr [[TMP34]], align 41948// CHECK3-NEXT: [[TMP35:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 01949// CHECK3-NEXT: [[TMP36:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 01950// CHECK3-NEXT: [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 01951// CHECK3-NEXT: store i32 3, ptr [[TMP37]], align 41952// CHECK3-NEXT: [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11953// CHECK3-NEXT: store i32 3, ptr [[TMP38]], align 41954// CHECK3-NEXT: [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 21955// CHECK3-NEXT: store ptr [[TMP35]], ptr [[TMP39]], align 41956// CHECK3-NEXT: [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 31957// CHECK3-NEXT: store ptr [[TMP36]], ptr [[TMP40]], align 41958// CHECK3-NEXT: [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 41959// CHECK3-NEXT: store ptr @.offload_sizes.13, ptr [[TMP41]], align 41960// CHECK3-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 51961// CHECK3-NEXT: store ptr @.offload_maptypes.14, ptr [[TMP42]], align 41962// CHECK3-NEXT: [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 61963// CHECK3-NEXT: store ptr null, ptr [[TMP43]], align 41964// CHECK3-NEXT: [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 71965// CHECK3-NEXT: store ptr null, ptr [[TMP44]], align 41966// CHECK3-NEXT: [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 81967// CHECK3-NEXT: store i64 0, ptr [[TMP45]], align 81968// CHECK3-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 91969// CHECK3-NEXT: store i64 0, ptr [[TMP46]], align 81970// CHECK3-NEXT: [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 101971// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP47]], align 41972// CHECK3-NEXT: [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 111973// CHECK3-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP48]], align 41974// CHECK3-NEXT: [[TMP49:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 121975// CHECK3-NEXT: store i32 0, ptr [[TMP49]], align 41976// CHECK3-NEXT: [[TMP50:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.region_id, ptr [[KERNEL_ARGS4]])1977// CHECK3-NEXT: [[TMP51:%.*]] = icmp ne i32 [[TMP50]], 01978// CHECK3-NEXT: br i1 [[TMP51]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]1979// CHECK3: omp_offload.failed5:1980// CHECK3-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65(ptr [[Y]], ptr [[Z]]) #[[ATTR2]]1981// CHECK3-NEXT: br label [[OMP_OFFLOAD_CONT6]]1982// CHECK3: omp_offload.cont6:1983// CHECK3-NEXT: ret void1984//1985//1986// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l631987// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR1]] {1988// CHECK3-NEXT: entry:1989// CHECK3-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 41990// CHECK3-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 41991// CHECK3-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 41992// CHECK3-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 41993// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 41994// CHECK3-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 41995// CHECK3-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])1996// CHECK3-NEXT: ret void1997//1998//1999// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined2000// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR1]] {2001// CHECK3-NEXT: entry:2002// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42003// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42004// CHECK3-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 42005// CHECK3-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 42006// CHECK3-NEXT: [[Y1:%.*]] = alloca [88 x i32], align 42007// CHECK3-NEXT: [[X:%.*]] = alloca [77 x i32], align 42008// CHECK3-NEXT: [[Z2:%.*]] = alloca [99 x i32], align 42009// CHECK3-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 42010// CHECK3-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42011// CHECK3-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42012// CHECK3-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 42013// CHECK3-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 42014// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 42015// CHECK3-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 42016// CHECK3-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Y1]], ptr align 4 [[TMP0]], i32 352, i1 false)2017// CHECK3-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [99 x i32], ptr [[Z2]], i32 0, i32 02018// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr i32, ptr [[ARRAY_BEGIN]], i32 992019// CHECK3-NEXT: [[OMP_ARRAYINIT_ISEMPTY:%.*]] = icmp eq ptr [[ARRAY_BEGIN]], [[TMP2]]2020// CHECK3-NEXT: br i1 [[OMP_ARRAYINIT_ISEMPTY]], label [[OMP_ARRAYINIT_DONE:%.*]], label [[OMP_ARRAYINIT_BODY:%.*]]2021// CHECK3: omp.arrayinit.body:2022// CHECK3-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYINIT_BODY]] ]2023// CHECK3-NEXT: store i32 0, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42024// CHECK3-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 12025// CHECK3-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP2]]2026// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYINIT_DONE]], label [[OMP_ARRAYINIT_BODY]]2027// CHECK3: omp.arrayinit.done:2028// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i32 0, i32 02029// CHECK3-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 42030// CHECK3-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42031// CHECK3-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 42032// CHECK3-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i32 4, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)2033// CHECK3-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [2034// CHECK3-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]2035// CHECK3-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]2036// CHECK3-NEXT: ]2037// CHECK3: .omp.reduction.case1:2038// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP1]], i32 992039// CHECK3-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP1]], [[TMP7]]2040// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE6:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]2041// CHECK3: omp.arraycpy.body:2042// CHECK3-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2043// CHECK3-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST3:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT4:%.*]], [[OMP_ARRAYCPY_BODY]] ]2044// CHECK3-NEXT: [[TMP8:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 42045// CHECK3-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 42046// CHECK3-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]2047// CHECK3-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 42048// CHECK3-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT4]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], i32 12049// CHECK3-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 12050// CHECK3-NEXT: [[OMP_ARRAYCPY_DONE5:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT4]], [[TMP7]]2051// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_DONE5]], label [[OMP_ARRAYCPY_DONE6]], label [[OMP_ARRAYCPY_BODY]]2052// CHECK3: omp.arraycpy.done6:2053// CHECK3-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2054// CHECK3-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2055// CHECK3: .omp.reduction.case2:2056// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr [[TMP1]], i32 992057// CHECK3-NEXT: [[OMP_ARRAYCPY_ISEMPTY7:%.*]] = icmp eq ptr [[TMP1]], [[TMP10]]2058// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY7]], label [[OMP_ARRAYCPY_DONE14:%.*]], label [[OMP_ARRAYCPY_BODY8:%.*]]2059// CHECK3: omp.arraycpy.body8:2060// CHECK3-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST9:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT12:%.*]], [[OMP_ARRAYCPY_BODY8]] ]2061// CHECK3-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST10:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT11:%.*]], [[OMP_ARRAYCPY_BODY8]] ]2062// CHECK3-NEXT: [[TMP11:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], align 42063// CHECK3-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 [[TMP11]] monotonic, align 42064// CHECK3-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT11]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 12065// CHECK3-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT12]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], i32 12066// CHECK3-NEXT: [[OMP_ARRAYCPY_DONE13:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT11]], [[TMP10]]2067// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_DONE13]], label [[OMP_ARRAYCPY_DONE14]], label [[OMP_ARRAYCPY_BODY8]]2068// CHECK3: omp.arraycpy.done14:2069// CHECK3-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2070// CHECK3-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2071// CHECK3: .omp.reduction.default:2072// CHECK3-NEXT: ret void2073//2074//2075// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined.omp.reduction.reduction_func2076// CHECK3-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR3]] {2077// CHECK3-NEXT: entry:2078// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 42079// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 42080// CHECK3-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 42081// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 42082// CHECK3-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 42083// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 42084// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i32 0, i32 02085// CHECK3-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 42086// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i32 0, i32 02087// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 42088// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP7]], i32 992089// CHECK3-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP7]], [[TMP8]]2090// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE2:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]2091// CHECK3: omp.arraycpy.body:2092// CHECK3-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[TMP5]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2093// CHECK3-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[TMP7]], [[ENTRY]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2094// CHECK3-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42095// CHECK3-NEXT: [[TMP10:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 42096// CHECK3-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]2097// CHECK3-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42098// CHECK3-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 12099// CHECK3-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 12100// CHECK3-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP8]]2101// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYCPY_DONE2]], label [[OMP_ARRAYCPY_BODY]]2102// CHECK3: omp.arraycpy.done2:2103// CHECK3-NEXT: ret void2104//2105//2106// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l652107// CHECK3-SAME: (ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR1]] {2108// CHECK3-NEXT: entry:2109// CHECK3-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 42110// CHECK3-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 42111// CHECK3-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 42112// CHECK3-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 42113// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 42114// CHECK3-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 42115// CHECK3-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])2116// CHECK3-NEXT: ret void2117//2118//2119// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined2120// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR1]] {2121// CHECK3-NEXT: entry:2122// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42123// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42124// CHECK3-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 42125// CHECK3-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 42126// CHECK3-NEXT: [[Y1:%.*]] = alloca [88 x i32], align 42127// CHECK3-NEXT: [[X:%.*]] = alloca [77 x i32], align 42128// CHECK3-NEXT: [[Z2:%.*]] = alloca [99 x i32], align 42129// CHECK3-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 42130// CHECK3-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42131// CHECK3-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42132// CHECK3-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 42133// CHECK3-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 42134// CHECK3-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 42135// CHECK3-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 42136// CHECK3-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Y1]], ptr align 4 [[TMP0]], i32 352, i1 false)2137// CHECK3-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [99 x i32], ptr [[Z2]], i32 0, i32 02138// CHECK3-NEXT: [[TMP2:%.*]] = getelementptr i32, ptr [[ARRAY_BEGIN]], i32 992139// CHECK3-NEXT: [[OMP_ARRAYINIT_ISEMPTY:%.*]] = icmp eq ptr [[ARRAY_BEGIN]], [[TMP2]]2140// CHECK3-NEXT: br i1 [[OMP_ARRAYINIT_ISEMPTY]], label [[OMP_ARRAYINIT_DONE:%.*]], label [[OMP_ARRAYINIT_BODY:%.*]]2141// CHECK3: omp.arrayinit.body:2142// CHECK3-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYINIT_BODY]] ]2143// CHECK3-NEXT: store i32 0, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42144// CHECK3-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 12145// CHECK3-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP2]]2146// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYINIT_DONE]], label [[OMP_ARRAYINIT_BODY]]2147// CHECK3: omp.arrayinit.done:2148// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i32 0, i32 02149// CHECK3-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 42150// CHECK3-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42151// CHECK3-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 42152// CHECK3-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i32 4, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)2153// CHECK3-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [2154// CHECK3-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]2155// CHECK3-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]2156// CHECK3-NEXT: ]2157// CHECK3: .omp.reduction.case1:2158// CHECK3-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP1]], i32 992159// CHECK3-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP1]], [[TMP7]]2160// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE6:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]2161// CHECK3: omp.arraycpy.body:2162// CHECK3-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2163// CHECK3-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST3:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT4:%.*]], [[OMP_ARRAYCPY_BODY]] ]2164// CHECK3-NEXT: [[TMP8:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 42165// CHECK3-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 42166// CHECK3-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]2167// CHECK3-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 42168// CHECK3-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT4]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], i32 12169// CHECK3-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 12170// CHECK3-NEXT: [[OMP_ARRAYCPY_DONE5:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT4]], [[TMP7]]2171// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_DONE5]], label [[OMP_ARRAYCPY_DONE6]], label [[OMP_ARRAYCPY_BODY]]2172// CHECK3: omp.arraycpy.done6:2173// CHECK3-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2174// CHECK3-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2175// CHECK3: .omp.reduction.case2:2176// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr [[TMP1]], i32 992177// CHECK3-NEXT: [[OMP_ARRAYCPY_ISEMPTY7:%.*]] = icmp eq ptr [[TMP1]], [[TMP10]]2178// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY7]], label [[OMP_ARRAYCPY_DONE14:%.*]], label [[OMP_ARRAYCPY_BODY8:%.*]]2179// CHECK3: omp.arraycpy.body8:2180// CHECK3-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST9:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT12:%.*]], [[OMP_ARRAYCPY_BODY8]] ]2181// CHECK3-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST10:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT11:%.*]], [[OMP_ARRAYCPY_BODY8]] ]2182// CHECK3-NEXT: [[TMP11:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], align 42183// CHECK3-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 [[TMP11]] monotonic, align 42184// CHECK3-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT11]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 12185// CHECK3-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT12]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], i32 12186// CHECK3-NEXT: [[OMP_ARRAYCPY_DONE13:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT11]], [[TMP10]]2187// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_DONE13]], label [[OMP_ARRAYCPY_DONE14]], label [[OMP_ARRAYCPY_BODY8]]2188// CHECK3: omp.arraycpy.done14:2189// CHECK3-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2190// CHECK3-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2191// CHECK3: .omp.reduction.default:2192// CHECK3-NEXT: ret void2193//2194//2195// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined.omp.reduction.reduction_func2196// CHECK3-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR3]] {2197// CHECK3-NEXT: entry:2198// CHECK3-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 42199// CHECK3-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 42200// CHECK3-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 42201// CHECK3-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 42202// CHECK3-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 42203// CHECK3-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 42204// CHECK3-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i32 0, i32 02205// CHECK3-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 42206// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i32 0, i32 02207// CHECK3-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 42208// CHECK3-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP7]], i32 992209// CHECK3-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP7]], [[TMP8]]2210// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE2:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]2211// CHECK3: omp.arraycpy.body:2212// CHECK3-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[TMP5]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2213// CHECK3-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[TMP7]], [[ENTRY]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2214// CHECK3-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42215// CHECK3-NEXT: [[TMP10:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 42216// CHECK3-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]2217// CHECK3-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42218// CHECK3-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 12219// CHECK3-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 12220// CHECK3-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP8]]2221// CHECK3-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYCPY_DONE2]], label [[OMP_ARRAYCPY_BODY]]2222// CHECK3: omp.arraycpy.done2:2223// CHECK3-NEXT: ret void2224//2225//2226// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l272227// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]]) #[[ATTR0:[0-9]+]] {2228// CHECK5-NEXT: entry:2229// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82230// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82231// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1:[0-9]+]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.omp_outlined)2232// CHECK5-NEXT: ret void2233//2234//2235// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.omp_outlined2236// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {2237// CHECK5-NEXT: entry:2238// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82239// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82240// CHECK5-NEXT: [[X:%.*]] = alloca i32, align 42241// CHECK5-NEXT: [[Y:%.*]] = alloca i32, align 42242// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82243// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82244// CHECK5-NEXT: ret void2245//2246//2247// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l332248// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR0]] {2249// CHECK5-NEXT: entry:2250// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82251// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 82252// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82253// CHECK5-NEXT: [[X_CASTED:%.*]] = alloca i64, align 82254// CHECK5-NEXT: [[Y_CASTED:%.*]] = alloca i64, align 82255// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82256// CHECK5-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 82257// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82258// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 82259// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 82260// CHECK5-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 42261// CHECK5-NEXT: store i32 [[TMP2]], ptr [[X_CASTED]], align 42262// CHECK5-NEXT: [[TMP3:%.*]] = load i64, ptr [[X_CASTED]], align 82263// CHECK5-NEXT: [[TMP4:%.*]] = load i32, ptr [[TMP1]], align 42264// CHECK5-NEXT: store i32 [[TMP4]], ptr [[Y_CASTED]], align 42265// CHECK5-NEXT: [[TMP5:%.*]] = load i64, ptr [[Y_CASTED]], align 82266// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.omp_outlined, i64 [[TMP3]], i64 [[TMP5]])2267// CHECK5-NEXT: ret void2268//2269//2270// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.omp_outlined2271// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[X:%.*]], i64 noundef [[Y:%.*]]) #[[ATTR0]] {2272// CHECK5-NEXT: entry:2273// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82274// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82275// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca i64, align 82276// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca i64, align 82277// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82278// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82279// CHECK5-NEXT: store i64 [[X]], ptr [[X_ADDR]], align 82280// CHECK5-NEXT: store i64 [[Y]], ptr [[Y_ADDR]], align 82281// CHECK5-NEXT: ret void2282//2283//2284// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l392285// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR0]] {2286// CHECK5-NEXT: entry:2287// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82288// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 82289// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82290// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82291// CHECK5-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 82292// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82293// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 82294// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 82295// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])2296// CHECK5-NEXT: ret void2297//2298//2299// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined2300// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR0]] {2301// CHECK5-NEXT: entry:2302// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82303// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82304// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 82305// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82306// CHECK5-NEXT: [[X1:%.*]] = alloca i32, align 42307// CHECK5-NEXT: [[Y2:%.*]] = alloca i32, align 42308// CHECK5-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [2 x ptr], align 82309// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82310// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82311// CHECK5-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 82312// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82313// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 82314// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 82315// CHECK5-NEXT: store i32 0, ptr [[X1]], align 42316// CHECK5-NEXT: store i32 0, ptr [[Y2]], align 42317// CHECK5-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 02318// CHECK5-NEXT: store ptr [[X1]], ptr [[TMP2]], align 82319// CHECK5-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 12320// CHECK5-NEXT: store ptr [[Y2]], ptr [[TMP3]], align 82321// CHECK5-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82322// CHECK5-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 42323// CHECK5-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2:[0-9]+]], i32 [[TMP5]], i32 2, i64 16, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)2324// CHECK5-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [2325// CHECK5-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]2326// CHECK5-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]2327// CHECK5-NEXT: ]2328// CHECK5: .omp.reduction.case1:2329// CHECK5-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP0]], align 42330// CHECK5-NEXT: [[TMP8:%.*]] = load i32, ptr [[X1]], align 42331// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP7]], [[TMP8]]2332// CHECK5-NEXT: store i32 [[ADD]], ptr [[TMP0]], align 42333// CHECK5-NEXT: [[TMP9:%.*]] = load i32, ptr [[TMP1]], align 42334// CHECK5-NEXT: [[TMP10:%.*]] = load i32, ptr [[Y2]], align 42335// CHECK5-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]2336// CHECK5-NEXT: store i32 [[ADD3]], ptr [[TMP1]], align 42337// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2338// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2339// CHECK5: .omp.reduction.case2:2340// CHECK5-NEXT: [[TMP11:%.*]] = load i32, ptr [[X1]], align 42341// CHECK5-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[TMP0]], i32 [[TMP11]] monotonic, align 42342// CHECK5-NEXT: [[TMP13:%.*]] = load i32, ptr [[Y2]], align 42343// CHECK5-NEXT: [[TMP14:%.*]] = atomicrmw add ptr [[TMP1]], i32 [[TMP13]] monotonic, align 42344// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2345// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2346// CHECK5: .omp.reduction.default:2347// CHECK5-NEXT: ret void2348//2349//2350// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined.omp.reduction.reduction_func2351// CHECK5-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR2:[0-9]+]] {2352// CHECK5-NEXT: entry:2353// CHECK5-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82354// CHECK5-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82355// CHECK5-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82356// CHECK5-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82357// CHECK5-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82358// CHECK5-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82359// CHECK5-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP3]], i64 0, i64 02360// CHECK5-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 82361// CHECK5-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP2]], i64 0, i64 02362// CHECK5-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82363// CHECK5-NEXT: [[TMP8:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP3]], i64 0, i64 12364// CHECK5-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 82365// CHECK5-NEXT: [[TMP10:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP2]], i64 0, i64 12366// CHECK5-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TMP10]], align 82367// CHECK5-NEXT: [[TMP12:%.*]] = load i32, ptr [[TMP7]], align 42368// CHECK5-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP5]], align 42369// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]2370// CHECK5-NEXT: store i32 [[ADD]], ptr [[TMP7]], align 42371// CHECK5-NEXT: [[TMP14:%.*]] = load i32, ptr [[TMP11]], align 42372// CHECK5-NEXT: [[TMP15:%.*]] = load i32, ptr [[TMP9]], align 42373// CHECK5-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]2374// CHECK5-NEXT: store i32 [[ADD2]], ptr [[TMP11]], align 42375// CHECK5-NEXT: ret void2376//2377//2378// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l452379// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR0]] {2380// CHECK5-NEXT: entry:2381// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82382// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 82383// CHECK5-NEXT: [[X_CASTED:%.*]] = alloca i64, align 82384// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82385// CHECK5-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 82386// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 82387// CHECK5-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 42388// CHECK5-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 42389// CHECK5-NEXT: [[TMP2:%.*]] = load i64, ptr [[X_CASTED]], align 82390// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.omp_outlined, i64 [[TMP2]])2391// CHECK5-NEXT: ret void2392//2393//2394// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.omp_outlined2395// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[X:%.*]]) #[[ATTR0]] {2396// CHECK5-NEXT: entry:2397// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82398// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82399// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca i64, align 82400// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82401// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82402// CHECK5-NEXT: store i64 [[X]], ptr [[X_ADDR]], align 82403// CHECK5-NEXT: ret void2404//2405//2406// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l512407// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR0]] {2408// CHECK5-NEXT: entry:2409// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82410// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 82411// CHECK5-NEXT: [[X_CASTED:%.*]] = alloca i64, align 82412// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82413// CHECK5-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 82414// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 82415// CHECK5-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 42416// CHECK5-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 42417// CHECK5-NEXT: [[TMP2:%.*]] = load i64, ptr [[X_CASTED]], align 82418// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.omp_outlined, i64 [[TMP2]])2419// CHECK5-NEXT: ret void2420//2421//2422// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.omp_outlined2423// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[X:%.*]]) #[[ATTR0]] {2424// CHECK5-NEXT: entry:2425// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82426// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82427// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca i64, align 82428// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82429// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82430// CHECK5-NEXT: store i64 [[X]], ptr [[X_ADDR]], align 82431// CHECK5-NEXT: ret void2432//2433//2434// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l572435// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR0]] {2436// CHECK5-NEXT: entry:2437// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82438// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 82439// CHECK5-NEXT: [[X_CASTED:%.*]] = alloca i64, align 82440// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82441// CHECK5-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 82442// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 82443// CHECK5-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 42444// CHECK5-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 42445// CHECK5-NEXT: [[TMP2:%.*]] = load i64, ptr [[X_CASTED]], align 82446// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.omp_outlined, i64 [[TMP2]])2447// CHECK5-NEXT: ret void2448//2449//2450// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.omp_outlined2451// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[X:%.*]]) #[[ATTR0]] {2452// CHECK5-NEXT: entry:2453// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82454// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82455// CHECK5-NEXT: [[X_ADDR:%.*]] = alloca i64, align 82456// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82457// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82458// CHECK5-NEXT: store i64 [[X]], ptr [[X_ADDR]], align 82459// CHECK5-NEXT: ret void2460//2461//2462// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l632463// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR0]] {2464// CHECK5-NEXT: entry:2465// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82466// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82467// CHECK5-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 82468// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82469// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82470// CHECK5-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 82471// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 82472// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 82473// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])2474// CHECK5-NEXT: ret void2475//2476//2477// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined2478// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR0]] {2479// CHECK5-NEXT: entry:2480// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82481// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82482// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82483// CHECK5-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 82484// CHECK5-NEXT: [[Y1:%.*]] = alloca [88 x i32], align 42485// CHECK5-NEXT: [[X:%.*]] = alloca [77 x i32], align 42486// CHECK5-NEXT: [[Z2:%.*]] = alloca [99 x i32], align 42487// CHECK5-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 82488// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82489// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82490// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82491// CHECK5-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 82492// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 82493// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 82494// CHECK5-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[Y1]], ptr align 4 [[TMP0]], i64 352, i1 false)2495// CHECK5-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [99 x i32], ptr [[Z2]], i32 0, i32 02496// CHECK5-NEXT: [[TMP2:%.*]] = getelementptr i32, ptr [[ARRAY_BEGIN]], i64 992497// CHECK5-NEXT: [[OMP_ARRAYINIT_ISEMPTY:%.*]] = icmp eq ptr [[ARRAY_BEGIN]], [[TMP2]]2498// CHECK5-NEXT: br i1 [[OMP_ARRAYINIT_ISEMPTY]], label [[OMP_ARRAYINIT_DONE:%.*]], label [[OMP_ARRAYINIT_BODY:%.*]]2499// CHECK5: omp.arrayinit.body:2500// CHECK5-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYINIT_BODY]] ]2501// CHECK5-NEXT: store i32 0, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42502// CHECK5-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 12503// CHECK5-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP2]]2504// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYINIT_DONE]], label [[OMP_ARRAYINIT_BODY]]2505// CHECK5: omp.arrayinit.done:2506// CHECK5-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 02507// CHECK5-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 82508// CHECK5-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82509// CHECK5-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 42510// CHECK5-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i64 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)2511// CHECK5-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [2512// CHECK5-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]2513// CHECK5-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]2514// CHECK5-NEXT: ]2515// CHECK5: .omp.reduction.case1:2516// CHECK5-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP1]], i64 992517// CHECK5-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP1]], [[TMP7]]2518// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE6:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]2519// CHECK5: omp.arraycpy.body:2520// CHECK5-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2521// CHECK5-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST3:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT4:%.*]], [[OMP_ARRAYCPY_BODY]] ]2522// CHECK5-NEXT: [[TMP8:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 42523// CHECK5-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 42524// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]2525// CHECK5-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 42526// CHECK5-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT4]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], i32 12527// CHECK5-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 12528// CHECK5-NEXT: [[OMP_ARRAYCPY_DONE5:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT4]], [[TMP7]]2529// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_DONE5]], label [[OMP_ARRAYCPY_DONE6]], label [[OMP_ARRAYCPY_BODY]]2530// CHECK5: omp.arraycpy.done6:2531// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2532// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2533// CHECK5: .omp.reduction.case2:2534// CHECK5-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr [[TMP1]], i64 992535// CHECK5-NEXT: [[OMP_ARRAYCPY_ISEMPTY7:%.*]] = icmp eq ptr [[TMP1]], [[TMP10]]2536// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY7]], label [[OMP_ARRAYCPY_DONE14:%.*]], label [[OMP_ARRAYCPY_BODY8:%.*]]2537// CHECK5: omp.arraycpy.body8:2538// CHECK5-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST9:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT12:%.*]], [[OMP_ARRAYCPY_BODY8]] ]2539// CHECK5-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST10:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT11:%.*]], [[OMP_ARRAYCPY_BODY8]] ]2540// CHECK5-NEXT: [[TMP11:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], align 42541// CHECK5-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 [[TMP11]] monotonic, align 42542// CHECK5-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT11]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 12543// CHECK5-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT12]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], i32 12544// CHECK5-NEXT: [[OMP_ARRAYCPY_DONE13:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT11]], [[TMP10]]2545// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_DONE13]], label [[OMP_ARRAYCPY_DONE14]], label [[OMP_ARRAYCPY_BODY8]]2546// CHECK5: omp.arraycpy.done14:2547// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2548// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2549// CHECK5: .omp.reduction.default:2550// CHECK5-NEXT: ret void2551//2552//2553// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined.omp.reduction.reduction_func2554// CHECK5-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR2]] {2555// CHECK5-NEXT: entry:2556// CHECK5-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82557// CHECK5-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82558// CHECK5-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82559// CHECK5-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82560// CHECK5-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82561// CHECK5-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82562// CHECK5-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i64 0, i64 02563// CHECK5-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 82564// CHECK5-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i64 0, i64 02565// CHECK5-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82566// CHECK5-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP7]], i64 992567// CHECK5-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP7]], [[TMP8]]2568// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE2:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]2569// CHECK5: omp.arraycpy.body:2570// CHECK5-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[TMP5]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2571// CHECK5-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[TMP7]], [[ENTRY]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2572// CHECK5-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42573// CHECK5-NEXT: [[TMP10:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 42574// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]2575// CHECK5-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42576// CHECK5-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 12577// CHECK5-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 12578// CHECK5-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP8]]2579// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYCPY_DONE2]], label [[OMP_ARRAYCPY_BODY]]2580// CHECK5: omp.arraycpy.done2:2581// CHECK5-NEXT: ret void2582//2583//2584// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l652585// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR0]] {2586// CHECK5-NEXT: entry:2587// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82588// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82589// CHECK5-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 82590// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82591// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82592// CHECK5-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 82593// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 82594// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 82595// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])2596// CHECK5-NEXT: ret void2597//2598//2599// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined2600// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR0]] {2601// CHECK5-NEXT: entry:2602// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82603// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82604// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82605// CHECK5-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 82606// CHECK5-NEXT: [[Y1:%.*]] = alloca [88 x i32], align 42607// CHECK5-NEXT: [[X:%.*]] = alloca [77 x i32], align 42608// CHECK5-NEXT: [[Z2:%.*]] = alloca [99 x i32], align 42609// CHECK5-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 82610// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82611// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82612// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82613// CHECK5-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 82614// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 82615// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 82616// CHECK5-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[Y1]], ptr align 4 [[TMP0]], i64 352, i1 false)2617// CHECK5-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [99 x i32], ptr [[Z2]], i32 0, i32 02618// CHECK5-NEXT: [[TMP2:%.*]] = getelementptr i32, ptr [[ARRAY_BEGIN]], i64 992619// CHECK5-NEXT: [[OMP_ARRAYINIT_ISEMPTY:%.*]] = icmp eq ptr [[ARRAY_BEGIN]], [[TMP2]]2620// CHECK5-NEXT: br i1 [[OMP_ARRAYINIT_ISEMPTY]], label [[OMP_ARRAYINIT_DONE:%.*]], label [[OMP_ARRAYINIT_BODY:%.*]]2621// CHECK5: omp.arrayinit.body:2622// CHECK5-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYINIT_BODY]] ]2623// CHECK5-NEXT: store i32 0, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42624// CHECK5-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 12625// CHECK5-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP2]]2626// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYINIT_DONE]], label [[OMP_ARRAYINIT_BODY]]2627// CHECK5: omp.arrayinit.done:2628// CHECK5-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 02629// CHECK5-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 82630// CHECK5-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82631// CHECK5-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 42632// CHECK5-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i64 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)2633// CHECK5-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [2634// CHECK5-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]2635// CHECK5-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]2636// CHECK5-NEXT: ]2637// CHECK5: .omp.reduction.case1:2638// CHECK5-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP1]], i64 992639// CHECK5-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP1]], [[TMP7]]2640// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE6:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]2641// CHECK5: omp.arraycpy.body:2642// CHECK5-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2643// CHECK5-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST3:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT4:%.*]], [[OMP_ARRAYCPY_BODY]] ]2644// CHECK5-NEXT: [[TMP8:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 42645// CHECK5-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 42646// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]2647// CHECK5-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 42648// CHECK5-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT4]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], i32 12649// CHECK5-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 12650// CHECK5-NEXT: [[OMP_ARRAYCPY_DONE5:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT4]], [[TMP7]]2651// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_DONE5]], label [[OMP_ARRAYCPY_DONE6]], label [[OMP_ARRAYCPY_BODY]]2652// CHECK5: omp.arraycpy.done6:2653// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2654// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2655// CHECK5: .omp.reduction.case2:2656// CHECK5-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr [[TMP1]], i64 992657// CHECK5-NEXT: [[OMP_ARRAYCPY_ISEMPTY7:%.*]] = icmp eq ptr [[TMP1]], [[TMP10]]2658// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY7]], label [[OMP_ARRAYCPY_DONE14:%.*]], label [[OMP_ARRAYCPY_BODY8:%.*]]2659// CHECK5: omp.arraycpy.body8:2660// CHECK5-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST9:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT12:%.*]], [[OMP_ARRAYCPY_BODY8]] ]2661// CHECK5-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST10:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT11:%.*]], [[OMP_ARRAYCPY_BODY8]] ]2662// CHECK5-NEXT: [[TMP11:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], align 42663// CHECK5-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 [[TMP11]] monotonic, align 42664// CHECK5-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT11]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 12665// CHECK5-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT12]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], i32 12666// CHECK5-NEXT: [[OMP_ARRAYCPY_DONE13:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT11]], [[TMP10]]2667// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_DONE13]], label [[OMP_ARRAYCPY_DONE14]], label [[OMP_ARRAYCPY_BODY8]]2668// CHECK5: omp.arraycpy.done14:2669// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2670// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2671// CHECK5: .omp.reduction.default:2672// CHECK5-NEXT: ret void2673//2674//2675// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined.omp.reduction.reduction_func2676// CHECK5-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR2]] {2677// CHECK5-NEXT: entry:2678// CHECK5-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82679// CHECK5-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82680// CHECK5-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82681// CHECK5-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82682// CHECK5-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82683// CHECK5-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82684// CHECK5-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i64 0, i64 02685// CHECK5-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 82686// CHECK5-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i64 0, i64 02687// CHECK5-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82688// CHECK5-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP7]], i64 992689// CHECK5-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP7]], [[TMP8]]2690// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE2:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]2691// CHECK5: omp.arraycpy.body:2692// CHECK5-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[TMP5]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2693// CHECK5-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[TMP7]], [[ENTRY]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]2694// CHECK5-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42695// CHECK5-NEXT: [[TMP10:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 42696// CHECK5-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]2697// CHECK5-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 42698// CHECK5-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 12699// CHECK5-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 12700// CHECK5-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP8]]2701// CHECK5-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYCPY_DONE2]], label [[OMP_ARRAYCPY_BODY]]2702// CHECK5: omp.arraycpy.done2:2703// CHECK5-NEXT: ret void2704//2705//2706// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l722707// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Y:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Z:%.*]]) #[[ATTR0]] {2708// CHECK5-NEXT: entry:2709// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82710// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82711// CHECK5-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 82712// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82713// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82714// CHECK5-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 82715// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 82716// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 82717// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])2718// CHECK5-NEXT: ret void2719//2720//2721// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72.omp_outlined2722// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Y:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Z:%.*]]) #[[ATTR0]] {2723// CHECK5-NEXT: entry:2724// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82725// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82726// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82727// CHECK5-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 82728// CHECK5-NEXT: [[Y1:%.*]] = alloca i128, align 162729// CHECK5-NEXT: [[X:%.*]] = alloca i128, align 162730// CHECK5-NEXT: [[Z2:%.*]] = alloca i128, align 162731// CHECK5-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 82732// CHECK5-NEXT: [[ATOMIC_TEMP:%.*]] = alloca i128, align 162733// CHECK5-NEXT: [[ATOMIC_TEMP3:%.*]] = alloca i128, align 162734// CHECK5-NEXT: [[TMP:%.*]] = alloca i128, align 162735// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82736// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82737// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82738// CHECK5-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 82739// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 82740// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 82741// CHECK5-NEXT: [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 162742// CHECK5-NEXT: store i128 [[TMP2]], ptr [[Y1]], align 162743// CHECK5-NEXT: store i128 0, ptr [[Z2]], align 162744// CHECK5-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 02745// CHECK5-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 82746// CHECK5-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82747// CHECK5-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 42748// CHECK5-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i64 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)2749// CHECK5-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [2750// CHECK5-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]2751// CHECK5-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]2752// CHECK5-NEXT: ]2753// CHECK5: .omp.reduction.case1:2754// CHECK5-NEXT: [[TMP7:%.*]] = load i128, ptr [[TMP1]], align 162755// CHECK5-NEXT: [[TMP8:%.*]] = load i128, ptr [[Z2]], align 162756// CHECK5-NEXT: [[ADD:%.*]] = add nsw i128 [[TMP7]], [[TMP8]]2757// CHECK5-NEXT: store i128 [[ADD]], ptr [[TMP1]], align 162758// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2759// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2760// CHECK5: .omp.reduction.case2:2761// CHECK5-NEXT: [[TMP9:%.*]] = load i128, ptr [[Z2]], align 162762// CHECK5-NEXT: call void @__atomic_load(i64 noundef 16, ptr noundef [[TMP1]], ptr noundef [[ATOMIC_TEMP]], i32 noundef signext 0)2763// CHECK5-NEXT: br label [[ATOMIC_CONT:%.*]]2764// CHECK5: atomic_cont:2765// CHECK5-NEXT: [[TMP10:%.*]] = load i128, ptr [[ATOMIC_TEMP]], align 162766// CHECK5-NEXT: store i128 [[TMP10]], ptr [[TMP]], align 162767// CHECK5-NEXT: [[TMP11:%.*]] = load i128, ptr [[TMP]], align 162768// CHECK5-NEXT: [[TMP12:%.*]] = load i128, ptr [[Z2]], align 162769// CHECK5-NEXT: [[ADD4:%.*]] = add nsw i128 [[TMP11]], [[TMP12]]2770// CHECK5-NEXT: store i128 [[ADD4]], ptr [[ATOMIC_TEMP3]], align 162771// CHECK5-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @__atomic_compare_exchange(i64 noundef 16, ptr noundef [[TMP1]], ptr noundef [[ATOMIC_TEMP]], ptr noundef [[ATOMIC_TEMP3]], i32 noundef signext 0, i32 noundef signext 0)2772// CHECK5-NEXT: br i1 [[CALL]], label [[ATOMIC_EXIT:%.*]], label [[ATOMIC_CONT]]2773// CHECK5: atomic_exit:2774// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2775// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2776// CHECK5: .omp.reduction.default:2777// CHECK5-NEXT: ret void2778//2779//2780// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l72.omp_outlined.omp.reduction.reduction_func2781// CHECK5-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR2]] {2782// CHECK5-NEXT: entry:2783// CHECK5-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82784// CHECK5-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82785// CHECK5-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82786// CHECK5-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82787// CHECK5-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82788// CHECK5-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82789// CHECK5-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i64 0, i64 02790// CHECK5-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 82791// CHECK5-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i64 0, i64 02792// CHECK5-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82793// CHECK5-NEXT: [[TMP8:%.*]] = load i128, ptr [[TMP7]], align 162794// CHECK5-NEXT: [[TMP9:%.*]] = load i128, ptr [[TMP5]], align 162795// CHECK5-NEXT: [[ADD:%.*]] = add nsw i128 [[TMP8]], [[TMP9]]2796// CHECK5-NEXT: store i128 [[ADD]], ptr [[TMP7]], align 162797// CHECK5-NEXT: ret void2798//2799//2800// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l742801// CHECK5-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Y:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Z:%.*]]) #[[ATTR0]] {2802// CHECK5-NEXT: entry:2803// CHECK5-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 82804// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82805// CHECK5-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 82806// CHECK5-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 82807// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82808// CHECK5-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 82809// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 82810// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 82811// CHECK5-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])2812// CHECK5-NEXT: ret void2813//2814//2815// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74.omp_outlined2816// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Y:%.*]], ptr noundef nonnull align 16 dereferenceable(16) [[Z:%.*]]) #[[ATTR0]] {2817// CHECK5-NEXT: entry:2818// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82819// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82820// CHECK5-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 82821// CHECK5-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 82822// CHECK5-NEXT: [[Y1:%.*]] = alloca i128, align 162823// CHECK5-NEXT: [[X:%.*]] = alloca i128, align 162824// CHECK5-NEXT: [[Z2:%.*]] = alloca i128, align 162825// CHECK5-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 82826// CHECK5-NEXT: [[ATOMIC_TEMP:%.*]] = alloca i128, align 162827// CHECK5-NEXT: [[ATOMIC_TEMP3:%.*]] = alloca i128, align 162828// CHECK5-NEXT: [[TMP:%.*]] = alloca i128, align 162829// CHECK5-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82830// CHECK5-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82831// CHECK5-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 82832// CHECK5-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 82833// CHECK5-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 82834// CHECK5-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 82835// CHECK5-NEXT: [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 162836// CHECK5-NEXT: store i128 [[TMP2]], ptr [[Y1]], align 162837// CHECK5-NEXT: store i128 0, ptr [[Z2]], align 162838// CHECK5-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i64 0, i64 02839// CHECK5-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 82840// CHECK5-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82841// CHECK5-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 42842// CHECK5-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i64 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)2843// CHECK5-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [2844// CHECK5-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]2845// CHECK5-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]2846// CHECK5-NEXT: ]2847// CHECK5: .omp.reduction.case1:2848// CHECK5-NEXT: [[TMP7:%.*]] = load i128, ptr [[TMP1]], align 162849// CHECK5-NEXT: [[TMP8:%.*]] = load i128, ptr [[Z2]], align 162850// CHECK5-NEXT: [[ADD:%.*]] = add nsw i128 [[TMP7]], [[TMP8]]2851// CHECK5-NEXT: store i128 [[ADD]], ptr [[TMP1]], align 162852// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2853// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2854// CHECK5: .omp.reduction.case2:2855// CHECK5-NEXT: [[TMP9:%.*]] = load i128, ptr [[Z2]], align 162856// CHECK5-NEXT: call void @__atomic_load(i64 noundef 16, ptr noundef [[TMP1]], ptr noundef [[ATOMIC_TEMP]], i32 noundef signext 0)2857// CHECK5-NEXT: br label [[ATOMIC_CONT:%.*]]2858// CHECK5: atomic_cont:2859// CHECK5-NEXT: [[TMP10:%.*]] = load i128, ptr [[ATOMIC_TEMP]], align 162860// CHECK5-NEXT: store i128 [[TMP10]], ptr [[TMP]], align 162861// CHECK5-NEXT: [[TMP11:%.*]] = load i128, ptr [[TMP]], align 162862// CHECK5-NEXT: [[TMP12:%.*]] = load i128, ptr [[Z2]], align 162863// CHECK5-NEXT: [[ADD4:%.*]] = add nsw i128 [[TMP11]], [[TMP12]]2864// CHECK5-NEXT: store i128 [[ADD4]], ptr [[ATOMIC_TEMP3]], align 162865// CHECK5-NEXT: [[CALL:%.*]] = call noundef zeroext i1 @__atomic_compare_exchange(i64 noundef 16, ptr noundef [[TMP1]], ptr noundef [[ATOMIC_TEMP]], ptr noundef [[ATOMIC_TEMP3]], i32 noundef signext 0, i32 noundef signext 0)2866// CHECK5-NEXT: br i1 [[CALL]], label [[ATOMIC_EXIT:%.*]], label [[ATOMIC_CONT]]2867// CHECK5: atomic_exit:2868// CHECK5-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)2869// CHECK5-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]2870// CHECK5: .omp.reduction.default:2871// CHECK5-NEXT: ret void2872//2873//2874// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z9mapInt128v_l74.omp_outlined.omp.reduction.reduction_func2875// CHECK5-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR2]] {2876// CHECK5-NEXT: entry:2877// CHECK5-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 82878// CHECK5-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 82879// CHECK5-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 82880// CHECK5-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 82881// CHECK5-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 82882// CHECK5-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 82883// CHECK5-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i64 0, i64 02884// CHECK5-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 82885// CHECK5-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i64 0, i64 02886// CHECK5-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 82887// CHECK5-NEXT: [[TMP8:%.*]] = load i128, ptr [[TMP7]], align 162888// CHECK5-NEXT: [[TMP9:%.*]] = load i128, ptr [[TMP5]], align 162889// CHECK5-NEXT: [[ADD:%.*]] = add nsw i128 [[TMP8]], [[TMP9]]2890// CHECK5-NEXT: store i128 [[ADD]], ptr [[TMP7]], align 162891// CHECK5-NEXT: ret void2892//2893//2894// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l272895// CHECK7-SAME: (ptr noalias noundef [[DYN_PTR:%.*]]) #[[ATTR0:[0-9]+]] {2896// CHECK7-NEXT: entry:2897// CHECK7-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 42898// CHECK7-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 42899// CHECK7-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1:[0-9]+]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.omp_outlined)2900// CHECK7-NEXT: ret void2901//2902//2903// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z14mapWithPrivatev_l27.omp_outlined2904// CHECK7-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {2905// CHECK7-NEXT: entry:2906// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42907// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42908// CHECK7-NEXT: [[X:%.*]] = alloca i32, align 42909// CHECK7-NEXT: [[Y:%.*]] = alloca i32, align 42910// CHECK7-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42911// CHECK7-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42912// CHECK7-NEXT: ret void2913//2914//2915// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l332916// CHECK7-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR0]] {2917// CHECK7-NEXT: entry:2918// CHECK7-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 42919// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 42920// CHECK7-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 42921// CHECK7-NEXT: [[X_CASTED:%.*]] = alloca i32, align 42922// CHECK7-NEXT: [[Y_CASTED:%.*]] = alloca i32, align 42923// CHECK7-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 42924// CHECK7-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 42925// CHECK7-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 42926// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 42927// CHECK7-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 42928// CHECK7-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 42929// CHECK7-NEXT: store i32 [[TMP2]], ptr [[X_CASTED]], align 42930// CHECK7-NEXT: [[TMP3:%.*]] = load i32, ptr [[X_CASTED]], align 42931// CHECK7-NEXT: [[TMP4:%.*]] = load i32, ptr [[TMP1]], align 42932// CHECK7-NEXT: store i32 [[TMP4]], ptr [[Y_CASTED]], align 42933// CHECK7-NEXT: [[TMP5:%.*]] = load i32, ptr [[Y_CASTED]], align 42934// CHECK7-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.omp_outlined, i32 [[TMP3]], i32 [[TMP5]])2935// CHECK7-NEXT: ret void2936//2937//2938// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z19mapWithFirstprivatev_l33.omp_outlined2939// CHECK7-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR0]] {2940// CHECK7-NEXT: entry:2941// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42942// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42943// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca i32, align 42944// CHECK7-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 42945// CHECK7-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42946// CHECK7-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42947// CHECK7-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 42948// CHECK7-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 42949// CHECK7-NEXT: ret void2950//2951//2952// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l392953// CHECK7-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR0]] {2954// CHECK7-NEXT: entry:2955// CHECK7-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 42956// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 42957// CHECK7-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 42958// CHECK7-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 42959// CHECK7-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 42960// CHECK7-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 42961// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 42962// CHECK7-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 42963// CHECK7-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])2964// CHECK7-NEXT: ret void2965//2966//2967// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined2968// CHECK7-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[Y:%.*]]) #[[ATTR0]] {2969// CHECK7-NEXT: entry:2970// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42971// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42972// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 42973// CHECK7-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 42974// CHECK7-NEXT: [[X1:%.*]] = alloca i32, align 42975// CHECK7-NEXT: [[Y2:%.*]] = alloca i32, align 42976// CHECK7-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [2 x ptr], align 42977// CHECK7-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42978// CHECK7-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42979// CHECK7-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 42980// CHECK7-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 42981// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 42982// CHECK7-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Y_ADDR]], align 42983// CHECK7-NEXT: store i32 0, ptr [[X1]], align 42984// CHECK7-NEXT: store i32 0, ptr [[Y2]], align 42985// CHECK7-NEXT: [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i32 0, i32 02986// CHECK7-NEXT: store ptr [[X1]], ptr [[TMP2]], align 42987// CHECK7-NEXT: [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i32 0, i32 12988// CHECK7-NEXT: store ptr [[Y2]], ptr [[TMP3]], align 42989// CHECK7-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42990// CHECK7-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 42991// CHECK7-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2:[0-9]+]], i32 [[TMP5]], i32 2, i32 8, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)2992// CHECK7-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [2993// CHECK7-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]2994// CHECK7-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]2995// CHECK7-NEXT: ]2996// CHECK7: .omp.reduction.case1:2997// CHECK7-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP0]], align 42998// CHECK7-NEXT: [[TMP8:%.*]] = load i32, ptr [[X1]], align 42999// CHECK7-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP7]], [[TMP8]]3000// CHECK7-NEXT: store i32 [[ADD]], ptr [[TMP0]], align 43001// CHECK7-NEXT: [[TMP9:%.*]] = load i32, ptr [[TMP1]], align 43002// CHECK7-NEXT: [[TMP10:%.*]] = load i32, ptr [[Y2]], align 43003// CHECK7-NEXT: [[ADD3:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]3004// CHECK7-NEXT: store i32 [[ADD3]], ptr [[TMP1]], align 43005// CHECK7-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)3006// CHECK7-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]3007// CHECK7: .omp.reduction.case2:3008// CHECK7-NEXT: [[TMP11:%.*]] = load i32, ptr [[X1]], align 43009// CHECK7-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[TMP0]], i32 [[TMP11]] monotonic, align 43010// CHECK7-NEXT: [[TMP13:%.*]] = load i32, ptr [[Y2]], align 43011// CHECK7-NEXT: [[TMP14:%.*]] = atomicrmw add ptr [[TMP1]], i32 [[TMP13]] monotonic, align 43012// CHECK7-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)3013// CHECK7-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]3014// CHECK7: .omp.reduction.default:3015// CHECK7-NEXT: ret void3016//3017//3018// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z16mapWithReductionv_l39.omp_outlined.omp.reduction.reduction_func3019// CHECK7-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR2:[0-9]+]] {3020// CHECK7-NEXT: entry:3021// CHECK7-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 43022// CHECK7-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 43023// CHECK7-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 43024// CHECK7-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 43025// CHECK7-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 43026// CHECK7-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 43027// CHECK7-NEXT: [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP3]], i32 0, i32 03028// CHECK7-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 43029// CHECK7-NEXT: [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP2]], i32 0, i32 03030// CHECK7-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 43031// CHECK7-NEXT: [[TMP8:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP3]], i32 0, i32 13032// CHECK7-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP8]], align 43033// CHECK7-NEXT: [[TMP10:%.*]] = getelementptr inbounds [2 x ptr], ptr [[TMP2]], i32 0, i32 13034// CHECK7-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TMP10]], align 43035// CHECK7-NEXT: [[TMP12:%.*]] = load i32, ptr [[TMP7]], align 43036// CHECK7-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP5]], align 43037// CHECK7-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]3038// CHECK7-NEXT: store i32 [[ADD]], ptr [[TMP7]], align 43039// CHECK7-NEXT: [[TMP14:%.*]] = load i32, ptr [[TMP11]], align 43040// CHECK7-NEXT: [[TMP15:%.*]] = load i32, ptr [[TMP9]], align 43041// CHECK7-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]3042// CHECK7-NEXT: store i32 [[ADD2]], ptr [[TMP11]], align 43043// CHECK7-NEXT: ret void3044//3045//3046// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l453047// CHECK7-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR0]] {3048// CHECK7-NEXT: entry:3049// CHECK7-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 43050// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 43051// CHECK7-NEXT: [[X_CASTED:%.*]] = alloca i32, align 43052// CHECK7-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 43053// CHECK7-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 43054// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 43055// CHECK7-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 43056// CHECK7-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 43057// CHECK7-NEXT: [[TMP2:%.*]] = load i32, ptr [[X_CASTED]], align 43058// CHECK7-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.omp_outlined, i32 [[TMP2]])3059// CHECK7-NEXT: ret void3060//3061//3062// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z7mapFromv_l45.omp_outlined3063// CHECK7-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[X:%.*]]) #[[ATTR0]] {3064// CHECK7-NEXT: entry:3065// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43066// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43067// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca i32, align 43068// CHECK7-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43069// CHECK7-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43070// CHECK7-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 43071// CHECK7-NEXT: ret void3072//3073//3074// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l513075// CHECK7-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR0]] {3076// CHECK7-NEXT: entry:3077// CHECK7-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 43078// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 43079// CHECK7-NEXT: [[X_CASTED:%.*]] = alloca i32, align 43080// CHECK7-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 43081// CHECK7-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 43082// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 43083// CHECK7-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 43084// CHECK7-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 43085// CHECK7-NEXT: [[TMP2:%.*]] = load i32, ptr [[X_CASTED]], align 43086// CHECK7-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.omp_outlined, i32 [[TMP2]])3087// CHECK7-NEXT: ret void3088//3089//3090// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5mapTov_l51.omp_outlined3091// CHECK7-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[X:%.*]]) #[[ATTR0]] {3092// CHECK7-NEXT: entry:3093// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43094// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43095// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca i32, align 43096// CHECK7-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43097// CHECK7-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43098// CHECK7-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 43099// CHECK7-NEXT: ret void3100//3101//3102// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l573103// CHECK7-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[X:%.*]]) #[[ATTR0]] {3104// CHECK7-NEXT: entry:3105// CHECK7-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 43106// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 43107// CHECK7-NEXT: [[X_CASTED:%.*]] = alloca i32, align 43108// CHECK7-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 43109// CHECK7-NEXT: store ptr [[X]], ptr [[X_ADDR]], align 43110// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 43111// CHECK7-NEXT: [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 43112// CHECK7-NEXT: store i32 [[TMP1]], ptr [[X_CASTED]], align 43113// CHECK7-NEXT: [[TMP2:%.*]] = load i32, ptr [[X_CASTED]], align 43114// CHECK7-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.omp_outlined, i32 [[TMP2]])3115// CHECK7-NEXT: ret void3116//3117//3118// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapAllocv_l57.omp_outlined3119// CHECK7-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[X:%.*]]) #[[ATTR0]] {3120// CHECK7-NEXT: entry:3121// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43122// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43123// CHECK7-NEXT: [[X_ADDR:%.*]] = alloca i32, align 43124// CHECK7-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43125// CHECK7-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43126// CHECK7-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 43127// CHECK7-NEXT: ret void3128//3129//3130// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l633131// CHECK7-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR0]] {3132// CHECK7-NEXT: entry:3133// CHECK7-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 43134// CHECK7-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 43135// CHECK7-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 43136// CHECK7-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 43137// CHECK7-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 43138// CHECK7-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 43139// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 43140// CHECK7-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 43141// CHECK7-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])3142// CHECK7-NEXT: ret void3143//3144//3145// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined3146// CHECK7-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR0]] {3147// CHECK7-NEXT: entry:3148// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43149// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43150// CHECK7-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 43151// CHECK7-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 43152// CHECK7-NEXT: [[Y1:%.*]] = alloca [88 x i32], align 43153// CHECK7-NEXT: [[X:%.*]] = alloca [77 x i32], align 43154// CHECK7-NEXT: [[Z2:%.*]] = alloca [99 x i32], align 43155// CHECK7-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 43156// CHECK7-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43157// CHECK7-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43158// CHECK7-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 43159// CHECK7-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 43160// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 43161// CHECK7-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 43162// CHECK7-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Y1]], ptr align 4 [[TMP0]], i32 352, i1 false)3163// CHECK7-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [99 x i32], ptr [[Z2]], i32 0, i32 03164// CHECK7-NEXT: [[TMP2:%.*]] = getelementptr i32, ptr [[ARRAY_BEGIN]], i32 993165// CHECK7-NEXT: [[OMP_ARRAYINIT_ISEMPTY:%.*]] = icmp eq ptr [[ARRAY_BEGIN]], [[TMP2]]3166// CHECK7-NEXT: br i1 [[OMP_ARRAYINIT_ISEMPTY]], label [[OMP_ARRAYINIT_DONE:%.*]], label [[OMP_ARRAYINIT_BODY:%.*]]3167// CHECK7: omp.arrayinit.body:3168// CHECK7-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYINIT_BODY]] ]3169// CHECK7-NEXT: store i32 0, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 43170// CHECK7-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 13171// CHECK7-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP2]]3172// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYINIT_DONE]], label [[OMP_ARRAYINIT_BODY]]3173// CHECK7: omp.arrayinit.done:3174// CHECK7-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i32 0, i32 03175// CHECK7-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 43176// CHECK7-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43177// CHECK7-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 43178// CHECK7-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i32 4, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)3179// CHECK7-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [3180// CHECK7-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]3181// CHECK7-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]3182// CHECK7-NEXT: ]3183// CHECK7: .omp.reduction.case1:3184// CHECK7-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP1]], i32 993185// CHECK7-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP1]], [[TMP7]]3186// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE6:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]3187// CHECK7: omp.arraycpy.body:3188// CHECK7-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]3189// CHECK7-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST3:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT4:%.*]], [[OMP_ARRAYCPY_BODY]] ]3190// CHECK7-NEXT: [[TMP8:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 43191// CHECK7-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 43192// CHECK7-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]3193// CHECK7-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 43194// CHECK7-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT4]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], i32 13195// CHECK7-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 13196// CHECK7-NEXT: [[OMP_ARRAYCPY_DONE5:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT4]], [[TMP7]]3197// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_DONE5]], label [[OMP_ARRAYCPY_DONE6]], label [[OMP_ARRAYCPY_BODY]]3198// CHECK7: omp.arraycpy.done6:3199// CHECK7-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)3200// CHECK7-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]3201// CHECK7: .omp.reduction.case2:3202// CHECK7-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr [[TMP1]], i32 993203// CHECK7-NEXT: [[OMP_ARRAYCPY_ISEMPTY7:%.*]] = icmp eq ptr [[TMP1]], [[TMP10]]3204// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY7]], label [[OMP_ARRAYCPY_DONE14:%.*]], label [[OMP_ARRAYCPY_BODY8:%.*]]3205// CHECK7: omp.arraycpy.body8:3206// CHECK7-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST9:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT12:%.*]], [[OMP_ARRAYCPY_BODY8]] ]3207// CHECK7-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST10:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT11:%.*]], [[OMP_ARRAYCPY_BODY8]] ]3208// CHECK7-NEXT: [[TMP11:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], align 43209// CHECK7-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 [[TMP11]] monotonic, align 43210// CHECK7-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT11]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 13211// CHECK7-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT12]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], i32 13212// CHECK7-NEXT: [[OMP_ARRAYCPY_DONE13:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT11]], [[TMP10]]3213// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_DONE13]], label [[OMP_ARRAYCPY_DONE14]], label [[OMP_ARRAYCPY_BODY8]]3214// CHECK7: omp.arraycpy.done14:3215// CHECK7-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)3216// CHECK7-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]3217// CHECK7: .omp.reduction.default:3218// CHECK7-NEXT: ret void3219//3220//3221// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l63.omp_outlined.omp.reduction.reduction_func3222// CHECK7-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR2]] {3223// CHECK7-NEXT: entry:3224// CHECK7-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 43225// CHECK7-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 43226// CHECK7-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 43227// CHECK7-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 43228// CHECK7-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 43229// CHECK7-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 43230// CHECK7-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i32 0, i32 03231// CHECK7-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 43232// CHECK7-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i32 0, i32 03233// CHECK7-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 43234// CHECK7-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP7]], i32 993235// CHECK7-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP7]], [[TMP8]]3236// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE2:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]3237// CHECK7: omp.arraycpy.body:3238// CHECK7-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[TMP5]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]3239// CHECK7-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[TMP7]], [[ENTRY]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]3240// CHECK7-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 43241// CHECK7-NEXT: [[TMP10:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 43242// CHECK7-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]3243// CHECK7-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 43244// CHECK7-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 13245// CHECK7-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 13246// CHECK7-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP8]]3247// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYCPY_DONE2]], label [[OMP_ARRAYCPY_BODY]]3248// CHECK7: omp.arraycpy.done2:3249// CHECK7-NEXT: ret void3250//3251//3252// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l653253// CHECK7-SAME: (ptr noalias noundef [[DYN_PTR:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR0]] {3254// CHECK7-NEXT: entry:3255// CHECK7-NEXT: [[DYN_PTR_ADDR:%.*]] = alloca ptr, align 43256// CHECK7-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 43257// CHECK7-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 43258// CHECK7-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 43259// CHECK7-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 43260// CHECK7-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 43261// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 43262// CHECK7-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 43263// CHECK7-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB1]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined, ptr [[TMP0]], ptr [[TMP1]])3264// CHECK7-NEXT: ret void3265//3266//3267// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined3268// CHECK7-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(352) [[Y:%.*]], ptr noundef nonnull align 4 dereferenceable(396) [[Z:%.*]]) #[[ATTR0]] {3269// CHECK7-NEXT: entry:3270// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43271// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43272// CHECK7-NEXT: [[Y_ADDR:%.*]] = alloca ptr, align 43273// CHECK7-NEXT: [[Z_ADDR:%.*]] = alloca ptr, align 43274// CHECK7-NEXT: [[Y1:%.*]] = alloca [88 x i32], align 43275// CHECK7-NEXT: [[X:%.*]] = alloca [77 x i32], align 43276// CHECK7-NEXT: [[Z2:%.*]] = alloca [99 x i32], align 43277// CHECK7-NEXT: [[DOTOMP_REDUCTION_RED_LIST:%.*]] = alloca [1 x ptr], align 43278// CHECK7-NEXT: store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43279// CHECK7-NEXT: store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43280// CHECK7-NEXT: store ptr [[Y]], ptr [[Y_ADDR]], align 43281// CHECK7-NEXT: store ptr [[Z]], ptr [[Z_ADDR]], align 43282// CHECK7-NEXT: [[TMP0:%.*]] = load ptr, ptr [[Y_ADDR]], align 43283// CHECK7-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Z_ADDR]], align 43284// CHECK7-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Y1]], ptr align 4 [[TMP0]], i32 352, i1 false)3285// CHECK7-NEXT: [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [99 x i32], ptr [[Z2]], i32 0, i32 03286// CHECK7-NEXT: [[TMP2:%.*]] = getelementptr i32, ptr [[ARRAY_BEGIN]], i32 993287// CHECK7-NEXT: [[OMP_ARRAYINIT_ISEMPTY:%.*]] = icmp eq ptr [[ARRAY_BEGIN]], [[TMP2]]3288// CHECK7-NEXT: br i1 [[OMP_ARRAYINIT_ISEMPTY]], label [[OMP_ARRAYINIT_DONE:%.*]], label [[OMP_ARRAYINIT_BODY:%.*]]3289// CHECK7: omp.arrayinit.body:3290// CHECK7-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYINIT_BODY]] ]3291// CHECK7-NEXT: store i32 0, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 43292// CHECK7-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 13293// CHECK7-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP2]]3294// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYINIT_DONE]], label [[OMP_ARRAYINIT_BODY]]3295// CHECK7: omp.arrayinit.done:3296// CHECK7-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOMP_REDUCTION_RED_LIST]], i32 0, i32 03297// CHECK7-NEXT: store ptr [[Z2]], ptr [[TMP3]], align 43298// CHECK7-NEXT: [[TMP4:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43299// CHECK7-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP4]], align 43300// CHECK7-NEXT: [[TMP6:%.*]] = call i32 @__kmpc_reduce(ptr @[[GLOB2]], i32 [[TMP5]], i32 1, i32 4, ptr [[DOTOMP_REDUCTION_RED_LIST]], ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined.omp.reduction.reduction_func, ptr @.gomp_critical_user_.reduction.var)3301// CHECK7-NEXT: switch i32 [[TMP6]], label [[DOTOMP_REDUCTION_DEFAULT:%.*]] [3302// CHECK7-NEXT: i32 1, label [[DOTOMP_REDUCTION_CASE1:%.*]]3303// CHECK7-NEXT: i32 2, label [[DOTOMP_REDUCTION_CASE2:%.*]]3304// CHECK7-NEXT: ]3305// CHECK7: .omp.reduction.case1:3306// CHECK7-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP1]], i32 993307// CHECK7-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP1]], [[TMP7]]3308// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE6:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]3309// CHECK7: omp.arraycpy.body:3310// CHECK7-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]3311// CHECK7-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST3:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE1]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT4:%.*]], [[OMP_ARRAYCPY_BODY]] ]3312// CHECK7-NEXT: [[TMP8:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 43313// CHECK7-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 43314// CHECK7-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP8]], [[TMP9]]3315// CHECK7-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], align 43316// CHECK7-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT4]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST3]], i32 13317// CHECK7-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 13318// CHECK7-NEXT: [[OMP_ARRAYCPY_DONE5:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT4]], [[TMP7]]3319// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_DONE5]], label [[OMP_ARRAYCPY_DONE6]], label [[OMP_ARRAYCPY_BODY]]3320// CHECK7: omp.arraycpy.done6:3321// CHECK7-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)3322// CHECK7-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]3323// CHECK7: .omp.reduction.case2:3324// CHECK7-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr [[TMP1]], i32 993325// CHECK7-NEXT: [[OMP_ARRAYCPY_ISEMPTY7:%.*]] = icmp eq ptr [[TMP1]], [[TMP10]]3326// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY7]], label [[OMP_ARRAYCPY_DONE14:%.*]], label [[OMP_ARRAYCPY_BODY8:%.*]]3327// CHECK7: omp.arraycpy.body8:3328// CHECK7-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST9:%.*]] = phi ptr [ [[Z2]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT12:%.*]], [[OMP_ARRAYCPY_BODY8]] ]3329// CHECK7-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST10:%.*]] = phi ptr [ [[TMP1]], [[DOTOMP_REDUCTION_CASE2]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT11:%.*]], [[OMP_ARRAYCPY_BODY8]] ]3330// CHECK7-NEXT: [[TMP11:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], align 43331// CHECK7-NEXT: [[TMP12:%.*]] = atomicrmw add ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 [[TMP11]] monotonic, align 43332// CHECK7-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT11]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST10]], i32 13333// CHECK7-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT12]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST9]], i32 13334// CHECK7-NEXT: [[OMP_ARRAYCPY_DONE13:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT11]], [[TMP10]]3335// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_DONE13]], label [[OMP_ARRAYCPY_DONE14]], label [[OMP_ARRAYCPY_BODY8]]3336// CHECK7: omp.arraycpy.done14:3337// CHECK7-NEXT: call void @__kmpc_end_reduce(ptr @[[GLOB2]], i32 [[TMP5]], ptr @.gomp_critical_user_.reduction.var)3338// CHECK7-NEXT: br label [[DOTOMP_REDUCTION_DEFAULT]]3339// CHECK7: .omp.reduction.default:3340// CHECK7-NEXT: ret void3341//3342//3343// CHECK7-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z8mapArrayv_l65.omp_outlined.omp.reduction.reduction_func3344// CHECK7-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]]) #[[ATTR2]] {3345// CHECK7-NEXT: entry:3346// CHECK7-NEXT: [[DOTADDR:%.*]] = alloca ptr, align 43347// CHECK7-NEXT: [[DOTADDR1:%.*]] = alloca ptr, align 43348// CHECK7-NEXT: store ptr [[TMP0]], ptr [[DOTADDR]], align 43349// CHECK7-NEXT: store ptr [[TMP1]], ptr [[DOTADDR1]], align 43350// CHECK7-NEXT: [[TMP2:%.*]] = load ptr, ptr [[DOTADDR]], align 43351// CHECK7-NEXT: [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 43352// CHECK7-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP3]], i32 0, i32 03353// CHECK7-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 43354// CHECK7-NEXT: [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[TMP2]], i32 0, i32 03355// CHECK7-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 43356// CHECK7-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP7]], i32 993357// CHECK7-NEXT: [[OMP_ARRAYCPY_ISEMPTY:%.*]] = icmp eq ptr [[TMP7]], [[TMP8]]3358// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_ISEMPTY]], label [[OMP_ARRAYCPY_DONE2:%.*]], label [[OMP_ARRAYCPY_BODY:%.*]]3359// CHECK7: omp.arraycpy.body:3360// CHECK7-NEXT: [[OMP_ARRAYCPY_SRCELEMENTPAST:%.*]] = phi ptr [ [[TMP5]], [[ENTRY:%.*]] ], [ [[OMP_ARRAYCPY_SRC_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]3361// CHECK7-NEXT: [[OMP_ARRAYCPY_DESTELEMENTPAST:%.*]] = phi ptr [ [[TMP7]], [[ENTRY]] ], [ [[OMP_ARRAYCPY_DEST_ELEMENT:%.*]], [[OMP_ARRAYCPY_BODY]] ]3362// CHECK7-NEXT: [[TMP9:%.*]] = load i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 43363// CHECK7-NEXT: [[TMP10:%.*]] = load i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], align 43364// CHECK7-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]3365// CHECK7-NEXT: store i32 [[ADD]], ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], align 43366// CHECK7-NEXT: [[OMP_ARRAYCPY_DEST_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_DESTELEMENTPAST]], i32 13367// CHECK7-NEXT: [[OMP_ARRAYCPY_SRC_ELEMENT]] = getelementptr i32, ptr [[OMP_ARRAYCPY_SRCELEMENTPAST]], i32 13368// CHECK7-NEXT: [[OMP_ARRAYCPY_DONE:%.*]] = icmp eq ptr [[OMP_ARRAYCPY_DEST_ELEMENT]], [[TMP8]]3369// CHECK7-NEXT: br i1 [[OMP_ARRAYCPY_DONE]], label [[OMP_ARRAYCPY_DONE2]], label [[OMP_ARRAYCPY_BODY]]3370// CHECK7: omp.arraycpy.done2:3371// CHECK7-NEXT: ret void3372//3373