brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.5 KiB · a407070 Raw
267 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _2// RUN: %clang_cc1 -verify -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - -Wno-openmp-mapping | FileCheck %s --check-prefix=CHECK13// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s -Wno-openmp-mapping4// RUN: %clang_cc1 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - -Wno-openmp-mapping | FileCheck %s --check-prefix=CHECK15// RUN: %clang_cc1 -verify -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - -Wno-openmp-mapping | FileCheck %s --check-prefix=CHECK26// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s -Wno-openmp-mapping7// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - -Wno-openmp-mapping | FileCheck %s --check-prefix=CHECK28// expected-no-diagnostics9#ifndef HEADER10#define HEADER11 12class A {13public:14  double *ptr = nullptr;15  virtual void foo() = 0;16};17 18class B : public A {19public:20  virtual void foo() override;21};22 23void B::foo() {24#pragma omp target data use_device_ptr(A::ptr)25  {26  }27}28 29void foo() {30  B b;31  b.foo();32}33 34#endif35// CHECK-LABEL: define {{[^@]+}}@_ZN1B3fooEv36// CHECK-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR0:[0-9]+]] align 2 {37// CHECK-NEXT:  entry:38// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 839// CHECK-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 840// CHECK-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 841// CHECK-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 842// CHECK-NEXT:    [[PTR4:%.*]] = alloca ptr, align 843// CHECK-NEXT:    [[TMP:%.*]] = alloca ptr, align 844// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 845// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 846// CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [[CLASS_A:%.*]], ptr [[THIS1]], i32 0, i32 147// CHECK-NEXT:    [[PTR2:%.*]] = getelementptr inbounds [[CLASS_A]], ptr [[THIS1]], i32 0, i32 148// CHECK-NEXT:    [[PTR3:%.*]] = getelementptr inbounds [[CLASS_A]], ptr [[THIS1]], i32 0, i32 149// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR3]], align 850// CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 051// CHECK-NEXT:    store ptr [[THIS1]], ptr [[TMP1]], align 852// CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 053// CHECK-NEXT:    store ptr [[THIS1]], ptr [[TMP2]], align 854// CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 055// CHECK-NEXT:    store ptr null, ptr [[TMP3]], align 856// CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 157// CHECK-NEXT:    store ptr [[PTR2]], ptr [[TMP4]], align 858// CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 159// CHECK-NEXT:    store ptr [[TMP0]], ptr [[TMP5]], align 860// CHECK-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 161// CHECK-NEXT:    store ptr null, ptr [[TMP6]], align 862// CHECK-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 063// CHECK-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 064// CHECK-NEXT:    call void @__tgt_target_data_begin_mapper(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 2, ptr [[TMP7]], ptr [[TMP8]], ptr @.offload_sizes, ptr @.offload_maptypes, ptr null, ptr null)65// CHECK-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[TMP4]], align 866// CHECK-NEXT:    store ptr [[TMP9]], ptr [[PTR4]], align 867// CHECK-NEXT:    store ptr [[PTR4]], ptr [[TMP]], align 868// CHECK-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 069// CHECK-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 070// CHECK-NEXT:    call void @__tgt_target_data_end_mapper(ptr @[[GLOB1]], i64 -1, i32 2, ptr [[TMP10]], ptr [[TMP11]], ptr @.offload_sizes, ptr @.offload_maptypes, ptr null, ptr null)71// CHECK-NEXT:    ret void72// CHECK-LABEL: define {{[^@]+}}@_Z3foov73// CHECK-SAME: () #[[ATTR0]] {74// CHECK-NEXT:  entry:75// CHECK-NEXT:    [[B:%.*]] = alloca [[CLASS_B:%.*]], align 876// CHECK-NEXT:    call void @_ZN1BC1Ev(ptr noundef nonnull align 8 dereferenceable(16) [[B]]) #[[ATTR1:[0-9]+]]77// CHECK-NEXT:    call void @_ZN1B3fooEv(ptr noundef nonnull align 8 dereferenceable(16) [[B]])78// CHECK-NEXT:    ret void79// CHECK-LABEL: define {{[^@]+}}@_ZN1BC1Ev80// CHECK-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR2:[0-9]+]] comdat align 2 {81// CHECK-NEXT:  entry:82// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 883// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 884// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 885// CHECK-NEXT:    call void @_ZN1BC2Ev(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]]) #[[ATTR1]]86// CHECK-NEXT:    ret void87// CHECK-LABEL: define {{[^@]+}}@_ZN1BC2Ev88// CHECK-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR2]] comdat align 2 {89// CHECK-NEXT:  entry:90// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 891// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 892// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 893// CHECK-NEXT:    call void @_ZN1AC2Ev(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]]) #[[ATTR1]]94// CHECK-NEXT:    store ptr getelementptr inbounds inrange(-16, 8) ({ [3 x ptr] }, ptr @_ZTV1B, i32 0, i32 0, i32 2), ptr [[THIS1]], align 895// CHECK-NEXT:    ret void96// CHECK-LABEL: define {{[^@]+}}@_ZN1AC2Ev97// CHECK-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR2]] comdat align 2 {98// CHECK-NEXT:  entry:99// CHECK-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8100// CHECK-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8101// CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8102// CHECK-NEXT:    store ptr getelementptr inbounds inrange(-16, 8) ({ [3 x ptr] }, ptr @_ZTV1A, i32 0, i32 0, i32 2), ptr [[THIS1]], align 8103// CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [[CLASS_A:%.*]], ptr [[THIS1]], i32 0, i32 1104// CHECK-NEXT:    store ptr null, ptr [[PTR]], align 8105// CHECK-NEXT:    ret void106// CHECK1-LABEL: define {{[^@]+}}@_ZN1B3fooEv107// CHECK1-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR0:[0-9]+]] {108// CHECK1-NEXT:  entry:109// CHECK1-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8110// CHECK1-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 8111// CHECK1-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 8112// CHECK1-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 8113// CHECK1-NEXT:    [[TMP0:%.*]] = alloca ptr, align 8114// CHECK1-NEXT:    [[TMP:%.*]] = alloca ptr, align 8115// CHECK1-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8116// CHECK1-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8117// CHECK1-NEXT:    [[PTR:%.*]] = getelementptr inbounds nuw [[CLASS_A:%.*]], ptr [[THIS1]], i32 0, i32 1118// CHECK1-NEXT:    [[PTR2:%.*]] = getelementptr inbounds nuw [[CLASS_A]], ptr [[THIS1]], i32 0, i32 1119// CHECK1-NEXT:    [[PTR3:%.*]] = getelementptr inbounds nuw [[CLASS_A]], ptr [[THIS1]], i32 0, i32 1120// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[PTR3]], align 8121// CHECK1-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0122// CHECK1-NEXT:    store ptr [[THIS1]], ptr [[TMP2]], align 8123// CHECK1-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0124// CHECK1-NEXT:    store ptr [[THIS1]], ptr [[TMP3]], align 8125// CHECK1-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0126// CHECK1-NEXT:    store ptr null, ptr [[TMP4]], align 8127// CHECK1-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1128// CHECK1-NEXT:    store ptr [[PTR2]], ptr [[TMP5]], align 8129// CHECK1-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1130// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP6]], align 8131// CHECK1-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1132// CHECK1-NEXT:    store ptr null, ptr [[TMP7]], align 8133// CHECK1-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0134// CHECK1-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0135// CHECK1-NEXT:    call void @__tgt_target_data_begin_mapper(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 2, ptr [[TMP8]], ptr [[TMP9]], ptr @.offload_sizes, ptr @.offload_maptypes, ptr null, ptr null)136// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[TMP5]], align 8137// CHECK1-NEXT:    store ptr [[TMP10]], ptr [[TMP0]], align 8138// CHECK1-NEXT:    store ptr [[TMP0]], ptr [[TMP]], align 8139// CHECK1-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0140// CHECK1-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0141// CHECK1-NEXT:    call void @__tgt_target_data_end_mapper(ptr @[[GLOB1]], i64 -1, i32 2, ptr [[TMP11]], ptr [[TMP12]], ptr @.offload_sizes, ptr @.offload_maptypes, ptr null, ptr null)142// CHECK1-NEXT:    ret void143//144//145// CHECK1-LABEL: define {{[^@]+}}@_Z3foov146// CHECK1-SAME: () #[[ATTR0]] {147// CHECK1-NEXT:  entry:148// CHECK1-NEXT:    [[B:%.*]] = alloca [[CLASS_B:%.*]], align 8149// CHECK1-NEXT:    call void @_ZN1BC1Ev(ptr noundef nonnull align 8 dereferenceable(16) [[B]]) #[[ATTR1:[0-9]+]]150// CHECK1-NEXT:    call void @_ZN1B3fooEv(ptr noundef nonnull align 8 dereferenceable(16) [[B]])151// CHECK1-NEXT:    ret void152//153//154// CHECK1-LABEL: define {{[^@]+}}@_ZN1BC1Ev155// CHECK1-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat {156// CHECK1-NEXT:  entry:157// CHECK1-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8158// CHECK1-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8159// CHECK1-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8160// CHECK1-NEXT:    call void @_ZN1BC2Ev(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]]) #[[ATTR1]]161// CHECK1-NEXT:    ret void162//163//164// CHECK1-LABEL: define {{[^@]+}}@_ZN1BC2Ev165// CHECK1-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat {166// CHECK1-NEXT:  entry:167// CHECK1-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8168// CHECK1-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8169// CHECK1-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8170// CHECK1-NEXT:    call void @_ZN1AC2Ev(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]]) #[[ATTR1]]171// CHECK1-NEXT:    store ptr getelementptr inbounds inrange(-16, 8) ({ [3 x ptr] }, ptr @_ZTV1B, i32 0, i32 0, i32 2), ptr [[THIS1]], align 8172// CHECK1-NEXT:    ret void173//174//175// CHECK1-LABEL: define {{[^@]+}}@_ZN1AC2Ev176// CHECK1-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat {177// CHECK1-NEXT:  entry:178// CHECK1-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8179// CHECK1-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8180// CHECK1-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8181// CHECK1-NEXT:    store ptr getelementptr inbounds inrange(-16, 8) ({ [3 x ptr] }, ptr @_ZTV1A, i32 0, i32 0, i32 2), ptr [[THIS1]], align 8182// CHECK1-NEXT:    [[PTR:%.*]] = getelementptr inbounds nuw [[CLASS_A:%.*]], ptr [[THIS1]], i32 0, i32 1183// CHECK1-NEXT:    store ptr null, ptr [[PTR]], align 8184// CHECK1-NEXT:    ret void185//186//187// CHECK2-LABEL: define {{[^@]+}}@_ZN1B3fooEv188// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]]) unnamed_addr #[[ATTR0:[0-9]+]] align 2 {189// CHECK2-NEXT:  entry:190// CHECK2-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4191// CHECK2-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x ptr], align 4192// CHECK2-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x ptr], align 4193// CHECK2-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x ptr], align 4194// CHECK2-NEXT:    [[TMP0:%.*]] = alloca ptr, align 4195// CHECK2-NEXT:    [[TMP:%.*]] = alloca ptr, align 4196// CHECK2-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4197// CHECK2-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4198// CHECK2-NEXT:    [[PTR:%.*]] = getelementptr inbounds nuw [[CLASS_A:%.*]], ptr [[THIS1]], i32 0, i32 1199// CHECK2-NEXT:    [[PTR2:%.*]] = getelementptr inbounds nuw [[CLASS_A]], ptr [[THIS1]], i32 0, i32 1200// CHECK2-NEXT:    [[PTR3:%.*]] = getelementptr inbounds nuw [[CLASS_A]], ptr [[THIS1]], i32 0, i32 1201// CHECK2-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[PTR3]], align 4202// CHECK2-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0203// CHECK2-NEXT:    store ptr [[THIS1]], ptr [[TMP2]], align 4204// CHECK2-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0205// CHECK2-NEXT:    store ptr [[THIS1]], ptr [[TMP3]], align 4206// CHECK2-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0207// CHECK2-NEXT:    store ptr null, ptr [[TMP4]], align 4208// CHECK2-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1209// CHECK2-NEXT:    store ptr [[PTR2]], ptr [[TMP5]], align 4210// CHECK2-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1211// CHECK2-NEXT:    store ptr [[TMP1]], ptr [[TMP6]], align 4212// CHECK2-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1213// CHECK2-NEXT:    store ptr null, ptr [[TMP7]], align 4214// CHECK2-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0215// CHECK2-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0216// CHECK2-NEXT:    call void @__tgt_target_data_begin_mapper(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 2, ptr [[TMP8]], ptr [[TMP9]], ptr @.offload_sizes, ptr @.offload_maptypes, ptr null, ptr null)217// CHECK2-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[TMP5]], align 4218// CHECK2-NEXT:    store ptr [[TMP10]], ptr [[TMP0]], align 4219// CHECK2-NEXT:    store ptr [[TMP0]], ptr [[TMP]], align 4220// CHECK2-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0221// CHECK2-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0222// CHECK2-NEXT:    call void @__tgt_target_data_end_mapper(ptr @[[GLOB1]], i64 -1, i32 2, ptr [[TMP11]], ptr [[TMP12]], ptr @.offload_sizes, ptr @.offload_maptypes, ptr null, ptr null)223// CHECK2-NEXT:    ret void224//225//226// CHECK2-LABEL: define {{[^@]+}}@_Z3foov227// CHECK2-SAME: () #[[ATTR0]] {228// CHECK2-NEXT:  entry:229// CHECK2-NEXT:    [[B:%.*]] = alloca [[CLASS_B:%.*]], align 4230// CHECK2-NEXT:    call void @_ZN1BC1Ev(ptr noundef nonnull align 4 dereferenceable(8) [[B]]) #[[ATTR1:[0-9]+]]231// CHECK2-NEXT:    call void @_ZN1B3fooEv(ptr noundef nonnull align 4 dereferenceable(8) [[B]])232// CHECK2-NEXT:    ret void233//234//235// CHECK2-LABEL: define {{[^@]+}}@_ZN1BC1Ev236// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {237// CHECK2-NEXT:  entry:238// CHECK2-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4239// CHECK2-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4240// CHECK2-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4241// CHECK2-NEXT:    call void @_ZN1BC2Ev(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]]) #[[ATTR1]]242// CHECK2-NEXT:    ret void243//244//245// CHECK2-LABEL: define {{[^@]+}}@_ZN1BC2Ev246// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {247// CHECK2-NEXT:  entry:248// CHECK2-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4249// CHECK2-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4250// CHECK2-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4251// CHECK2-NEXT:    call void @_ZN1AC2Ev(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]]) #[[ATTR1]]252// CHECK2-NEXT:    store ptr getelementptr inbounds inrange(-8, 4) ({ [3 x ptr] }, ptr @_ZTV1B, i32 0, i32 0, i32 2), ptr [[THIS1]], align 4253// CHECK2-NEXT:    ret void254//255//256// CHECK2-LABEL: define {{[^@]+}}@_ZN1AC2Ev257// CHECK2-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {258// CHECK2-NEXT:  entry:259// CHECK2-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4260// CHECK2-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4261// CHECK2-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4262// CHECK2-NEXT:    store ptr getelementptr inbounds inrange(-8, 4) ({ [3 x ptr] }, ptr @_ZTV1A, i32 0, i32 0, i32 2), ptr [[THIS1]], align 4263// CHECK2-NEXT:    [[PTR:%.*]] = getelementptr inbounds nuw [[CLASS_A:%.*]], ptr [[THIS1]], i32 0, i32 1264// CHECK2-NEXT:    store ptr null, ptr [[PTR]], align 4265// CHECK2-NEXT:    ret void266//267