952 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _ --version 52// RUN: %clang_cc1 -verify -Wno-vla -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 -Wno-vla %s -emit-llvm -o - | FileCheck %s5 6// RUN: %clang_cc1 -DOMP60 -verify -Wno-vla -fopenmp -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix OMP60 %s7// RUN: %clang_cc1 -DOMP60 -fopenmp -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s8// RUN: %clang_cc1 -DOMP60 -fopenmp -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck --check-prefix OMP60 %s9 10// RUN: %clang_cc1 -verify -Wno-vla -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s11// RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s12// RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s13 14// RUN: %clang_cc1 -DOMP60 -verify -Wno-vla -fopenmp-simd -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0-OMP60 %s15// RUN: %clang_cc1 -DOMP60 -fopenmp-simd -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s16// RUN: %clang_cc1 -DOMP60 -fopenmp-simd -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0-OMP60 %s17// expected-no-diagnostics18 19#ifndef HEADER20#define HEADER21 22// 64 = 0x40 = OMP_MAP_RETURN_PARAM23// 0 = OMP_MAP_NONE24// 281474976710720 = 0x1000000000040 = OMP_MAP_MEMBER_OF | OMP_MAP_RETURN_PARAM25 26struct S {27 int a = 0;28 int *ptr = &a;29 int &ref = a;30 int arr[4];31 S() {}32 void foo() {33#ifdef OMP6034#pragma omp target data map(tofrom: a, ptr [3:4], ref, ptr[0], arr[:a], ptr[:]) use_device_addr(a, ptr [3:4], ref, ptr[0], arr[:a], ptr[:])35#else36#pragma omp target data map(tofrom: a, ptr [3:4], ref, ptr[0], arr[:a]) use_device_addr(a, ptr [3:4], ref, ptr[0], arr[:a])37#endif // OMP6038 ++a, ++*ptr, ++ref, ++arr[0];39 }40};41 42#ifdef OMP6043int main(int argc, char *argv[]) {44#else45int main() {46#endif // OMP6047 float a = 0;48 float *ptr = &a;49 float &ref = a;50 float arr[4];51 float vla[(int)a];52 S s;53 s.foo();54#ifdef OMP6055#pragma omp target data map(tofrom: a, ptr [3:4], ref, ptr[0], arr[:(int)a], vla[0], ptr[:], argv[0][:]) use_device_addr(a, ptr [3:4], ref, ptr[0], arr[:(int)a], vla[0], ptr[:], argv[0][:])56#else57#pragma omp target data map(tofrom: a, ptr [3:4], ref, ptr[0], arr[:(int)a], vla[0]) use_device_addr(a, ptr [3:4], ref, ptr[0], arr[:(int)a], vla[0])58#endif // OMP6059 ++a, ++*ptr, ++ref, ++arr[0], ++vla[0];60 return a;61}62 63 64 65 66 67 68#endif69// CHECK-LABEL: define dso_local noundef signext i32 @main(70// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {71// CHECK-NEXT: [[ENTRY:.*:]]72// CHECK-NEXT: [[RETVAL:%.*]] = alloca i32, align 473// CHECK-NEXT: [[A:%.*]] = alloca float, align 474// CHECK-NEXT: [[PTR:%.*]] = alloca ptr, align 875// CHECK-NEXT: [[REF:%.*]] = alloca ptr, align 876// CHECK-NEXT: [[ARR:%.*]] = alloca [4 x float], align 477// CHECK-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 878// CHECK-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 879// CHECK-NEXT: [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 880// CHECK-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [6 x ptr], align 881// CHECK-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [6 x ptr], align 882// CHECK-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [6 x ptr], align 883// CHECK-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [6 x i64], align 884// CHECK-NEXT: [[TMP:%.*]] = alloca ptr, align 885// CHECK-NEXT: store i32 0, ptr [[RETVAL]], align 486// CHECK-NEXT: store float 0.000000e+00, ptr [[A]], align 487// CHECK-NEXT: store ptr [[A]], ptr [[PTR]], align 888// CHECK-NEXT: store ptr [[A]], ptr [[REF]], align 889// CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[A]], align 490// CHECK-NEXT: [[CONV:%.*]] = fptosi float [[TMP0]] to i3291// CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[CONV]] to i6492// CHECK-NEXT: [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()93// CHECK-NEXT: store ptr [[TMP2]], ptr [[SAVED_STACK]], align 894// CHECK-NEXT: [[VLA:%.*]] = alloca float, i64 [[TMP1]], align 495// CHECK-NEXT: store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 896// CHECK-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 8 dereferenceable(40) [[S]])97// CHECK-NEXT: call void @_ZN1S3fooEv(ptr noundef nonnull align 8 dereferenceable(40) [[S]])98// CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[PTR]], align 899// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw float, ptr [[TMP3]], i64 3100// CHECK-NEXT: [[TMP4:%.*]] = load ptr, ptr [[PTR]], align 8101// CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds float, ptr [[TMP4]], i64 0102// CHECK-NEXT: [[TMP5:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META3:![0-9]+]], !align [[META4:![0-9]+]]103// CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META3]], !align [[META4]]104// CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw [4 x float], ptr [[ARR]], i64 0, i64 0105// CHECK-NEXT: [[TMP7:%.*]] = load float, ptr [[A]], align 4106// CHECK-NEXT: [[CONV3:%.*]] = fptosi float [[TMP7]] to i32107// CHECK-NEXT: [[CONV4:%.*]] = sext i32 [[CONV3]] to i64108// CHECK-NEXT: [[TMP8:%.*]] = mul nuw i64 [[CONV4]], 4109// CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds float, ptr [[VLA]], i64 0110// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes, i64 48, i1 false)111// CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0112// CHECK-NEXT: store ptr [[A]], ptr [[TMP9]], align 8113// CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0114// CHECK-NEXT: store ptr [[A]], ptr [[TMP10]], align 8115// CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0116// CHECK-NEXT: store ptr null, ptr [[TMP11]], align 8117// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1118// CHECK-NEXT: store ptr [[PTR]], ptr [[TMP12]], align 8119// CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1120// CHECK-NEXT: store ptr [[ARRAYIDX]], ptr [[TMP13]], align 8121// CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1122// CHECK-NEXT: store ptr null, ptr [[TMP14]], align 8123// CHECK-NEXT: [[TMP15:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2124// CHECK-NEXT: store ptr [[PTR]], ptr [[TMP15]], align 8125// CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2126// CHECK-NEXT: store ptr [[ARRAYIDX1]], ptr [[TMP16]], align 8127// CHECK-NEXT: [[TMP17:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2128// CHECK-NEXT: store ptr null, ptr [[TMP17]], align 8129// CHECK-NEXT: [[TMP18:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3130// CHECK-NEXT: store ptr [[TMP5]], ptr [[TMP18]], align 8131// CHECK-NEXT: [[TMP19:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 3132// CHECK-NEXT: store ptr [[TMP6]], ptr [[TMP19]], align 8133// CHECK-NEXT: [[TMP20:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3134// CHECK-NEXT: store ptr null, ptr [[TMP20]], align 8135// CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4136// CHECK-NEXT: store ptr [[ARR]], ptr [[TMP21]], align 8137// CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 4138// CHECK-NEXT: store ptr [[ARRAYIDX2]], ptr [[TMP22]], align 8139// CHECK-NEXT: [[TMP23:%.*]] = getelementptr inbounds [6 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 4140// CHECK-NEXT: store i64 [[TMP8]], ptr [[TMP23]], align 8141// CHECK-NEXT: [[TMP24:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4142// CHECK-NEXT: store ptr null, ptr [[TMP24]], align 8143// CHECK-NEXT: [[TMP25:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5144// CHECK-NEXT: store ptr [[VLA]], ptr [[TMP25]], align 8145// CHECK-NEXT: [[TMP26:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 5146// CHECK-NEXT: store ptr [[ARRAYIDX5]], ptr [[TMP26]], align 8147// CHECK-NEXT: [[TMP27:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5148// CHECK-NEXT: store ptr null, ptr [[TMP27]], align 8149// CHECK-NEXT: [[TMP28:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0150// CHECK-NEXT: [[TMP29:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0151// CHECK-NEXT: [[TMP30:%.*]] = getelementptr inbounds [6 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0152// CHECK-NEXT: call void @__tgt_target_data_begin_mapper(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 6, ptr [[TMP28]], ptr [[TMP29]], ptr [[TMP30]], ptr @.offload_maptypes, ptr null, ptr null)153// CHECK-NEXT: [[TMP31:%.*]] = load ptr, ptr [[TMP9]], align 8154// CHECK-NEXT: [[TMP32:%.*]] = load ptr, ptr [[TMP18]], align 8155// CHECK-NEXT: store ptr [[TMP32]], ptr [[TMP]], align 8156// CHECK-NEXT: [[TMP33:%.*]] = load ptr, ptr [[TMP21]], align 8157// CHECK-NEXT: [[TMP34:%.*]] = load ptr, ptr [[TMP25]], align 8158// CHECK-NEXT: [[TMP35:%.*]] = load float, ptr [[TMP31]], align 4159// CHECK-NEXT: [[INC:%.*]] = fadd float [[TMP35]], 1.000000e+00160// CHECK-NEXT: store float [[INC]], ptr [[TMP31]], align 4161// CHECK-NEXT: [[TMP36:%.*]] = load ptr, ptr [[TMP12]], align 8162// CHECK-NEXT: [[TMP37:%.*]] = load float, ptr [[TMP36]], align 4163// CHECK-NEXT: [[INC6:%.*]] = fadd float [[TMP37]], 1.000000e+00164// CHECK-NEXT: store float [[INC6]], ptr [[TMP36]], align 4165// CHECK-NEXT: [[TMP38:%.*]] = load ptr, ptr [[TMP]], align 8, !nonnull [[META3]], !align [[META4]]166// CHECK-NEXT: [[TMP39:%.*]] = load float, ptr [[TMP38]], align 4167// CHECK-NEXT: [[INC7:%.*]] = fadd float [[TMP39]], 1.000000e+00168// CHECK-NEXT: store float [[INC7]], ptr [[TMP38]], align 4169// CHECK-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds [4 x float], ptr [[TMP33]], i64 0, i64 0170// CHECK-NEXT: [[TMP40:%.*]] = load float, ptr [[ARRAYIDX8]], align 4171// CHECK-NEXT: [[INC9:%.*]] = fadd float [[TMP40]], 1.000000e+00172// CHECK-NEXT: store float [[INC9]], ptr [[ARRAYIDX8]], align 4173// CHECK-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds float, ptr [[TMP34]], i64 0174// CHECK-NEXT: [[TMP41:%.*]] = load float, ptr [[ARRAYIDX10]], align 4175// CHECK-NEXT: [[INC11:%.*]] = fadd float [[TMP41]], 1.000000e+00176// CHECK-NEXT: store float [[INC11]], ptr [[ARRAYIDX10]], align 4177// CHECK-NEXT: [[TMP42:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0178// CHECK-NEXT: [[TMP43:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0179// CHECK-NEXT: [[TMP44:%.*]] = getelementptr inbounds [6 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0180// CHECK-NEXT: call void @__tgt_target_data_end_mapper(ptr @[[GLOB1]], i64 -1, i32 6, ptr [[TMP42]], ptr [[TMP43]], ptr [[TMP44]], ptr @.offload_maptypes, ptr null, ptr null)181// CHECK-NEXT: [[TMP45:%.*]] = load float, ptr [[A]], align 4182// CHECK-NEXT: [[CONV12:%.*]] = fptosi float [[TMP45]] to i32183// CHECK-NEXT: store i32 [[CONV12]], ptr [[RETVAL]], align 4184// CHECK-NEXT: [[TMP46:%.*]] = load ptr, ptr [[SAVED_STACK]], align 8185// CHECK-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP46]])186// CHECK-NEXT: [[TMP47:%.*]] = load i32, ptr [[RETVAL]], align 4187// CHECK-NEXT: ret i32 [[TMP47]]188//189//190// CHECK-LABEL: define linkonce_odr void @_ZN1SC1Ev(191// CHECK-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) unnamed_addr #[[ATTR2:[0-9]+]] comdat {192// CHECK-NEXT: [[ENTRY:.*:]]193// CHECK-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8194// CHECK-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8195// CHECK-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8196// CHECK-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 8 dereferenceable(40) [[THIS1]])197// CHECK-NEXT: ret void198//199//200// CHECK-LABEL: define linkonce_odr void @_ZN1S3fooEv(201// CHECK-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) #[[ATTR2]] comdat {202// CHECK-NEXT: [[ENTRY:.*:]]203// CHECK-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8204// CHECK-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [6 x ptr], align 8205// CHECK-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [6 x ptr], align 8206// CHECK-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [6 x ptr], align 8207// CHECK-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [6 x i64], align 8208// CHECK-NEXT: [[TMP:%.*]] = alloca ptr, align 8209// CHECK-NEXT: [[_TMP11:%.*]] = alloca ptr, align 8210// CHECK-NEXT: [[_TMP12:%.*]] = alloca ptr, align 8211// CHECK-NEXT: [[_TMP13:%.*]] = alloca ptr, align 8212// CHECK-NEXT: [[_TMP14:%.*]] = alloca ptr, align 8213// CHECK-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8214// CHECK-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8215// CHECK-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0216// CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1217// CHECK-NEXT: [[PTR2:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1218// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR2]], align 8219// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP0]], i64 3220// CHECK-NEXT: [[REF:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 2221// CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META3]], !align [[META4]]222// CHECK-NEXT: [[PTR3:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1223// CHECK-NEXT: [[PTR4:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1224// CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[PTR4]], align 8225// CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i64 0226// CHECK-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 3227// CHECK-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds nuw [4 x i32], ptr [[ARR]], i64 0, i64 0228// CHECK-NEXT: [[A7:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0229// CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[A7]], align 8230// CHECK-NEXT: [[CONV:%.*]] = sext i32 [[TMP3]] to i64231// CHECK-NEXT: [[TMP4:%.*]] = mul nuw i64 [[CONV]], 4232// CHECK-NEXT: [[A8:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0233// CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[A8]], align 8234// CHECK-NEXT: [[TMP6:%.*]] = sext i32 [[TMP5]] to i64235// CHECK-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP6]]236// CHECK-NEXT: [[ARR9:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 3237// CHECK-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw [4 x i32], ptr [[ARR9]], i64 0, i64 [[LB_ADD_LEN]]238// CHECK-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[ARRAYIDX10]], i32 1239// CHECK-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[TMP7]] to i64240// CHECK-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[A]] to i64241// CHECK-NEXT: [[TMP10:%.*]] = sub i64 [[TMP8]], [[TMP9]]242// CHECK-NEXT: [[TMP11:%.*]] = sdiv exact i64 [[TMP10]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)243// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes.1, i64 48, i1 false)244// CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0245// CHECK-NEXT: store ptr [[THIS1]], ptr [[TMP12]], align 8246// CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0247// CHECK-NEXT: store ptr [[A]], ptr [[TMP13]], align 8248// CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds [6 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0249// CHECK-NEXT: store i64 [[TMP11]], ptr [[TMP14]], align 8250// CHECK-NEXT: [[TMP15:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0251// CHECK-NEXT: store ptr null, ptr [[TMP15]], align 8252// CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1253// CHECK-NEXT: store ptr [[THIS1]], ptr [[TMP16]], align 8254// CHECK-NEXT: [[TMP17:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1255// CHECK-NEXT: store ptr [[A]], ptr [[TMP17]], align 8256// CHECK-NEXT: [[TMP18:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1257// CHECK-NEXT: store ptr null, ptr [[TMP18]], align 8258// CHECK-NEXT: [[TMP19:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2259// CHECK-NEXT: store ptr [[PTR]], ptr [[TMP19]], align 8260// CHECK-NEXT: [[TMP20:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2261// CHECK-NEXT: store ptr [[ARRAYIDX]], ptr [[TMP20]], align 8262// CHECK-NEXT: [[TMP21:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2263// CHECK-NEXT: store ptr null, ptr [[TMP21]], align 8264// CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3265// CHECK-NEXT: store ptr [[THIS1]], ptr [[TMP22]], align 8266// CHECK-NEXT: [[TMP23:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 3267// CHECK-NEXT: store ptr [[TMP1]], ptr [[TMP23]], align 8268// CHECK-NEXT: [[TMP24:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3269// CHECK-NEXT: store ptr null, ptr [[TMP24]], align 8270// CHECK-NEXT: [[TMP25:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4271// CHECK-NEXT: store ptr [[PTR3]], ptr [[TMP25]], align 8272// CHECK-NEXT: [[TMP26:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 4273// CHECK-NEXT: store ptr [[ARRAYIDX5]], ptr [[TMP26]], align 8274// CHECK-NEXT: [[TMP27:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4275// CHECK-NEXT: store ptr null, ptr [[TMP27]], align 8276// CHECK-NEXT: [[TMP28:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5277// CHECK-NEXT: store ptr [[THIS1]], ptr [[TMP28]], align 8278// CHECK-NEXT: [[TMP29:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 5279// CHECK-NEXT: store ptr [[ARRAYIDX6]], ptr [[TMP29]], align 8280// CHECK-NEXT: [[TMP30:%.*]] = getelementptr inbounds [6 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 5281// CHECK-NEXT: store i64 [[TMP4]], ptr [[TMP30]], align 8282// CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5283// CHECK-NEXT: store ptr null, ptr [[TMP31]], align 8284// CHECK-NEXT: [[TMP32:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0285// CHECK-NEXT: [[TMP33:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0286// CHECK-NEXT: [[TMP34:%.*]] = getelementptr inbounds [6 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0287// CHECK-NEXT: call void @__tgt_target_data_begin_mapper(ptr @[[GLOB1]], i64 -1, i32 6, ptr [[TMP32]], ptr [[TMP33]], ptr [[TMP34]], ptr @.offload_maptypes.2, ptr null, ptr null)288// CHECK-NEXT: [[TMP35:%.*]] = load ptr, ptr [[TMP16]], align 8289// CHECK-NEXT: store ptr [[TMP35]], ptr [[TMP]], align 8290// CHECK-NEXT: [[TMP36:%.*]] = load ptr, ptr [[TMP19]], align 8291// CHECK-NEXT: store ptr [[TMP36]], ptr [[_TMP11]], align 8292// CHECK-NEXT: [[TMP37:%.*]] = load ptr, ptr [[TMP22]], align 8293// CHECK-NEXT: store ptr [[TMP37]], ptr [[_TMP12]], align 8294// CHECK-NEXT: [[TMP38:%.*]] = load ptr, ptr [[TMP19]], align 8295// CHECK-NEXT: store ptr [[TMP38]], ptr [[_TMP13]], align 8296// CHECK-NEXT: [[TMP39:%.*]] = load ptr, ptr [[TMP28]], align 8297// CHECK-NEXT: store ptr [[TMP39]], ptr [[_TMP14]], align 8298// CHECK-NEXT: [[TMP40:%.*]] = load ptr, ptr [[TMP]], align 8, !nonnull [[META3]], !align [[META4]]299// CHECK-NEXT: [[TMP41:%.*]] = load i32, ptr [[TMP40]], align 4300// CHECK-NEXT: [[INC:%.*]] = add nsw i32 [[TMP41]], 1301// CHECK-NEXT: store i32 [[INC]], ptr [[TMP40]], align 4302// CHECK-NEXT: [[TMP42:%.*]] = load ptr, ptr [[_TMP13]], align 8, !nonnull [[META3]], !align [[META5:![0-9]+]]303// CHECK-NEXT: [[TMP43:%.*]] = load ptr, ptr [[TMP42]], align 8304// CHECK-NEXT: [[TMP44:%.*]] = load i32, ptr [[TMP43]], align 4305// CHECK-NEXT: [[INC15:%.*]] = add nsw i32 [[TMP44]], 1306// CHECK-NEXT: store i32 [[INC15]], ptr [[TMP43]], align 4307// CHECK-NEXT: [[TMP45:%.*]] = load ptr, ptr [[_TMP12]], align 8, !nonnull [[META3]], !align [[META4]]308// CHECK-NEXT: [[TMP46:%.*]] = load i32, ptr [[TMP45]], align 4309// CHECK-NEXT: [[INC16:%.*]] = add nsw i32 [[TMP46]], 1310// CHECK-NEXT: store i32 [[INC16]], ptr [[TMP45]], align 4311// CHECK-NEXT: [[TMP47:%.*]] = load ptr, ptr [[_TMP14]], align 8, !nonnull [[META3]], !align [[META4]]312// CHECK-NEXT: [[ARRAYIDX17:%.*]] = getelementptr inbounds [4 x i32], ptr [[TMP47]], i64 0, i64 0313// CHECK-NEXT: [[TMP48:%.*]] = load i32, ptr [[ARRAYIDX17]], align 4314// CHECK-NEXT: [[INC18:%.*]] = add nsw i32 [[TMP48]], 1315// CHECK-NEXT: store i32 [[INC18]], ptr [[ARRAYIDX17]], align 4316// CHECK-NEXT: [[TMP49:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0317// CHECK-NEXT: [[TMP50:%.*]] = getelementptr inbounds [6 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0318// CHECK-NEXT: [[TMP51:%.*]] = getelementptr inbounds [6 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0319// CHECK-NEXT: call void @__tgt_target_data_end_mapper(ptr @[[GLOB1]], i64 -1, i32 6, ptr [[TMP49]], ptr [[TMP50]], ptr [[TMP51]], ptr @.offload_maptypes.2, ptr null, ptr null)320// CHECK-NEXT: ret void321//322//323// CHECK-LABEL: define linkonce_odr void @_ZN1SC2Ev(324// CHECK-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) unnamed_addr #[[ATTR2]] comdat {325// CHECK-NEXT: [[ENTRY:.*:]]326// CHECK-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8327// CHECK-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8328// CHECK-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8329// CHECK-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0330// CHECK-NEXT: store i32 0, ptr [[A]], align 8331// CHECK-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1332// CHECK-NEXT: [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0333// CHECK-NEXT: store ptr [[A2]], ptr [[PTR]], align 8334// CHECK-NEXT: [[REF:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 2335// CHECK-NEXT: [[A3:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0336// CHECK-NEXT: store ptr [[A3]], ptr [[REF]], align 8337// CHECK-NEXT: ret void338//339//340// OMP60-LABEL: define dso_local noundef signext i32 @main(341// OMP60-SAME: i32 noundef signext [[ARGC:%.*]], ptr noundef [[ARGV:%.*]]) #[[ATTR0:[0-9]+]] {342// OMP60-NEXT: [[ENTRY:.*:]]343// OMP60-NEXT: [[RETVAL:%.*]] = alloca i32, align 4344// OMP60-NEXT: [[ARGC_ADDR:%.*]] = alloca i32, align 4345// OMP60-NEXT: [[ARGV_ADDR:%.*]] = alloca ptr, align 8346// OMP60-NEXT: [[A:%.*]] = alloca float, align 4347// OMP60-NEXT: [[PTR:%.*]] = alloca ptr, align 8348// OMP60-NEXT: [[REF:%.*]] = alloca ptr, align 8349// OMP60-NEXT: [[ARR:%.*]] = alloca [4 x float], align 4350// OMP60-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 8351// OMP60-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 8352// OMP60-NEXT: [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 8353// OMP60-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [9 x ptr], align 8354// OMP60-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [9 x ptr], align 8355// OMP60-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [9 x ptr], align 8356// OMP60-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [9 x i64], align 8357// OMP60-NEXT: [[TMP:%.*]] = alloca ptr, align 8358// OMP60-NEXT: store i32 0, ptr [[RETVAL]], align 4359// OMP60-NEXT: store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 4360// OMP60-NEXT: store ptr [[ARGV]], ptr [[ARGV_ADDR]], align 8361// OMP60-NEXT: store float 0.000000e+00, ptr [[A]], align 4362// OMP60-NEXT: store ptr [[A]], ptr [[PTR]], align 8363// OMP60-NEXT: store ptr [[A]], ptr [[REF]], align 8364// OMP60-NEXT: [[TMP0:%.*]] = load float, ptr [[A]], align 4365// OMP60-NEXT: [[CONV:%.*]] = fptosi float [[TMP0]] to i32366// OMP60-NEXT: [[TMP1:%.*]] = zext i32 [[CONV]] to i64367// OMP60-NEXT: [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()368// OMP60-NEXT: store ptr [[TMP2]], ptr [[SAVED_STACK]], align 8369// OMP60-NEXT: [[VLA:%.*]] = alloca float, i64 [[TMP1]], align 4370// OMP60-NEXT: store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 8371// OMP60-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 8 dereferenceable(40) [[S]])372// OMP60-NEXT: call void @_ZN1S3fooEv(ptr noundef nonnull align 8 dereferenceable(40) [[S]])373// OMP60-NEXT: [[TMP3:%.*]] = load ptr, ptr [[PTR]], align 8374// OMP60-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw float, ptr [[TMP3]], i64 3375// OMP60-NEXT: [[TMP4:%.*]] = load ptr, ptr [[PTR]], align 8376// OMP60-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds float, ptr [[TMP4]], i64 0377// OMP60-NEXT: [[TMP5:%.*]] = load ptr, ptr [[PTR]], align 8378// OMP60-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw float, ptr [[TMP5]], i64 0379// OMP60-NEXT: [[TMP6:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META3:![0-9]+]], !align [[META4:![0-9]+]]380// OMP60-NEXT: [[TMP7:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META3]], !align [[META4]]381// OMP60-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds nuw [4 x float], ptr [[ARR]], i64 0, i64 0382// OMP60-NEXT: [[TMP8:%.*]] = load float, ptr [[A]], align 4383// OMP60-NEXT: [[CONV4:%.*]] = fptosi float [[TMP8]] to i32384// OMP60-NEXT: [[CONV5:%.*]] = sext i32 [[CONV4]] to i64385// OMP60-NEXT: [[TMP9:%.*]] = mul nuw i64 [[CONV5]], 4386// OMP60-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds float, ptr [[VLA]], i64 0387// OMP60-NEXT: [[TMP10:%.*]] = load ptr, ptr [[ARGV_ADDR]], align 8388// OMP60-NEXT: [[TMP11:%.*]] = load ptr, ptr [[ARGV_ADDR]], align 8389// OMP60-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds ptr, ptr [[TMP11]], i64 0390// OMP60-NEXT: [[TMP12:%.*]] = load ptr, ptr [[ARGV_ADDR]], align 8391// OMP60-NEXT: [[ARRAYIDX8:%.*]] = getelementptr inbounds ptr, ptr [[TMP12]], i64 0392// OMP60-NEXT: [[TMP13:%.*]] = load ptr, ptr [[ARRAYIDX8]], align 8393// OMP60-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP13]], i64 0394// OMP60-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes, i64 72, i1 false)395// OMP60-NEXT: [[TMP14:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0396// OMP60-NEXT: store ptr [[A]], ptr [[TMP14]], align 8397// OMP60-NEXT: [[TMP15:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0398// OMP60-NEXT: store ptr [[A]], ptr [[TMP15]], align 8399// OMP60-NEXT: [[TMP16:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0400// OMP60-NEXT: store ptr null, ptr [[TMP16]], align 8401// OMP60-NEXT: [[TMP17:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1402// OMP60-NEXT: store ptr [[PTR]], ptr [[TMP17]], align 8403// OMP60-NEXT: [[TMP18:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1404// OMP60-NEXT: store ptr [[ARRAYIDX]], ptr [[TMP18]], align 8405// OMP60-NEXT: [[TMP19:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1406// OMP60-NEXT: store ptr null, ptr [[TMP19]], align 8407// OMP60-NEXT: [[TMP20:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2408// OMP60-NEXT: store ptr [[PTR]], ptr [[TMP20]], align 8409// OMP60-NEXT: [[TMP21:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2410// OMP60-NEXT: store ptr [[ARRAYIDX1]], ptr [[TMP21]], align 8411// OMP60-NEXT: [[TMP22:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2412// OMP60-NEXT: store ptr null, ptr [[TMP22]], align 8413// OMP60-NEXT: [[TMP23:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3414// OMP60-NEXT: store ptr [[PTR]], ptr [[TMP23]], align 8415// OMP60-NEXT: [[TMP24:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 3416// OMP60-NEXT: store ptr [[ARRAYIDX2]], ptr [[TMP24]], align 8417// OMP60-NEXT: [[TMP25:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3418// OMP60-NEXT: store ptr null, ptr [[TMP25]], align 8419// OMP60-NEXT: [[TMP26:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4420// OMP60-NEXT: store ptr [[TMP6]], ptr [[TMP26]], align 8421// OMP60-NEXT: [[TMP27:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 4422// OMP60-NEXT: store ptr [[TMP7]], ptr [[TMP27]], align 8423// OMP60-NEXT: [[TMP28:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4424// OMP60-NEXT: store ptr null, ptr [[TMP28]], align 8425// OMP60-NEXT: [[TMP29:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5426// OMP60-NEXT: store ptr [[ARR]], ptr [[TMP29]], align 8427// OMP60-NEXT: [[TMP30:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 5428// OMP60-NEXT: store ptr [[ARRAYIDX3]], ptr [[TMP30]], align 8429// OMP60-NEXT: [[TMP31:%.*]] = getelementptr inbounds [9 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 5430// OMP60-NEXT: store i64 [[TMP9]], ptr [[TMP31]], align 8431// OMP60-NEXT: [[TMP32:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5432// OMP60-NEXT: store ptr null, ptr [[TMP32]], align 8433// OMP60-NEXT: [[TMP33:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6434// OMP60-NEXT: store ptr [[VLA]], ptr [[TMP33]], align 8435// OMP60-NEXT: [[TMP34:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 6436// OMP60-NEXT: store ptr [[ARRAYIDX6]], ptr [[TMP34]], align 8437// OMP60-NEXT: [[TMP35:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6438// OMP60-NEXT: store ptr null, ptr [[TMP35]], align 8439// OMP60-NEXT: [[TMP36:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 7440// OMP60-NEXT: store ptr [[TMP10]], ptr [[TMP36]], align 8441// OMP60-NEXT: [[TMP37:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 7442// OMP60-NEXT: store ptr [[ARRAYIDX7]], ptr [[TMP37]], align 8443// OMP60-NEXT: [[TMP38:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 7444// OMP60-NEXT: store ptr null, ptr [[TMP38]], align 8445// OMP60-NEXT: [[TMP39:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 8446// OMP60-NEXT: store ptr [[ARRAYIDX7]], ptr [[TMP39]], align 8447// OMP60-NEXT: [[TMP40:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 8448// OMP60-NEXT: store ptr [[ARRAYIDX9]], ptr [[TMP40]], align 8449// OMP60-NEXT: [[TMP41:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 8450// OMP60-NEXT: store ptr null, ptr [[TMP41]], align 8451// OMP60-NEXT: [[TMP42:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0452// OMP60-NEXT: [[TMP43:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0453// OMP60-NEXT: [[TMP44:%.*]] = getelementptr inbounds [9 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0454// OMP60-NEXT: call void @__tgt_target_data_begin_mapper(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 9, ptr [[TMP42]], ptr [[TMP43]], ptr [[TMP44]], ptr @.offload_maptypes, ptr null, ptr null)455// OMP60-NEXT: [[TMP45:%.*]] = load ptr, ptr [[TMP14]], align 8456// OMP60-NEXT: [[TMP46:%.*]] = load ptr, ptr [[TMP26]], align 8457// OMP60-NEXT: store ptr [[TMP46]], ptr [[TMP]], align 8458// OMP60-NEXT: [[TMP47:%.*]] = load ptr, ptr [[TMP29]], align 8459// OMP60-NEXT: [[TMP48:%.*]] = load ptr, ptr [[TMP33]], align 8460// OMP60-NEXT: [[TMP49:%.*]] = load float, ptr [[TMP45]], align 4461// OMP60-NEXT: [[INC:%.*]] = fadd float [[TMP49]], 1.000000e+00462// OMP60-NEXT: store float [[INC]], ptr [[TMP45]], align 4463// OMP60-NEXT: [[TMP50:%.*]] = load ptr, ptr [[TMP17]], align 8464// OMP60-NEXT: [[TMP51:%.*]] = load float, ptr [[TMP50]], align 4465// OMP60-NEXT: [[INC10:%.*]] = fadd float [[TMP51]], 1.000000e+00466// OMP60-NEXT: store float [[INC10]], ptr [[TMP50]], align 4467// OMP60-NEXT: [[TMP52:%.*]] = load ptr, ptr [[TMP]], align 8, !nonnull [[META3]], !align [[META4]]468// OMP60-NEXT: [[TMP53:%.*]] = load float, ptr [[TMP52]], align 4469// OMP60-NEXT: [[INC11:%.*]] = fadd float [[TMP53]], 1.000000e+00470// OMP60-NEXT: store float [[INC11]], ptr [[TMP52]], align 4471// OMP60-NEXT: [[ARRAYIDX12:%.*]] = getelementptr inbounds [4 x float], ptr [[TMP47]], i64 0, i64 0472// OMP60-NEXT: [[TMP54:%.*]] = load float, ptr [[ARRAYIDX12]], align 4473// OMP60-NEXT: [[INC13:%.*]] = fadd float [[TMP54]], 1.000000e+00474// OMP60-NEXT: store float [[INC13]], ptr [[ARRAYIDX12]], align 4475// OMP60-NEXT: [[ARRAYIDX14:%.*]] = getelementptr inbounds float, ptr [[TMP48]], i64 0476// OMP60-NEXT: [[TMP55:%.*]] = load float, ptr [[ARRAYIDX14]], align 4477// OMP60-NEXT: [[INC15:%.*]] = fadd float [[TMP55]], 1.000000e+00478// OMP60-NEXT: store float [[INC15]], ptr [[ARRAYIDX14]], align 4479// OMP60-NEXT: [[TMP56:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0480// OMP60-NEXT: [[TMP57:%.*]] = getelementptr inbounds [9 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0481// OMP60-NEXT: [[TMP58:%.*]] = getelementptr inbounds [9 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0482// OMP60-NEXT: call void @__tgt_target_data_end_mapper(ptr @[[GLOB1]], i64 -1, i32 9, ptr [[TMP56]], ptr [[TMP57]], ptr [[TMP58]], ptr @.offload_maptypes, ptr null, ptr null)483// OMP60-NEXT: [[TMP59:%.*]] = load float, ptr [[A]], align 4484// OMP60-NEXT: [[CONV16:%.*]] = fptosi float [[TMP59]] to i32485// OMP60-NEXT: store i32 [[CONV16]], ptr [[RETVAL]], align 4486// OMP60-NEXT: [[TMP60:%.*]] = load ptr, ptr [[SAVED_STACK]], align 8487// OMP60-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP60]])488// OMP60-NEXT: [[TMP61:%.*]] = load i32, ptr [[RETVAL]], align 4489// OMP60-NEXT: ret i32 [[TMP61]]490//491//492// OMP60-LABEL: define linkonce_odr void @_ZN1SC1Ev(493// OMP60-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) unnamed_addr #[[ATTR2:[0-9]+]] comdat {494// OMP60-NEXT: [[ENTRY:.*:]]495// OMP60-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8496// OMP60-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8497// OMP60-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8498// OMP60-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 8 dereferenceable(40) [[THIS1]])499// OMP60-NEXT: ret void500//501//502// OMP60-LABEL: define linkonce_odr void @_ZN1S3fooEv(503// OMP60-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) #[[ATTR2]] comdat {504// OMP60-NEXT: [[ENTRY:.*:]]505// OMP60-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8506// OMP60-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x ptr], align 8507// OMP60-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x ptr], align 8508// OMP60-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x ptr], align 8509// OMP60-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8510// OMP60-NEXT: [[TMP:%.*]] = alloca ptr, align 8511// OMP60-NEXT: [[_TMP14:%.*]] = alloca ptr, align 8512// OMP60-NEXT: [[_TMP15:%.*]] = alloca ptr, align 8513// OMP60-NEXT: [[_TMP16:%.*]] = alloca ptr, align 8514// OMP60-NEXT: [[_TMP17:%.*]] = alloca ptr, align 8515// OMP60-NEXT: [[_TMP18:%.*]] = alloca ptr, align 8516// OMP60-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8517// OMP60-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8518// OMP60-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0519// OMP60-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1520// OMP60-NEXT: [[PTR2:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1521// OMP60-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR2]], align 8522// OMP60-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP0]], i64 3523// OMP60-NEXT: [[REF:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 2524// OMP60-NEXT: [[TMP1:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META3]], !align [[META4]]525// OMP60-NEXT: [[PTR3:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1526// OMP60-NEXT: [[PTR4:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1527// OMP60-NEXT: [[TMP2:%.*]] = load ptr, ptr [[PTR4]], align 8528// OMP60-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i64 0529// OMP60-NEXT: [[ARR:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 3530// OMP60-NEXT: [[ARRAYIDX6:%.*]] = getelementptr inbounds nuw [4 x i32], ptr [[ARR]], i64 0, i64 0531// OMP60-NEXT: [[A7:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0532// OMP60-NEXT: [[TMP3:%.*]] = load i32, ptr [[A7]], align 8533// OMP60-NEXT: [[CONV:%.*]] = sext i32 [[TMP3]] to i64534// OMP60-NEXT: [[TMP4:%.*]] = mul nuw i64 [[CONV]], 4535// OMP60-NEXT: [[A8:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0536// OMP60-NEXT: [[TMP5:%.*]] = load i32, ptr [[A8]], align 8537// OMP60-NEXT: [[TMP6:%.*]] = sext i32 [[TMP5]] to i64538// OMP60-NEXT: [[LB_ADD_LEN:%.*]] = add nsw i64 -1, [[TMP6]]539// OMP60-NEXT: [[ARR9:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 3540// OMP60-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw [4 x i32], ptr [[ARR9]], i64 0, i64 [[LB_ADD_LEN]]541// OMP60-NEXT: [[PTR11:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1542// OMP60-NEXT: [[PTR12:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1543// OMP60-NEXT: [[TMP7:%.*]] = load ptr, ptr [[PTR12]], align 8544// OMP60-NEXT: [[ARRAYIDX13:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP7]], i64 0545// OMP60-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[ARRAYIDX10]], i32 1546// OMP60-NEXT: [[TMP9:%.*]] = ptrtoint ptr [[TMP8]] to i64547// OMP60-NEXT: [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64548// OMP60-NEXT: [[TMP11:%.*]] = sub i64 [[TMP9]], [[TMP10]]549// OMP60-NEXT: [[TMP12:%.*]] = sdiv exact i64 [[TMP11]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)550// OMP60-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes.1, i64 56, i1 false)551// OMP60-NEXT: [[TMP13:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0552// OMP60-NEXT: store ptr [[THIS1]], ptr [[TMP13]], align 8553// OMP60-NEXT: [[TMP14:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0554// OMP60-NEXT: store ptr [[A]], ptr [[TMP14]], align 8555// OMP60-NEXT: [[TMP15:%.*]] = getelementptr inbounds [7 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0556// OMP60-NEXT: store i64 [[TMP12]], ptr [[TMP15]], align 8557// OMP60-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0558// OMP60-NEXT: store ptr null, ptr [[TMP16]], align 8559// OMP60-NEXT: [[TMP17:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1560// OMP60-NEXT: store ptr [[THIS1]], ptr [[TMP17]], align 8561// OMP60-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1562// OMP60-NEXT: store ptr [[A]], ptr [[TMP18]], align 8563// OMP60-NEXT: [[TMP19:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1564// OMP60-NEXT: store ptr null, ptr [[TMP19]], align 8565// OMP60-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2566// OMP60-NEXT: store ptr [[PTR]], ptr [[TMP20]], align 8567// OMP60-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2568// OMP60-NEXT: store ptr [[ARRAYIDX]], ptr [[TMP21]], align 8569// OMP60-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2570// OMP60-NEXT: store ptr null, ptr [[TMP22]], align 8571// OMP60-NEXT: [[TMP23:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3572// OMP60-NEXT: store ptr [[THIS1]], ptr [[TMP23]], align 8573// OMP60-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 3574// OMP60-NEXT: store ptr [[TMP1]], ptr [[TMP24]], align 8575// OMP60-NEXT: [[TMP25:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3576// OMP60-NEXT: store ptr null, ptr [[TMP25]], align 8577// OMP60-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4578// OMP60-NEXT: store ptr [[PTR3]], ptr [[TMP26]], align 8579// OMP60-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 4580// OMP60-NEXT: store ptr [[ARRAYIDX5]], ptr [[TMP27]], align 8581// OMP60-NEXT: [[TMP28:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4582// OMP60-NEXT: store ptr null, ptr [[TMP28]], align 8583// OMP60-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5584// OMP60-NEXT: store ptr [[THIS1]], ptr [[TMP29]], align 8585// OMP60-NEXT: [[TMP30:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 5586// OMP60-NEXT: store ptr [[ARRAYIDX6]], ptr [[TMP30]], align 8587// OMP60-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 5588// OMP60-NEXT: store i64 [[TMP4]], ptr [[TMP31]], align 8589// OMP60-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5590// OMP60-NEXT: store ptr null, ptr [[TMP32]], align 8591// OMP60-NEXT: [[TMP33:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6592// OMP60-NEXT: store ptr [[PTR11]], ptr [[TMP33]], align 8593// OMP60-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 6594// OMP60-NEXT: store ptr [[ARRAYIDX13]], ptr [[TMP34]], align 8595// OMP60-NEXT: [[TMP35:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6596// OMP60-NEXT: store ptr null, ptr [[TMP35]], align 8597// OMP60-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0598// OMP60-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0599// OMP60-NEXT: [[TMP38:%.*]] = getelementptr inbounds [7 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0600// OMP60-NEXT: call void @__tgt_target_data_begin_mapper(ptr @[[GLOB1]], i64 -1, i32 7, ptr [[TMP36]], ptr [[TMP37]], ptr [[TMP38]], ptr @.offload_maptypes.2, ptr null, ptr null)601// OMP60-NEXT: [[TMP39:%.*]] = load ptr, ptr [[TMP17]], align 8602// OMP60-NEXT: store ptr [[TMP39]], ptr [[TMP]], align 8603// OMP60-NEXT: [[TMP40:%.*]] = load ptr, ptr [[TMP20]], align 8604// OMP60-NEXT: store ptr [[TMP40]], ptr [[_TMP14]], align 8605// OMP60-NEXT: [[TMP41:%.*]] = load ptr, ptr [[TMP23]], align 8606// OMP60-NEXT: store ptr [[TMP41]], ptr [[_TMP15]], align 8607// OMP60-NEXT: [[TMP42:%.*]] = load ptr, ptr [[TMP20]], align 8608// OMP60-NEXT: store ptr [[TMP42]], ptr [[_TMP16]], align 8609// OMP60-NEXT: [[TMP43:%.*]] = load ptr, ptr [[TMP29]], align 8610// OMP60-NEXT: store ptr [[TMP43]], ptr [[_TMP17]], align 8611// OMP60-NEXT: [[TMP44:%.*]] = load ptr, ptr [[TMP20]], align 8612// OMP60-NEXT: store ptr [[TMP44]], ptr [[_TMP18]], align 8613// OMP60-NEXT: [[TMP45:%.*]] = load ptr, ptr [[TMP]], align 8, !nonnull [[META3]], !align [[META4]]614// OMP60-NEXT: [[TMP46:%.*]] = load i32, ptr [[TMP45]], align 4615// OMP60-NEXT: [[INC:%.*]] = add nsw i32 [[TMP46]], 1616// OMP60-NEXT: store i32 [[INC]], ptr [[TMP45]], align 4617// OMP60-NEXT: [[TMP47:%.*]] = load ptr, ptr [[_TMP18]], align 8, !nonnull [[META3]], !align [[META5:![0-9]+]]618// OMP60-NEXT: [[TMP48:%.*]] = load ptr, ptr [[TMP47]], align 8619// OMP60-NEXT: [[TMP49:%.*]] = load i32, ptr [[TMP48]], align 4620// OMP60-NEXT: [[INC19:%.*]] = add nsw i32 [[TMP49]], 1621// OMP60-NEXT: store i32 [[INC19]], ptr [[TMP48]], align 4622// OMP60-NEXT: [[TMP50:%.*]] = load ptr, ptr [[_TMP15]], align 8, !nonnull [[META3]], !align [[META4]]623// OMP60-NEXT: [[TMP51:%.*]] = load i32, ptr [[TMP50]], align 4624// OMP60-NEXT: [[INC20:%.*]] = add nsw i32 [[TMP51]], 1625// OMP60-NEXT: store i32 [[INC20]], ptr [[TMP50]], align 4626// OMP60-NEXT: [[TMP52:%.*]] = load ptr, ptr [[_TMP17]], align 8, !nonnull [[META3]], !align [[META4]]627// OMP60-NEXT: [[ARRAYIDX21:%.*]] = getelementptr inbounds [4 x i32], ptr [[TMP52]], i64 0, i64 0628// OMP60-NEXT: [[TMP53:%.*]] = load i32, ptr [[ARRAYIDX21]], align 4629// OMP60-NEXT: [[INC22:%.*]] = add nsw i32 [[TMP53]], 1630// OMP60-NEXT: store i32 [[INC22]], ptr [[ARRAYIDX21]], align 4631// OMP60-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0632// OMP60-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0633// OMP60-NEXT: [[TMP56:%.*]] = getelementptr inbounds [7 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0634// OMP60-NEXT: call void @__tgt_target_data_end_mapper(ptr @[[GLOB1]], i64 -1, i32 7, ptr [[TMP54]], ptr [[TMP55]], ptr [[TMP56]], ptr @.offload_maptypes.2, ptr null, ptr null)635// OMP60-NEXT: ret void636//637//638// OMP60-LABEL: define linkonce_odr void @_ZN1SC2Ev(639// OMP60-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) unnamed_addr #[[ATTR2]] comdat {640// OMP60-NEXT: [[ENTRY:.*:]]641// OMP60-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8642// OMP60-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8643// OMP60-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8644// OMP60-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0645// OMP60-NEXT: store i32 0, ptr [[A]], align 8646// OMP60-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1647// OMP60-NEXT: [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0648// OMP60-NEXT: store ptr [[A2]], ptr [[PTR]], align 8649// OMP60-NEXT: [[REF:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 2650// OMP60-NEXT: [[A3:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0651// OMP60-NEXT: store ptr [[A3]], ptr [[REF]], align 8652// OMP60-NEXT: ret void653//654//655// SIMD-ONLY0-LABEL: define dso_local noundef signext i32 @main(656// SIMD-ONLY0-SAME: ) #[[ATTR0:[0-9]+]] {657// SIMD-ONLY0-NEXT: [[ENTRY:.*:]]658// SIMD-ONLY0-NEXT: [[RETVAL:%.*]] = alloca i32, align 4659// SIMD-ONLY0-NEXT: [[A:%.*]] = alloca float, align 4660// SIMD-ONLY0-NEXT: [[PTR:%.*]] = alloca ptr, align 8661// SIMD-ONLY0-NEXT: [[REF:%.*]] = alloca ptr, align 8662// SIMD-ONLY0-NEXT: [[ARR:%.*]] = alloca [4 x float], align 4663// SIMD-ONLY0-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 8664// SIMD-ONLY0-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 8665// SIMD-ONLY0-NEXT: [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 8666// SIMD-ONLY0-NEXT: [[TMP:%.*]] = alloca ptr, align 8667// SIMD-ONLY0-NEXT: store i32 0, ptr [[RETVAL]], align 4668// SIMD-ONLY0-NEXT: store float 0.000000e+00, ptr [[A]], align 4669// SIMD-ONLY0-NEXT: store ptr [[A]], ptr [[PTR]], align 8670// SIMD-ONLY0-NEXT: store ptr [[A]], ptr [[REF]], align 8671// SIMD-ONLY0-NEXT: [[TMP0:%.*]] = load float, ptr [[A]], align 4672// SIMD-ONLY0-NEXT: [[CONV:%.*]] = fptosi float [[TMP0]] to i32673// SIMD-ONLY0-NEXT: [[TMP1:%.*]] = zext i32 [[CONV]] to i64674// SIMD-ONLY0-NEXT: [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()675// SIMD-ONLY0-NEXT: store ptr [[TMP2]], ptr [[SAVED_STACK]], align 8676// SIMD-ONLY0-NEXT: [[VLA:%.*]] = alloca float, i64 [[TMP1]], align 4677// SIMD-ONLY0-NEXT: store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 8678// SIMD-ONLY0-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 8 dereferenceable(40) [[S]])679// SIMD-ONLY0-NEXT: call void @_ZN1S3fooEv(ptr noundef nonnull align 8 dereferenceable(40) [[S]])680// SIMD-ONLY0-NEXT: [[TMP3:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META2:![0-9]+]], !align [[META3:![0-9]+]]681// SIMD-ONLY0-NEXT: store ptr [[TMP3]], ptr [[TMP]], align 8682// SIMD-ONLY0-NEXT: [[TMP4:%.*]] = load float, ptr [[A]], align 4683// SIMD-ONLY0-NEXT: [[INC:%.*]] = fadd float [[TMP4]], 1.000000e+00684// SIMD-ONLY0-NEXT: store float [[INC]], ptr [[A]], align 4685// SIMD-ONLY0-NEXT: [[TMP5:%.*]] = load ptr, ptr [[PTR]], align 8686// SIMD-ONLY0-NEXT: [[TMP6:%.*]] = load float, ptr [[TMP5]], align 4687// SIMD-ONLY0-NEXT: [[INC1:%.*]] = fadd float [[TMP6]], 1.000000e+00688// SIMD-ONLY0-NEXT: store float [[INC1]], ptr [[TMP5]], align 4689// SIMD-ONLY0-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP]], align 8, !nonnull [[META2]], !align [[META3]]690// SIMD-ONLY0-NEXT: [[TMP8:%.*]] = load float, ptr [[TMP7]], align 4691// SIMD-ONLY0-NEXT: [[INC2:%.*]] = fadd float [[TMP8]], 1.000000e+00692// SIMD-ONLY0-NEXT: store float [[INC2]], ptr [[TMP7]], align 4693// SIMD-ONLY0-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [4 x float], ptr [[ARR]], i64 0, i64 0694// SIMD-ONLY0-NEXT: [[TMP9:%.*]] = load float, ptr [[ARRAYIDX]], align 4695// SIMD-ONLY0-NEXT: [[INC3:%.*]] = fadd float [[TMP9]], 1.000000e+00696// SIMD-ONLY0-NEXT: store float [[INC3]], ptr [[ARRAYIDX]], align 4697// SIMD-ONLY0-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds float, ptr [[VLA]], i64 0698// SIMD-ONLY0-NEXT: [[TMP10:%.*]] = load float, ptr [[ARRAYIDX4]], align 4699// SIMD-ONLY0-NEXT: [[INC5:%.*]] = fadd float [[TMP10]], 1.000000e+00700// SIMD-ONLY0-NEXT: store float [[INC5]], ptr [[ARRAYIDX4]], align 4701// SIMD-ONLY0-NEXT: [[TMP11:%.*]] = load float, ptr [[A]], align 4702// SIMD-ONLY0-NEXT: [[CONV6:%.*]] = fptosi float [[TMP11]] to i32703// SIMD-ONLY0-NEXT: store i32 [[CONV6]], ptr [[RETVAL]], align 4704// SIMD-ONLY0-NEXT: [[TMP12:%.*]] = load ptr, ptr [[SAVED_STACK]], align 8705// SIMD-ONLY0-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP12]])706// SIMD-ONLY0-NEXT: [[TMP13:%.*]] = load i32, ptr [[RETVAL]], align 4707// SIMD-ONLY0-NEXT: ret i32 [[TMP13]]708//709//710// SIMD-ONLY0-LABEL: define linkonce_odr void @_ZN1SC1Ev(711// SIMD-ONLY0-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) unnamed_addr #[[ATTR2:[0-9]+]] comdat {712// SIMD-ONLY0-NEXT: [[ENTRY:.*:]]713// SIMD-ONLY0-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8714// SIMD-ONLY0-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8715// SIMD-ONLY0-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8716// SIMD-ONLY0-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 8 dereferenceable(40) [[THIS1]])717// SIMD-ONLY0-NEXT: ret void718//719//720// SIMD-ONLY0-LABEL: define linkonce_odr void @_ZN1S3fooEv(721// SIMD-ONLY0-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) #[[ATTR2]] comdat {722// SIMD-ONLY0-NEXT: [[ENTRY:.*:]]723// SIMD-ONLY0-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8724// SIMD-ONLY0-NEXT: [[A:%.*]] = alloca ptr, align 8725// SIMD-ONLY0-NEXT: [[PTR:%.*]] = alloca ptr, align 8726// SIMD-ONLY0-NEXT: [[REF:%.*]] = alloca ptr, align 8727// SIMD-ONLY0-NEXT: [[PTR5:%.*]] = alloca ptr, align 8728// SIMD-ONLY0-NEXT: [[ARR:%.*]] = alloca ptr, align 8729// SIMD-ONLY0-NEXT: [[TMP:%.*]] = alloca ptr, align 8730// SIMD-ONLY0-NEXT: [[_TMP8:%.*]] = alloca ptr, align 8731// SIMD-ONLY0-NEXT: [[_TMP9:%.*]] = alloca ptr, align 8732// SIMD-ONLY0-NEXT: [[_TMP10:%.*]] = alloca ptr, align 8733// SIMD-ONLY0-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8734// SIMD-ONLY0-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8735// SIMD-ONLY0-NEXT: [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0736// SIMD-ONLY0-NEXT: store ptr [[A2]], ptr [[A]], align 8737// SIMD-ONLY0-NEXT: [[PTR3:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1738// SIMD-ONLY0-NEXT: store ptr [[PTR3]], ptr [[PTR]], align 8739// SIMD-ONLY0-NEXT: [[REF4:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 2740// SIMD-ONLY0-NEXT: [[TMP0:%.*]] = load ptr, ptr [[REF4]], align 8, !nonnull [[META2]], !align [[META3]]741// SIMD-ONLY0-NEXT: store ptr [[TMP0]], ptr [[REF]], align 8742// SIMD-ONLY0-NEXT: [[PTR6:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1743// SIMD-ONLY0-NEXT: store ptr [[PTR6]], ptr [[PTR5]], align 8744// SIMD-ONLY0-NEXT: [[ARR7:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 3745// SIMD-ONLY0-NEXT: store ptr [[ARR7]], ptr [[ARR]], align 8746// SIMD-ONLY0-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 8, !nonnull [[META2]], !align [[META3]]747// SIMD-ONLY0-NEXT: store ptr [[TMP1]], ptr [[TMP]], align 8748// SIMD-ONLY0-NEXT: [[TMP2:%.*]] = load ptr, ptr [[PTR5]], align 8, !nonnull [[META2]], !align [[META4:![0-9]+]]749// SIMD-ONLY0-NEXT: store ptr [[TMP2]], ptr [[_TMP8]], align 8750// SIMD-ONLY0-NEXT: [[TMP3:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META2]], !align [[META3]]751// SIMD-ONLY0-NEXT: store ptr [[TMP3]], ptr [[_TMP9]], align 8752// SIMD-ONLY0-NEXT: [[TMP4:%.*]] = load ptr, ptr [[ARR]], align 8, !nonnull [[META2]], !align [[META3]]753// SIMD-ONLY0-NEXT: store ptr [[TMP4]], ptr [[_TMP10]], align 8754// SIMD-ONLY0-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 8, !nonnull [[META2]], !align [[META3]]755// SIMD-ONLY0-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4756// SIMD-ONLY0-NEXT: [[INC:%.*]] = add nsw i32 [[TMP6]], 1757// SIMD-ONLY0-NEXT: store i32 [[INC]], ptr [[TMP5]], align 4758// SIMD-ONLY0-NEXT: [[TMP7:%.*]] = load ptr, ptr [[_TMP8]], align 8, !nonnull [[META2]], !align [[META4]]759// SIMD-ONLY0-NEXT: [[TMP8:%.*]] = load ptr, ptr [[TMP7]], align 8760// SIMD-ONLY0-NEXT: [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 4761// SIMD-ONLY0-NEXT: [[INC11:%.*]] = add nsw i32 [[TMP9]], 1762// SIMD-ONLY0-NEXT: store i32 [[INC11]], ptr [[TMP8]], align 4763// SIMD-ONLY0-NEXT: [[TMP10:%.*]] = load ptr, ptr [[_TMP9]], align 8, !nonnull [[META2]], !align [[META3]]764// SIMD-ONLY0-NEXT: [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 4765// SIMD-ONLY0-NEXT: [[INC12:%.*]] = add nsw i32 [[TMP11]], 1766// SIMD-ONLY0-NEXT: store i32 [[INC12]], ptr [[TMP10]], align 4767// SIMD-ONLY0-NEXT: [[TMP12:%.*]] = load ptr, ptr [[_TMP10]], align 8, !nonnull [[META2]], !align [[META3]]768// SIMD-ONLY0-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [4 x i32], ptr [[TMP12]], i64 0, i64 0769// SIMD-ONLY0-NEXT: [[TMP13:%.*]] = load i32, ptr [[ARRAYIDX]], align 4770// SIMD-ONLY0-NEXT: [[INC13:%.*]] = add nsw i32 [[TMP13]], 1771// SIMD-ONLY0-NEXT: store i32 [[INC13]], ptr [[ARRAYIDX]], align 4772// SIMD-ONLY0-NEXT: ret void773//774//775// SIMD-ONLY0-LABEL: define linkonce_odr void @_ZN1SC2Ev(776// SIMD-ONLY0-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) unnamed_addr #[[ATTR2]] comdat {777// SIMD-ONLY0-NEXT: [[ENTRY:.*:]]778// SIMD-ONLY0-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8779// SIMD-ONLY0-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8780// SIMD-ONLY0-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8781// SIMD-ONLY0-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0782// SIMD-ONLY0-NEXT: store i32 0, ptr [[A]], align 8783// SIMD-ONLY0-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1784// SIMD-ONLY0-NEXT: [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0785// SIMD-ONLY0-NEXT: store ptr [[A2]], ptr [[PTR]], align 8786// SIMD-ONLY0-NEXT: [[REF:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 2787// SIMD-ONLY0-NEXT: [[A3:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0788// SIMD-ONLY0-NEXT: store ptr [[A3]], ptr [[REF]], align 8789// SIMD-ONLY0-NEXT: ret void790//791//792// SIMD-ONLY0-OMP60-LABEL: define dso_local noundef signext i32 @main(793// SIMD-ONLY0-OMP60-SAME: i32 noundef signext [[ARGC:%.*]], ptr noundef [[ARGV:%.*]]) #[[ATTR0:[0-9]+]] {794// SIMD-ONLY0-OMP60-NEXT: [[ENTRY:.*:]]795// SIMD-ONLY0-OMP60-NEXT: [[RETVAL:%.*]] = alloca i32, align 4796// SIMD-ONLY0-OMP60-NEXT: [[ARGC_ADDR:%.*]] = alloca i32, align 4797// SIMD-ONLY0-OMP60-NEXT: [[ARGV_ADDR:%.*]] = alloca ptr, align 8798// SIMD-ONLY0-OMP60-NEXT: [[A:%.*]] = alloca float, align 4799// SIMD-ONLY0-OMP60-NEXT: [[PTR:%.*]] = alloca ptr, align 8800// SIMD-ONLY0-OMP60-NEXT: [[REF:%.*]] = alloca ptr, align 8801// SIMD-ONLY0-OMP60-NEXT: [[ARR:%.*]] = alloca [4 x float], align 4802// SIMD-ONLY0-OMP60-NEXT: [[SAVED_STACK:%.*]] = alloca ptr, align 8803// SIMD-ONLY0-OMP60-NEXT: [[__VLA_EXPR0:%.*]] = alloca i64, align 8804// SIMD-ONLY0-OMP60-NEXT: [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 8805// SIMD-ONLY0-OMP60-NEXT: [[TMP:%.*]] = alloca ptr, align 8806// SIMD-ONLY0-OMP60-NEXT: store i32 0, ptr [[RETVAL]], align 4807// SIMD-ONLY0-OMP60-NEXT: store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 4808// SIMD-ONLY0-OMP60-NEXT: store ptr [[ARGV]], ptr [[ARGV_ADDR]], align 8809// SIMD-ONLY0-OMP60-NEXT: store float 0.000000e+00, ptr [[A]], align 4810// SIMD-ONLY0-OMP60-NEXT: store ptr [[A]], ptr [[PTR]], align 8811// SIMD-ONLY0-OMP60-NEXT: store ptr [[A]], ptr [[REF]], align 8812// SIMD-ONLY0-OMP60-NEXT: [[TMP0:%.*]] = load float, ptr [[A]], align 4813// SIMD-ONLY0-OMP60-NEXT: [[CONV:%.*]] = fptosi float [[TMP0]] to i32814// SIMD-ONLY0-OMP60-NEXT: [[TMP1:%.*]] = zext i32 [[CONV]] to i64815// SIMD-ONLY0-OMP60-NEXT: [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()816// SIMD-ONLY0-OMP60-NEXT: store ptr [[TMP2]], ptr [[SAVED_STACK]], align 8817// SIMD-ONLY0-OMP60-NEXT: [[VLA:%.*]] = alloca float, i64 [[TMP1]], align 4818// SIMD-ONLY0-OMP60-NEXT: store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 8819// SIMD-ONLY0-OMP60-NEXT: call void @_ZN1SC1Ev(ptr noundef nonnull align 8 dereferenceable(40) [[S]])820// SIMD-ONLY0-OMP60-NEXT: call void @_ZN1S3fooEv(ptr noundef nonnull align 8 dereferenceable(40) [[S]])821// SIMD-ONLY0-OMP60-NEXT: [[TMP3:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META2:![0-9]+]], !align [[META3:![0-9]+]]822// SIMD-ONLY0-OMP60-NEXT: store ptr [[TMP3]], ptr [[TMP]], align 8823// SIMD-ONLY0-OMP60-NEXT: [[TMP4:%.*]] = load float, ptr [[A]], align 4824// SIMD-ONLY0-OMP60-NEXT: [[INC:%.*]] = fadd float [[TMP4]], 1.000000e+00825// SIMD-ONLY0-OMP60-NEXT: store float [[INC]], ptr [[A]], align 4826// SIMD-ONLY0-OMP60-NEXT: [[TMP5:%.*]] = load ptr, ptr [[PTR]], align 8827// SIMD-ONLY0-OMP60-NEXT: [[TMP6:%.*]] = load float, ptr [[TMP5]], align 4828// SIMD-ONLY0-OMP60-NEXT: [[INC1:%.*]] = fadd float [[TMP6]], 1.000000e+00829// SIMD-ONLY0-OMP60-NEXT: store float [[INC1]], ptr [[TMP5]], align 4830// SIMD-ONLY0-OMP60-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TMP]], align 8, !nonnull [[META2]], !align [[META3]]831// SIMD-ONLY0-OMP60-NEXT: [[TMP8:%.*]] = load float, ptr [[TMP7]], align 4832// SIMD-ONLY0-OMP60-NEXT: [[INC2:%.*]] = fadd float [[TMP8]], 1.000000e+00833// SIMD-ONLY0-OMP60-NEXT: store float [[INC2]], ptr [[TMP7]], align 4834// SIMD-ONLY0-OMP60-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [4 x float], ptr [[ARR]], i64 0, i64 0835// SIMD-ONLY0-OMP60-NEXT: [[TMP9:%.*]] = load float, ptr [[ARRAYIDX]], align 4836// SIMD-ONLY0-OMP60-NEXT: [[INC3:%.*]] = fadd float [[TMP9]], 1.000000e+00837// SIMD-ONLY0-OMP60-NEXT: store float [[INC3]], ptr [[ARRAYIDX]], align 4838// SIMD-ONLY0-OMP60-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds float, ptr [[VLA]], i64 0839// SIMD-ONLY0-OMP60-NEXT: [[TMP10:%.*]] = load float, ptr [[ARRAYIDX4]], align 4840// SIMD-ONLY0-OMP60-NEXT: [[INC5:%.*]] = fadd float [[TMP10]], 1.000000e+00841// SIMD-ONLY0-OMP60-NEXT: store float [[INC5]], ptr [[ARRAYIDX4]], align 4842// SIMD-ONLY0-OMP60-NEXT: [[TMP11:%.*]] = load float, ptr [[A]], align 4843// SIMD-ONLY0-OMP60-NEXT: [[CONV6:%.*]] = fptosi float [[TMP11]] to i32844// SIMD-ONLY0-OMP60-NEXT: store i32 [[CONV6]], ptr [[RETVAL]], align 4845// SIMD-ONLY0-OMP60-NEXT: [[TMP12:%.*]] = load ptr, ptr [[SAVED_STACK]], align 8846// SIMD-ONLY0-OMP60-NEXT: call void @llvm.stackrestore.p0(ptr [[TMP12]])847// SIMD-ONLY0-OMP60-NEXT: [[TMP13:%.*]] = load i32, ptr [[RETVAL]], align 4848// SIMD-ONLY0-OMP60-NEXT: ret i32 [[TMP13]]849//850//851// SIMD-ONLY0-OMP60-LABEL: define linkonce_odr void @_ZN1SC1Ev(852// SIMD-ONLY0-OMP60-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) unnamed_addr #[[ATTR2:[0-9]+]] comdat {853// SIMD-ONLY0-OMP60-NEXT: [[ENTRY:.*:]]854// SIMD-ONLY0-OMP60-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8855// SIMD-ONLY0-OMP60-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8856// SIMD-ONLY0-OMP60-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8857// SIMD-ONLY0-OMP60-NEXT: call void @_ZN1SC2Ev(ptr noundef nonnull align 8 dereferenceable(40) [[THIS1]])858// SIMD-ONLY0-OMP60-NEXT: ret void859//860//861// SIMD-ONLY0-OMP60-LABEL: define linkonce_odr void @_ZN1S3fooEv(862// SIMD-ONLY0-OMP60-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) #[[ATTR2]] comdat {863// SIMD-ONLY0-OMP60-NEXT: [[ENTRY:.*:]]864// SIMD-ONLY0-OMP60-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8865// SIMD-ONLY0-OMP60-NEXT: [[A:%.*]] = alloca ptr, align 8866// SIMD-ONLY0-OMP60-NEXT: [[PTR:%.*]] = alloca ptr, align 8867// SIMD-ONLY0-OMP60-NEXT: [[REF:%.*]] = alloca ptr, align 8868// SIMD-ONLY0-OMP60-NEXT: [[PTR5:%.*]] = alloca ptr, align 8869// SIMD-ONLY0-OMP60-NEXT: [[ARR:%.*]] = alloca ptr, align 8870// SIMD-ONLY0-OMP60-NEXT: [[PTR8:%.*]] = alloca ptr, align 8871// SIMD-ONLY0-OMP60-NEXT: [[TMP:%.*]] = alloca ptr, align 8872// SIMD-ONLY0-OMP60-NEXT: [[_TMP10:%.*]] = alloca ptr, align 8873// SIMD-ONLY0-OMP60-NEXT: [[_TMP11:%.*]] = alloca ptr, align 8874// SIMD-ONLY0-OMP60-NEXT: [[_TMP12:%.*]] = alloca ptr, align 8875// SIMD-ONLY0-OMP60-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8876// SIMD-ONLY0-OMP60-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8877// SIMD-ONLY0-OMP60-NEXT: [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0878// SIMD-ONLY0-OMP60-NEXT: store ptr [[A2]], ptr [[A]], align 8879// SIMD-ONLY0-OMP60-NEXT: [[PTR3:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1880// SIMD-ONLY0-OMP60-NEXT: store ptr [[PTR3]], ptr [[PTR]], align 8881// SIMD-ONLY0-OMP60-NEXT: [[REF4:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 2882// SIMD-ONLY0-OMP60-NEXT: [[TMP0:%.*]] = load ptr, ptr [[REF4]], align 8, !nonnull [[META2]], !align [[META3]]883// SIMD-ONLY0-OMP60-NEXT: store ptr [[TMP0]], ptr [[REF]], align 8884// SIMD-ONLY0-OMP60-NEXT: [[PTR6:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1885// SIMD-ONLY0-OMP60-NEXT: store ptr [[PTR6]], ptr [[PTR5]], align 8886// SIMD-ONLY0-OMP60-NEXT: [[ARR7:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 3887// SIMD-ONLY0-OMP60-NEXT: store ptr [[ARR7]], ptr [[ARR]], align 8888// SIMD-ONLY0-OMP60-NEXT: [[PTR9:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1889// SIMD-ONLY0-OMP60-NEXT: store ptr [[PTR9]], ptr [[PTR8]], align 8890// SIMD-ONLY0-OMP60-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 8, !nonnull [[META2]], !align [[META3]]891// SIMD-ONLY0-OMP60-NEXT: store ptr [[TMP1]], ptr [[TMP]], align 8892// SIMD-ONLY0-OMP60-NEXT: [[TMP2:%.*]] = load ptr, ptr [[PTR8]], align 8, !nonnull [[META2]], !align [[META4:![0-9]+]]893// SIMD-ONLY0-OMP60-NEXT: store ptr [[TMP2]], ptr [[_TMP10]], align 8894// SIMD-ONLY0-OMP60-NEXT: [[TMP3:%.*]] = load ptr, ptr [[REF]], align 8, !nonnull [[META2]], !align [[META3]]895// SIMD-ONLY0-OMP60-NEXT: store ptr [[TMP3]], ptr [[_TMP11]], align 8896// SIMD-ONLY0-OMP60-NEXT: [[TMP4:%.*]] = load ptr, ptr [[ARR]], align 8, !nonnull [[META2]], !align [[META3]]897// SIMD-ONLY0-OMP60-NEXT: store ptr [[TMP4]], ptr [[_TMP12]], align 8898// SIMD-ONLY0-OMP60-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 8, !nonnull [[META2]], !align [[META3]]899// SIMD-ONLY0-OMP60-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4900// SIMD-ONLY0-OMP60-NEXT: [[INC:%.*]] = add nsw i32 [[TMP6]], 1901// SIMD-ONLY0-OMP60-NEXT: store i32 [[INC]], ptr [[TMP5]], align 4902// SIMD-ONLY0-OMP60-NEXT: [[TMP7:%.*]] = load ptr, ptr [[_TMP10]], align 8, !nonnull [[META2]], !align [[META4]]903// SIMD-ONLY0-OMP60-NEXT: [[TMP8:%.*]] = load ptr, ptr [[TMP7]], align 8904// SIMD-ONLY0-OMP60-NEXT: [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 4905// SIMD-ONLY0-OMP60-NEXT: [[INC13:%.*]] = add nsw i32 [[TMP9]], 1906// SIMD-ONLY0-OMP60-NEXT: store i32 [[INC13]], ptr [[TMP8]], align 4907// SIMD-ONLY0-OMP60-NEXT: [[TMP10:%.*]] = load ptr, ptr [[_TMP11]], align 8, !nonnull [[META2]], !align [[META3]]908// SIMD-ONLY0-OMP60-NEXT: [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 4909// SIMD-ONLY0-OMP60-NEXT: [[INC14:%.*]] = add nsw i32 [[TMP11]], 1910// SIMD-ONLY0-OMP60-NEXT: store i32 [[INC14]], ptr [[TMP10]], align 4911// SIMD-ONLY0-OMP60-NEXT: [[TMP12:%.*]] = load ptr, ptr [[_TMP12]], align 8, !nonnull [[META2]], !align [[META3]]912// SIMD-ONLY0-OMP60-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [4 x i32], ptr [[TMP12]], i64 0, i64 0913// SIMD-ONLY0-OMP60-NEXT: [[TMP13:%.*]] = load i32, ptr [[ARRAYIDX]], align 4914// SIMD-ONLY0-OMP60-NEXT: [[INC15:%.*]] = add nsw i32 [[TMP13]], 1915// SIMD-ONLY0-OMP60-NEXT: store i32 [[INC15]], ptr [[ARRAYIDX]], align 4916// SIMD-ONLY0-OMP60-NEXT: ret void917//918//919// SIMD-ONLY0-OMP60-LABEL: define linkonce_odr void @_ZN1SC2Ev(920// SIMD-ONLY0-OMP60-SAME: ptr noundef nonnull align 8 dereferenceable(40) [[THIS:%.*]]) unnamed_addr #[[ATTR2]] comdat {921// SIMD-ONLY0-OMP60-NEXT: [[ENTRY:.*:]]922// SIMD-ONLY0-OMP60-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8923// SIMD-ONLY0-OMP60-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8924// SIMD-ONLY0-OMP60-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8925// SIMD-ONLY0-OMP60-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0926// SIMD-ONLY0-OMP60-NEXT: store i32 0, ptr [[A]], align 8927// SIMD-ONLY0-OMP60-NEXT: [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 1928// SIMD-ONLY0-OMP60-NEXT: [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0929// SIMD-ONLY0-OMP60-NEXT: store ptr [[A2]], ptr [[PTR]], align 8930// SIMD-ONLY0-OMP60-NEXT: [[REF:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 2931// SIMD-ONLY0-OMP60-NEXT: [[A3:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[THIS1]], i32 0, i32 0932// SIMD-ONLY0-OMP60-NEXT: store ptr [[A3]], ptr [[REF]], align 8933// SIMD-ONLY0-OMP60-NEXT: ret void934//935//.936// CHECK: [[META3]] = !{}937// CHECK: [[META4]] = !{i64 4}938// CHECK: [[META5]] = !{i64 8}939//.940// OMP60: [[META3]] = !{}941// OMP60: [[META4]] = !{i64 4}942// OMP60: [[META5]] = !{i64 8}943//.944// SIMD-ONLY0: [[META2]] = !{}945// SIMD-ONLY0: [[META3]] = !{i64 4}946// SIMD-ONLY0: [[META4]] = !{i64 8}947//.948// SIMD-ONLY0-OMP60: [[META2]] = !{}949// SIMD-ONLY0-OMP60: [[META3]] = !{i64 4}950// SIMD-ONLY0-OMP60: [[META4]] = !{i64 8}951//.952