brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.5 KiB · 523f88d Raw
276 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 16S s, *ps;17 18void f1() {19  // &ps, &ps, sizeof(ps), TO | PARAM20  #pragma omp target map(to: ps)21    ps->y = 5;22}23 24void f2() {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  // &ps[0], &ps[0], sizeof(ps[0]), PARAM | ALLOC32  // &ps, &ps, sizeof(ps), TO | MEMBER_OF(1)33  // &ps[0], &ps->y, sizeof(ps->y), TO | MEMBER_OF(1)34  #pragma omp target map(to: ps, ps->y)35    ps->y = 7;36}37 38void f4() {39  // &ps[0], &ps[0], sizeof(ps[0]), PARAM | ALLOC40  // &ps[0], &ps->y, sizeof(ps->y), TO | MEMBER_OF(1)41  // &ps, &ps, sizeof(ps), TO | MEMBER_OF(1)42  #pragma omp target map(to: ps->y, ps)43    ps->y = 8;44}45 46void f5() {47  // &ps[0], &ps[0], sizeof(ps[0]), PARAM | ALLOC48  // &ps[0], &ps->y, sizeof(ps->y), TO | MEMBER_OF(1)49  // &ps, &ps, sizeof(ps), TO | MEMBER_OF(1)50  // &ps[0], &ps->x, sizeof(ps->x), TO | MEMBER_OF(1)51  #pragma omp target map(to: ps->y, ps, ps->x)52    ps->y = 9;53}54 55#endif56//.57// CHECK: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 8]58// CHECK: @.offload_maptypes = private unnamed_addr constant [1 x i64] [i64 [[#0x21]]]59// CHECK: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4]60// CHECK: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x21]]]61// CHECK: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 8, i64 4]62// CHECK: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x20]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]]]63// CHECK: @.offload_sizes.5 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 8]64// CHECK: @.offload_maptypes.6 = private unnamed_addr constant [3 x i64] [i64 [[#0x20]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]]]65// CHECK: @.offload_sizes.7 = private unnamed_addr constant [4 x i64] [i64 0, i64 4, i64 8, i64 2]66// CHECK: @.offload_maptypes.8 = private unnamed_addr constant [4 x i64] [i64 [[#0x20]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]], i64 [[#0x1000000000001]]]67//.68// CHECK-LABEL: define dso_local void @_Z2f1v(69// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {70// CHECK:  [[ENTRY:.*:]]71// CHECK:    [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 072// CHECK:    store ptr @ps, ptr [[TMP0]], align 873// CHECK:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 074// CHECK:    store ptr @ps, ptr [[TMP1]], align 875// CHECK:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 076// CHECK:    store ptr null, ptr [[TMP2]], align 877// CHECK:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 078// CHECK:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 079// CHECK:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 080//81//82// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f1v_l20(83// CHECK-SAME: ptr noundef nonnull align 8 dereferenceable(8) [[PS:%.*]]) #[[ATTR1:[0-9]+]] {84// CHECK:  [[ENTRY:.*:]]85// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 886// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8, !nonnull [[META13:![0-9]+]], !align [[META14:![0-9]+]]87// CHECK:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 888// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP1]], i32 0, i32 189// CHECK:    store i32 5, ptr [[Y]], align 490// CHECK:    ret void91//92//93// CHECK-LABEL: define dso_local void @_Z2f2v(94// CHECK-SAME: ) #[[ATTR0]] {95// CHECK:  [[ENTRY:.*:]]96// CHECK:    [[TMP0:%.*]] = load ptr, ptr @ps, align 897// CHECK:    [[TMP1:%.*]] = load ptr, ptr @ps, align 898// CHECK:    [[TMP2:%.*]] = load ptr, ptr @ps, align 899// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP2]], i32 0, i32 1100// CHECK:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 0101// CHECK:    store ptr [[TMP1]], ptr [[TMP3]], align 8102// CHECK:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 0103// CHECK:    store ptr [[Y]], ptr [[TMP4]], align 8104// CHECK:    [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 0105// CHECK:    store ptr null, ptr [[TMP5]], align 8106// CHECK:    [[TMP6:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0107// CHECK:    [[TMP7:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0108// CHECK:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 0109//110//111// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f2v_l26(112// CHECK-SAME: ptr noundef [[PS:%.*]]) #[[ATTR1]] {113// CHECK:  [[ENTRY:.*:]]114// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 8115// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8116// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP0]], i32 0, i32 1117// CHECK:    store i32 6, ptr [[Y]], align 4118// CHECK:    ret void119//120//121// CHECK-LABEL: define dso_local void @_Z2f3v(122// CHECK-SAME: ) #[[ATTR0]] {123// CHECK:  [[ENTRY:.*:]]124// CHECK:    [[TMP0:%.*]] = load ptr, ptr @ps, align 8125// CHECK:    [[TMP1:%.*]] = load ptr, ptr @ps, align 8126// CHECK:    [[TMP2:%.*]] = load ptr, ptr @ps, align 8127// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP2]], i32 0, i32 1128// CHECK:    [[TMP3:%.*]] = getelementptr [[STRUCT_S]], ptr [[TMP1]], i32 1129// CHECK:    [[TMP4:%.*]] = ptrtoint ptr [[TMP3]] to i64130// CHECK:    [[TMP5:%.*]] = ptrtoint ptr [[TMP1]] to i64131// CHECK:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]132// CHECK:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)133// CHECK:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES:%.*]], ptr align 8 @.offload_sizes.3, i64 24, i1 false)134// CHECK:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 0135// CHECK:    store ptr [[TMP1]], ptr [[TMP8]], align 8136// CHECK:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 0137// CHECK:    store ptr [[TMP1]], ptr [[TMP9]], align 8138// CHECK:    [[TMP10:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0139// CHECK:    store i64 [[TMP7]], ptr [[TMP10]], align 8140// CHECK:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 0141// CHECK:    store ptr null, ptr [[TMP11]], align 8142// CHECK:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1143// CHECK:    store ptr @ps, ptr [[TMP12]], align 8144// CHECK:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1145// CHECK:    store ptr @ps, ptr [[TMP13]], align 8146// CHECK:    [[TMP14:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1147// CHECK:    store ptr null, ptr [[TMP14]], align 8148// CHECK:    [[TMP15:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2149// CHECK:    store ptr [[TMP1]], ptr [[TMP15]], align 8150// CHECK:    [[TMP16:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2151// CHECK:    store ptr [[Y]], ptr [[TMP16]], align 8152// CHECK:    [[TMP17:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2153// CHECK:    store ptr null, ptr [[TMP17]], align 8154// CHECK:    [[TMP18:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0155// CHECK:    [[TMP19:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0156// CHECK:    [[TMP20:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0157// CHECK:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 0158//159//160// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f3v_l34(161// CHECK-SAME: ptr noundef [[PS:%.*]]) #[[ATTR1]] {162// CHECK:  [[ENTRY:.*:]]163// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 8164// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8165// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP0]], i32 0, i32 1166// CHECK:    store i32 7, ptr [[Y]], align 4167// CHECK:    ret void168//169//170// CHECK-LABEL: define dso_local void @_Z2f4v(171// CHECK-SAME: ) #[[ATTR0]] {172// CHECK:  [[ENTRY:.*:]]173// CHECK:    [[TMP0:%.*]] = load ptr, ptr @ps, align 8174// CHECK:    [[TMP1:%.*]] = load ptr, ptr @ps, align 8175// CHECK:    [[TMP2:%.*]] = load ptr, ptr @ps, align 8176// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP2]], i32 0, i32 1177// CHECK:    [[TMP3:%.*]] = getelementptr [[STRUCT_S]], ptr [[TMP1]], i32 1178// CHECK:    [[TMP4:%.*]] = ptrtoint ptr [[TMP3]] to i64179// CHECK:    [[TMP5:%.*]] = ptrtoint ptr [[TMP1]] to i64180// CHECK:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]181// CHECK:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)182// CHECK:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES:%.*]], ptr align 8 @.offload_sizes.5, i64 24, i1 false)183// CHECK:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 0184// CHECK:    store ptr [[TMP1]], ptr [[TMP8]], align 8185// CHECK:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 0186// CHECK:    store ptr [[TMP1]], ptr [[TMP9]], align 8187// CHECK:    [[TMP10:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0188// CHECK:    store i64 [[TMP7]], ptr [[TMP10]], align 8189// CHECK:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 0190// CHECK:    store ptr null, ptr [[TMP11]], align 8191// CHECK:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1192// CHECK:    store ptr [[TMP1]], ptr [[TMP12]], align 8193// CHECK:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1194// CHECK:    store ptr [[Y]], ptr [[TMP13]], align 8195// CHECK:    [[TMP14:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1196// CHECK:    store ptr null, ptr [[TMP14]], align 8197// CHECK:    [[TMP15:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2198// CHECK:    store ptr @ps, ptr [[TMP15]], align 8199// CHECK:    [[TMP16:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2200// CHECK:    store ptr @ps, ptr [[TMP16]], align 8201// CHECK:    [[TMP17:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2202// CHECK:    store ptr null, ptr [[TMP17]], align 8203// CHECK:    [[TMP18:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0204// CHECK:    [[TMP19:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0205// CHECK:    [[TMP20:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0206// CHECK:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 0207//208//209// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f4v_l42(210// CHECK-SAME: ptr noundef [[PS:%.*]]) #[[ATTR1]] {211// CHECK:  [[ENTRY:.*:]]212// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 8213// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8214// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP0]], i32 0, i32 1215// CHECK:    store i32 8, ptr [[Y]], align 4216// CHECK:    ret void217//218//219// CHECK-LABEL: define dso_local void @_Z2f5v(220// CHECK-SAME: ) #[[ATTR0]] {221// CHECK:  [[ENTRY:.*:]]222// CHECK:    [[TMP0:%.*]] = load ptr, ptr @ps, align 8223// CHECK:    [[TMP1:%.*]] = load ptr, ptr @ps, align 8224// CHECK:    [[TMP2:%.*]] = load ptr, ptr @ps, align 8225// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP2]], i32 0, i32 1226// CHECK:    [[TMP3:%.*]] = load ptr, ptr @ps, align 8227// CHECK:    [[TMP4:%.*]] = load ptr, ptr @ps, align 8228// CHECK:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[TMP4]], i32 0, i32 0229// CHECK:    [[TMP5:%.*]] = getelementptr [[STRUCT_S]], ptr [[TMP1]], i32 1230// CHECK:    [[TMP6:%.*]] = ptrtoint ptr [[TMP5]] to i64231// CHECK:    [[TMP7:%.*]] = ptrtoint ptr [[TMP1]] to i64232// CHECK:    [[TMP8:%.*]] = sub i64 [[TMP6]], [[TMP7]]233// CHECK:    [[TMP9:%.*]] = sdiv exact i64 [[TMP8]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)234// CHECK:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES:%.*]], ptr align 8 @.offload_sizes.7, i64 32, i1 false)235// CHECK:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS:%.*]], i32 0, i32 0236// CHECK:    store ptr [[TMP1]], ptr [[TMP10]], align 8237// CHECK:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS:%.*]], i32 0, i32 0238// CHECK:    store ptr [[TMP1]], ptr [[TMP11]], align 8239// CHECK:    [[TMP12:%.*]] = getelementptr inbounds [4 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0240// CHECK:    store i64 [[TMP9]], ptr [[TMP12]], align 8241// CHECK:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS:%.*]], i64 0, i64 0242// CHECK:    store ptr null, ptr [[TMP13]], align 8243// CHECK:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1244// CHECK:    store ptr [[TMP1]], ptr [[TMP14]], align 8245// CHECK:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1246// CHECK:    store ptr [[Y]], ptr [[TMP15]], align 8247// CHECK:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1248// CHECK:    store ptr null, ptr [[TMP16]], align 8249// CHECK:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2250// CHECK:    store ptr @ps, ptr [[TMP17]], align 8251// CHECK:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2252// CHECK:    store ptr @ps, ptr [[TMP18]], align 8253// CHECK:    [[TMP19:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2254// CHECK:    store ptr null, ptr [[TMP19]], align 8255// CHECK:    [[TMP20:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3256// CHECK:    store ptr [[TMP3]], ptr [[TMP20]], align 8257// CHECK:    [[TMP21:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 3258// CHECK:    store ptr [[X]], ptr [[TMP21]], align 8259// CHECK:    [[TMP22:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3260// CHECK:    store ptr null, ptr [[TMP22]], align 8261// CHECK:    [[TMP23:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0262// CHECK:    [[TMP24:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0263// CHECK:    [[TMP25:%.*]] = getelementptr inbounds [4 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0264// CHECK:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], ptr [[KERNEL_ARGS:%.*]], i32 0, i32 0265//266//267// CHECK-LABEL: define internal void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z2f5v_l51(268// CHECK-SAME: ptr noundef [[PS:%.*]]) #[[ATTR1]] {269// CHECK:  [[ENTRY:.*:]]270// CHECK:    store ptr [[PS]], ptr [[PS_ADDR:%.*]], align 8271// CHECK:    [[TMP0:%.*]] = load ptr, ptr [[PS_ADDR]], align 8272// CHECK:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP0]], i32 0, i32 1273// CHECK:    store i32 9, ptr [[Y]], align 4274// CHECK:    ret void275//276