brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.3 KiB · e61fc72 Raw
306 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _2// RUN: %clang_cc1 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s3// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s4// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s5 6// expected-no-diagnostics7#ifndef HEADER8#define HEADER9 10extern void *malloc (int __size) throw () __attribute__ ((__malloc__));11 12void foo(int **t1d)13{14  *t1d = (int *) malloc(3 * sizeof(int));15  for (int j=0; j < 3; j++)16    (*t1d)[j] = 1;17  #pragma omp target map(to: (*t1d)[0:3])18    (*t1d)[2] = 2;19  #pragma omp target map(tofrom : (**t1d))20    (*t1d)[0] = 3;21  int a = 0, b = 0;22  #pragma omp target map(tofrom : (*(*(t1d+a)+b)))23    *(*(t1d+a)+b) = 4;24}25 26#endif27 28// CHECK-LABEL: define {{[^@]+}}@_Z3fooPPi29// CHECK-SAME: (ptr noundef [[T1D:%.*]]) #[[ATTR0:[0-9]+]] {30// CHECK-NEXT:  entry:31// CHECK-NEXT:    [[T1D_ADDR:%.*]] = alloca ptr, align 832// CHECK-NEXT:    [[J:%.*]] = alloca i32, align 433// CHECK-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 834// CHECK-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 835// CHECK-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 836// CHECK-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 837// CHECK-NEXT:    [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 838// CHECK-NEXT:    [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 839// CHECK-NEXT:    [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 840// CHECK-NEXT:    [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 841// CHECK-NEXT:    [[A:%.*]] = alloca i32, align 442// CHECK-NEXT:    [[B:%.*]] = alloca i32, align 443// CHECK-NEXT:    [[A_CASTED:%.*]] = alloca i64, align 844// CHECK-NEXT:    [[B_CASTED:%.*]] = alloca i64, align 845// CHECK-NEXT:    [[DOTOFFLOAD_BASEPTRS12:%.*]] = alloca [4 x ptr], align 846// CHECK-NEXT:    [[DOTOFFLOAD_PTRS13:%.*]] = alloca [4 x ptr], align 847// CHECK-NEXT:    [[DOTOFFLOAD_MAPPERS14:%.*]] = alloca [4 x ptr], align 848// CHECK-NEXT:    [[KERNEL_ARGS15:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 849// CHECK-NEXT:    store ptr [[T1D]], ptr [[T1D_ADDR]], align 850// CHECK-NEXT:    [[CALL:%.*]] = call noalias noundef ptr @_Z6malloci(i32 noundef signext 12) #[[ATTR3:[0-9]+]]51// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[T1D_ADDR]], align 852// CHECK-NEXT:    store ptr [[CALL]], ptr [[TMP0]], align 853// CHECK-NEXT:    store i32 0, ptr [[J]], align 454// CHECK-NEXT:    br label [[FOR_COND:%.*]]55// CHECK:       for.cond:56// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[J]], align 457// CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[TMP1]], 358// CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]59// CHECK:       for.body:60// CHECK-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[T1D_ADDR]], align 861// CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 862// CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[J]], align 463// CHECK-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP4]] to i6464// CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP3]], i64 [[IDXPROM]]65// CHECK-NEXT:    store i32 1, ptr [[ARRAYIDX]], align 466// CHECK-NEXT:    br label [[FOR_INC:%.*]]67// CHECK:       for.inc:68// CHECK-NEXT:    [[TMP5:%.*]] = load i32, ptr [[J]], align 469// CHECK-NEXT:    [[INC:%.*]] = add nsw i32 [[TMP5]], 170// CHECK-NEXT:    store i32 [[INC]], ptr [[J]], align 471// CHECK-NEXT:    br label [[FOR_COND]], !llvm.loop [[LOOP6:![0-9]+]]72// CHECK:       for.end:73// CHECK-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[T1D_ADDR]], align 874// CHECK-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[T1D_ADDR]], align 875// CHECK-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[T1D_ADDR]], align 876// CHECK-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[T1D_ADDR]], align 877// CHECK-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 878// CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP10]], i64 079// CHECK-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 080// CHECK-NEXT:    store ptr [[TMP7]], ptr [[TMP11]], align 881// CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 082// CHECK-NEXT:    store ptr [[TMP8]], ptr [[TMP12]], align 883// CHECK-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 084// CHECK-NEXT:    store ptr null, ptr [[TMP13]], align 885// CHECK-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 186// CHECK-NEXT:    store ptr [[TMP8]], ptr [[TMP14]], align 887// CHECK-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 188// CHECK-NEXT:    store ptr [[ARRAYIDX1]], ptr [[TMP15]], align 889// CHECK-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 190// CHECK-NEXT:    store ptr null, ptr [[TMP16]], align 891// CHECK-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 092// CHECK-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 093// CHECK-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 094// CHECK-NEXT:    store i32 3, ptr [[TMP19]], align 495// CHECK-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 196// CHECK-NEXT:    store i32 2, ptr [[TMP20]], align 497// CHECK-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 298// CHECK-NEXT:    store ptr [[TMP17]], ptr [[TMP21]], align 899// CHECK-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3100// CHECK-NEXT:    store ptr [[TMP18]], ptr [[TMP22]], align 8101// CHECK-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4102// CHECK-NEXT:    store ptr @.offload_sizes, ptr [[TMP23]], align 8103// CHECK-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5104// CHECK-NEXT:    store ptr @.offload_maptypes, ptr [[TMP24]], align 8105// CHECK-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6106// CHECK-NEXT:    store ptr null, ptr [[TMP25]], align 8107// CHECK-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7108// CHECK-NEXT:    store ptr null, ptr [[TMP26]], align 8109// CHECK-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8110// CHECK-NEXT:    store i64 0, ptr [[TMP27]], align 8111// CHECK-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9112// CHECK-NEXT:    store i64 0, ptr [[TMP28]], align 8113// CHECK-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10114// CHECK-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP29]], align 4115// CHECK-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11116// CHECK-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP30]], align 4117// CHECK-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12118// CHECK-NEXT:    store i32 0, ptr [[TMP31]], align 4119// CHECK-NEXT:    [[TMP32:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPPi_l17.region_id, ptr [[KERNEL_ARGS]])120// CHECK-NEXT:    [[TMP33:%.*]] = icmp ne i32 [[TMP32]], 0121// CHECK-NEXT:    br i1 [[TMP33]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]122// CHECK:       omp_offload.failed:123// CHECK-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPPi_l17(ptr [[TMP6]]) #[[ATTR3]]124// CHECK-NEXT:    br label [[OMP_OFFLOAD_CONT]]125// CHECK:       omp_offload.cont:126// CHECK-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8127// CHECK-NEXT:    [[TMP35:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8128// CHECK-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8129// CHECK-NEXT:    [[TMP37:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8130// CHECK-NEXT:    [[TMP38:%.*]] = load ptr, ptr [[TMP37]], align 8131// CHECK-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0132// CHECK-NEXT:    store ptr [[TMP35]], ptr [[TMP39]], align 8133// CHECK-NEXT:    [[TMP40:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0134// CHECK-NEXT:    store ptr [[TMP36]], ptr [[TMP40]], align 8135// CHECK-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 0136// CHECK-NEXT:    store ptr null, ptr [[TMP41]], align 8137// CHECK-NEXT:    [[TMP42:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1138// CHECK-NEXT:    store ptr [[TMP36]], ptr [[TMP42]], align 8139// CHECK-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1140// CHECK-NEXT:    store ptr [[TMP38]], ptr [[TMP43]], align 8141// CHECK-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 1142// CHECK-NEXT:    store ptr null, ptr [[TMP44]], align 8143// CHECK-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0144// CHECK-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0145// CHECK-NEXT:    [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0146// CHECK-NEXT:    store i32 3, ptr [[TMP47]], align 4147// CHECK-NEXT:    [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1148// CHECK-NEXT:    store i32 2, ptr [[TMP48]], align 4149// CHECK-NEXT:    [[TMP49:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2150// CHECK-NEXT:    store ptr [[TMP45]], ptr [[TMP49]], align 8151// CHECK-NEXT:    [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3152// CHECK-NEXT:    store ptr [[TMP46]], ptr [[TMP50]], align 8153// CHECK-NEXT:    [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4154// CHECK-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP51]], align 8155// CHECK-NEXT:    [[TMP52:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5156// CHECK-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP52]], align 8157// CHECK-NEXT:    [[TMP53:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6158// CHECK-NEXT:    store ptr null, ptr [[TMP53]], align 8159// CHECK-NEXT:    [[TMP54:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7160// CHECK-NEXT:    store ptr null, ptr [[TMP54]], align 8161// CHECK-NEXT:    [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8162// CHECK-NEXT:    store i64 0, ptr [[TMP55]], align 8163// CHECK-NEXT:    [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9164// CHECK-NEXT:    store i64 0, ptr [[TMP56]], align 8165// CHECK-NEXT:    [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10166// CHECK-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP57]], align 4167// CHECK-NEXT:    [[TMP58:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11168// CHECK-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP58]], align 4169// CHECK-NEXT:    [[TMP59:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12170// CHECK-NEXT:    store i32 0, ptr [[TMP59]], align 4171// CHECK-NEXT:    [[TMP60:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPPi_l19.region_id, ptr [[KERNEL_ARGS5]])172// CHECK-NEXT:    [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0173// CHECK-NEXT:    br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]174// CHECK:       omp_offload.failed6:175// CHECK-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPPi_l19(ptr [[TMP34]]) #[[ATTR3]]176// CHECK-NEXT:    br label [[OMP_OFFLOAD_CONT7]]177// CHECK:       omp_offload.cont7:178// CHECK-NEXT:    store i32 0, ptr [[A]], align 4179// CHECK-NEXT:    store i32 0, ptr [[B]], align 4180// CHECK-NEXT:    [[TMP62:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8181// CHECK-NEXT:    [[TMP63:%.*]] = load i32, ptr [[A]], align 4182// CHECK-NEXT:    store i32 [[TMP63]], ptr [[A_CASTED]], align 4183// CHECK-NEXT:    [[TMP64:%.*]] = load i64, ptr [[A_CASTED]], align 8184// CHECK-NEXT:    [[TMP65:%.*]] = load i32, ptr [[B]], align 4185// CHECK-NEXT:    store i32 [[TMP65]], ptr [[B_CASTED]], align 4186// CHECK-NEXT:    [[TMP66:%.*]] = load i64, ptr [[B_CASTED]], align 8187// CHECK-NEXT:    [[TMP67:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8188// CHECK-NEXT:    [[TMP68:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8189// CHECK-NEXT:    [[TMP69:%.*]] = load i32, ptr [[A]], align 4190// CHECK-NEXT:    [[IDX_EXT:%.*]] = sext i32 [[TMP69]] to i64191// CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds ptr, ptr [[TMP68]], i64 [[IDX_EXT]]192// CHECK-NEXT:    [[TMP70:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8193// CHECK-NEXT:    [[TMP71:%.*]] = load i32, ptr [[A]], align 4194// CHECK-NEXT:    [[IDX_EXT8:%.*]] = sext i32 [[TMP71]] to i64195// CHECK-NEXT:    [[ADD_PTR9:%.*]] = getelementptr inbounds ptr, ptr [[TMP70]], i64 [[IDX_EXT8]]196// CHECK-NEXT:    [[TMP72:%.*]] = load ptr, ptr [[ADD_PTR9]], align 8197// CHECK-NEXT:    [[TMP73:%.*]] = load i32, ptr [[B]], align 4198// CHECK-NEXT:    [[IDX_EXT10:%.*]] = sext i32 [[TMP73]] to i64199// CHECK-NEXT:    [[ADD_PTR11:%.*]] = getelementptr inbounds i32, ptr [[TMP72]], i64 [[IDX_EXT10]]200// CHECK-NEXT:    [[TMP74:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS12]], i32 0, i32 0201// CHECK-NEXT:    store ptr [[TMP67]], ptr [[TMP74]], align 8202// CHECK-NEXT:    [[TMP75:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS13]], i32 0, i32 0203// CHECK-NEXT:    store ptr [[ADD_PTR]], ptr [[TMP75]], align 8204// CHECK-NEXT:    [[TMP76:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS14]], i64 0, i64 0205// CHECK-NEXT:    store ptr null, ptr [[TMP76]], align 8206// CHECK-NEXT:    [[TMP77:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS12]], i32 0, i32 1207// CHECK-NEXT:    store ptr [[ADD_PTR]], ptr [[TMP77]], align 8208// CHECK-NEXT:    [[TMP78:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS13]], i32 0, i32 1209// CHECK-NEXT:    store ptr [[ADD_PTR11]], ptr [[TMP78]], align 8210// CHECK-NEXT:    [[TMP79:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS14]], i64 0, i64 1211// CHECK-NEXT:    store ptr null, ptr [[TMP79]], align 8212// CHECK-NEXT:    [[TMP80:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS12]], i32 0, i32 2213// CHECK-NEXT:    store i64 [[TMP64]], ptr [[TMP80]], align 8214// CHECK-NEXT:    [[TMP81:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS13]], i32 0, i32 2215// CHECK-NEXT:    store i64 [[TMP64]], ptr [[TMP81]], align 8216// CHECK-NEXT:    [[TMP82:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS14]], i64 0, i64 2217// CHECK-NEXT:    store ptr null, ptr [[TMP82]], align 8218// CHECK-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS12]], i32 0, i32 3219// CHECK-NEXT:    store i64 [[TMP66]], ptr [[TMP83]], align 8220// CHECK-NEXT:    [[TMP84:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS13]], i32 0, i32 3221// CHECK-NEXT:    store i64 [[TMP66]], ptr [[TMP84]], align 8222// CHECK-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS14]], i64 0, i64 3223// CHECK-NEXT:    store ptr null, ptr [[TMP85]], align 8224// CHECK-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS12]], i32 0, i32 0225// CHECK-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS13]], i32 0, i32 0226// CHECK-NEXT:    [[TMP88:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 0227// CHECK-NEXT:    store i32 3, ptr [[TMP88]], align 4228// CHECK-NEXT:    [[TMP89:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 1229// CHECK-NEXT:    store i32 4, ptr [[TMP89]], align 4230// CHECK-NEXT:    [[TMP90:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 2231// CHECK-NEXT:    store ptr [[TMP86]], ptr [[TMP90]], align 8232// CHECK-NEXT:    [[TMP91:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 3233// CHECK-NEXT:    store ptr [[TMP87]], ptr [[TMP91]], align 8234// CHECK-NEXT:    [[TMP92:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 4235// CHECK-NEXT:    store ptr @.offload_sizes.3, ptr [[TMP92]], align 8236// CHECK-NEXT:    [[TMP93:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 5237// CHECK-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP93]], align 8238// CHECK-NEXT:    [[TMP94:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 6239// CHECK-NEXT:    store ptr null, ptr [[TMP94]], align 8240// CHECK-NEXT:    [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 7241// CHECK-NEXT:    store ptr null, ptr [[TMP95]], align 8242// CHECK-NEXT:    [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 8243// CHECK-NEXT:    store i64 0, ptr [[TMP96]], align 8244// CHECK-NEXT:    [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 9245// CHECK-NEXT:    store i64 0, ptr [[TMP97]], align 8246// CHECK-NEXT:    [[TMP98:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 10247// CHECK-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP98]], align 4248// CHECK-NEXT:    [[TMP99:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 11249// CHECK-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP99]], align 4250// CHECK-NEXT:    [[TMP100:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 12251// CHECK-NEXT:    store i32 0, ptr [[TMP100]], align 4252// CHECK-NEXT:    [[TMP101:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPPi_l22.region_id, ptr [[KERNEL_ARGS15]])253// CHECK-NEXT:    [[TMP102:%.*]] = icmp ne i32 [[TMP101]], 0254// CHECK-NEXT:    br i1 [[TMP102]], label [[OMP_OFFLOAD_FAILED16:%.*]], label [[OMP_OFFLOAD_CONT17:%.*]]255// CHECK:       omp_offload.failed16:256// CHECK-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPPi_l22(ptr [[TMP62]], i64 [[TMP64]], i64 [[TMP66]]) #[[ATTR3]]257// CHECK-NEXT:    br label [[OMP_OFFLOAD_CONT17]]258// CHECK:       omp_offload.cont17:259// CHECK-NEXT:    ret void260//261//262// CHECK-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPPi_l17263// CHECK-SAME: (ptr noundef [[T1D:%.*]]) #[[ATTR2:[0-9]+]] {264// CHECK-NEXT:  entry:265// CHECK-NEXT:    [[T1D_ADDR:%.*]] = alloca ptr, align 8266// CHECK-NEXT:    store ptr [[T1D]], ptr [[T1D_ADDR]], align 8267// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8268// CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8269// CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i64 2270// CHECK-NEXT:    store i32 2, ptr [[ARRAYIDX]], align 4271// CHECK-NEXT:    ret void272//273//274// CHECK-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPPi_l19275// CHECK-SAME: (ptr noundef [[T1D:%.*]]) #[[ATTR2]] {276// CHECK-NEXT:  entry:277// CHECK-NEXT:    [[T1D_ADDR:%.*]] = alloca ptr, align 8278// CHECK-NEXT:    store ptr [[T1D]], ptr [[T1D_ADDR]], align 8279// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8280// CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8281// CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i64 0282// CHECK-NEXT:    store i32 3, ptr [[ARRAYIDX]], align 4283// CHECK-NEXT:    ret void284//285//286// CHECK-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooPPi_l22287// CHECK-SAME: (ptr noundef [[T1D:%.*]], i64 noundef [[A:%.*]], i64 noundef [[B:%.*]]) #[[ATTR2]] {288// CHECK-NEXT:  entry:289// CHECK-NEXT:    [[T1D_ADDR:%.*]] = alloca ptr, align 8290// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 8291// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca i64, align 8292// CHECK-NEXT:    store ptr [[T1D]], ptr [[T1D_ADDR]], align 8293// CHECK-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 8294// CHECK-NEXT:    store i64 [[B]], ptr [[B_ADDR]], align 8295// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[T1D_ADDR]], align 8296// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4297// CHECK-NEXT:    [[IDX_EXT:%.*]] = sext i32 [[TMP1]] to i64298// CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDX_EXT]]299// CHECK-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[ADD_PTR]], align 8300// CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[B_ADDR]], align 4301// CHECK-NEXT:    [[IDX_EXT1:%.*]] = sext i32 [[TMP3]] to i64302// CHECK-NEXT:    [[ADD_PTR2:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i64 [[IDX_EXT1]]303// CHECK-NEXT:    store i32 4, ptr [[ADD_PTR2]], align 4304// CHECK-NEXT:    ret void305//306