brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.6 KiB · b366f33 Raw
279 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --filter-out-after "getelem.*kernel" --filter-out "= alloca.*" --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _ --global-value-regex "\.offload_.*" --global-hex-value-regex ".offload_maptypes.*" --version 52// 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 10struct S {11  short x;12  int y;13  int *p;14};15 16void f1() {17  S s, *ps;18  // &ps, &ps, sizeof(ps), TO | PARAM19  #pragma omp target map(to: ps)20    ps->y = 5;21}22 23void f2() {24  S s, *ps;25  // &ps[0], &ps->y, sizeof(ps->y), TO | PARAM26  #pragma omp target map(to: ps->y)27    ps->y = 6;28}29 30void f3() {31  S s, *ps;32  // &ps[0], &ps[0], sizeof(ps[0]), PARAM | ALLOC33  // &ps, &ps, sizeof(ps), TO | MEMBER_OF(1)34  // &ps[0], &ps->y, sizeof(ps->y), TO | MEMBER_OF(1)35  #pragma omp target map(to: ps, ps->y)36    ps->y = 7;37}38 39void f4() {40  S s, *ps;41  // &ps[0], &ps[0], sizeof(ps[0]), PARAM | ALLOC42  // &ps[0], &ps->y, sizeof(ps->y), TO | MEMBER_OF(1)43  // &ps, &ps, sizeof(ps), TO | MEMBER_OF(1)44  #pragma omp target map(to: ps->y, ps)45    ps->y = 8;46}47 48void f5() {49  S s, *ps;50  // &ps[0], &ps[0], sizeof(ps[0]), PARAM | ALLOC51  // &ps[0], &ps->y, sizeof(ps->y), TO | MEMBER_OF(1)52  // &ps, &ps, sizeof(ps), TO | MEMBER_OF(1)53  // &ps[0], &ps->x, sizeof(ps->x), TO | MEMBER_OF(1)54  #pragma omp target map(to: ps->y, ps, ps->x)55    ps->y = 9;56}57 58#endif59//.60// CHECK: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 8]61// CHECK: @.offload_maptypes = private unnamed_addr constant [1 x i64] [i64 [[#0x21]]]62// CHECK: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4]63// CHECK: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x21]]]64// CHECK: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 8, i64 4]65// CHECK: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x20]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]]]66// CHECK: @.offload_sizes.5 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 8]67// CHECK: @.offload_maptypes.6 = private unnamed_addr constant [3 x i64] [i64 [[#0x20]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]]]68// CHECK: @.offload_sizes.7 = private unnamed_addr constant [4 x i64] [i64 0, i64 4, i64 8, i64 2]69// CHECK: @.offload_maptypes.8 = private unnamed_addr constant [4 x i64] [i64 [[#0x20]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]]]70//.71// CHECK-LABEL: define dso_local void @_Z2f1v(72// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {73// CHECK:  [[ENTRY:.*:]]74// CHECK:    [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 075// CHECK:    store ptr [[PS:%.*]], ptr [[TMP0]], align 876// CHECK:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 077// CHECK:    store ptr [[PS]], ptr [[TMP1]], align 878// CHECK:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 079// CHECK:    store ptr null, ptr [[TMP2]], align 880// CHECK:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 081// CHECK:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 082// CHECK:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 083//84//85// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f1v_l19(86// CHECK-SAME: ptr noundef nonnull align 8 dereferenceable(8) [[PS:%.*]]) #[[ATTR1:[0-9]+]] {87// CHECK:  [[ENTRY:.*:]]88// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 889// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8, !nonnull [[META13:![0-9]+]], !align [[META14:![0-9]+]]90// CHECK:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 891// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP1]], i32 0, i32 192// CHECK:    store i32 5, ptr [[Y]], align 493// CHECK:    ret void94//95//96// CHECK-LABEL: define dso_local void @_Z2f2v(97// CHECK-SAME: ) #[[ATTR0]] {98// CHECK:  [[ENTRY:.*:]]99// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS:%.*]], align 8100// CHECK:    [[TMP1:%.*]] = load ptr, ptr [[PS]], align 8101// CHECK:    [[TMP2:%.*]] = load ptr, ptr [[PS]], align 8102// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP2]], i32 0, i32 1103// CHECK:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 0104// CHECK:    store ptr [[TMP1]], ptr [[TMP3]], align 8105// CHECK:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 0106// CHECK:    store ptr [[Y]], ptr [[TMP4]], align 8107// CHECK:    [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 0108// CHECK:    store ptr null, ptr [[TMP5]], align 8109// CHECK:    [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0110// CHECK:    [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0111// CHECK:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 0112//113//114// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f2v_l26(115// CHECK-SAME: ptr noundef [[PS:%.*]]) #[[ATTR1]] {116// CHECK:  [[ENTRY:.*:]]117// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 8118// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8119// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP0]], i32 0, i32 1120// CHECK:    store i32 6, ptr [[Y]], align 4121// CHECK:    ret void122//123//124// CHECK-LABEL: define dso_local void @_Z2f3v(125// CHECK-SAME: ) #[[ATTR0]] {126// CHECK:  [[ENTRY:.*:]]127// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS:%.*]], align 8128// CHECK:    [[TMP1:%.*]] = load ptr, ptr [[PS]], align 8129// CHECK:    [[TMP2:%.*]] = load ptr, ptr [[PS]], align 8130// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP2]], i32 0, i32 1131// CHECK:    [[TMP3:%.*]] = getelementptr [[STRUCT_S]], ptr [[TMP1]], i32 1132// CHECK:    [[TMP4:%.*]] = ptrtoint ptr [[TMP3]] to i64133// CHECK:    [[TMP5:%.*]] = ptrtoint ptr [[TMP1]] to i64134// CHECK:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]135// CHECK:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)136// CHECK:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES:%.*]], ptr align 8 @.offload_sizes.3, i64 24, i1 false)137// CHECK:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 0138// CHECK:    store ptr [[TMP1]], ptr [[TMP8]], align 8139// CHECK:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 0140// CHECK:    store ptr [[TMP1]], ptr [[TMP9]], align 8141// CHECK:    [[TMP10:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0142// CHECK:    store i64 [[TMP7]], ptr [[TMP10]], align 8143// CHECK:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 0144// CHECK:    store ptr null, ptr [[TMP11]], align 8145// CHECK:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1146// CHECK:    store ptr [[PS]], ptr [[TMP12]], align 8147// CHECK:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1148// CHECK:    store ptr [[PS]], ptr [[TMP13]], align 8149// CHECK:    [[TMP14:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1150// CHECK:    store ptr null, ptr [[TMP14]], align 8151// CHECK:    [[TMP15:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2152// CHECK:    store ptr [[TMP1]], ptr [[TMP15]], align 8153// CHECK:    [[TMP16:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2154// CHECK:    store ptr [[Y]], ptr [[TMP16]], align 8155// CHECK:    [[TMP17:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2156// CHECK:    store ptr null, ptr [[TMP17]], align 8157// CHECK:    [[TMP18:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0158// CHECK:    [[TMP19:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0159// CHECK:    [[TMP20:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0160// CHECK:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 0161//162//163// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f3v_l35(164// CHECK-SAME: ptr noundef [[PS:%.*]]) #[[ATTR1]] {165// CHECK:  [[ENTRY:.*:]]166// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 8167// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8168// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP0]], i32 0, i32 1169// CHECK:    store i32 7, ptr [[Y]], align 4170// CHECK:    ret void171//172//173// CHECK-LABEL: define dso_local void @_Z2f4v(174// CHECK-SAME: ) #[[ATTR0]] {175// CHECK:  [[ENTRY:.*:]]176// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS:%.*]], align 8177// CHECK:    [[TMP1:%.*]] = load ptr, ptr [[PS]], align 8178// CHECK:    [[TMP2:%.*]] = load ptr, ptr [[PS]], align 8179// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP2]], i32 0, i32 1180// CHECK:    [[TMP3:%.*]] = getelementptr [[STRUCT_S]], ptr [[TMP1]], i32 1181// CHECK:    [[TMP4:%.*]] = ptrtoint ptr [[TMP3]] to i64182// CHECK:    [[TMP5:%.*]] = ptrtoint ptr [[TMP1]] to i64183// CHECK:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]184// CHECK:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)185// CHECK:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES:%.*]], ptr align 8 @.offload_sizes.5, i64 24, i1 false)186// CHECK:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 0187// CHECK:    store ptr [[TMP1]], ptr [[TMP8]], align 8188// CHECK:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 0189// CHECK:    store ptr [[TMP1]], ptr [[TMP9]], align 8190// CHECK:    [[TMP10:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0191// CHECK:    store i64 [[TMP7]], ptr [[TMP10]], align 8192// CHECK:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 0193// CHECK:    store ptr null, ptr [[TMP11]], align 8194// CHECK:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1195// CHECK:    store ptr [[TMP1]], ptr [[TMP12]], align 8196// CHECK:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1197// CHECK:    store ptr [[Y]], ptr [[TMP13]], align 8198// CHECK:    [[TMP14:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1199// CHECK:    store ptr null, ptr [[TMP14]], align 8200// CHECK:    [[TMP15:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2201// CHECK:    store ptr [[PS]], ptr [[TMP15]], align 8202// CHECK:    [[TMP16:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2203// CHECK:    store ptr [[PS]], ptr [[TMP16]], align 8204// CHECK:    [[TMP17:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2205// CHECK:    store ptr null, ptr [[TMP17]], align 8206// CHECK:    [[TMP18:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0207// CHECK:    [[TMP19:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0208// CHECK:    [[TMP20:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0209// CHECK:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 0210//211//212// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f4v_l44(213// CHECK-SAME: ptr noundef [[PS:%.*]]) #[[ATTR1]] {214// CHECK:  [[ENTRY:.*:]]215// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 8216// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8217// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP0]], i32 0, i32 1218// CHECK:    store i32 8, ptr [[Y]], align 4219// CHECK:    ret void220//221//222// CHECK-LABEL: define dso_local void @_Z2f5v(223// CHECK-SAME: ) #[[ATTR0]] {224// CHECK:  [[ENTRY:.*:]]225// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS:%.*]], align 8226// CHECK:    [[TMP1:%.*]] = load ptr, ptr [[PS]], align 8227// CHECK:    [[TMP2:%.*]] = load ptr, ptr [[PS]], align 8228// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP2]], i32 0, i32 1229// CHECK:    [[TMP3:%.*]] = load ptr, ptr [[PS]], align 8230// CHECK:    [[TMP4:%.*]] = load ptr, ptr [[PS]], align 8231// CHECK:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[TMP4]], i32 0, i32 0232// CHECK:    [[TMP5:%.*]] = getelementptr [[STRUCT_S]], ptr [[TMP1]], i32 1233// CHECK:    [[TMP6:%.*]] = ptrtoint ptr [[TMP5]] to i64234// CHECK:    [[TMP7:%.*]] = ptrtoint ptr [[TMP1]] to i64235// CHECK:    [[TMP8:%.*]] = sub i64 [[TMP6]], [[TMP7]]236// CHECK:    [[TMP9:%.*]] = sdiv exact i64 [[TMP8]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)237// CHECK:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES:%.*]], ptr align 8 @.offload_sizes.7, i64 32, i1 false)238// CHECK:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 0239// CHECK:    store ptr [[TMP1]], ptr [[TMP10]], align 8240// CHECK:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 0241// CHECK:    store ptr [[TMP1]], ptr [[TMP11]], align 8242// CHECK:    [[TMP12:%.*]] = getelementptr inbounds [4 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0243// CHECK:    store i64 [[TMP9]], ptr [[TMP12]], align 8244// CHECK:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 0245// CHECK:    store ptr null, ptr [[TMP13]], align 8246// CHECK:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1247// CHECK:    store ptr [[TMP1]], ptr [[TMP14]], align 8248// CHECK:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1249// CHECK:    store ptr [[Y]], ptr [[TMP15]], align 8250// CHECK:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1251// CHECK:    store ptr null, ptr [[TMP16]], align 8252// CHECK:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2253// CHECK:    store ptr [[PS]], ptr [[TMP17]], align 8254// CHECK:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2255// CHECK:    store ptr [[PS]], ptr [[TMP18]], align 8256// CHECK:    [[TMP19:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2257// CHECK:    store ptr null, ptr [[TMP19]], align 8258// CHECK:    [[TMP20:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3259// CHECK:    store ptr [[TMP3]], ptr [[TMP20]], align 8260// CHECK:    [[TMP21:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 3261// CHECK:    store ptr [[X]], ptr [[TMP21]], align 8262// CHECK:    [[TMP22:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3263// CHECK:    store ptr null, ptr [[TMP22]], align 8264// CHECK:    [[TMP23:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0265// CHECK:    [[TMP24:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0266// CHECK:    [[TMP25:%.*]] = getelementptr inbounds [4 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0267// CHECK:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 0268//269//270// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f5v_l54(271// CHECK-SAME: ptr noundef [[PS:%.*]]) #[[ATTR1]] {272// CHECK:  [[ENTRY:.*:]]273// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 8274// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8275// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP0]], i32 0, i32 1276// CHECK:    store i32 9, ptr [[Y]], align 4277// CHECK:    ret void278//279