brintos

brintos / llvm-project-archived public Read only

0
0
Text · 193.9 KiB · e997111 Raw
2685 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 -DLAMBDA -verify -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK13// RUN: %clang_cc1 -DLAMBDA -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s4// RUN: %clang_cc1 -DLAMBDA -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK15// RUN: %clang_cc1 -DLAMBDA -verify -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK36// RUN: %clang_cc1 -DLAMBDA -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s7// RUN: %clang_cc1 -DLAMBDA -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 - | FileCheck %s --check-prefix=CHECK38 9// RUN: %clang_cc1 -DLAMBDA -verify -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK510// RUN: %clang_cc1 -DLAMBDA -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s11// RUN: %clang_cc1 -DLAMBDA -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK512// RUN: %clang_cc1 -DLAMBDA -verify -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK713// RUN: %clang_cc1 -DLAMBDA -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s14// RUN: %clang_cc1 -DLAMBDA -fopenmp-simd -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 - | FileCheck %s --check-prefix=CHECK715 16// RUN: %clang_cc1  -verify -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK917// RUN: %clang_cc1  -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s18// 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 - | FileCheck %s --check-prefix=CHECK919// RUN: %clang_cc1  -verify -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK1120// RUN: %clang_cc1  -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s21// 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 - | FileCheck %s --check-prefix=CHECK1122 23// RUN: %clang_cc1  -verify -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK1324// RUN: %clang_cc1  -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s25// RUN: %clang_cc1  -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK1326// RUN: %clang_cc1  -verify -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK1527// RUN: %clang_cc1  -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s28// RUN: %clang_cc1  -fopenmp-simd -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 - | FileCheck %s --check-prefix=CHECK1529// expected-no-diagnostics30#ifndef HEADER31#define HEADER32 33template <class T>34struct S {35  T f;36  S(T a) : f(a) {}37  S() : f() {}38  operator T() { return T(); }39  ~S() {}40};41 42template <typename T>43T tmain() {44  S<T> test;45  T t_var = T();46  T vec[] = {1, 2};47  S<T> s_arr[] = {1, 2};48  S<T> &var = test;49#pragma omp taskloop simd private(t_var, vec, s_arr, s_arr, var, var)50  for (int i = 0; i < 2; ++i) {51    vec[i] = t_var;52    s_arr[i] = var;53  }54  return T();55}56 57int main() {58  static int svar;59  volatile double g;60  volatile double &g1 = g;61 62  #ifdef LAMBDA63  [&]() {64    static float sfvar;65 66#pragma omp taskloop simd private(g, g1, svar, sfvar)67    for (int i = 0; i < 2; ++i) {68      g = 1;69      g1 = 1;70      svar = 3;71      sfvar = 4.0;72      [&]() {73	g = 2;74	g1 = 2;75	svar = 4;76	sfvar = 8.0;77 78      }();79    }80  }();81  return 0;82  #else83  S<float> test;84  int t_var = 0;85  int vec[] = {1, 2};86  S<float> s_arr[] = {1, 2};87  S<float> &var = test;88 89#pragma omp taskloop simd private(t_var, vec, s_arr, s_arr, var, var, svar)90  for (int i = 0; i < 2; ++i) {91    vec[i] = t_var;92    s_arr[i] = var;93  }94  int i;95 96#pragma omp taskloop simd97  for (i = 0; i < 2; ++i) {98    ;99  }100  return tmain<int>();101  #endif102}103 104 105 106 107 108 109#endif110// CHECK1-LABEL: define {{[^@]+}}@main111// CHECK1-SAME: () #[[ATTR0:[0-9]+]] {112// CHECK1-NEXT:  entry:113// CHECK1-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4114// CHECK1-NEXT:    [[G:%.*]] = alloca double, align 8115// CHECK1-NEXT:    [[G1:%.*]] = alloca ptr, align 8116// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 8117// CHECK1-NEXT:    store i32 0, ptr [[RETVAL]], align 4118// CHECK1-NEXT:    store ptr [[G]], ptr [[G1]], align 8119// CHECK1-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 0120// CHECK1-NEXT:    store ptr [[G]], ptr [[TMP0]], align 8121// CHECK1-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 1122// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[G1]], align 8, !nonnull [[META3:![0-9]+]], !align [[META4:![0-9]+]]123// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP1]], align 8124// CHECK1-NEXT:    call void @"_ZZ4mainENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(16) [[REF_TMP]])125// CHECK1-NEXT:    ret i32 0126//127//128// CHECK1-LABEL: define {{[^@]+}}@.omp_task_privates_map.129// CHECK1-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]], ptr noalias noundef [[TMP4:%.*]]) #[[ATTR4:[0-9]+]] {130// CHECK1-NEXT:  entry:131// CHECK1-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 8132// CHECK1-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 8133// CHECK1-NEXT:    [[DOTADDR2:%.*]] = alloca ptr, align 8134// CHECK1-NEXT:    [[DOTADDR3:%.*]] = alloca ptr, align 8135// CHECK1-NEXT:    [[DOTADDR4:%.*]] = alloca ptr, align 8136// CHECK1-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 8137// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 8138// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[DOTADDR2]], align 8139// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[DOTADDR3]], align 8140// CHECK1-NEXT:    store ptr [[TMP4]], ptr [[DOTADDR4]], align 8141// CHECK1-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[DOTADDR]], align 8142// CHECK1-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP5]], i32 0, i32 0143// CHECK1-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[DOTADDR1]], align 8144// CHECK1-NEXT:    store ptr [[TMP6]], ptr [[TMP7]], align 8145// CHECK1-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP5]], i32 0, i32 1146// CHECK1-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[DOTADDR2]], align 8147// CHECK1-NEXT:    store ptr [[TMP8]], ptr [[TMP9]], align 8148// CHECK1-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP5]], i32 0, i32 2149// CHECK1-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTADDR3]], align 8150// CHECK1-NEXT:    store ptr [[TMP10]], ptr [[TMP11]], align 8151// CHECK1-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP5]], i32 0, i32 3152// CHECK1-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTADDR4]], align 8153// CHECK1-NEXT:    store ptr [[TMP12]], ptr [[TMP13]], align 8154// CHECK1-NEXT:    ret void155//156//157// CHECK1-LABEL: define {{[^@]+}}@.omp_task_entry.158// CHECK1-SAME: (i32 noundef signext [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR5:[0-9]+]] {159// CHECK1-NEXT:  entry:160// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4161// CHECK1-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8162// CHECK1-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8163// CHECK1-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8164// CHECK1-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8165// CHECK1-NEXT:    [[DOTLB__ADDR_I:%.*]] = alloca i64, align 8166// CHECK1-NEXT:    [[DOTUB__ADDR_I:%.*]] = alloca i64, align 8167// CHECK1-NEXT:    [[DOTST__ADDR_I:%.*]] = alloca i64, align 8168// CHECK1-NEXT:    [[DOTLITER__ADDR_I:%.*]] = alloca i32, align 4169// CHECK1-NEXT:    [[DOTREDUCTIONS__ADDR_I:%.*]] = alloca ptr, align 8170// CHECK1-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8171// CHECK1-NEXT:    [[DOTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 8172// CHECK1-NEXT:    [[DOTPRIV_PTR_ADDR1_I:%.*]] = alloca ptr, align 8173// CHECK1-NEXT:    [[DOTPRIV_PTR_ADDR2_I:%.*]] = alloca ptr, align 8174// CHECK1-NEXT:    [[DOTPRIV_PTR_ADDR3_I:%.*]] = alloca ptr, align 8175// CHECK1-NEXT:    [[TMP_I:%.*]] = alloca ptr, align 8176// CHECK1-NEXT:    [[TMP5_I:%.*]] = alloca ptr, align 8177// CHECK1-NEXT:    [[I_I:%.*]] = alloca i32, align 4178// CHECK1-NEXT:    [[DOTOMP_IV_I:%.*]] = alloca i32, align 4179// CHECK1-NEXT:    [[REF_TMP_I:%.*]] = alloca [[CLASS_ANON_0:%.*]], align 8180// CHECK1-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4181// CHECK1-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 8182// CHECK1-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 4183// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 8184// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4185// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8186// CHECK1-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 0187// CHECK1-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2188// CHECK1-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0189// CHECK1-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8190// CHECK1-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES]], ptr [[TMP3]], i32 0, i32 1191// CHECK1-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 5192// CHECK1-NEXT:    [[TMP10:%.*]] = load i64, ptr [[TMP9]], align 8193// CHECK1-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 6194// CHECK1-NEXT:    [[TMP12:%.*]] = load i64, ptr [[TMP11]], align 8195// CHECK1-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 7196// CHECK1-NEXT:    [[TMP14:%.*]] = load i64, ptr [[TMP13]], align 8197// CHECK1-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 8198// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 8199// CHECK1-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 9200// CHECK1-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 8201// CHECK1-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])202// CHECK1-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META9:![0-9]+]])203// CHECK1-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META11:![0-9]+]])204// CHECK1-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])205// CHECK1-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META15:![0-9]+]])206// CHECK1-NEXT:    store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META17:![0-9]+]]207// CHECK1-NEXT:    store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META17]]208// CHECK1-NEXT:    store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META17]]209// CHECK1-NEXT:    store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META17]]210// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META17]]211// CHECK1-NEXT:    store i64 [[TMP10]], ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META17]]212// CHECK1-NEXT:    store i64 [[TMP12]], ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META17]]213// CHECK1-NEXT:    store i64 [[TMP14]], ptr [[DOTST__ADDR_I]], align 8, !noalias [[META17]]214// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTLITER__ADDR_I]], align 4, !noalias [[META17]]215// CHECK1-NEXT:    store ptr [[TMP18]], ptr [[DOTREDUCTIONS__ADDR_I]], align 8, !noalias [[META17]]216// CHECK1-NEXT:    store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META17]]217// CHECK1-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META17]]218// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META17]]219// CHECK1-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META17]]220// CHECK1-NEXT:    call void [[TMP20]](ptr [[TMP21]], ptr [[DOTPRIV_PTR_ADDR_I]], ptr [[DOTPRIV_PTR_ADDR1_I]], ptr [[DOTPRIV_PTR_ADDR2_I]], ptr [[DOTPRIV_PTR_ADDR3_I]]) #[[ATTR2:[0-9]+]]221// CHECK1-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR_I]], align 8, !noalias [[META17]]222// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR1_I]], align 8, !noalias [[META17]]223// CHECK1-NEXT:    store ptr [[TMP23]], ptr [[TMP_I]], align 8, !noalias [[META17]]224// CHECK1-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR2_I]], align 8, !noalias [[META17]]225// CHECK1-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR3_I]], align 8, !noalias [[META17]]226// CHECK1-NEXT:    store ptr undef, ptr [[TMP5_I]], align 8, !noalias [[META17]]227// CHECK1-NEXT:    [[TMP26:%.*]] = load i64, ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META17]]228// CHECK1-NEXT:    [[CONV_I:%.*]] = trunc i64 [[TMP26]] to i32229// CHECK1-NEXT:    store i32 [[CONV_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]]230// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND_I:%.*]]231// CHECK1:       omp.inner.for.cond.i:232// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18:![0-9]+]]233// CHECK1-NEXT:    [[CONV6_I:%.*]] = sext i32 [[TMP27]] to i64234// CHECK1-NEXT:    [[TMP28:%.*]] = load i64, ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]235// CHECK1-NEXT:    [[CMP_I:%.*]] = icmp ule i64 [[CONV6_I]], [[TMP28]]236// CHECK1-NEXT:    br i1 [[CMP_I]], label [[OMP_INNER_FOR_BODY_I:%.*]], label [[DOTOMP_OUTLINED__EXIT:%.*]]237// CHECK1:       omp.inner.for.body.i:238// CHECK1-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]239// CHECK1-NEXT:    store i32 [[TMP29]], ptr [[I_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]240// CHECK1-NEXT:    store double 1.000000e+00, ptr [[TMP22]], align 8, !llvm.access.group [[ACC_GRP18]]241// CHECK1-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[TMP_I]], align 8, !noalias [[META17]], !nonnull [[META3]], !align [[META4]], !llvm.access.group [[ACC_GRP18]]242// CHECK1-NEXT:    store volatile double 1.000000e+00, ptr [[TMP30]], align 8, !llvm.access.group [[ACC_GRP18]]243// CHECK1-NEXT:    store i32 3, ptr [[TMP24]], align 4, !llvm.access.group [[ACC_GRP18]]244// CHECK1-NEXT:    store float 4.000000e+00, ptr [[TMP25]], align 4, !llvm.access.group [[ACC_GRP18]]245// CHECK1-NEXT:    store ptr [[TMP22]], ptr [[REF_TMP_I]], align 8, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]246// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP_I]], i32 0, i32 1247// CHECK1-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[TMP_I]], align 8, !noalias [[META17]], !nonnull [[META3]], !align [[META4]], !llvm.access.group [[ACC_GRP18]]248// CHECK1-NEXT:    store ptr [[TMP32]], ptr [[TMP31]], align 8, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]249// CHECK1-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP_I]], i32 0, i32 2250// CHECK1-NEXT:    store ptr [[TMP24]], ptr [[TMP33]], align 8, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]251// CHECK1-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP_I]], i32 0, i32 3252// CHECK1-NEXT:    store ptr [[TMP25]], ptr [[TMP34]], align 8, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]253// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP_I]]), !llvm.access.group [[ACC_GRP18]]254// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]255// CHECK1-NEXT:    [[ADD7_I:%.*]] = add nsw i32 [[TMP35]], 1256// CHECK1-NEXT:    store i32 [[ADD7_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]257// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND_I]], !llvm.loop [[LOOP19:![0-9]+]]258// CHECK1:       .omp_outlined..exit:259// CHECK1-NEXT:    ret i32 0260//261//262// CHECK3-LABEL: define {{[^@]+}}@main263// CHECK3-SAME: () #[[ATTR0:[0-9]+]] {264// CHECK3-NEXT:  entry:265// CHECK3-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4266// CHECK3-NEXT:    [[G:%.*]] = alloca double, align 8267// CHECK3-NEXT:    [[G1:%.*]] = alloca ptr, align 4268// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 4269// CHECK3-NEXT:    store i32 0, ptr [[RETVAL]], align 4270// CHECK3-NEXT:    store ptr [[G]], ptr [[G1]], align 4271// CHECK3-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 0272// CHECK3-NEXT:    store ptr [[G]], ptr [[TMP0]], align 4273// CHECK3-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 1274// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[G1]], align 4, !nonnull [[META4:![0-9]+]], !align [[META5:![0-9]+]]275// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP1]], align 4276// CHECK3-NEXT:    call void @"_ZZ4mainENK3$_0clEv"(ptr noundef nonnull align 4 dereferenceable(8) [[REF_TMP]])277// CHECK3-NEXT:    ret i32 0278//279//280// CHECK3-LABEL: define {{[^@]+}}@.omp_task_privates_map.281// CHECK3-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]], ptr noalias noundef [[TMP4:%.*]]) #[[ATTR4:[0-9]+]] {282// CHECK3-NEXT:  entry:283// CHECK3-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 4284// CHECK3-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 4285// CHECK3-NEXT:    [[DOTADDR2:%.*]] = alloca ptr, align 4286// CHECK3-NEXT:    [[DOTADDR3:%.*]] = alloca ptr, align 4287// CHECK3-NEXT:    [[DOTADDR4:%.*]] = alloca ptr, align 4288// CHECK3-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 4289// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 4290// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[DOTADDR2]], align 4291// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[DOTADDR3]], align 4292// CHECK3-NEXT:    store ptr [[TMP4]], ptr [[DOTADDR4]], align 4293// CHECK3-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[DOTADDR]], align 4294// CHECK3-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP5]], i32 0, i32 0295// CHECK3-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[DOTADDR1]], align 4296// CHECK3-NEXT:    store ptr [[TMP6]], ptr [[TMP7]], align 4297// CHECK3-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP5]], i32 0, i32 1298// CHECK3-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[DOTADDR2]], align 4299// CHECK3-NEXT:    store ptr [[TMP8]], ptr [[TMP9]], align 4300// CHECK3-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP5]], i32 0, i32 2301// CHECK3-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTADDR3]], align 4302// CHECK3-NEXT:    store ptr [[TMP10]], ptr [[TMP11]], align 4303// CHECK3-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP5]], i32 0, i32 3304// CHECK3-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTADDR4]], align 4305// CHECK3-NEXT:    store ptr [[TMP12]], ptr [[TMP13]], align 4306// CHECK3-NEXT:    ret void307//308//309// CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry.310// CHECK3-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR5:[0-9]+]] {311// CHECK3-NEXT:  entry:312// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4313// CHECK3-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 4314// CHECK3-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 4315// CHECK3-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 4316// CHECK3-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 4317// CHECK3-NEXT:    [[DOTLB__ADDR_I:%.*]] = alloca i64, align 8318// CHECK3-NEXT:    [[DOTUB__ADDR_I:%.*]] = alloca i64, align 8319// CHECK3-NEXT:    [[DOTST__ADDR_I:%.*]] = alloca i64, align 8320// CHECK3-NEXT:    [[DOTLITER__ADDR_I:%.*]] = alloca i32, align 4321// CHECK3-NEXT:    [[DOTREDUCTIONS__ADDR_I:%.*]] = alloca ptr, align 4322// CHECK3-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 4323// CHECK3-NEXT:    [[DOTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 4324// CHECK3-NEXT:    [[DOTPRIV_PTR_ADDR1_I:%.*]] = alloca ptr, align 4325// CHECK3-NEXT:    [[DOTPRIV_PTR_ADDR2_I:%.*]] = alloca ptr, align 4326// CHECK3-NEXT:    [[DOTPRIV_PTR_ADDR3_I:%.*]] = alloca ptr, align 4327// CHECK3-NEXT:    [[TMP_I:%.*]] = alloca ptr, align 4328// CHECK3-NEXT:    [[TMP5_I:%.*]] = alloca ptr, align 4329// CHECK3-NEXT:    [[I_I:%.*]] = alloca i32, align 4330// CHECK3-NEXT:    [[DOTOMP_IV_I:%.*]] = alloca i32, align 4331// CHECK3-NEXT:    [[REF_TMP_I:%.*]] = alloca [[CLASS_ANON_0:%.*]], align 4332// CHECK3-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4333// CHECK3-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 4334// CHECK3-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 4335// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 4336// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4337// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 4338// CHECK3-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 0339// CHECK3-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2340// CHECK3-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0341// CHECK3-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 4342// CHECK3-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES]], ptr [[TMP3]], i32 0, i32 1343// CHECK3-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 5344// CHECK3-NEXT:    [[TMP10:%.*]] = load i64, ptr [[TMP9]], align 4345// CHECK3-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 6346// CHECK3-NEXT:    [[TMP12:%.*]] = load i64, ptr [[TMP11]], align 4347// CHECK3-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 7348// CHECK3-NEXT:    [[TMP14:%.*]] = load i64, ptr [[TMP13]], align 4349// CHECK3-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 8350// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 4351// CHECK3-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 9352// CHECK3-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 4353// CHECK3-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])354// CHECK3-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META9:![0-9]+]])355// CHECK3-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META11:![0-9]+]])356// CHECK3-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])357// CHECK3-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META15:![0-9]+]])358// CHECK3-NEXT:    store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META17:![0-9]+]]359// CHECK3-NEXT:    store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 4, !noalias [[META17]]360// CHECK3-NEXT:    store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 4, !noalias [[META17]]361// CHECK3-NEXT:    store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 4, !noalias [[META17]]362// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 4, !noalias [[META17]]363// CHECK3-NEXT:    store i64 [[TMP10]], ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META17]]364// CHECK3-NEXT:    store i64 [[TMP12]], ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META17]]365// CHECK3-NEXT:    store i64 [[TMP14]], ptr [[DOTST__ADDR_I]], align 8, !noalias [[META17]]366// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTLITER__ADDR_I]], align 4, !noalias [[META17]]367// CHECK3-NEXT:    store ptr [[TMP18]], ptr [[DOTREDUCTIONS__ADDR_I]], align 4, !noalias [[META17]]368// CHECK3-NEXT:    store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 4, !noalias [[META17]]369// CHECK3-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 4, !noalias [[META17]]370// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 4, !noalias [[META17]]371// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 4, !noalias [[META17]]372// CHECK3-NEXT:    call void [[TMP20]](ptr [[TMP21]], ptr [[DOTPRIV_PTR_ADDR_I]], ptr [[DOTPRIV_PTR_ADDR1_I]], ptr [[DOTPRIV_PTR_ADDR2_I]], ptr [[DOTPRIV_PTR_ADDR3_I]]) #[[ATTR2:[0-9]+]]373// CHECK3-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR_I]], align 4, !noalias [[META17]]374// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR1_I]], align 4, !noalias [[META17]]375// CHECK3-NEXT:    store ptr [[TMP23]], ptr [[TMP_I]], align 4, !noalias [[META17]]376// CHECK3-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR2_I]], align 4, !noalias [[META17]]377// CHECK3-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR3_I]], align 4, !noalias [[META17]]378// CHECK3-NEXT:    store ptr undef, ptr [[TMP5_I]], align 4, !noalias [[META17]]379// CHECK3-NEXT:    [[TMP26:%.*]] = load i64, ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META17]]380// CHECK3-NEXT:    [[CONV_I:%.*]] = trunc i64 [[TMP26]] to i32381// CHECK3-NEXT:    store i32 [[CONV_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]]382// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND_I:%.*]]383// CHECK3:       omp.inner.for.cond.i:384// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18:![0-9]+]]385// CHECK3-NEXT:    [[CONV6_I:%.*]] = sext i32 [[TMP27]] to i64386// CHECK3-NEXT:    [[TMP28:%.*]] = load i64, ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]387// CHECK3-NEXT:    [[CMP_I:%.*]] = icmp ule i64 [[CONV6_I]], [[TMP28]]388// CHECK3-NEXT:    br i1 [[CMP_I]], label [[OMP_INNER_FOR_BODY_I:%.*]], label [[DOTOMP_OUTLINED__EXIT:%.*]]389// CHECK3:       omp.inner.for.body.i:390// CHECK3-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]391// CHECK3-NEXT:    store i32 [[TMP29]], ptr [[I_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]392// CHECK3-NEXT:    store double 1.000000e+00, ptr [[TMP22]], align 8, !llvm.access.group [[ACC_GRP18]]393// CHECK3-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[TMP_I]], align 4, !noalias [[META17]], !nonnull [[META4]], !align [[META5]], !llvm.access.group [[ACC_GRP18]]394// CHECK3-NEXT:    store volatile double 1.000000e+00, ptr [[TMP30]], align 4, !llvm.access.group [[ACC_GRP18]]395// CHECK3-NEXT:    store i32 3, ptr [[TMP24]], align 4, !llvm.access.group [[ACC_GRP18]]396// CHECK3-NEXT:    store float 4.000000e+00, ptr [[TMP25]], align 4, !llvm.access.group [[ACC_GRP18]]397// CHECK3-NEXT:    store ptr [[TMP22]], ptr [[REF_TMP_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]398// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP_I]], i32 0, i32 1399// CHECK3-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[TMP_I]], align 4, !noalias [[META17]], !nonnull [[META4]], !align [[META5]], !llvm.access.group [[ACC_GRP18]]400// CHECK3-NEXT:    store ptr [[TMP32]], ptr [[TMP31]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]401// CHECK3-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP_I]], i32 0, i32 2402// CHECK3-NEXT:    store ptr [[TMP24]], ptr [[TMP33]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]403// CHECK3-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP_I]], i32 0, i32 3404// CHECK3-NEXT:    store ptr [[TMP25]], ptr [[TMP34]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]405// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP_I]]), !llvm.access.group [[ACC_GRP18]]406// CHECK3-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]407// CHECK3-NEXT:    [[ADD7_I:%.*]] = add nsw i32 [[TMP35]], 1408// CHECK3-NEXT:    store i32 [[ADD7_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META17]], !llvm.access.group [[ACC_GRP18]]409// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND_I]], !llvm.loop [[LOOP19:![0-9]+]]410// CHECK3:       .omp_outlined..exit:411// CHECK3-NEXT:    ret i32 0412//413//414// CHECK5-LABEL: define {{[^@]+}}@main415// CHECK5-SAME: () #[[ATTR0:[0-9]+]] {416// CHECK5-NEXT:  entry:417// CHECK5-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4418// CHECK5-NEXT:    [[G:%.*]] = alloca double, align 8419// CHECK5-NEXT:    [[G1:%.*]] = alloca ptr, align 8420// CHECK5-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 8421// CHECK5-NEXT:    store i32 0, ptr [[RETVAL]], align 4422// CHECK5-NEXT:    store ptr [[G]], ptr [[G1]], align 8423// CHECK5-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 0424// CHECK5-NEXT:    store ptr [[G]], ptr [[TMP0]], align 8425// CHECK5-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 1426// CHECK5-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[G1]], align 8, !nonnull [[META2:![0-9]+]], !align [[META3:![0-9]+]]427// CHECK5-NEXT:    store ptr [[TMP2]], ptr [[TMP1]], align 8428// CHECK5-NEXT:    call void @"_ZZ4mainENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(16) [[REF_TMP]])429// CHECK5-NEXT:    ret i32 0430//431//432// CHECK7-LABEL: define {{[^@]+}}@main433// CHECK7-SAME: () #[[ATTR0:[0-9]+]] {434// CHECK7-NEXT:  entry:435// CHECK7-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4436// CHECK7-NEXT:    [[G:%.*]] = alloca double, align 8437// CHECK7-NEXT:    [[G1:%.*]] = alloca ptr, align 4438// CHECK7-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 4439// CHECK7-NEXT:    store i32 0, ptr [[RETVAL]], align 4440// CHECK7-NEXT:    store ptr [[G]], ptr [[G1]], align 4441// CHECK7-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 0442// CHECK7-NEXT:    store ptr [[G]], ptr [[TMP0]], align 4443// CHECK7-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 1444// CHECK7-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[G1]], align 4, !nonnull [[META3:![0-9]+]], !align [[META4:![0-9]+]]445// CHECK7-NEXT:    store ptr [[TMP2]], ptr [[TMP1]], align 4446// CHECK7-NEXT:    call void @"_ZZ4mainENK3$_0clEv"(ptr noundef nonnull align 4 dereferenceable(8) [[REF_TMP]])447// CHECK7-NEXT:    ret i32 0448//449//450// CHECK9-LABEL: define {{[^@]+}}@main451// CHECK9-SAME: () #[[ATTR0:[0-9]+]] {452// CHECK9-NEXT:  entry:453// CHECK9-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4454// CHECK9-NEXT:    [[G:%.*]] = alloca double, align 8455// CHECK9-NEXT:    [[G1:%.*]] = alloca ptr, align 8456// CHECK9-NEXT:    [[TEST:%.*]] = alloca [[STRUCT_S:%.*]], align 4457// CHECK9-NEXT:    [[T_VAR:%.*]] = alloca i32, align 4458// CHECK9-NEXT:    [[VEC:%.*]] = alloca [2 x i32], align 4459// CHECK9-NEXT:    [[S_ARR:%.*]] = alloca [2 x %struct.S], align 4460// CHECK9-NEXT:    [[VAR:%.*]] = alloca ptr, align 8461// CHECK9-NEXT:    [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 1462// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 4463// CHECK9-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 8464// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 4465// CHECK9-NEXT:    [[AGG_CAPTURED2:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 1466// CHECK9-NEXT:    [[_TMP3:%.*]] = alloca i32, align 4467// CHECK9-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])468// CHECK9-NEXT:    store i32 0, ptr [[RETVAL]], align 4469// CHECK9-NEXT:    store ptr [[G]], ptr [[G1]], align 8470// CHECK9-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]])471// CHECK9-NEXT:    store i32 0, ptr [[T_VAR]], align 4472// CHECK9-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[VEC]], ptr align 4 @__const.main.vec, i64 8, i1 false)473// CHECK9-NEXT:    call void @_ZN1SIfEC1Ef(ptr noundef nonnull align 4 dereferenceable(4) [[S_ARR]], float noundef 1.000000e+00)474// CHECK9-NEXT:    [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S_ARR]], i64 1475// CHECK9-NEXT:    call void @_ZN1SIfEC1Ef(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYINIT_ELEMENT]], float noundef 2.000000e+00)476// CHECK9-NEXT:    store ptr [[TEST]], ptr [[VAR]], align 8477// CHECK9-NEXT:    call void @__kmpc_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])478// CHECK9-NEXT:    store ptr undef, ptr [[_TMP1]], align 8479// CHECK9-NEXT:    [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 9, i64 112, i64 1, ptr @.omp_task_entry.)480// CHECK9-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP1]], i32 0, i32 0481// CHECK9-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES]], ptr [[TMP1]], i32 0, i32 1482// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP3]], i32 0, i32 0483// CHECK9-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP4]])484// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP3]], i32 0, i32 3485// CHECK9-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP5]], i32 0, i32 0486// CHECK9-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN]], i64 2487// CHECK9-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]488// CHECK9:       arrayctor.loop:489// CHECK9-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]490// CHECK9-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])491// CHECK9-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 1492// CHECK9-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]493// CHECK9-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]494// CHECK9:       arrayctor.cont:495// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP2]], i32 0, i32 3496// CHECK9-NEXT:    store ptr @.omp_task_destructor., ptr [[TMP6]], align 8497// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 5498// CHECK9-NEXT:    store i64 0, ptr [[TMP7]], align 8499// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 6500// CHECK9-NEXT:    store i64 1, ptr [[TMP8]], align 8501// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 7502// CHECK9-NEXT:    store i64 1, ptr [[TMP9]], align 8503// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 9504// CHECK9-NEXT:    call void @llvm.memset.p0.i64(ptr align 8 [[TMP10]], i8 0, i64 8, i1 false)505// CHECK9-NEXT:    [[TMP11:%.*]] = load i64, ptr [[TMP9]], align 8506// CHECK9-NEXT:    call void @__kmpc_taskloop(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP1]], i32 1, ptr [[TMP7]], ptr [[TMP8]], i64 [[TMP11]], i32 1, i32 0, i64 0, ptr @.omp_task_dup.)507// CHECK9-NEXT:    call void @__kmpc_end_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])508// CHECK9-NEXT:    call void @__kmpc_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])509// CHECK9-NEXT:    [[TMP12:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 80, i64 1, ptr @.omp_task_entry..2)510// CHECK9-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP12]], i32 0, i32 0511// CHECK9-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP13]], i32 0, i32 5512// CHECK9-NEXT:    store i64 0, ptr [[TMP14]], align 8513// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP13]], i32 0, i32 6514// CHECK9-NEXT:    store i64 1, ptr [[TMP15]], align 8515// CHECK9-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP13]], i32 0, i32 7516// CHECK9-NEXT:    store i64 1, ptr [[TMP16]], align 8517// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP13]], i32 0, i32 9518// CHECK9-NEXT:    call void @llvm.memset.p0.i64(ptr align 8 [[TMP17]], i8 0, i64 8, i1 false)519// CHECK9-NEXT:    [[TMP18:%.*]] = load i64, ptr [[TMP16]], align 8520// CHECK9-NEXT:    call void @__kmpc_taskloop(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP12]], i32 1, ptr [[TMP14]], ptr [[TMP15]], i64 [[TMP18]], i32 1, i32 0, i64 0, ptr null)521// CHECK9-NEXT:    call void @__kmpc_end_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])522// CHECK9-NEXT:    [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiET_v()523// CHECK9-NEXT:    store i32 [[CALL]], ptr [[RETVAL]], align 4524// CHECK9-NEXT:    [[ARRAY_BEGIN4:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR]], i32 0, i32 0525// CHECK9-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN4]], i64 2526// CHECK9-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]527// CHECK9:       arraydestroy.body:528// CHECK9-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP19]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]529// CHECK9-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -1530// CHECK9-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3:[0-9]+]]531// CHECK9-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN4]]532// CHECK9-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE5:%.*]], label [[ARRAYDESTROY_BODY]]533// CHECK9:       arraydestroy.done5:534// CHECK9-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]]) #[[ATTR3]]535// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[RETVAL]], align 4536// CHECK9-NEXT:    ret i32 [[TMP20]]537//538//539// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIfEC1Ev540// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat {541// CHECK9-NEXT:  entry:542// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8543// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8544// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8545// CHECK9-NEXT:    call void @_ZN1SIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])546// CHECK9-NEXT:    ret void547//548//549// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIfEC1Ef550// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], float noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat {551// CHECK9-NEXT:  entry:552// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8553// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca float, align 4554// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8555// CHECK9-NEXT:    store float [[A]], ptr [[A_ADDR]], align 4556// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8557// CHECK9-NEXT:    [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 4558// CHECK9-NEXT:    call void @_ZN1SIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], float noundef [[TMP0]])559// CHECK9-NEXT:    ret void560//561//562// CHECK9-LABEL: define {{[^@]+}}@.omp_task_privates_map.563// CHECK9-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]], ptr noalias noundef [[TMP4:%.*]], ptr noalias noundef [[TMP5:%.*]]) #[[ATTR5:[0-9]+]] {564// CHECK9-NEXT:  entry:565// CHECK9-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 8566// CHECK9-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 8567// CHECK9-NEXT:    [[DOTADDR2:%.*]] = alloca ptr, align 8568// CHECK9-NEXT:    [[DOTADDR3:%.*]] = alloca ptr, align 8569// CHECK9-NEXT:    [[DOTADDR4:%.*]] = alloca ptr, align 8570// CHECK9-NEXT:    [[DOTADDR5:%.*]] = alloca ptr, align 8571// CHECK9-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 8572// CHECK9-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 8573// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[DOTADDR2]], align 8574// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[DOTADDR3]], align 8575// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[DOTADDR4]], align 8576// CHECK9-NEXT:    store ptr [[TMP5]], ptr [[DOTADDR5]], align 8577// CHECK9-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[DOTADDR]], align 8578// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP6]], i32 0, i32 0579// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTADDR4]], align 8580// CHECK9-NEXT:    store ptr [[TMP7]], ptr [[TMP8]], align 8581// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP6]], i32 0, i32 1582// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTADDR1]], align 8583// CHECK9-NEXT:    store ptr [[TMP9]], ptr [[TMP10]], align 8584// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP6]], i32 0, i32 2585// CHECK9-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTADDR2]], align 8586// CHECK9-NEXT:    store ptr [[TMP11]], ptr [[TMP12]], align 8587// CHECK9-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP6]], i32 0, i32 3588// CHECK9-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTADDR3]], align 8589// CHECK9-NEXT:    store ptr [[TMP13]], ptr [[TMP14]], align 8590// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP6]], i32 0, i32 4591// CHECK9-NEXT:    [[TMP16:%.*]] = load ptr, ptr [[DOTADDR5]], align 8592// CHECK9-NEXT:    store ptr [[TMP15]], ptr [[TMP16]], align 8593// CHECK9-NEXT:    ret void594//595//596// CHECK9-LABEL: define {{[^@]+}}@.omp_task_entry.597// CHECK9-SAME: (i32 noundef signext [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6:[0-9]+]] {598// CHECK9-NEXT:  entry:599// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4600// CHECK9-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8601// CHECK9-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8602// CHECK9-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8603// CHECK9-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8604// CHECK9-NEXT:    [[DOTLB__ADDR_I:%.*]] = alloca i64, align 8605// CHECK9-NEXT:    [[DOTUB__ADDR_I:%.*]] = alloca i64, align 8606// CHECK9-NEXT:    [[DOTST__ADDR_I:%.*]] = alloca i64, align 8607// CHECK9-NEXT:    [[DOTLITER__ADDR_I:%.*]] = alloca i32, align 4608// CHECK9-NEXT:    [[DOTREDUCTIONS__ADDR_I:%.*]] = alloca ptr, align 8609// CHECK9-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8610// CHECK9-NEXT:    [[DOTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 8611// CHECK9-NEXT:    [[DOTPRIV_PTR_ADDR1_I:%.*]] = alloca ptr, align 8612// CHECK9-NEXT:    [[DOTPRIV_PTR_ADDR2_I:%.*]] = alloca ptr, align 8613// CHECK9-NEXT:    [[DOTPRIV_PTR_ADDR3_I:%.*]] = alloca ptr, align 8614// CHECK9-NEXT:    [[DOTPRIV_PTR_ADDR4_I:%.*]] = alloca ptr, align 8615// CHECK9-NEXT:    [[TMP_I:%.*]] = alloca ptr, align 8616// CHECK9-NEXT:    [[TMP6_I:%.*]] = alloca ptr, align 8617// CHECK9-NEXT:    [[I_I:%.*]] = alloca i32, align 4618// CHECK9-NEXT:    [[DOTOMP_IV_I:%.*]] = alloca i32, align 4619// CHECK9-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4620// CHECK9-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 8621// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 4622// CHECK9-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 8623// CHECK9-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4624// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8625// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 0626// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2627// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0628// CHECK9-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8629// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES]], ptr [[TMP3]], i32 0, i32 1630// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 5631// CHECK9-NEXT:    [[TMP10:%.*]] = load i64, ptr [[TMP9]], align 8632// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 6633// CHECK9-NEXT:    [[TMP12:%.*]] = load i64, ptr [[TMP11]], align 8634// CHECK9-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 7635// CHECK9-NEXT:    [[TMP14:%.*]] = load i64, ptr [[TMP13]], align 8636// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 8637// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 8638// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 9639// CHECK9-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 8640// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])641// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])642// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])643// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])644// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META12:![0-9]+]])645// CHECK9-NEXT:    store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META14:![0-9]+]]646// CHECK9-NEXT:    store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META14]]647// CHECK9-NEXT:    store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META14]]648// CHECK9-NEXT:    store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META14]]649// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META14]]650// CHECK9-NEXT:    store i64 [[TMP10]], ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META14]]651// CHECK9-NEXT:    store i64 [[TMP12]], ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META14]]652// CHECK9-NEXT:    store i64 [[TMP14]], ptr [[DOTST__ADDR_I]], align 8, !noalias [[META14]]653// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTLITER__ADDR_I]], align 4, !noalias [[META14]]654// CHECK9-NEXT:    store ptr [[TMP18]], ptr [[DOTREDUCTIONS__ADDR_I]], align 8, !noalias [[META14]]655// CHECK9-NEXT:    store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META14]]656// CHECK9-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META14]]657// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META14]]658// CHECK9-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META14]]659// CHECK9-NEXT:    call void [[TMP20]](ptr [[TMP21]], ptr [[DOTPRIV_PTR_ADDR_I]], ptr [[DOTPRIV_PTR_ADDR1_I]], ptr [[DOTPRIV_PTR_ADDR2_I]], ptr [[DOTPRIV_PTR_ADDR3_I]], ptr [[DOTPRIV_PTR_ADDR4_I]]) #[[ATTR3]]660// CHECK9-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR_I]], align 8, !noalias [[META14]]661// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR1_I]], align 8, !noalias [[META14]]662// CHECK9-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR2_I]], align 8, !noalias [[META14]]663// CHECK9-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR3_I]], align 8, !noalias [[META14]]664// CHECK9-NEXT:    store ptr [[TMP25]], ptr [[TMP_I]], align 8, !noalias [[META14]]665// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR4_I]], align 8, !noalias [[META14]]666// CHECK9-NEXT:    store ptr undef, ptr [[TMP6_I]], align 8, !noalias [[META14]]667// CHECK9-NEXT:    [[TMP27:%.*]] = load i64, ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META14]]668// CHECK9-NEXT:    [[CONV_I:%.*]] = trunc i64 [[TMP27]] to i32669// CHECK9-NEXT:    store i32 [[CONV_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META14]]670// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND_I:%.*]]671// CHECK9:       omp.inner.for.cond.i:672// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META14]], !llvm.access.group [[ACC_GRP15:![0-9]+]]673// CHECK9-NEXT:    [[CONV7_I:%.*]] = sext i32 [[TMP28]] to i64674// CHECK9-NEXT:    [[TMP29:%.*]] = load i64, ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META14]], !llvm.access.group [[ACC_GRP15]]675// CHECK9-NEXT:    [[CMP_I:%.*]] = icmp ule i64 [[CONV7_I]], [[TMP29]]676// CHECK9-NEXT:    br i1 [[CMP_I]], label [[OMP_INNER_FOR_BODY_I:%.*]], label [[DOTOMP_OUTLINED__EXIT:%.*]]677// CHECK9:       omp.inner.for.body.i:678// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META14]], !llvm.access.group [[ACC_GRP15]]679// CHECK9-NEXT:    store i32 [[TMP30]], ptr [[I_I]], align 4, !noalias [[META14]], !llvm.access.group [[ACC_GRP15]]680// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[TMP22]], align 4, !llvm.access.group [[ACC_GRP15]]681// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[I_I]], align 4, !noalias [[META14]], !llvm.access.group [[ACC_GRP15]]682// CHECK9-NEXT:    [[IDXPROM_I:%.*]] = sext i32 [[TMP32]] to i64683// CHECK9-NEXT:    [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x i32], ptr [[TMP23]], i64 0, i64 [[IDXPROM_I]]684// CHECK9-NEXT:    store i32 [[TMP31]], ptr [[ARRAYIDX_I]], align 4, !llvm.access.group [[ACC_GRP15]]685// CHECK9-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[TMP_I]], align 8, !noalias [[META14]], !nonnull [[META16:![0-9]+]], !align [[META17:![0-9]+]], !llvm.access.group [[ACC_GRP15]]686// CHECK9-NEXT:    [[TMP34:%.*]] = load i32, ptr [[I_I]], align 4, !noalias [[META14]], !llvm.access.group [[ACC_GRP15]]687// CHECK9-NEXT:    [[IDXPROM8_I:%.*]] = sext i32 [[TMP34]] to i64688// CHECK9-NEXT:    [[ARRAYIDX9_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP24]], i64 0, i64 [[IDXPROM8_I]]689// CHECK9-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[ARRAYIDX9_I]], ptr align 4 [[TMP33]], i64 4, i1 false), !llvm.access.group [[ACC_GRP15]]690// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META14]], !llvm.access.group [[ACC_GRP15]]691// CHECK9-NEXT:    [[ADD10_I:%.*]] = add nsw i32 [[TMP35]], 1692// CHECK9-NEXT:    store i32 [[ADD10_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META14]], !llvm.access.group [[ACC_GRP15]]693// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND_I]], !llvm.loop [[LOOP18:![0-9]+]]694// CHECK9:       .omp_outlined..exit:695// CHECK9-NEXT:    ret i32 0696//697//698// CHECK9-LABEL: define {{[^@]+}}@.omp_task_dup.699// CHECK9-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]], i32 noundef signext [[TMP2:%.*]]) #[[ATTR6]] {700// CHECK9-NEXT:  entry:701// CHECK9-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 8702// CHECK9-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 8703// CHECK9-NEXT:    [[DOTADDR2:%.*]] = alloca i32, align 4704// CHECK9-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 8705// CHECK9-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 8706// CHECK9-NEXT:    store i32 [[TMP2]], ptr [[DOTADDR2]], align 4707// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR]], align 8708// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 1709// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP4]], i32 0, i32 0710// CHECK9-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP5]])711// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP4]], i32 0, i32 3712// CHECK9-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP6]], i32 0, i32 0713// CHECK9-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 2714// CHECK9-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]715// CHECK9:       arrayctor.loop:716// CHECK9-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]717// CHECK9-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])718// CHECK9-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 1719// CHECK9-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]720// CHECK9-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]721// CHECK9:       arrayctor.cont:722// CHECK9-NEXT:    ret void723//724//725// CHECK9-LABEL: define {{[^@]+}}@.omp_task_destructor.726// CHECK9-SAME: (i32 noundef signext [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6]] {727// CHECK9-NEXT:  entry:728// CHECK9-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4729// CHECK9-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4730// CHECK9-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 8731// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 4732// CHECK9-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 8733// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTADDR1]], align 8734// CHECK9-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP2]], i32 0, i32 1735// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP3]], i32 0, i32 0736// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP3]], i32 0, i32 3737// CHECK9-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP5]], i32 0, i32 0738// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i64 2739// CHECK9-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]740// CHECK9:       arraydestroy.body:741// CHECK9-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP6]], [[ENTRY:%.*]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]742// CHECK9-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -1743// CHECK9-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]744// CHECK9-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN]]745// CHECK9-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE2:%.*]], label [[ARRAYDESTROY_BODY]]746// CHECK9:       arraydestroy.done2:747// CHECK9-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP4]]) #[[ATTR3]]748// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[RETVAL]], align 4749// CHECK9-NEXT:    ret i32 [[TMP7]]750//751//752// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIfED1Ev753// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {754// CHECK9-NEXT:  entry:755// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8756// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8757// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8758// CHECK9-NEXT:    call void @_ZN1SIfED2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR3]]759// CHECK9-NEXT:    ret void760//761//762// CHECK9-LABEL: define {{[^@]+}}@.omp_task_entry..2763// CHECK9-SAME: (i32 noundef signext [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6]] {764// CHECK9-NEXT:  entry:765// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4766// CHECK9-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8767// CHECK9-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8768// CHECK9-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8769// CHECK9-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8770// CHECK9-NEXT:    [[DOTLB__ADDR_I:%.*]] = alloca i64, align 8771// CHECK9-NEXT:    [[DOTUB__ADDR_I:%.*]] = alloca i64, align 8772// CHECK9-NEXT:    [[DOTST__ADDR_I:%.*]] = alloca i64, align 8773// CHECK9-NEXT:    [[DOTLITER__ADDR_I:%.*]] = alloca i32, align 4774// CHECK9-NEXT:    [[DOTREDUCTIONS__ADDR_I:%.*]] = alloca ptr, align 8775// CHECK9-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 8776// CHECK9-NEXT:    [[I_I:%.*]] = alloca i32, align 4777// CHECK9-NEXT:    [[DOTOMP_IV_I:%.*]] = alloca i32, align 4778// CHECK9-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4779// CHECK9-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 8780// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 4781// CHECK9-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 8782// CHECK9-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 4783// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 8784// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 0785// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 2786// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 0787// CHECK9-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 8788// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 5789// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[TMP8]], align 8790// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 6791// CHECK9-NEXT:    [[TMP11:%.*]] = load i64, ptr [[TMP10]], align 8792// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 7793// CHECK9-NEXT:    [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 8794// CHECK9-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 8795// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 8796// CHECK9-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 9797// CHECK9-NEXT:    [[TMP17:%.*]] = load ptr, ptr [[TMP16]], align 8798// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META21:![0-9]+]])799// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META24:![0-9]+]])800// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META26:![0-9]+]])801// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])802// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])803// CHECK9-NEXT:    store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META32:![0-9]+]]804// CHECK9-NEXT:    store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META32]]805// CHECK9-NEXT:    store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META32]]806// CHECK9-NEXT:    store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META32]]807// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META32]]808// CHECK9-NEXT:    store i64 [[TMP9]], ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META32]]809// CHECK9-NEXT:    store i64 [[TMP11]], ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META32]]810// CHECK9-NEXT:    store i64 [[TMP13]], ptr [[DOTST__ADDR_I]], align 8, !noalias [[META32]]811// CHECK9-NEXT:    store i32 [[TMP15]], ptr [[DOTLITER__ADDR_I]], align 4, !noalias [[META32]]812// CHECK9-NEXT:    store ptr [[TMP17]], ptr [[DOTREDUCTIONS__ADDR_I]], align 8, !noalias [[META32]]813// CHECK9-NEXT:    store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]814// CHECK9-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META32]]815// CHECK9-NEXT:    [[TMP19:%.*]] = load i64, ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META32]]816// CHECK9-NEXT:    [[CONV_I:%.*]] = trunc i64 [[TMP19]] to i32817// CHECK9-NEXT:    store i32 [[CONV_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META32]]818// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND_I:%.*]]819// CHECK9:       omp.inner.for.cond.i:820// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META32]], !llvm.access.group [[ACC_GRP33:![0-9]+]]821// CHECK9-NEXT:    [[CONV1_I:%.*]] = sext i32 [[TMP20]] to i64822// CHECK9-NEXT:    [[TMP21:%.*]] = load i64, ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META32]], !llvm.access.group [[ACC_GRP33]]823// CHECK9-NEXT:    [[CMP_I:%.*]] = icmp ule i64 [[CONV1_I]], [[TMP21]]824// CHECK9-NEXT:    br i1 [[CMP_I]], label [[OMP_INNER_FOR_BODY_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]]825// CHECK9:       omp.inner.for.body.i:826// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META32]], !llvm.access.group [[ACC_GRP33]]827// CHECK9-NEXT:    store i32 [[TMP22]], ptr [[I_I]], align 4, !noalias [[META32]], !llvm.access.group [[ACC_GRP33]]828// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META32]], !llvm.access.group [[ACC_GRP33]]829// CHECK9-NEXT:    [[ADD2_I:%.*]] = add nsw i32 [[TMP23]], 1830// CHECK9-NEXT:    store i32 [[ADD2_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META32]], !llvm.access.group [[ACC_GRP33]]831// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND_I]], !llvm.loop [[LOOP34:![0-9]+]]832// CHECK9:       .omp_outlined..1.exit:833// CHECK9-NEXT:    ret i32 0834//835//836// CHECK9-LABEL: define {{[^@]+}}@_Z5tmainIiET_v837// CHECK9-SAME: () #[[ATTR1]] comdat {838// CHECK9-NEXT:  entry:839// CHECK9-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4840// CHECK9-NEXT:    [[TEST:%.*]] = alloca [[STRUCT_S_2:%.*]], align 4841// CHECK9-NEXT:    [[T_VAR:%.*]] = alloca i32, align 4842// CHECK9-NEXT:    [[VEC:%.*]] = alloca [2 x i32], align 4843// CHECK9-NEXT:    [[S_ARR:%.*]] = alloca [2 x %struct.S.2], align 4844// CHECK9-NEXT:    [[VAR:%.*]] = alloca ptr, align 8845// CHECK9-NEXT:    [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_3:%.*]], align 1846// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 4847// CHECK9-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 8848// CHECK9-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])849// CHECK9-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]])850// CHECK9-NEXT:    store i32 0, ptr [[T_VAR]], align 4851// CHECK9-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[VEC]], ptr align 4 @__const._Z5tmainIiET_v.vec, i64 8, i1 false)852// CHECK9-NEXT:    call void @_ZN1SIiEC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[S_ARR]], i32 noundef signext 1)853// CHECK9-NEXT:    [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[S_ARR]], i64 1854// CHECK9-NEXT:    call void @_ZN1SIiEC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYINIT_ELEMENT]], i32 noundef signext 2)855// CHECK9-NEXT:    store ptr [[TEST]], ptr [[VAR]], align 8856// CHECK9-NEXT:    call void @__kmpc_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])857// CHECK9-NEXT:    store ptr undef, ptr [[_TMP1]], align 8858// CHECK9-NEXT:    [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 9, i64 104, i64 1, ptr @.omp_task_entry..5)859// CHECK9-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP1]], i32 0, i32 0860// CHECK9-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5]], ptr [[TMP1]], i32 0, i32 1861// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4:%.*]], ptr [[TMP3]], i32 0, i32 0862// CHECK9-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP4]])863// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP3]], i32 0, i32 3864// CHECK9-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[TMP5]], i32 0, i32 0865// CHECK9-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAY_BEGIN]], i64 2866// CHECK9-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]867// CHECK9:       arrayctor.loop:868// CHECK9-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]869// CHECK9-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])870// CHECK9-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAYCTOR_CUR]], i64 1871// CHECK9-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]872// CHECK9-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]873// CHECK9:       arrayctor.cont:874// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP2]], i32 0, i32 3875// CHECK9-NEXT:    store ptr @.omp_task_destructor..7, ptr [[TMP6]], align 8876// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 5877// CHECK9-NEXT:    store i64 0, ptr [[TMP7]], align 8878// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 6879// CHECK9-NEXT:    store i64 1, ptr [[TMP8]], align 8880// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 7881// CHECK9-NEXT:    store i64 1, ptr [[TMP9]], align 8882// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 9883// CHECK9-NEXT:    call void @llvm.memset.p0.i64(ptr align 8 [[TMP10]], i8 0, i64 8, i1 false)884// CHECK9-NEXT:    [[TMP11:%.*]] = load i64, ptr [[TMP9]], align 8885// CHECK9-NEXT:    call void @__kmpc_taskloop(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP1]], i32 1, ptr [[TMP7]], ptr [[TMP8]], i64 [[TMP11]], i32 1, i32 0, i64 0, ptr @.omp_task_dup..6)886// CHECK9-NEXT:    call void @__kmpc_end_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])887// CHECK9-NEXT:    store i32 0, ptr [[RETVAL]], align 4888// CHECK9-NEXT:    [[ARRAY_BEGIN2:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[S_ARR]], i32 0, i32 0889// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAY_BEGIN2]], i64 2890// CHECK9-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]891// CHECK9:       arraydestroy.body:892// CHECK9-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP12]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]893// CHECK9-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -1894// CHECK9-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]895// CHECK9-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN2]]896// CHECK9-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE3:%.*]], label [[ARRAYDESTROY_BODY]]897// CHECK9:       arraydestroy.done3:898// CHECK9-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]]) #[[ATTR3]]899// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[RETVAL]], align 4900// CHECK9-NEXT:    ret i32 [[TMP13]]901//902//903// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIfEC2Ev904// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {905// CHECK9-NEXT:  entry:906// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8907// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8908// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8909// CHECK9-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0910// CHECK9-NEXT:    store float 0.000000e+00, ptr [[F]], align 4911// CHECK9-NEXT:    ret void912//913//914// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIfEC2Ef915// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], float noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat {916// CHECK9-NEXT:  entry:917// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8918// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca float, align 4919// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8920// CHECK9-NEXT:    store float [[A]], ptr [[A_ADDR]], align 4921// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8922// CHECK9-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0923// CHECK9-NEXT:    [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 4924// CHECK9-NEXT:    store float [[TMP0]], ptr [[F]], align 4925// CHECK9-NEXT:    ret void926//927//928// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIfED2Ev929// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {930// CHECK9-NEXT:  entry:931// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8932// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8933// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8934// CHECK9-NEXT:    ret void935//936//937// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIiEC1Ev938// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {939// CHECK9-NEXT:  entry:940// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8941// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8942// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8943// CHECK9-NEXT:    call void @_ZN1SIiEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])944// CHECK9-NEXT:    ret void945//946//947// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIiEC1Ei948// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef signext [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat {949// CHECK9-NEXT:  entry:950// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8951// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 4952// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8953// CHECK9-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4954// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8955// CHECK9-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4956// CHECK9-NEXT:    call void @_ZN1SIiEC2Ei(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], i32 noundef signext [[TMP0]])957// CHECK9-NEXT:    ret void958//959//960// CHECK9-LABEL: define {{[^@]+}}@.omp_task_privates_map..4961// CHECK9-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]], ptr noalias noundef [[TMP4:%.*]]) #[[ATTR5]] {962// CHECK9-NEXT:  entry:963// CHECK9-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 8964// CHECK9-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 8965// CHECK9-NEXT:    [[DOTADDR2:%.*]] = alloca ptr, align 8966// CHECK9-NEXT:    [[DOTADDR3:%.*]] = alloca ptr, align 8967// CHECK9-NEXT:    [[DOTADDR4:%.*]] = alloca ptr, align 8968// CHECK9-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 8969// CHECK9-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 8970// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[DOTADDR2]], align 8971// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[DOTADDR3]], align 8972// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[DOTADDR4]], align 8973// CHECK9-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[DOTADDR]], align 8974// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4:%.*]], ptr [[TMP5]], i32 0, i32 0975// CHECK9-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[DOTADDR4]], align 8976// CHECK9-NEXT:    store ptr [[TMP6]], ptr [[TMP7]], align 8977// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP5]], i32 0, i32 1978// CHECK9-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[DOTADDR1]], align 8979// CHECK9-NEXT:    store ptr [[TMP8]], ptr [[TMP9]], align 8980// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP5]], i32 0, i32 2981// CHECK9-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTADDR2]], align 8982// CHECK9-NEXT:    store ptr [[TMP10]], ptr [[TMP11]], align 8983// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP5]], i32 0, i32 3984// CHECK9-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTADDR3]], align 8985// CHECK9-NEXT:    store ptr [[TMP12]], ptr [[TMP13]], align 8986// CHECK9-NEXT:    ret void987//988//989// CHECK9-LABEL: define {{[^@]+}}@.omp_task_entry..5990// CHECK9-SAME: (i32 noundef signext [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6]] {991// CHECK9-NEXT:  entry:992// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4993// CHECK9-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 8994// CHECK9-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 8995// CHECK9-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 8996// CHECK9-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 8997// CHECK9-NEXT:    [[DOTLB__ADDR_I:%.*]] = alloca i64, align 8998// CHECK9-NEXT:    [[DOTUB__ADDR_I:%.*]] = alloca i64, align 8999// CHECK9-NEXT:    [[DOTST__ADDR_I:%.*]] = alloca i64, align 81000// CHECK9-NEXT:    [[DOTLITER__ADDR_I:%.*]] = alloca i32, align 41001// CHECK9-NEXT:    [[DOTREDUCTIONS__ADDR_I:%.*]] = alloca ptr, align 81002// CHECK9-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 81003// CHECK9-NEXT:    [[DOTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 81004// CHECK9-NEXT:    [[DOTPRIV_PTR_ADDR1_I:%.*]] = alloca ptr, align 81005// CHECK9-NEXT:    [[DOTPRIV_PTR_ADDR2_I:%.*]] = alloca ptr, align 81006// CHECK9-NEXT:    [[DOTPRIV_PTR_ADDR3_I:%.*]] = alloca ptr, align 81007// CHECK9-NEXT:    [[TMP_I:%.*]] = alloca ptr, align 81008// CHECK9-NEXT:    [[TMP5_I:%.*]] = alloca ptr, align 81009// CHECK9-NEXT:    [[I_I:%.*]] = alloca i32, align 41010// CHECK9-NEXT:    [[DOTOMP_IV_I:%.*]] = alloca i32, align 41011// CHECK9-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 41012// CHECK9-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 81013// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 41014// CHECK9-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 81015// CHECK9-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41016// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 81017// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 01018// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21019// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01020// CHECK9-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 81021// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5]], ptr [[TMP3]], i32 0, i32 11022// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 51023// CHECK9-NEXT:    [[TMP10:%.*]] = load i64, ptr [[TMP9]], align 81024// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 61025// CHECK9-NEXT:    [[TMP12:%.*]] = load i64, ptr [[TMP11]], align 81026// CHECK9-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 71027// CHECK9-NEXT:    [[TMP14:%.*]] = load i64, ptr [[TMP13]], align 81028// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 81029// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 81030// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 91031// CHECK9-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 81032// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META36:![0-9]+]])1033// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META39:![0-9]+]])1034// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META41:![0-9]+]])1035// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])1036// CHECK9-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META45:![0-9]+]])1037// CHECK9-NEXT:    store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META47:![0-9]+]]1038// CHECK9-NEXT:    store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 8, !noalias [[META47]]1039// CHECK9-NEXT:    store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META47]]1040// CHECK9-NEXT:    store ptr @.omp_task_privates_map..4, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META47]]1041// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 8, !noalias [[META47]]1042// CHECK9-NEXT:    store i64 [[TMP10]], ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META47]]1043// CHECK9-NEXT:    store i64 [[TMP12]], ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META47]]1044// CHECK9-NEXT:    store i64 [[TMP14]], ptr [[DOTST__ADDR_I]], align 8, !noalias [[META47]]1045// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTLITER__ADDR_I]], align 4, !noalias [[META47]]1046// CHECK9-NEXT:    store ptr [[TMP18]], ptr [[DOTREDUCTIONS__ADDR_I]], align 8, !noalias [[META47]]1047// CHECK9-NEXT:    store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META47]]1048// CHECK9-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 8, !noalias [[META47]]1049// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 8, !noalias [[META47]]1050// CHECK9-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 8, !noalias [[META47]]1051// CHECK9-NEXT:    call void [[TMP20]](ptr [[TMP21]], ptr [[DOTPRIV_PTR_ADDR_I]], ptr [[DOTPRIV_PTR_ADDR1_I]], ptr [[DOTPRIV_PTR_ADDR2_I]], ptr [[DOTPRIV_PTR_ADDR3_I]]) #[[ATTR3]]1052// CHECK9-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR_I]], align 8, !noalias [[META47]]1053// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR1_I]], align 8, !noalias [[META47]]1054// CHECK9-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR2_I]], align 8, !noalias [[META47]]1055// CHECK9-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR3_I]], align 8, !noalias [[META47]]1056// CHECK9-NEXT:    store ptr [[TMP25]], ptr [[TMP_I]], align 8, !noalias [[META47]]1057// CHECK9-NEXT:    store ptr undef, ptr [[TMP5_I]], align 8, !noalias [[META47]]1058// CHECK9-NEXT:    [[TMP26:%.*]] = load i64, ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META47]]1059// CHECK9-NEXT:    [[CONV_I:%.*]] = trunc i64 [[TMP26]] to i321060// CHECK9-NEXT:    store i32 [[CONV_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META47]]1061// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND_I:%.*]]1062// CHECK9:       omp.inner.for.cond.i:1063// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META47]], !llvm.access.group [[ACC_GRP48:![0-9]+]]1064// CHECK9-NEXT:    [[CONV6_I:%.*]] = sext i32 [[TMP27]] to i641065// CHECK9-NEXT:    [[TMP28:%.*]] = load i64, ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META47]], !llvm.access.group [[ACC_GRP48]]1066// CHECK9-NEXT:    [[CMP_I:%.*]] = icmp ule i64 [[CONV6_I]], [[TMP28]]1067// CHECK9-NEXT:    br i1 [[CMP_I]], label [[OMP_INNER_FOR_BODY_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]]1068// CHECK9:       omp.inner.for.body.i:1069// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META47]], !llvm.access.group [[ACC_GRP48]]1070// CHECK9-NEXT:    store i32 [[TMP29]], ptr [[I_I]], align 4, !noalias [[META47]], !llvm.access.group [[ACC_GRP48]]1071// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP22]], align 4, !llvm.access.group [[ACC_GRP48]]1072// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[I_I]], align 4, !noalias [[META47]], !llvm.access.group [[ACC_GRP48]]1073// CHECK9-NEXT:    [[IDXPROM_I:%.*]] = sext i32 [[TMP31]] to i641074// CHECK9-NEXT:    [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x i32], ptr [[TMP23]], i64 0, i64 [[IDXPROM_I]]1075// CHECK9-NEXT:    store i32 [[TMP30]], ptr [[ARRAYIDX_I]], align 4, !llvm.access.group [[ACC_GRP48]]1076// CHECK9-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[TMP_I]], align 8, !noalias [[META47]], !nonnull [[META16]], !align [[META17]], !llvm.access.group [[ACC_GRP48]]1077// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[I_I]], align 4, !noalias [[META47]], !llvm.access.group [[ACC_GRP48]]1078// CHECK9-NEXT:    [[IDXPROM7_I:%.*]] = sext i32 [[TMP33]] to i641079// CHECK9-NEXT:    [[ARRAYIDX8_I:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[TMP24]], i64 0, i64 [[IDXPROM7_I]]1080// CHECK9-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[ARRAYIDX8_I]], ptr align 4 [[TMP32]], i64 4, i1 false), !llvm.access.group [[ACC_GRP48]]1081// CHECK9-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META47]], !llvm.access.group [[ACC_GRP48]]1082// CHECK9-NEXT:    [[ADD9_I:%.*]] = add nsw i32 [[TMP34]], 11083// CHECK9-NEXT:    store i32 [[ADD9_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META47]], !llvm.access.group [[ACC_GRP48]]1084// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND_I]], !llvm.loop [[LOOP49:![0-9]+]]1085// CHECK9:       .omp_outlined..3.exit:1086// CHECK9-NEXT:    ret i32 01087//1088//1089// CHECK9-LABEL: define {{[^@]+}}@.omp_task_dup..61090// CHECK9-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]], i32 noundef signext [[TMP2:%.*]]) #[[ATTR6]] {1091// CHECK9-NEXT:  entry:1092// CHECK9-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 81093// CHECK9-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 81094// CHECK9-NEXT:    [[DOTADDR2:%.*]] = alloca i32, align 41095// CHECK9-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 81096// CHECK9-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 81097// CHECK9-NEXT:    store i32 [[TMP2]], ptr [[DOTADDR2]], align 41098// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR]], align 81099// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 11100// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4:%.*]], ptr [[TMP4]], i32 0, i32 01101// CHECK9-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP5]])1102// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP4]], i32 0, i32 31103// CHECK9-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[TMP6]], i32 0, i32 01104// CHECK9-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S_2:%.*]], ptr [[ARRAY_BEGIN]], i64 21105// CHECK9-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]1106// CHECK9:       arrayctor.loop:1107// CHECK9-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]1108// CHECK9-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])1109// CHECK9-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAYCTOR_CUR]], i64 11110// CHECK9-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]1111// CHECK9-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]1112// CHECK9:       arrayctor.cont:1113// CHECK9-NEXT:    ret void1114//1115//1116// CHECK9-LABEL: define {{[^@]+}}@.omp_task_destructor..71117// CHECK9-SAME: (i32 noundef signext [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6]] {1118// CHECK9-NEXT:  entry:1119// CHECK9-NEXT:    [[RETVAL:%.*]] = alloca i32, align 41120// CHECK9-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 41121// CHECK9-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 81122// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 41123// CHECK9-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 81124// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTADDR1]], align 81125// CHECK9-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP2]], i32 0, i32 11126// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4:%.*]], ptr [[TMP3]], i32 0, i32 01127// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP3]], i32 0, i32 31128// CHECK9-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[TMP5]], i32 0, i32 01129// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_S_2:%.*]], ptr [[ARRAY_BEGIN]], i64 21130// CHECK9-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]1131// CHECK9:       arraydestroy.body:1132// CHECK9-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP6]], [[ENTRY:%.*]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]1133// CHECK9-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -11134// CHECK9-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]1135// CHECK9-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN]]1136// CHECK9-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE2:%.*]], label [[ARRAYDESTROY_BODY]]1137// CHECK9:       arraydestroy.done2:1138// CHECK9-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP4]]) #[[ATTR3]]1139// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[RETVAL]], align 41140// CHECK9-NEXT:    ret i32 [[TMP7]]1141//1142//1143// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIiED1Ev1144// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {1145// CHECK9-NEXT:  entry:1146// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 81147// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 81148// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81149// CHECK9-NEXT:    call void @_ZN1SIiED2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR3]]1150// CHECK9-NEXT:    ret void1151//1152//1153// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIiEC2Ev1154// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {1155// CHECK9-NEXT:  entry:1156// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 81157// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 81158// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81159// CHECK9-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S_2:%.*]], ptr [[THIS1]], i32 0, i32 01160// CHECK9-NEXT:    store i32 0, ptr [[F]], align 41161// CHECK9-NEXT:    ret void1162//1163//1164// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIiEC2Ei1165// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef signext [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat {1166// CHECK9-NEXT:  entry:1167// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 81168// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 41169// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 81170// CHECK9-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 41171// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81172// CHECK9-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S_2:%.*]], ptr [[THIS1]], i32 0, i32 01173// CHECK9-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 41174// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[F]], align 41175// CHECK9-NEXT:    ret void1176//1177//1178// CHECK9-LABEL: define {{[^@]+}}@_ZN1SIiED2Ev1179// CHECK9-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {1180// CHECK9-NEXT:  entry:1181// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 81182// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 81183// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81184// CHECK9-NEXT:    ret void1185//1186//1187// CHECK11-LABEL: define {{[^@]+}}@main1188// CHECK11-SAME: () #[[ATTR0:[0-9]+]] {1189// CHECK11-NEXT:  entry:1190// CHECK11-NEXT:    [[RETVAL:%.*]] = alloca i32, align 41191// CHECK11-NEXT:    [[G:%.*]] = alloca double, align 81192// CHECK11-NEXT:    [[G1:%.*]] = alloca ptr, align 41193// CHECK11-NEXT:    [[TEST:%.*]] = alloca [[STRUCT_S:%.*]], align 41194// CHECK11-NEXT:    [[T_VAR:%.*]] = alloca i32, align 41195// CHECK11-NEXT:    [[VEC:%.*]] = alloca [2 x i32], align 41196// CHECK11-NEXT:    [[S_ARR:%.*]] = alloca [2 x %struct.S], align 41197// CHECK11-NEXT:    [[VAR:%.*]] = alloca ptr, align 41198// CHECK11-NEXT:    [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 11199// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41200// CHECK11-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 41201// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 41202// CHECK11-NEXT:    [[AGG_CAPTURED2:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 11203// CHECK11-NEXT:    [[_TMP3:%.*]] = alloca i32, align 41204// CHECK11-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])1205// CHECK11-NEXT:    store i32 0, ptr [[RETVAL]], align 41206// CHECK11-NEXT:    store ptr [[G]], ptr [[G1]], align 41207// CHECK11-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]])1208// CHECK11-NEXT:    store i32 0, ptr [[T_VAR]], align 41209// CHECK11-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[VEC]], ptr align 4 @__const.main.vec, i32 8, i1 false)1210// CHECK11-NEXT:    call void @_ZN1SIfEC1Ef(ptr noundef nonnull align 4 dereferenceable(4) [[S_ARR]], float noundef 1.000000e+00)1211// CHECK11-NEXT:    [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S_ARR]], i32 11212// CHECK11-NEXT:    call void @_ZN1SIfEC1Ef(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYINIT_ELEMENT]], float noundef 2.000000e+00)1213// CHECK11-NEXT:    store ptr [[TEST]], ptr [[VAR]], align 41214// CHECK11-NEXT:    call void @__kmpc_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])1215// CHECK11-NEXT:    store ptr undef, ptr [[_TMP1]], align 41216// CHECK11-NEXT:    [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 9, i32 80, i32 1, ptr @.omp_task_entry.)1217// CHECK11-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP1]], i32 0, i32 01218// CHECK11-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES]], ptr [[TMP1]], i32 0, i32 11219// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP3]], i32 0, i32 21220// CHECK11-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP4]], i32 0, i32 01221// CHECK11-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN]], i32 21222// CHECK11-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]1223// CHECK11:       arrayctor.loop:1224// CHECK11-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]1225// CHECK11-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])1226// CHECK11-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i32 11227// CHECK11-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]1228// CHECK11-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]1229// CHECK11:       arrayctor.cont:1230// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP3]], i32 0, i32 31231// CHECK11-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP5]])1232// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP2]], i32 0, i32 31233// CHECK11-NEXT:    store ptr @.omp_task_destructor., ptr [[TMP6]], align 41234// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 51235// CHECK11-NEXT:    store i64 0, ptr [[TMP7]], align 41236// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 61237// CHECK11-NEXT:    store i64 1, ptr [[TMP8]], align 41238// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 71239// CHECK11-NEXT:    store i64 1, ptr [[TMP9]], align 41240// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 91241// CHECK11-NEXT:    call void @llvm.memset.p0.i32(ptr align 4 [[TMP10]], i8 0, i32 4, i1 false)1242// CHECK11-NEXT:    [[TMP11:%.*]] = load i64, ptr [[TMP9]], align 41243// CHECK11-NEXT:    call void @__kmpc_taskloop(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP1]], i32 1, ptr [[TMP7]], ptr [[TMP8]], i64 [[TMP11]], i32 1, i32 0, i64 0, ptr @.omp_task_dup.)1244// CHECK11-NEXT:    call void @__kmpc_end_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])1245// CHECK11-NEXT:    call void @__kmpc_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])1246// CHECK11-NEXT:    [[TMP12:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i32 52, i32 1, ptr @.omp_task_entry..2)1247// CHECK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP12]], i32 0, i32 01248// CHECK11-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP13]], i32 0, i32 51249// CHECK11-NEXT:    store i64 0, ptr [[TMP14]], align 41250// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP13]], i32 0, i32 61251// CHECK11-NEXT:    store i64 1, ptr [[TMP15]], align 41252// CHECK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP13]], i32 0, i32 71253// CHECK11-NEXT:    store i64 1, ptr [[TMP16]], align 41254// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP13]], i32 0, i32 91255// CHECK11-NEXT:    call void @llvm.memset.p0.i32(ptr align 4 [[TMP17]], i8 0, i32 4, i1 false)1256// CHECK11-NEXT:    [[TMP18:%.*]] = load i64, ptr [[TMP16]], align 41257// CHECK11-NEXT:    call void @__kmpc_taskloop(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP12]], i32 1, ptr [[TMP14]], ptr [[TMP15]], i64 [[TMP18]], i32 1, i32 0, i64 0, ptr null)1258// CHECK11-NEXT:    call void @__kmpc_end_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])1259// CHECK11-NEXT:    [[CALL:%.*]] = call noundef i32 @_Z5tmainIiET_v()1260// CHECK11-NEXT:    store i32 [[CALL]], ptr [[RETVAL]], align 41261// CHECK11-NEXT:    [[ARRAY_BEGIN4:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR]], i32 0, i32 01262// CHECK11-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN4]], i32 21263// CHECK11-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]1264// CHECK11:       arraydestroy.body:1265// CHECK11-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP19]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]1266// CHECK11-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i32 -11267// CHECK11-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3:[0-9]+]]1268// CHECK11-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN4]]1269// CHECK11-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE5:%.*]], label [[ARRAYDESTROY_BODY]]1270// CHECK11:       arraydestroy.done5:1271// CHECK11-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]]) #[[ATTR3]]1272// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[RETVAL]], align 41273// CHECK11-NEXT:    ret i32 [[TMP20]]1274//1275//1276// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIfEC1Ev1277// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {1278// CHECK11-NEXT:  entry:1279// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41280// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41281// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41282// CHECK11-NEXT:    call void @_ZN1SIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])1283// CHECK11-NEXT:    ret void1284//1285//1286// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIfEC1Ef1287// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], float noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1288// CHECK11-NEXT:  entry:1289// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41290// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca float, align 41291// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41292// CHECK11-NEXT:    store float [[A]], ptr [[A_ADDR]], align 41293// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41294// CHECK11-NEXT:    [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 41295// CHECK11-NEXT:    call void @_ZN1SIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], float noundef [[TMP0]])1296// CHECK11-NEXT:    ret void1297//1298//1299// CHECK11-LABEL: define {{[^@]+}}@.omp_task_privates_map.1300// CHECK11-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]], ptr noalias noundef [[TMP4:%.*]], ptr noalias noundef [[TMP5:%.*]]) #[[ATTR5:[0-9]+]] {1301// CHECK11-NEXT:  entry:1302// CHECK11-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 41303// CHECK11-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 41304// CHECK11-NEXT:    [[DOTADDR2:%.*]] = alloca ptr, align 41305// CHECK11-NEXT:    [[DOTADDR3:%.*]] = alloca ptr, align 41306// CHECK11-NEXT:    [[DOTADDR4:%.*]] = alloca ptr, align 41307// CHECK11-NEXT:    [[DOTADDR5:%.*]] = alloca ptr, align 41308// CHECK11-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 41309// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 41310// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[DOTADDR2]], align 41311// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[DOTADDR3]], align 41312// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[DOTADDR4]], align 41313// CHECK11-NEXT:    store ptr [[TMP5]], ptr [[DOTADDR5]], align 41314// CHECK11-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[DOTADDR]], align 41315// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP6]], i32 0, i32 01316// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTADDR1]], align 41317// CHECK11-NEXT:    store ptr [[TMP7]], ptr [[TMP8]], align 41318// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP6]], i32 0, i32 11319// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTADDR2]], align 41320// CHECK11-NEXT:    store ptr [[TMP9]], ptr [[TMP10]], align 41321// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP6]], i32 0, i32 21322// CHECK11-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTADDR3]], align 41323// CHECK11-NEXT:    store ptr [[TMP11]], ptr [[TMP12]], align 41324// CHECK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP6]], i32 0, i32 31325// CHECK11-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTADDR4]], align 41326// CHECK11-NEXT:    store ptr [[TMP13]], ptr [[TMP14]], align 41327// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP6]], i32 0, i32 41328// CHECK11-NEXT:    [[TMP16:%.*]] = load ptr, ptr [[DOTADDR5]], align 41329// CHECK11-NEXT:    store ptr [[TMP15]], ptr [[TMP16]], align 41330// CHECK11-NEXT:    ret void1331//1332//1333// CHECK11-LABEL: define {{[^@]+}}@.omp_task_entry.1334// CHECK11-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6:[0-9]+]] {1335// CHECK11-NEXT:  entry:1336// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41337// CHECK11-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 41338// CHECK11-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 41339// CHECK11-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 41340// CHECK11-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 41341// CHECK11-NEXT:    [[DOTLB__ADDR_I:%.*]] = alloca i64, align 81342// CHECK11-NEXT:    [[DOTUB__ADDR_I:%.*]] = alloca i64, align 81343// CHECK11-NEXT:    [[DOTST__ADDR_I:%.*]] = alloca i64, align 81344// CHECK11-NEXT:    [[DOTLITER__ADDR_I:%.*]] = alloca i32, align 41345// CHECK11-NEXT:    [[DOTREDUCTIONS__ADDR_I:%.*]] = alloca ptr, align 41346// CHECK11-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 41347// CHECK11-NEXT:    [[DOTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 41348// CHECK11-NEXT:    [[DOTPRIV_PTR_ADDR1_I:%.*]] = alloca ptr, align 41349// CHECK11-NEXT:    [[DOTPRIV_PTR_ADDR2_I:%.*]] = alloca ptr, align 41350// CHECK11-NEXT:    [[DOTPRIV_PTR_ADDR3_I:%.*]] = alloca ptr, align 41351// CHECK11-NEXT:    [[DOTPRIV_PTR_ADDR4_I:%.*]] = alloca ptr, align 41352// CHECK11-NEXT:    [[TMP_I:%.*]] = alloca ptr, align 41353// CHECK11-NEXT:    [[TMP6_I:%.*]] = alloca ptr, align 41354// CHECK11-NEXT:    [[I_I:%.*]] = alloca i32, align 41355// CHECK11-NEXT:    [[DOTOMP_IV_I:%.*]] = alloca i32, align 41356// CHECK11-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 41357// CHECK11-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 41358// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 41359// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 41360// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41361// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 41362// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 01363// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21364// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01365// CHECK11-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 41366// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES]], ptr [[TMP3]], i32 0, i32 11367// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 51368// CHECK11-NEXT:    [[TMP10:%.*]] = load i64, ptr [[TMP9]], align 41369// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 61370// CHECK11-NEXT:    [[TMP12:%.*]] = load i64, ptr [[TMP11]], align 41371// CHECK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 71372// CHECK11-NEXT:    [[TMP14:%.*]] = load i64, ptr [[TMP13]], align 41373// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 81374// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 41375// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 91376// CHECK11-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 41377// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META4:![0-9]+]])1378// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META7:![0-9]+]])1379// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META9:![0-9]+]])1380// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META11:![0-9]+]])1381// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])1382// CHECK11-NEXT:    store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META15:![0-9]+]]1383// CHECK11-NEXT:    store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 4, !noalias [[META15]]1384// CHECK11-NEXT:    store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 4, !noalias [[META15]]1385// CHECK11-NEXT:    store ptr @.omp_task_privates_map., ptr [[DOTCOPY_FN__ADDR_I]], align 4, !noalias [[META15]]1386// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 4, !noalias [[META15]]1387// CHECK11-NEXT:    store i64 [[TMP10]], ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META15]]1388// CHECK11-NEXT:    store i64 [[TMP12]], ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META15]]1389// CHECK11-NEXT:    store i64 [[TMP14]], ptr [[DOTST__ADDR_I]], align 8, !noalias [[META15]]1390// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTLITER__ADDR_I]], align 4, !noalias [[META15]]1391// CHECK11-NEXT:    store ptr [[TMP18]], ptr [[DOTREDUCTIONS__ADDR_I]], align 4, !noalias [[META15]]1392// CHECK11-NEXT:    store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 4, !noalias [[META15]]1393// CHECK11-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 4, !noalias [[META15]]1394// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 4, !noalias [[META15]]1395// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 4, !noalias [[META15]]1396// CHECK11-NEXT:    call void [[TMP20]](ptr [[TMP21]], ptr [[DOTPRIV_PTR_ADDR_I]], ptr [[DOTPRIV_PTR_ADDR1_I]], ptr [[DOTPRIV_PTR_ADDR2_I]], ptr [[DOTPRIV_PTR_ADDR3_I]], ptr [[DOTPRIV_PTR_ADDR4_I]]) #[[ATTR3]]1397// CHECK11-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR_I]], align 4, !noalias [[META15]]1398// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR1_I]], align 4, !noalias [[META15]]1399// CHECK11-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR2_I]], align 4, !noalias [[META15]]1400// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR3_I]], align 4, !noalias [[META15]]1401// CHECK11-NEXT:    store ptr [[TMP25]], ptr [[TMP_I]], align 4, !noalias [[META15]]1402// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR4_I]], align 4, !noalias [[META15]]1403// CHECK11-NEXT:    store ptr undef, ptr [[TMP6_I]], align 4, !noalias [[META15]]1404// CHECK11-NEXT:    [[TMP27:%.*]] = load i64, ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META15]]1405// CHECK11-NEXT:    [[CONV_I:%.*]] = trunc i64 [[TMP27]] to i321406// CHECK11-NEXT:    store i32 [[CONV_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META15]]1407// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND_I:%.*]]1408// CHECK11:       omp.inner.for.cond.i:1409// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META15]], !llvm.access.group [[ACC_GRP16:![0-9]+]]1410// CHECK11-NEXT:    [[CONV7_I:%.*]] = sext i32 [[TMP28]] to i641411// CHECK11-NEXT:    [[TMP29:%.*]] = load i64, ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META15]], !llvm.access.group [[ACC_GRP16]]1412// CHECK11-NEXT:    [[CMP_I:%.*]] = icmp ule i64 [[CONV7_I]], [[TMP29]]1413// CHECK11-NEXT:    br i1 [[CMP_I]], label [[OMP_INNER_FOR_BODY_I:%.*]], label [[DOTOMP_OUTLINED__EXIT:%.*]]1414// CHECK11:       omp.inner.for.body.i:1415// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META15]], !llvm.access.group [[ACC_GRP16]]1416// CHECK11-NEXT:    store i32 [[TMP30]], ptr [[I_I]], align 4, !noalias [[META15]], !llvm.access.group [[ACC_GRP16]]1417// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[TMP22]], align 4, !llvm.access.group [[ACC_GRP16]]1418// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[I_I]], align 4, !noalias [[META15]], !llvm.access.group [[ACC_GRP16]]1419// CHECK11-NEXT:    [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x i32], ptr [[TMP23]], i32 0, i32 [[TMP32]]1420// CHECK11-NEXT:    store i32 [[TMP31]], ptr [[ARRAYIDX_I]], align 4, !llvm.access.group [[ACC_GRP16]]1421// CHECK11-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[TMP_I]], align 4, !noalias [[META15]], !nonnull [[META17:![0-9]+]], !align [[META18:![0-9]+]], !llvm.access.group [[ACC_GRP16]]1422// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[I_I]], align 4, !noalias [[META15]], !llvm.access.group [[ACC_GRP16]]1423// CHECK11-NEXT:    [[ARRAYIDX8_I:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP24]], i32 0, i32 [[TMP34]]1424// CHECK11-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[ARRAYIDX8_I]], ptr align 4 [[TMP33]], i32 4, i1 false), !llvm.access.group [[ACC_GRP16]]1425// CHECK11-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META15]], !llvm.access.group [[ACC_GRP16]]1426// CHECK11-NEXT:    [[ADD9_I:%.*]] = add nsw i32 [[TMP35]], 11427// CHECK11-NEXT:    store i32 [[ADD9_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META15]], !llvm.access.group [[ACC_GRP16]]1428// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND_I]], !llvm.loop [[LOOP19:![0-9]+]]1429// CHECK11:       .omp_outlined..exit:1430// CHECK11-NEXT:    ret i32 01431//1432//1433// CHECK11-LABEL: define {{[^@]+}}@.omp_task_dup.1434// CHECK11-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]], i32 noundef [[TMP2:%.*]]) #[[ATTR6]] {1435// CHECK11-NEXT:  entry:1436// CHECK11-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 41437// CHECK11-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 41438// CHECK11-NEXT:    [[DOTADDR2:%.*]] = alloca i32, align 41439// CHECK11-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 41440// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 41441// CHECK11-NEXT:    store i32 [[TMP2]], ptr [[DOTADDR2]], align 41442// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR]], align 41443// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP3]], i32 0, i32 11444// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP4]], i32 0, i32 21445// CHECK11-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP5]], i32 0, i32 01446// CHECK11-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i32 21447// CHECK11-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]1448// CHECK11:       arrayctor.loop:1449// CHECK11-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]1450// CHECK11-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])1451// CHECK11-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i32 11452// CHECK11-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]1453// CHECK11-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]1454// CHECK11:       arrayctor.cont:1455// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP4]], i32 0, i32 31456// CHECK11-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP6]])1457// CHECK11-NEXT:    ret void1458//1459//1460// CHECK11-LABEL: define {{[^@]+}}@.omp_task_destructor.1461// CHECK11-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6]] {1462// CHECK11-NEXT:  entry:1463// CHECK11-NEXT:    [[RETVAL:%.*]] = alloca i32, align 41464// CHECK11-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 41465// CHECK11-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 41466// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 41467// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 41468// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTADDR1]], align 41469// CHECK11-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], ptr [[TMP2]], i32 0, i32 11470// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T:%.*]], ptr [[TMP3]], i32 0, i32 21471// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T]], ptr [[TMP3]], i32 0, i32 31472// CHECK11-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP5]]) #[[ATTR3]]1473// CHECK11-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[TMP4]], i32 0, i32 01474// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_S:%.*]], ptr [[ARRAY_BEGIN]], i32 21475// CHECK11-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]1476// CHECK11:       arraydestroy.body:1477// CHECK11-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP6]], [[ENTRY:%.*]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]1478// CHECK11-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i32 -11479// CHECK11-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]1480// CHECK11-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN]]1481// CHECK11-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE2:%.*]], label [[ARRAYDESTROY_BODY]]1482// CHECK11:       arraydestroy.done2:1483// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[RETVAL]], align 41484// CHECK11-NEXT:    ret i32 [[TMP7]]1485//1486//1487// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIfED1Ev1488// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1489// CHECK11-NEXT:  entry:1490// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41491// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41492// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41493// CHECK11-NEXT:    call void @_ZN1SIfED2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR3]]1494// CHECK11-NEXT:    ret void1495//1496//1497// CHECK11-LABEL: define {{[^@]+}}@.omp_task_entry..21498// CHECK11-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6]] {1499// CHECK11-NEXT:  entry:1500// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41501// CHECK11-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 41502// CHECK11-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 41503// CHECK11-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 41504// CHECK11-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 41505// CHECK11-NEXT:    [[DOTLB__ADDR_I:%.*]] = alloca i64, align 81506// CHECK11-NEXT:    [[DOTUB__ADDR_I:%.*]] = alloca i64, align 81507// CHECK11-NEXT:    [[DOTST__ADDR_I:%.*]] = alloca i64, align 81508// CHECK11-NEXT:    [[DOTLITER__ADDR_I:%.*]] = alloca i32, align 41509// CHECK11-NEXT:    [[DOTREDUCTIONS__ADDR_I:%.*]] = alloca ptr, align 41510// CHECK11-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 41511// CHECK11-NEXT:    [[I_I:%.*]] = alloca i32, align 41512// CHECK11-NEXT:    [[DOTOMP_IV_I:%.*]] = alloca i32, align 41513// CHECK11-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 41514// CHECK11-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 41515// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 41516// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 41517// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41518// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 41519// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], ptr [[TMP3]], i32 0, i32 01520// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21521// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01522// CHECK11-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 41523// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 51524// CHECK11-NEXT:    [[TMP9:%.*]] = load i64, ptr [[TMP8]], align 41525// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 61526// CHECK11-NEXT:    [[TMP11:%.*]] = load i64, ptr [[TMP10]], align 41527// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 71528// CHECK11-NEXT:    [[TMP13:%.*]] = load i64, ptr [[TMP12]], align 41529// CHECK11-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 81530// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 41531// CHECK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 91532// CHECK11-NEXT:    [[TMP17:%.*]] = load ptr, ptr [[TMP16]], align 41533// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META22:![0-9]+]])1534// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META25:![0-9]+]])1535// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META27:![0-9]+]])1536// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META29:![0-9]+]])1537// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META31:![0-9]+]])1538// CHECK11-NEXT:    store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META33:![0-9]+]]1539// CHECK11-NEXT:    store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 4, !noalias [[META33]]1540// CHECK11-NEXT:    store ptr null, ptr [[DOTPRIVATES__ADDR_I]], align 4, !noalias [[META33]]1541// CHECK11-NEXT:    store ptr null, ptr [[DOTCOPY_FN__ADDR_I]], align 4, !noalias [[META33]]1542// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 4, !noalias [[META33]]1543// CHECK11-NEXT:    store i64 [[TMP9]], ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META33]]1544// CHECK11-NEXT:    store i64 [[TMP11]], ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META33]]1545// CHECK11-NEXT:    store i64 [[TMP13]], ptr [[DOTST__ADDR_I]], align 8, !noalias [[META33]]1546// CHECK11-NEXT:    store i32 [[TMP15]], ptr [[DOTLITER__ADDR_I]], align 4, !noalias [[META33]]1547// CHECK11-NEXT:    store ptr [[TMP17]], ptr [[DOTREDUCTIONS__ADDR_I]], align 4, !noalias [[META33]]1548// CHECK11-NEXT:    store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 4, !noalias [[META33]]1549// CHECK11-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 4, !noalias [[META33]]1550// CHECK11-NEXT:    [[TMP19:%.*]] = load i64, ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META33]]1551// CHECK11-NEXT:    [[CONV_I:%.*]] = trunc i64 [[TMP19]] to i321552// CHECK11-NEXT:    store i32 [[CONV_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META33]]1553// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND_I:%.*]]1554// CHECK11:       omp.inner.for.cond.i:1555// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META33]], !llvm.access.group [[ACC_GRP34:![0-9]+]]1556// CHECK11-NEXT:    [[CONV1_I:%.*]] = sext i32 [[TMP20]] to i641557// CHECK11-NEXT:    [[TMP21:%.*]] = load i64, ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META33]], !llvm.access.group [[ACC_GRP34]]1558// CHECK11-NEXT:    [[CMP_I:%.*]] = icmp ule i64 [[CONV1_I]], [[TMP21]]1559// CHECK11-NEXT:    br i1 [[CMP_I]], label [[OMP_INNER_FOR_BODY_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]]1560// CHECK11:       omp.inner.for.body.i:1561// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META33]], !llvm.access.group [[ACC_GRP34]]1562// CHECK11-NEXT:    store i32 [[TMP22]], ptr [[I_I]], align 4, !noalias [[META33]], !llvm.access.group [[ACC_GRP34]]1563// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META33]], !llvm.access.group [[ACC_GRP34]]1564// CHECK11-NEXT:    [[ADD2_I:%.*]] = add nsw i32 [[TMP23]], 11565// CHECK11-NEXT:    store i32 [[ADD2_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META33]], !llvm.access.group [[ACC_GRP34]]1566// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND_I]], !llvm.loop [[LOOP35:![0-9]+]]1567// CHECK11:       .omp_outlined..1.exit:1568// CHECK11-NEXT:    ret i32 01569//1570//1571// CHECK11-LABEL: define {{[^@]+}}@_Z5tmainIiET_v1572// CHECK11-SAME: () #[[ATTR1]] comdat {1573// CHECK11-NEXT:  entry:1574// CHECK11-NEXT:    [[RETVAL:%.*]] = alloca i32, align 41575// CHECK11-NEXT:    [[TEST:%.*]] = alloca [[STRUCT_S_2:%.*]], align 41576// CHECK11-NEXT:    [[T_VAR:%.*]] = alloca i32, align 41577// CHECK11-NEXT:    [[VEC:%.*]] = alloca [2 x i32], align 41578// CHECK11-NEXT:    [[S_ARR:%.*]] = alloca [2 x %struct.S.2], align 41579// CHECK11-NEXT:    [[VAR:%.*]] = alloca ptr, align 41580// CHECK11-NEXT:    [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON_3:%.*]], align 11581// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41582// CHECK11-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 41583// CHECK11-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])1584// CHECK11-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]])1585// CHECK11-NEXT:    store i32 0, ptr [[T_VAR]], align 41586// CHECK11-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[VEC]], ptr align 4 @__const._Z5tmainIiET_v.vec, i32 8, i1 false)1587// CHECK11-NEXT:    call void @_ZN1SIiEC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[S_ARR]], i32 noundef 1)1588// CHECK11-NEXT:    [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[S_ARR]], i32 11589// CHECK11-NEXT:    call void @_ZN1SIiEC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYINIT_ELEMENT]], i32 noundef 2)1590// CHECK11-NEXT:    store ptr [[TEST]], ptr [[VAR]], align 41591// CHECK11-NEXT:    call void @__kmpc_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])1592// CHECK11-NEXT:    store ptr undef, ptr [[_TMP1]], align 41593// CHECK11-NEXT:    [[TMP1:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 9, i32 76, i32 1, ptr @.omp_task_entry..5)1594// CHECK11-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP1]], i32 0, i32 01595// CHECK11-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5]], ptr [[TMP1]], i32 0, i32 11596// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4:%.*]], ptr [[TMP3]], i32 0, i32 21597// CHECK11-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[TMP4]], i32 0, i32 01598// CHECK11-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAY_BEGIN]], i32 21599// CHECK11-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]1600// CHECK11:       arrayctor.loop:1601// CHECK11-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]1602// CHECK11-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])1603// CHECK11-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAYCTOR_CUR]], i32 11604// CHECK11-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]1605// CHECK11-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]1606// CHECK11:       arrayctor.cont:1607// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP3]], i32 0, i32 31608// CHECK11-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP5]])1609// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP2]], i32 0, i32 31610// CHECK11-NEXT:    store ptr @.omp_task_destructor..7, ptr [[TMP6]], align 41611// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 51612// CHECK11-NEXT:    store i64 0, ptr [[TMP7]], align 41613// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 61614// CHECK11-NEXT:    store i64 1, ptr [[TMP8]], align 41615// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 71616// CHECK11-NEXT:    store i64 1, ptr [[TMP9]], align 41617// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP2]], i32 0, i32 91618// CHECK11-NEXT:    call void @llvm.memset.p0.i32(ptr align 4 [[TMP10]], i8 0, i32 4, i1 false)1619// CHECK11-NEXT:    [[TMP11:%.*]] = load i64, ptr [[TMP9]], align 41620// CHECK11-NEXT:    call void @__kmpc_taskloop(ptr @[[GLOB1]], i32 [[TMP0]], ptr [[TMP1]], i32 1, ptr [[TMP7]], ptr [[TMP8]], i64 [[TMP11]], i32 1, i32 0, i64 0, ptr @.omp_task_dup..6)1621// CHECK11-NEXT:    call void @__kmpc_end_taskgroup(ptr @[[GLOB1]], i32 [[TMP0]])1622// CHECK11-NEXT:    store i32 0, ptr [[RETVAL]], align 41623// CHECK11-NEXT:    [[ARRAY_BEGIN2:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[S_ARR]], i32 0, i32 01624// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAY_BEGIN2]], i32 21625// CHECK11-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]1626// CHECK11:       arraydestroy.body:1627// CHECK11-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP12]], [[ARRAYCTOR_CONT]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]1628// CHECK11-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i32 -11629// CHECK11-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]1630// CHECK11-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN2]]1631// CHECK11-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE3:%.*]], label [[ARRAYDESTROY_BODY]]1632// CHECK11:       arraydestroy.done3:1633// CHECK11-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]]) #[[ATTR3]]1634// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[RETVAL]], align 41635// CHECK11-NEXT:    ret i32 [[TMP13]]1636//1637//1638// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIfEC2Ev1639// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1640// CHECK11-NEXT:  entry:1641// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41642// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41643// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41644// CHECK11-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 01645// CHECK11-NEXT:    store float 0.000000e+00, ptr [[F]], align 41646// CHECK11-NEXT:    ret void1647//1648//1649// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIfEC2Ef1650// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], float noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1651// CHECK11-NEXT:  entry:1652// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41653// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca float, align 41654// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41655// CHECK11-NEXT:    store float [[A]], ptr [[A_ADDR]], align 41656// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41657// CHECK11-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 01658// CHECK11-NEXT:    [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 41659// CHECK11-NEXT:    store float [[TMP0]], ptr [[F]], align 41660// CHECK11-NEXT:    ret void1661//1662//1663// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIfED2Ev1664// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1665// CHECK11-NEXT:  entry:1666// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41667// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41668// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41669// CHECK11-NEXT:    ret void1670//1671//1672// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIiEC1Ev1673// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1674// CHECK11-NEXT:  entry:1675// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41676// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41677// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41678// CHECK11-NEXT:    call void @_ZN1SIiEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])1679// CHECK11-NEXT:    ret void1680//1681//1682// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIiEC1Ei1683// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1684// CHECK11-NEXT:  entry:1685// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41686// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 41687// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41688// CHECK11-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 41689// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41690// CHECK11-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 41691// CHECK11-NEXT:    call void @_ZN1SIiEC2Ei(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], i32 noundef [[TMP0]])1692// CHECK11-NEXT:    ret void1693//1694//1695// CHECK11-LABEL: define {{[^@]+}}@.omp_task_privates_map..41696// CHECK11-SAME: (ptr noalias noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]], ptr noalias noundef [[TMP2:%.*]], ptr noalias noundef [[TMP3:%.*]], ptr noalias noundef [[TMP4:%.*]]) #[[ATTR5]] {1697// CHECK11-NEXT:  entry:1698// CHECK11-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 41699// CHECK11-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 41700// CHECK11-NEXT:    [[DOTADDR2:%.*]] = alloca ptr, align 41701// CHECK11-NEXT:    [[DOTADDR3:%.*]] = alloca ptr, align 41702// CHECK11-NEXT:    [[DOTADDR4:%.*]] = alloca ptr, align 41703// CHECK11-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 41704// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 41705// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[DOTADDR2]], align 41706// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[DOTADDR3]], align 41707// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[DOTADDR4]], align 41708// CHECK11-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[DOTADDR]], align 41709// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4:%.*]], ptr [[TMP5]], i32 0, i32 01710// CHECK11-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[DOTADDR1]], align 41711// CHECK11-NEXT:    store ptr [[TMP6]], ptr [[TMP7]], align 41712// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP5]], i32 0, i32 11713// CHECK11-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[DOTADDR2]], align 41714// CHECK11-NEXT:    store ptr [[TMP8]], ptr [[TMP9]], align 41715// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP5]], i32 0, i32 21716// CHECK11-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTADDR3]], align 41717// CHECK11-NEXT:    store ptr [[TMP10]], ptr [[TMP11]], align 41718// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP5]], i32 0, i32 31719// CHECK11-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTADDR4]], align 41720// CHECK11-NEXT:    store ptr [[TMP12]], ptr [[TMP13]], align 41721// CHECK11-NEXT:    ret void1722//1723//1724// CHECK11-LABEL: define {{[^@]+}}@.omp_task_entry..51725// CHECK11-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6]] {1726// CHECK11-NEXT:  entry:1727// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41728// CHECK11-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca ptr, align 41729// CHECK11-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca ptr, align 41730// CHECK11-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca ptr, align 41731// CHECK11-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca ptr, align 41732// CHECK11-NEXT:    [[DOTLB__ADDR_I:%.*]] = alloca i64, align 81733// CHECK11-NEXT:    [[DOTUB__ADDR_I:%.*]] = alloca i64, align 81734// CHECK11-NEXT:    [[DOTST__ADDR_I:%.*]] = alloca i64, align 81735// CHECK11-NEXT:    [[DOTLITER__ADDR_I:%.*]] = alloca i32, align 41736// CHECK11-NEXT:    [[DOTREDUCTIONS__ADDR_I:%.*]] = alloca ptr, align 41737// CHECK11-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca ptr, align 41738// CHECK11-NEXT:    [[DOTPRIV_PTR_ADDR_I:%.*]] = alloca ptr, align 41739// CHECK11-NEXT:    [[DOTPRIV_PTR_ADDR1_I:%.*]] = alloca ptr, align 41740// CHECK11-NEXT:    [[DOTPRIV_PTR_ADDR2_I:%.*]] = alloca ptr, align 41741// CHECK11-NEXT:    [[DOTPRIV_PTR_ADDR3_I:%.*]] = alloca ptr, align 41742// CHECK11-NEXT:    [[TMP_I:%.*]] = alloca ptr, align 41743// CHECK11-NEXT:    [[TMP5_I:%.*]] = alloca ptr, align 41744// CHECK11-NEXT:    [[I_I:%.*]] = alloca i32, align 41745// CHECK11-NEXT:    [[DOTOMP_IV_I:%.*]] = alloca i32, align 41746// CHECK11-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 41747// CHECK11-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 41748// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 41749// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 41750// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTADDR]], align 41751// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR1]], align 41752// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 01753// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T:%.*]], ptr [[TMP4]], i32 0, i32 21754// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 01755// CHECK11-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TMP6]], align 41756// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5]], ptr [[TMP3]], i32 0, i32 11757// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 51758// CHECK11-NEXT:    [[TMP10:%.*]] = load i64, ptr [[TMP9]], align 41759// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 61760// CHECK11-NEXT:    [[TMP12:%.*]] = load i64, ptr [[TMP11]], align 41761// CHECK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 71762// CHECK11-NEXT:    [[TMP14:%.*]] = load i64, ptr [[TMP13]], align 41763// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 81764// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 41765// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T]], ptr [[TMP4]], i32 0, i32 91766// CHECK11-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[TMP17]], align 41767// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META37:![0-9]+]])1768// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])1769// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META42:![0-9]+]])1770// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META44:![0-9]+]])1771// CHECK11-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META46:![0-9]+]])1772// CHECK11-NEXT:    store i32 [[TMP2]], ptr [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias [[META48:![0-9]+]]1773// CHECK11-NEXT:    store ptr [[TMP5]], ptr [[DOTPART_ID__ADDR_I]], align 4, !noalias [[META48]]1774// CHECK11-NEXT:    store ptr [[TMP8]], ptr [[DOTPRIVATES__ADDR_I]], align 4, !noalias [[META48]]1775// CHECK11-NEXT:    store ptr @.omp_task_privates_map..4, ptr [[DOTCOPY_FN__ADDR_I]], align 4, !noalias [[META48]]1776// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[DOTTASK_T__ADDR_I]], align 4, !noalias [[META48]]1777// CHECK11-NEXT:    store i64 [[TMP10]], ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META48]]1778// CHECK11-NEXT:    store i64 [[TMP12]], ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META48]]1779// CHECK11-NEXT:    store i64 [[TMP14]], ptr [[DOTST__ADDR_I]], align 8, !noalias [[META48]]1780// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTLITER__ADDR_I]], align 4, !noalias [[META48]]1781// CHECK11-NEXT:    store ptr [[TMP18]], ptr [[DOTREDUCTIONS__ADDR_I]], align 4, !noalias [[META48]]1782// CHECK11-NEXT:    store ptr [[TMP7]], ptr [[__CONTEXT_ADDR_I]], align 4, !noalias [[META48]]1783// CHECK11-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[__CONTEXT_ADDR_I]], align 4, !noalias [[META48]]1784// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTCOPY_FN__ADDR_I]], align 4, !noalias [[META48]]1785// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTPRIVATES__ADDR_I]], align 4, !noalias [[META48]]1786// CHECK11-NEXT:    call void [[TMP20]](ptr [[TMP21]], ptr [[DOTPRIV_PTR_ADDR_I]], ptr [[DOTPRIV_PTR_ADDR1_I]], ptr [[DOTPRIV_PTR_ADDR2_I]], ptr [[DOTPRIV_PTR_ADDR3_I]]) #[[ATTR3]]1787// CHECK11-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR_I]], align 4, !noalias [[META48]]1788// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR1_I]], align 4, !noalias [[META48]]1789// CHECK11-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR2_I]], align 4, !noalias [[META48]]1790// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTPRIV_PTR_ADDR3_I]], align 4, !noalias [[META48]]1791// CHECK11-NEXT:    store ptr [[TMP25]], ptr [[TMP_I]], align 4, !noalias [[META48]]1792// CHECK11-NEXT:    store ptr undef, ptr [[TMP5_I]], align 4, !noalias [[META48]]1793// CHECK11-NEXT:    [[TMP26:%.*]] = load i64, ptr [[DOTLB__ADDR_I]], align 8, !noalias [[META48]]1794// CHECK11-NEXT:    [[CONV_I:%.*]] = trunc i64 [[TMP26]] to i321795// CHECK11-NEXT:    store i32 [[CONV_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META48]]1796// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND_I:%.*]]1797// CHECK11:       omp.inner.for.cond.i:1798// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META48]], !llvm.access.group [[ACC_GRP49:![0-9]+]]1799// CHECK11-NEXT:    [[CONV6_I:%.*]] = sext i32 [[TMP27]] to i641800// CHECK11-NEXT:    [[TMP28:%.*]] = load i64, ptr [[DOTUB__ADDR_I]], align 8, !noalias [[META48]], !llvm.access.group [[ACC_GRP49]]1801// CHECK11-NEXT:    [[CMP_I:%.*]] = icmp ule i64 [[CONV6_I]], [[TMP28]]1802// CHECK11-NEXT:    br i1 [[CMP_I]], label [[OMP_INNER_FOR_BODY_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]]1803// CHECK11:       omp.inner.for.body.i:1804// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META48]], !llvm.access.group [[ACC_GRP49]]1805// CHECK11-NEXT:    store i32 [[TMP29]], ptr [[I_I]], align 4, !noalias [[META48]], !llvm.access.group [[ACC_GRP49]]1806// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP22]], align 4, !llvm.access.group [[ACC_GRP49]]1807// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[I_I]], align 4, !noalias [[META48]], !llvm.access.group [[ACC_GRP49]]1808// CHECK11-NEXT:    [[ARRAYIDX_I:%.*]] = getelementptr inbounds [2 x i32], ptr [[TMP23]], i32 0, i32 [[TMP31]]1809// CHECK11-NEXT:    store i32 [[TMP30]], ptr [[ARRAYIDX_I]], align 4, !llvm.access.group [[ACC_GRP49]]1810// CHECK11-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[TMP_I]], align 4, !noalias [[META48]], !nonnull [[META17]], !align [[META18]], !llvm.access.group [[ACC_GRP49]]1811// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[I_I]], align 4, !noalias [[META48]], !llvm.access.group [[ACC_GRP49]]1812// CHECK11-NEXT:    [[ARRAYIDX7_I:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[TMP24]], i32 0, i32 [[TMP33]]1813// CHECK11-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[ARRAYIDX7_I]], ptr align 4 [[TMP32]], i32 4, i1 false), !llvm.access.group [[ACC_GRP49]]1814// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_IV_I]], align 4, !noalias [[META48]], !llvm.access.group [[ACC_GRP49]]1815// CHECK11-NEXT:    [[ADD8_I:%.*]] = add nsw i32 [[TMP34]], 11816// CHECK11-NEXT:    store i32 [[ADD8_I]], ptr [[DOTOMP_IV_I]], align 4, !noalias [[META48]], !llvm.access.group [[ACC_GRP49]]1817// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND_I]], !llvm.loop [[LOOP50:![0-9]+]]1818// CHECK11:       .omp_outlined..3.exit:1819// CHECK11-NEXT:    ret i32 01820//1821//1822// CHECK11-LABEL: define {{[^@]+}}@.omp_task_dup..61823// CHECK11-SAME: (ptr noundef [[TMP0:%.*]], ptr noundef [[TMP1:%.*]], i32 noundef [[TMP2:%.*]]) #[[ATTR6]] {1824// CHECK11-NEXT:  entry:1825// CHECK11-NEXT:    [[DOTADDR:%.*]] = alloca ptr, align 41826// CHECK11-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 41827// CHECK11-NEXT:    [[DOTADDR2:%.*]] = alloca i32, align 41828// CHECK11-NEXT:    store ptr [[TMP0]], ptr [[DOTADDR]], align 41829// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 41830// CHECK11-NEXT:    store i32 [[TMP2]], ptr [[DOTADDR2]], align 41831// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTADDR]], align 41832// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP3]], i32 0, i32 11833// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4:%.*]], ptr [[TMP4]], i32 0, i32 21834// CHECK11-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[TMP5]], i32 0, i32 01835// CHECK11-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S_2:%.*]], ptr [[ARRAY_BEGIN]], i32 21836// CHECK11-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]1837// CHECK11:       arrayctor.loop:1838// CHECK11-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]1839// CHECK11-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])1840// CHECK11-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAYCTOR_CUR]], i32 11841// CHECK11-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]1842// CHECK11-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]1843// CHECK11:       arrayctor.cont:1844// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP4]], i32 0, i32 31845// CHECK11-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP6]])1846// CHECK11-NEXT:    ret void1847//1848//1849// CHECK11-LABEL: define {{[^@]+}}@.omp_task_destructor..71850// CHECK11-SAME: (i32 noundef [[TMP0:%.*]], ptr noalias noundef [[TMP1:%.*]]) #[[ATTR6]] {1851// CHECK11-NEXT:  entry:1852// CHECK11-NEXT:    [[RETVAL:%.*]] = alloca i32, align 41853// CHECK11-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 41854// CHECK11-NEXT:    [[DOTADDR1:%.*]] = alloca ptr, align 41855// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[DOTADDR]], align 41856// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[DOTADDR1]], align 41857// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTADDR1]], align 41858// CHECK11-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], ptr [[TMP2]], i32 0, i32 11859// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4:%.*]], ptr [[TMP3]], i32 0, i32 21860// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT__KMP_PRIVATES_T_4]], ptr [[TMP3]], i32 0, i32 31861// CHECK11-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TMP5]]) #[[ATTR3]]1862// CHECK11-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S.2], ptr [[TMP4]], i32 0, i32 01863// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_S_2:%.*]], ptr [[ARRAY_BEGIN]], i32 21864// CHECK11-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]1865// CHECK11:       arraydestroy.body:1866// CHECK11-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP6]], [[ENTRY:%.*]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]1867// CHECK11-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S_2]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i32 -11868// CHECK11-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]1869// CHECK11-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN]]1870// CHECK11-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE2:%.*]], label [[ARRAYDESTROY_BODY]]1871// CHECK11:       arraydestroy.done2:1872// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[RETVAL]], align 41873// CHECK11-NEXT:    ret i32 [[TMP7]]1874//1875//1876// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIiED1Ev1877// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1878// CHECK11-NEXT:  entry:1879// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41880// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41881// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41882// CHECK11-NEXT:    call void @_ZN1SIiED2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR3]]1883// CHECK11-NEXT:    ret void1884//1885//1886// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIiEC2Ev1887// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1888// CHECK11-NEXT:  entry:1889// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41890// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41891// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41892// CHECK11-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S_2:%.*]], ptr [[THIS1]], i32 0, i32 01893// CHECK11-NEXT:    store i32 0, ptr [[F]], align 41894// CHECK11-NEXT:    ret void1895//1896//1897// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIiEC2Ei1898// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1899// CHECK11-NEXT:  entry:1900// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41901// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 41902// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41903// CHECK11-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 41904// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41905// CHECK11-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S_2:%.*]], ptr [[THIS1]], i32 0, i32 01906// CHECK11-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 41907// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[F]], align 41908// CHECK11-NEXT:    ret void1909//1910//1911// CHECK11-LABEL: define {{[^@]+}}@_ZN1SIiED2Ev1912// CHECK11-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {1913// CHECK11-NEXT:  entry:1914// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 41915// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 41916// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 41917// CHECK11-NEXT:    ret void1918//1919//1920// CHECK13-LABEL: define {{[^@]+}}@main1921// CHECK13-SAME: () #[[ATTR0:[0-9]+]] {1922// CHECK13-NEXT:  entry:1923// CHECK13-NEXT:    [[RETVAL:%.*]] = alloca i32, align 41924// CHECK13-NEXT:    [[G:%.*]] = alloca double, align 81925// CHECK13-NEXT:    [[G1:%.*]] = alloca ptr, align 81926// CHECK13-NEXT:    [[TEST:%.*]] = alloca [[STRUCT_S:%.*]], align 41927// CHECK13-NEXT:    [[T_VAR:%.*]] = alloca i32, align 41928// CHECK13-NEXT:    [[VEC:%.*]] = alloca [2 x i32], align 41929// CHECK13-NEXT:    [[S_ARR:%.*]] = alloca [2 x %struct.S], align 41930// CHECK13-NEXT:    [[VAR:%.*]] = alloca ptr, align 81931// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 41932// CHECK13-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 81933// CHECK13-NEXT:    [[DOTOMP_LB:%.*]] = alloca i64, align 81934// CHECK13-NEXT:    [[DOTOMP_UB:%.*]] = alloca i64, align 81935// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41936// CHECK13-NEXT:    [[T_VAR2:%.*]] = alloca i32, align 41937// CHECK13-NEXT:    [[VEC3:%.*]] = alloca [2 x i32], align 41938// CHECK13-NEXT:    [[S_ARR4:%.*]] = alloca [2 x %struct.S], align 41939// CHECK13-NEXT:    [[VAR5:%.*]] = alloca [[STRUCT_S]], align 41940// CHECK13-NEXT:    [[_TMP6:%.*]] = alloca ptr, align 81941// CHECK13-NEXT:    [[SVAR:%.*]] = alloca i32, align 41942// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 41943// CHECK13-NEXT:    [[I13:%.*]] = alloca i32, align 41944// CHECK13-NEXT:    [[_TMP14:%.*]] = alloca i32, align 41945// CHECK13-NEXT:    [[DOTOMP_LB15:%.*]] = alloca i64, align 81946// CHECK13-NEXT:    [[DOTOMP_UB16:%.*]] = alloca i64, align 81947// CHECK13-NEXT:    [[DOTOMP_IV17:%.*]] = alloca i32, align 41948// CHECK13-NEXT:    [[I19:%.*]] = alloca i32, align 41949// CHECK13-NEXT:    store i32 0, ptr [[RETVAL]], align 41950// CHECK13-NEXT:    store ptr [[G]], ptr [[G1]], align 81951// CHECK13-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]])1952// CHECK13-NEXT:    store i32 0, ptr [[T_VAR]], align 41953// CHECK13-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[VEC]], ptr align 4 @__const.main.vec, i64 8, i1 false)1954// CHECK13-NEXT:    call void @_ZN1SIfEC1Ef(ptr noundef nonnull align 4 dereferenceable(4) [[S_ARR]], float noundef 1.000000e+00)1955// CHECK13-NEXT:    [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S_ARR]], i64 11956// CHECK13-NEXT:    call void @_ZN1SIfEC1Ef(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYINIT_ELEMENT]], float noundef 2.000000e+00)1957// CHECK13-NEXT:    store ptr [[TEST]], ptr [[VAR]], align 81958// CHECK13-NEXT:    store ptr undef, ptr [[_TMP1]], align 81959// CHECK13-NEXT:    store i64 0, ptr [[DOTOMP_LB]], align 81960// CHECK13-NEXT:    store i64 1, ptr [[DOTOMP_UB]], align 81961// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTOMP_LB]], align 81962// CHECK13-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i321963// CHECK13-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_IV]], align 41964// CHECK13-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR4]], i32 0, i32 01965// CHECK13-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN]], i64 21966// CHECK13-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]1967// CHECK13:       arrayctor.loop:1968// CHECK13-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]1969// CHECK13-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])1970// CHECK13-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i64 11971// CHECK13-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]1972// CHECK13-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]1973// CHECK13:       arrayctor.cont:1974// CHECK13-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[VAR5]])1975// CHECK13-NEXT:    store ptr [[VAR5]], ptr [[_TMP6]], align 81976// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1977// CHECK13:       omp.inner.for.cond:1978// CHECK13-NEXT:    [[TMP1:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP2:![0-9]+]]1979// CHECK13-NEXT:    [[CONV7:%.*]] = sext i32 [[TMP1]] to i641980// CHECK13-NEXT:    [[TMP2:%.*]] = load i64, ptr [[DOTOMP_UB]], align 8, !llvm.access.group [[ACC_GRP2]]1981// CHECK13-NEXT:    [[CMP:%.*]] = icmp ule i64 [[CONV7]], [[TMP2]]1982// CHECK13-NEXT:    br i1 [[CMP]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_COND_CLEANUP:%.*]]1983// CHECK13:       omp.inner.for.cond.cleanup:1984// CHECK13-NEXT:    br label [[OMP_INNER_FOR_END:%.*]]1985// CHECK13:       omp.inner.for.body:1986// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP2]]1987// CHECK13-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP3]], 11988// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1989// CHECK13-NEXT:    store i32 [[ADD]], ptr [[I]], align 4, !llvm.access.group [[ACC_GRP2]]1990// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[T_VAR2]], align 4, !llvm.access.group [[ACC_GRP2]]1991// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[I]], align 4, !llvm.access.group [[ACC_GRP2]]1992// CHECK13-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP5]] to i641993// CHECK13-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x i32], ptr [[VEC3]], i64 0, i64 [[IDXPROM]]1994// CHECK13-NEXT:    store i32 [[TMP4]], ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP2]]1995// CHECK13-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[_TMP6]], align 8, !nonnull [[META3:![0-9]+]], !align [[META4:![0-9]+]], !llvm.access.group [[ACC_GRP2]]1996// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[I]], align 4, !llvm.access.group [[ACC_GRP2]]1997// CHECK13-NEXT:    [[IDXPROM8:%.*]] = sext i32 [[TMP7]] to i641998// CHECK13-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR4]], i64 0, i64 [[IDXPROM8]]1999// CHECK13-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[ARRAYIDX9]], ptr align 4 [[TMP6]], i64 4, i1 false), !llvm.access.group [[ACC_GRP2]]2000// CHECK13-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2001// CHECK13:       omp.body.continue:2002// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2003// CHECK13:       omp.inner.for.inc:2004// CHECK13-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP2]]2005// CHECK13-NEXT:    [[ADD10:%.*]] = add nsw i32 [[TMP8]], 12006// CHECK13-NEXT:    store i32 [[ADD10]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP2]]2007// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP5:![0-9]+]]2008// CHECK13:       omp.inner.for.end:2009// CHECK13-NEXT:    store i32 2, ptr [[I]], align 42010// CHECK13-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[VAR5]]) #[[ATTR3:[0-9]+]]2011// CHECK13-NEXT:    [[ARRAY_BEGIN11:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR4]], i32 0, i32 02012// CHECK13-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN11]], i64 22013// CHECK13-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]2014// CHECK13:       arraydestroy.body:2015// CHECK13-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP9]], [[OMP_INNER_FOR_END]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]2016// CHECK13-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -12017// CHECK13-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]2018// CHECK13-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN11]]2019// CHECK13-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE12:%.*]], label [[ARRAYDESTROY_BODY]]2020// CHECK13:       arraydestroy.done12:2021// CHECK13-NEXT:    store i64 0, ptr [[DOTOMP_LB15]], align 82022// CHECK13-NEXT:    store i64 1, ptr [[DOTOMP_UB16]], align 82023// CHECK13-NEXT:    [[TMP10:%.*]] = load i64, ptr [[DOTOMP_LB15]], align 82024// CHECK13-NEXT:    [[CONV18:%.*]] = trunc i64 [[TMP10]] to i322025// CHECK13-NEXT:    store i32 [[CONV18]], ptr [[DOTOMP_IV17]], align 42026// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND20:%.*]]2027// CHECK13:       omp.inner.for.cond20:2028// CHECK13-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV17]], align 4, !llvm.access.group [[ACC_GRP8:![0-9]+]]2029// CHECK13-NEXT:    [[CONV21:%.*]] = sext i32 [[TMP11]] to i642030// CHECK13-NEXT:    [[TMP12:%.*]] = load i64, ptr [[DOTOMP_UB16]], align 8, !llvm.access.group [[ACC_GRP8]]2031// CHECK13-NEXT:    [[CMP22:%.*]] = icmp ule i64 [[CONV21]], [[TMP12]]2032// CHECK13-NEXT:    br i1 [[CMP22]], label [[OMP_INNER_FOR_BODY23:%.*]], label [[OMP_INNER_FOR_END29:%.*]]2033// CHECK13:       omp.inner.for.body23:2034// CHECK13-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_IV17]], align 4, !llvm.access.group [[ACC_GRP8]]2035// CHECK13-NEXT:    [[MUL24:%.*]] = mul nsw i32 [[TMP13]], 12036// CHECK13-NEXT:    [[ADD25:%.*]] = add nsw i32 0, [[MUL24]]2037// CHECK13-NEXT:    store i32 [[ADD25]], ptr [[I19]], align 4, !llvm.access.group [[ACC_GRP8]]2038// CHECK13-NEXT:    br label [[OMP_BODY_CONTINUE26:%.*]]2039// CHECK13:       omp.body.continue26:2040// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC27:%.*]]2041// CHECK13:       omp.inner.for.inc27:2042// CHECK13-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV17]], align 4, !llvm.access.group [[ACC_GRP8]]2043// CHECK13-NEXT:    [[ADD28:%.*]] = add nsw i32 [[TMP14]], 12044// CHECK13-NEXT:    store i32 [[ADD28]], ptr [[DOTOMP_IV17]], align 4, !llvm.access.group [[ACC_GRP8]]2045// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND20]], !llvm.loop [[LOOP9:![0-9]+]]2046// CHECK13:       omp.inner.for.end29:2047// CHECK13-NEXT:    store i32 2, ptr [[I13]], align 42048// CHECK13-NEXT:    [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiET_v()2049// CHECK13-NEXT:    store i32 [[CALL]], ptr [[RETVAL]], align 42050// CHECK13-NEXT:    [[ARRAY_BEGIN30:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR]], i32 0, i32 02051// CHECK13-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN30]], i64 22052// CHECK13-NEXT:    br label [[ARRAYDESTROY_BODY31:%.*]]2053// CHECK13:       arraydestroy.body31:2054// CHECK13-NEXT:    [[ARRAYDESTROY_ELEMENTPAST32:%.*]] = phi ptr [ [[TMP15]], [[OMP_INNER_FOR_END29]] ], [ [[ARRAYDESTROY_ELEMENT33:%.*]], [[ARRAYDESTROY_BODY31]] ]2055// CHECK13-NEXT:    [[ARRAYDESTROY_ELEMENT33]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST32]], i64 -12056// CHECK13-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT33]]) #[[ATTR3]]2057// CHECK13-NEXT:    [[ARRAYDESTROY_DONE34:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT33]], [[ARRAY_BEGIN30]]2058// CHECK13-NEXT:    br i1 [[ARRAYDESTROY_DONE34]], label [[ARRAYDESTROY_DONE35:%.*]], label [[ARRAYDESTROY_BODY31]]2059// CHECK13:       arraydestroy.done35:2060// CHECK13-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]]) #[[ATTR3]]2061// CHECK13-NEXT:    [[TMP16:%.*]] = load i32, ptr [[RETVAL]], align 42062// CHECK13-NEXT:    ret i32 [[TMP16]]2063//2064//2065// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIfEC1Ev2066// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat {2067// CHECK13-NEXT:  entry:2068// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82069// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82070// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82071// CHECK13-NEXT:    call void @_ZN1SIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])2072// CHECK13-NEXT:    ret void2073//2074//2075// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIfEC1Ef2076// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], float noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat {2077// CHECK13-NEXT:  entry:2078// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82079// CHECK13-NEXT:    [[A_ADDR:%.*]] = alloca float, align 42080// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82081// CHECK13-NEXT:    store float [[A]], ptr [[A_ADDR]], align 42082// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82083// CHECK13-NEXT:    [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 42084// CHECK13-NEXT:    call void @_ZN1SIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], float noundef [[TMP0]])2085// CHECK13-NEXT:    ret void2086//2087//2088// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIfED1Ev2089// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {2090// CHECK13-NEXT:  entry:2091// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82092// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82093// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82094// CHECK13-NEXT:    call void @_ZN1SIfED2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR3]]2095// CHECK13-NEXT:    ret void2096//2097//2098// CHECK13-LABEL: define {{[^@]+}}@_Z5tmainIiET_v2099// CHECK13-SAME: () #[[ATTR1]] comdat {2100// CHECK13-NEXT:  entry:2101// CHECK13-NEXT:    [[RETVAL:%.*]] = alloca i32, align 42102// CHECK13-NEXT:    [[TEST:%.*]] = alloca [[STRUCT_S_0:%.*]], align 42103// CHECK13-NEXT:    [[T_VAR:%.*]] = alloca i32, align 42104// CHECK13-NEXT:    [[VEC:%.*]] = alloca [2 x i32], align 42105// CHECK13-NEXT:    [[S_ARR:%.*]] = alloca [2 x %struct.S.0], align 42106// CHECK13-NEXT:    [[VAR:%.*]] = alloca ptr, align 82107// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 42108// CHECK13-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 82109// CHECK13-NEXT:    [[DOTOMP_LB:%.*]] = alloca i64, align 82110// CHECK13-NEXT:    [[DOTOMP_UB:%.*]] = alloca i64, align 82111// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42112// CHECK13-NEXT:    [[T_VAR2:%.*]] = alloca i32, align 42113// CHECK13-NEXT:    [[VEC3:%.*]] = alloca [2 x i32], align 42114// CHECK13-NEXT:    [[S_ARR4:%.*]] = alloca [2 x %struct.S.0], align 42115// CHECK13-NEXT:    [[VAR5:%.*]] = alloca [[STRUCT_S_0]], align 42116// CHECK13-NEXT:    [[_TMP6:%.*]] = alloca ptr, align 82117// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 42118// CHECK13-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]])2119// CHECK13-NEXT:    store i32 0, ptr [[T_VAR]], align 42120// CHECK13-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[VEC]], ptr align 4 @__const._Z5tmainIiET_v.vec, i64 8, i1 false)2121// CHECK13-NEXT:    call void @_ZN1SIiEC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[S_ARR]], i32 noundef signext 1)2122// CHECK13-NEXT:    [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[S_ARR]], i64 12123// CHECK13-NEXT:    call void @_ZN1SIiEC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYINIT_ELEMENT]], i32 noundef signext 2)2124// CHECK13-NEXT:    store ptr [[TEST]], ptr [[VAR]], align 82125// CHECK13-NEXT:    store ptr undef, ptr [[_TMP1]], align 82126// CHECK13-NEXT:    store i64 0, ptr [[DOTOMP_LB]], align 82127// CHECK13-NEXT:    store i64 1, ptr [[DOTOMP_UB]], align 82128// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTOMP_LB]], align 82129// CHECK13-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i322130// CHECK13-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_IV]], align 42131// CHECK13-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S.0], ptr [[S_ARR4]], i32 0, i32 02132// CHECK13-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAY_BEGIN]], i64 22133// CHECK13-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]2134// CHECK13:       arrayctor.loop:2135// CHECK13-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]2136// CHECK13-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])2137// CHECK13-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAYCTOR_CUR]], i64 12138// CHECK13-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]2139// CHECK13-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]2140// CHECK13:       arrayctor.cont:2141// CHECK13-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[VAR5]])2142// CHECK13-NEXT:    store ptr [[VAR5]], ptr [[_TMP6]], align 82143// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2144// CHECK13:       omp.inner.for.cond:2145// CHECK13-NEXT:    [[TMP1:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP11:![0-9]+]]2146// CHECK13-NEXT:    [[CONV7:%.*]] = sext i32 [[TMP1]] to i642147// CHECK13-NEXT:    [[TMP2:%.*]] = load i64, ptr [[DOTOMP_UB]], align 8, !llvm.access.group [[ACC_GRP11]]2148// CHECK13-NEXT:    [[CMP:%.*]] = icmp ule i64 [[CONV7]], [[TMP2]]2149// CHECK13-NEXT:    br i1 [[CMP]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_COND_CLEANUP:%.*]]2150// CHECK13:       omp.inner.for.cond.cleanup:2151// CHECK13-NEXT:    br label [[OMP_INNER_FOR_END:%.*]]2152// CHECK13:       omp.inner.for.body:2153// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP11]]2154// CHECK13-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP3]], 12155// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2156// CHECK13-NEXT:    store i32 [[ADD]], ptr [[I]], align 4, !llvm.access.group [[ACC_GRP11]]2157// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[T_VAR2]], align 4, !llvm.access.group [[ACC_GRP11]]2158// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[I]], align 4, !llvm.access.group [[ACC_GRP11]]2159// CHECK13-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP5]] to i642160// CHECK13-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x i32], ptr [[VEC3]], i64 0, i64 [[IDXPROM]]2161// CHECK13-NEXT:    store i32 [[TMP4]], ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP11]]2162// CHECK13-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[_TMP6]], align 8, !nonnull [[META3]], !align [[META4]], !llvm.access.group [[ACC_GRP11]]2163// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[I]], align 4, !llvm.access.group [[ACC_GRP11]]2164// CHECK13-NEXT:    [[IDXPROM8:%.*]] = sext i32 [[TMP7]] to i642165// CHECK13-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds [2 x %struct.S.0], ptr [[S_ARR4]], i64 0, i64 [[IDXPROM8]]2166// CHECK13-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[ARRAYIDX9]], ptr align 4 [[TMP6]], i64 4, i1 false), !llvm.access.group [[ACC_GRP11]]2167// CHECK13-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2168// CHECK13:       omp.body.continue:2169// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2170// CHECK13:       omp.inner.for.inc:2171// CHECK13-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP11]]2172// CHECK13-NEXT:    [[ADD10:%.*]] = add nsw i32 [[TMP8]], 12173// CHECK13-NEXT:    store i32 [[ADD10]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP11]]2174// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP12:![0-9]+]]2175// CHECK13:       omp.inner.for.end:2176// CHECK13-NEXT:    store i32 2, ptr [[I]], align 42177// CHECK13-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[VAR5]]) #[[ATTR3]]2178// CHECK13-NEXT:    [[ARRAY_BEGIN11:%.*]] = getelementptr inbounds [2 x %struct.S.0], ptr [[S_ARR4]], i32 0, i32 02179// CHECK13-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAY_BEGIN11]], i64 22180// CHECK13-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]2181// CHECK13:       arraydestroy.body:2182// CHECK13-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP9]], [[OMP_INNER_FOR_END]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]2183// CHECK13-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i64 -12184// CHECK13-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]2185// CHECK13-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN11]]2186// CHECK13-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE12:%.*]], label [[ARRAYDESTROY_BODY]]2187// CHECK13:       arraydestroy.done12:2188// CHECK13-NEXT:    store i32 0, ptr [[RETVAL]], align 42189// CHECK13-NEXT:    [[ARRAY_BEGIN13:%.*]] = getelementptr inbounds [2 x %struct.S.0], ptr [[S_ARR]], i32 0, i32 02190// CHECK13-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAY_BEGIN13]], i64 22191// CHECK13-NEXT:    br label [[ARRAYDESTROY_BODY14:%.*]]2192// CHECK13:       arraydestroy.body14:2193// CHECK13-NEXT:    [[ARRAYDESTROY_ELEMENTPAST15:%.*]] = phi ptr [ [[TMP10]], [[ARRAYDESTROY_DONE12]] ], [ [[ARRAYDESTROY_ELEMENT16:%.*]], [[ARRAYDESTROY_BODY14]] ]2194// CHECK13-NEXT:    [[ARRAYDESTROY_ELEMENT16]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAYDESTROY_ELEMENTPAST15]], i64 -12195// CHECK13-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT16]]) #[[ATTR3]]2196// CHECK13-NEXT:    [[ARRAYDESTROY_DONE17:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT16]], [[ARRAY_BEGIN13]]2197// CHECK13-NEXT:    br i1 [[ARRAYDESTROY_DONE17]], label [[ARRAYDESTROY_DONE18:%.*]], label [[ARRAYDESTROY_BODY14]]2198// CHECK13:       arraydestroy.done18:2199// CHECK13-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]]) #[[ATTR3]]2200// CHECK13-NEXT:    [[TMP11:%.*]] = load i32, ptr [[RETVAL]], align 42201// CHECK13-NEXT:    ret i32 [[TMP11]]2202//2203//2204// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIfEC2Ev2205// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {2206// CHECK13-NEXT:  entry:2207// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82208// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82209// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82210// CHECK13-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 02211// CHECK13-NEXT:    store float 0.000000e+00, ptr [[F]], align 42212// CHECK13-NEXT:    ret void2213//2214//2215// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIfED2Ev2216// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {2217// CHECK13-NEXT:  entry:2218// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82219// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82220// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82221// CHECK13-NEXT:    ret void2222//2223//2224// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIfEC2Ef2225// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], float noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat {2226// CHECK13-NEXT:  entry:2227// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82228// CHECK13-NEXT:    [[A_ADDR:%.*]] = alloca float, align 42229// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82230// CHECK13-NEXT:    store float [[A]], ptr [[A_ADDR]], align 42231// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82232// CHECK13-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 02233// CHECK13-NEXT:    [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 42234// CHECK13-NEXT:    store float [[TMP0]], ptr [[F]], align 42235// CHECK13-NEXT:    ret void2236//2237//2238// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIiEC1Ev2239// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {2240// CHECK13-NEXT:  entry:2241// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82242// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82243// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82244// CHECK13-NEXT:    call void @_ZN1SIiEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])2245// CHECK13-NEXT:    ret void2246//2247//2248// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIiEC1Ei2249// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef signext [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat {2250// CHECK13-NEXT:  entry:2251// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82252// CHECK13-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 42253// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82254// CHECK13-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 42255// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82256// CHECK13-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 42257// CHECK13-NEXT:    call void @_ZN1SIiEC2Ei(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], i32 noundef signext [[TMP0]])2258// CHECK13-NEXT:    ret void2259//2260//2261// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIiED1Ev2262// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {2263// CHECK13-NEXT:  entry:2264// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82265// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82266// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82267// CHECK13-NEXT:    call void @_ZN1SIiED2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR3]]2268// CHECK13-NEXT:    ret void2269//2270//2271// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIiEC2Ev2272// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {2273// CHECK13-NEXT:  entry:2274// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82275// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82276// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82277// CHECK13-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S_0:%.*]], ptr [[THIS1]], i32 0, i32 02278// CHECK13-NEXT:    store i32 0, ptr [[F]], align 42279// CHECK13-NEXT:    ret void2280//2281//2282// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIiEC2Ei2283// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef signext [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat {2284// CHECK13-NEXT:  entry:2285// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82286// CHECK13-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 42287// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82288// CHECK13-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 42289// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82290// CHECK13-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S_0:%.*]], ptr [[THIS1]], i32 0, i32 02291// CHECK13-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 42292// CHECK13-NEXT:    store i32 [[TMP0]], ptr [[F]], align 42293// CHECK13-NEXT:    ret void2294//2295//2296// CHECK13-LABEL: define {{[^@]+}}@_ZN1SIiED2Ev2297// CHECK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat {2298// CHECK13-NEXT:  entry:2299// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82300// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82301// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82302// CHECK13-NEXT:    ret void2303//2304//2305// CHECK15-LABEL: define {{[^@]+}}@main2306// CHECK15-SAME: () #[[ATTR0:[0-9]+]] {2307// CHECK15-NEXT:  entry:2308// CHECK15-NEXT:    [[RETVAL:%.*]] = alloca i32, align 42309// CHECK15-NEXT:    [[G:%.*]] = alloca double, align 82310// CHECK15-NEXT:    [[G1:%.*]] = alloca ptr, align 42311// CHECK15-NEXT:    [[TEST:%.*]] = alloca [[STRUCT_S:%.*]], align 42312// CHECK15-NEXT:    [[T_VAR:%.*]] = alloca i32, align 42313// CHECK15-NEXT:    [[VEC:%.*]] = alloca [2 x i32], align 42314// CHECK15-NEXT:    [[S_ARR:%.*]] = alloca [2 x %struct.S], align 42315// CHECK15-NEXT:    [[VAR:%.*]] = alloca ptr, align 42316// CHECK15-NEXT:    [[TMP:%.*]] = alloca i32, align 42317// CHECK15-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 42318// CHECK15-NEXT:    [[DOTOMP_LB:%.*]] = alloca i64, align 82319// CHECK15-NEXT:    [[DOTOMP_UB:%.*]] = alloca i64, align 82320// CHECK15-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42321// CHECK15-NEXT:    [[T_VAR2:%.*]] = alloca i32, align 42322// CHECK15-NEXT:    [[VEC3:%.*]] = alloca [2 x i32], align 42323// CHECK15-NEXT:    [[S_ARR4:%.*]] = alloca [2 x %struct.S], align 42324// CHECK15-NEXT:    [[VAR5:%.*]] = alloca [[STRUCT_S]], align 42325// CHECK15-NEXT:    [[_TMP6:%.*]] = alloca ptr, align 42326// CHECK15-NEXT:    [[SVAR:%.*]] = alloca i32, align 42327// CHECK15-NEXT:    [[I:%.*]] = alloca i32, align 42328// CHECK15-NEXT:    [[I12:%.*]] = alloca i32, align 42329// CHECK15-NEXT:    [[_TMP13:%.*]] = alloca i32, align 42330// CHECK15-NEXT:    [[DOTOMP_LB14:%.*]] = alloca i64, align 82331// CHECK15-NEXT:    [[DOTOMP_UB15:%.*]] = alloca i64, align 82332// CHECK15-NEXT:    [[DOTOMP_IV16:%.*]] = alloca i32, align 42333// CHECK15-NEXT:    [[I18:%.*]] = alloca i32, align 42334// CHECK15-NEXT:    store i32 0, ptr [[RETVAL]], align 42335// CHECK15-NEXT:    store ptr [[G]], ptr [[G1]], align 42336// CHECK15-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]])2337// CHECK15-NEXT:    store i32 0, ptr [[T_VAR]], align 42338// CHECK15-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[VEC]], ptr align 4 @__const.main.vec, i32 8, i1 false)2339// CHECK15-NEXT:    call void @_ZN1SIfEC1Ef(ptr noundef nonnull align 4 dereferenceable(4) [[S_ARR]], float noundef 1.000000e+00)2340// CHECK15-NEXT:    [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[S_ARR]], i32 12341// CHECK15-NEXT:    call void @_ZN1SIfEC1Ef(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYINIT_ELEMENT]], float noundef 2.000000e+00)2342// CHECK15-NEXT:    store ptr [[TEST]], ptr [[VAR]], align 42343// CHECK15-NEXT:    store ptr undef, ptr [[_TMP1]], align 42344// CHECK15-NEXT:    store i64 0, ptr [[DOTOMP_LB]], align 82345// CHECK15-NEXT:    store i64 1, ptr [[DOTOMP_UB]], align 82346// CHECK15-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTOMP_LB]], align 82347// CHECK15-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i322348// CHECK15-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_IV]], align 42349// CHECK15-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR4]], i32 0, i32 02350// CHECK15-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN]], i32 22351// CHECK15-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]2352// CHECK15:       arrayctor.loop:2353// CHECK15-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]2354// CHECK15-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])2355// CHECK15-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYCTOR_CUR]], i32 12356// CHECK15-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]2357// CHECK15-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]2358// CHECK15:       arrayctor.cont:2359// CHECK15-NEXT:    call void @_ZN1SIfEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[VAR5]])2360// CHECK15-NEXT:    store ptr [[VAR5]], ptr [[_TMP6]], align 42361// CHECK15-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2362// CHECK15:       omp.inner.for.cond:2363// CHECK15-NEXT:    [[TMP1:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP3:![0-9]+]]2364// CHECK15-NEXT:    [[CONV7:%.*]] = sext i32 [[TMP1]] to i642365// CHECK15-NEXT:    [[TMP2:%.*]] = load i64, ptr [[DOTOMP_UB]], align 8, !llvm.access.group [[ACC_GRP3]]2366// CHECK15-NEXT:    [[CMP:%.*]] = icmp ule i64 [[CONV7]], [[TMP2]]2367// CHECK15-NEXT:    br i1 [[CMP]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_COND_CLEANUP:%.*]]2368// CHECK15:       omp.inner.for.cond.cleanup:2369// CHECK15-NEXT:    br label [[OMP_INNER_FOR_END:%.*]]2370// CHECK15:       omp.inner.for.body:2371// CHECK15-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP3]]2372// CHECK15-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP3]], 12373// CHECK15-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2374// CHECK15-NEXT:    store i32 [[ADD]], ptr [[I]], align 4, !llvm.access.group [[ACC_GRP3]]2375// CHECK15-NEXT:    [[TMP4:%.*]] = load i32, ptr [[T_VAR2]], align 4, !llvm.access.group [[ACC_GRP3]]2376// CHECK15-NEXT:    [[TMP5:%.*]] = load i32, ptr [[I]], align 4, !llvm.access.group [[ACC_GRP3]]2377// CHECK15-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x i32], ptr [[VEC3]], i32 0, i32 [[TMP5]]2378// CHECK15-NEXT:    store i32 [[TMP4]], ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP3]]2379// CHECK15-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[_TMP6]], align 4, !nonnull [[META4:![0-9]+]], !align [[META5:![0-9]+]], !llvm.access.group [[ACC_GRP3]]2380// CHECK15-NEXT:    [[TMP7:%.*]] = load i32, ptr [[I]], align 4, !llvm.access.group [[ACC_GRP3]]2381// CHECK15-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR4]], i32 0, i32 [[TMP7]]2382// CHECK15-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[ARRAYIDX8]], ptr align 4 [[TMP6]], i32 4, i1 false), !llvm.access.group [[ACC_GRP3]]2383// CHECK15-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2384// CHECK15:       omp.body.continue:2385// CHECK15-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2386// CHECK15:       omp.inner.for.inc:2387// CHECK15-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP3]]2388// CHECK15-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP8]], 12389// CHECK15-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP3]]2390// CHECK15-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP6:![0-9]+]]2391// CHECK15:       omp.inner.for.end:2392// CHECK15-NEXT:    store i32 2, ptr [[I]], align 42393// CHECK15-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[VAR5]]) #[[ATTR3:[0-9]+]]2394// CHECK15-NEXT:    [[ARRAY_BEGIN10:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR4]], i32 0, i32 02395// CHECK15-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN10]], i32 22396// CHECK15-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]2397// CHECK15:       arraydestroy.body:2398// CHECK15-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP9]], [[OMP_INNER_FOR_END]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]2399// CHECK15-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i32 -12400// CHECK15-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]2401// CHECK15-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN10]]2402// CHECK15-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE11:%.*]], label [[ARRAYDESTROY_BODY]]2403// CHECK15:       arraydestroy.done11:2404// CHECK15-NEXT:    store i64 0, ptr [[DOTOMP_LB14]], align 82405// CHECK15-NEXT:    store i64 1, ptr [[DOTOMP_UB15]], align 82406// CHECK15-NEXT:    [[TMP10:%.*]] = load i64, ptr [[DOTOMP_LB14]], align 82407// CHECK15-NEXT:    [[CONV17:%.*]] = trunc i64 [[TMP10]] to i322408// CHECK15-NEXT:    store i32 [[CONV17]], ptr [[DOTOMP_IV16]], align 42409// CHECK15-NEXT:    br label [[OMP_INNER_FOR_COND19:%.*]]2410// CHECK15:       omp.inner.for.cond19:2411// CHECK15-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV16]], align 4, !llvm.access.group [[ACC_GRP9:![0-9]+]]2412// CHECK15-NEXT:    [[CONV20:%.*]] = sext i32 [[TMP11]] to i642413// CHECK15-NEXT:    [[TMP12:%.*]] = load i64, ptr [[DOTOMP_UB15]], align 8, !llvm.access.group [[ACC_GRP9]]2414// CHECK15-NEXT:    [[CMP21:%.*]] = icmp ule i64 [[CONV20]], [[TMP12]]2415// CHECK15-NEXT:    br i1 [[CMP21]], label [[OMP_INNER_FOR_BODY22:%.*]], label [[OMP_INNER_FOR_END28:%.*]]2416// CHECK15:       omp.inner.for.body22:2417// CHECK15-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_IV16]], align 4, !llvm.access.group [[ACC_GRP9]]2418// CHECK15-NEXT:    [[MUL23:%.*]] = mul nsw i32 [[TMP13]], 12419// CHECK15-NEXT:    [[ADD24:%.*]] = add nsw i32 0, [[MUL23]]2420// CHECK15-NEXT:    store i32 [[ADD24]], ptr [[I18]], align 4, !llvm.access.group [[ACC_GRP9]]2421// CHECK15-NEXT:    br label [[OMP_BODY_CONTINUE25:%.*]]2422// CHECK15:       omp.body.continue25:2423// CHECK15-NEXT:    br label [[OMP_INNER_FOR_INC26:%.*]]2424// CHECK15:       omp.inner.for.inc26:2425// CHECK15-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV16]], align 4, !llvm.access.group [[ACC_GRP9]]2426// CHECK15-NEXT:    [[ADD27:%.*]] = add nsw i32 [[TMP14]], 12427// CHECK15-NEXT:    store i32 [[ADD27]], ptr [[DOTOMP_IV16]], align 4, !llvm.access.group [[ACC_GRP9]]2428// CHECK15-NEXT:    br label [[OMP_INNER_FOR_COND19]], !llvm.loop [[LOOP10:![0-9]+]]2429// CHECK15:       omp.inner.for.end28:2430// CHECK15-NEXT:    store i32 2, ptr [[I12]], align 42431// CHECK15-NEXT:    [[CALL:%.*]] = call noundef i32 @_Z5tmainIiET_v()2432// CHECK15-NEXT:    store i32 [[CALL]], ptr [[RETVAL]], align 42433// CHECK15-NEXT:    [[ARRAY_BEGIN29:%.*]] = getelementptr inbounds [2 x %struct.S], ptr [[S_ARR]], i32 0, i32 02434// CHECK15-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAY_BEGIN29]], i32 22435// CHECK15-NEXT:    br label [[ARRAYDESTROY_BODY30:%.*]]2436// CHECK15:       arraydestroy.body30:2437// CHECK15-NEXT:    [[ARRAYDESTROY_ELEMENTPAST31:%.*]] = phi ptr [ [[TMP15]], [[OMP_INNER_FOR_END28]] ], [ [[ARRAYDESTROY_ELEMENT32:%.*]], [[ARRAYDESTROY_BODY30]] ]2438// CHECK15-NEXT:    [[ARRAYDESTROY_ELEMENT32]] = getelementptr inbounds [[STRUCT_S]], ptr [[ARRAYDESTROY_ELEMENTPAST31]], i32 -12439// CHECK15-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT32]]) #[[ATTR3]]2440// CHECK15-NEXT:    [[ARRAYDESTROY_DONE33:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT32]], [[ARRAY_BEGIN29]]2441// CHECK15-NEXT:    br i1 [[ARRAYDESTROY_DONE33]], label [[ARRAYDESTROY_DONE34:%.*]], label [[ARRAYDESTROY_BODY30]]2442// CHECK15:       arraydestroy.done34:2443// CHECK15-NEXT:    call void @_ZN1SIfED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]]) #[[ATTR3]]2444// CHECK15-NEXT:    [[TMP16:%.*]] = load i32, ptr [[RETVAL]], align 42445// CHECK15-NEXT:    ret i32 [[TMP16]]2446//2447//2448// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIfEC1Ev2449// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {2450// CHECK15-NEXT:  entry:2451// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42452// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42453// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42454// CHECK15-NEXT:    call void @_ZN1SIfEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])2455// CHECK15-NEXT:    ret void2456//2457//2458// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIfEC1Ef2459// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], float noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2460// CHECK15-NEXT:  entry:2461// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42462// CHECK15-NEXT:    [[A_ADDR:%.*]] = alloca float, align 42463// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42464// CHECK15-NEXT:    store float [[A]], ptr [[A_ADDR]], align 42465// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42466// CHECK15-NEXT:    [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 42467// CHECK15-NEXT:    call void @_ZN1SIfEC2Ef(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], float noundef [[TMP0]])2468// CHECK15-NEXT:    ret void2469//2470//2471// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIfED1Ev2472// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2473// CHECK15-NEXT:  entry:2474// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42475// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42476// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42477// CHECK15-NEXT:    call void @_ZN1SIfED2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR3]]2478// CHECK15-NEXT:    ret void2479//2480//2481// CHECK15-LABEL: define {{[^@]+}}@_Z5tmainIiET_v2482// CHECK15-SAME: () #[[ATTR1]] comdat {2483// CHECK15-NEXT:  entry:2484// CHECK15-NEXT:    [[RETVAL:%.*]] = alloca i32, align 42485// CHECK15-NEXT:    [[TEST:%.*]] = alloca [[STRUCT_S_0:%.*]], align 42486// CHECK15-NEXT:    [[T_VAR:%.*]] = alloca i32, align 42487// CHECK15-NEXT:    [[VEC:%.*]] = alloca [2 x i32], align 42488// CHECK15-NEXT:    [[S_ARR:%.*]] = alloca [2 x %struct.S.0], align 42489// CHECK15-NEXT:    [[VAR:%.*]] = alloca ptr, align 42490// CHECK15-NEXT:    [[TMP:%.*]] = alloca i32, align 42491// CHECK15-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 42492// CHECK15-NEXT:    [[DOTOMP_LB:%.*]] = alloca i64, align 82493// CHECK15-NEXT:    [[DOTOMP_UB:%.*]] = alloca i64, align 82494// CHECK15-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42495// CHECK15-NEXT:    [[T_VAR2:%.*]] = alloca i32, align 42496// CHECK15-NEXT:    [[VEC3:%.*]] = alloca [2 x i32], align 42497// CHECK15-NEXT:    [[S_ARR4:%.*]] = alloca [2 x %struct.S.0], align 42498// CHECK15-NEXT:    [[VAR5:%.*]] = alloca [[STRUCT_S_0]], align 42499// CHECK15-NEXT:    [[_TMP6:%.*]] = alloca ptr, align 42500// CHECK15-NEXT:    [[I:%.*]] = alloca i32, align 42501// CHECK15-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]])2502// CHECK15-NEXT:    store i32 0, ptr [[T_VAR]], align 42503// CHECK15-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[VEC]], ptr align 4 @__const._Z5tmainIiET_v.vec, i32 8, i1 false)2504// CHECK15-NEXT:    call void @_ZN1SIiEC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[S_ARR]], i32 noundef 1)2505// CHECK15-NEXT:    [[ARRAYINIT_ELEMENT:%.*]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[S_ARR]], i32 12506// CHECK15-NEXT:    call void @_ZN1SIiEC1Ei(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYINIT_ELEMENT]], i32 noundef 2)2507// CHECK15-NEXT:    store ptr [[TEST]], ptr [[VAR]], align 42508// CHECK15-NEXT:    store ptr undef, ptr [[_TMP1]], align 42509// CHECK15-NEXT:    store i64 0, ptr [[DOTOMP_LB]], align 82510// CHECK15-NEXT:    store i64 1, ptr [[DOTOMP_UB]], align 82511// CHECK15-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTOMP_LB]], align 82512// CHECK15-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i322513// CHECK15-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_IV]], align 42514// CHECK15-NEXT:    [[ARRAY_BEGIN:%.*]] = getelementptr inbounds [2 x %struct.S.0], ptr [[S_ARR4]], i32 0, i32 02515// CHECK15-NEXT:    [[ARRAYCTOR_END:%.*]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAY_BEGIN]], i32 22516// CHECK15-NEXT:    br label [[ARRAYCTOR_LOOP:%.*]]2517// CHECK15:       arrayctor.loop:2518// CHECK15-NEXT:    [[ARRAYCTOR_CUR:%.*]] = phi ptr [ [[ARRAY_BEGIN]], [[ENTRY:%.*]] ], [ [[ARRAYCTOR_NEXT:%.*]], [[ARRAYCTOR_LOOP]] ]2519// CHECK15-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYCTOR_CUR]])2520// CHECK15-NEXT:    [[ARRAYCTOR_NEXT]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAYCTOR_CUR]], i32 12521// CHECK15-NEXT:    [[ARRAYCTOR_DONE:%.*]] = icmp eq ptr [[ARRAYCTOR_NEXT]], [[ARRAYCTOR_END]]2522// CHECK15-NEXT:    br i1 [[ARRAYCTOR_DONE]], label [[ARRAYCTOR_CONT:%.*]], label [[ARRAYCTOR_LOOP]]2523// CHECK15:       arrayctor.cont:2524// CHECK15-NEXT:    call void @_ZN1SIiEC1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[VAR5]])2525// CHECK15-NEXT:    store ptr [[VAR5]], ptr [[_TMP6]], align 42526// CHECK15-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2527// CHECK15:       omp.inner.for.cond:2528// CHECK15-NEXT:    [[TMP1:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP12:![0-9]+]]2529// CHECK15-NEXT:    [[CONV7:%.*]] = sext i32 [[TMP1]] to i642530// CHECK15-NEXT:    [[TMP2:%.*]] = load i64, ptr [[DOTOMP_UB]], align 8, !llvm.access.group [[ACC_GRP12]]2531// CHECK15-NEXT:    [[CMP:%.*]] = icmp ule i64 [[CONV7]], [[TMP2]]2532// CHECK15-NEXT:    br i1 [[CMP]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_COND_CLEANUP:%.*]]2533// CHECK15:       omp.inner.for.cond.cleanup:2534// CHECK15-NEXT:    br label [[OMP_INNER_FOR_END:%.*]]2535// CHECK15:       omp.inner.for.body:2536// CHECK15-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP12]]2537// CHECK15-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP3]], 12538// CHECK15-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2539// CHECK15-NEXT:    store i32 [[ADD]], ptr [[I]], align 4, !llvm.access.group [[ACC_GRP12]]2540// CHECK15-NEXT:    [[TMP4:%.*]] = load i32, ptr [[T_VAR2]], align 4, !llvm.access.group [[ACC_GRP12]]2541// CHECK15-NEXT:    [[TMP5:%.*]] = load i32, ptr [[I]], align 4, !llvm.access.group [[ACC_GRP12]]2542// CHECK15-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x i32], ptr [[VEC3]], i32 0, i32 [[TMP5]]2543// CHECK15-NEXT:    store i32 [[TMP4]], ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP12]]2544// CHECK15-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[_TMP6]], align 4, !nonnull [[META4]], !align [[META5]], !llvm.access.group [[ACC_GRP12]]2545// CHECK15-NEXT:    [[TMP7:%.*]] = load i32, ptr [[I]], align 4, !llvm.access.group [[ACC_GRP12]]2546// CHECK15-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds [2 x %struct.S.0], ptr [[S_ARR4]], i32 0, i32 [[TMP7]]2547// CHECK15-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[ARRAYIDX8]], ptr align 4 [[TMP6]], i32 4, i1 false), !llvm.access.group [[ACC_GRP12]]2548// CHECK15-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2549// CHECK15:       omp.body.continue:2550// CHECK15-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2551// CHECK15:       omp.inner.for.inc:2552// CHECK15-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP12]]2553// CHECK15-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP8]], 12554// CHECK15-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP12]]2555// CHECK15-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP13:![0-9]+]]2556// CHECK15:       omp.inner.for.end:2557// CHECK15-NEXT:    store i32 2, ptr [[I]], align 42558// CHECK15-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[VAR5]]) #[[ATTR3]]2559// CHECK15-NEXT:    [[ARRAY_BEGIN10:%.*]] = getelementptr inbounds [2 x %struct.S.0], ptr [[S_ARR4]], i32 0, i32 02560// CHECK15-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAY_BEGIN10]], i32 22561// CHECK15-NEXT:    br label [[ARRAYDESTROY_BODY:%.*]]2562// CHECK15:       arraydestroy.body:2563// CHECK15-NEXT:    [[ARRAYDESTROY_ELEMENTPAST:%.*]] = phi ptr [ [[TMP9]], [[OMP_INNER_FOR_END]] ], [ [[ARRAYDESTROY_ELEMENT:%.*]], [[ARRAYDESTROY_BODY]] ]2564// CHECK15-NEXT:    [[ARRAYDESTROY_ELEMENT]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAYDESTROY_ELEMENTPAST]], i32 -12565// CHECK15-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT]]) #[[ATTR3]]2566// CHECK15-NEXT:    [[ARRAYDESTROY_DONE:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT]], [[ARRAY_BEGIN10]]2567// CHECK15-NEXT:    br i1 [[ARRAYDESTROY_DONE]], label [[ARRAYDESTROY_DONE11:%.*]], label [[ARRAYDESTROY_BODY]]2568// CHECK15:       arraydestroy.done11:2569// CHECK15-NEXT:    store i32 0, ptr [[RETVAL]], align 42570// CHECK15-NEXT:    [[ARRAY_BEGIN12:%.*]] = getelementptr inbounds [2 x %struct.S.0], ptr [[S_ARR]], i32 0, i32 02571// CHECK15-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAY_BEGIN12]], i32 22572// CHECK15-NEXT:    br label [[ARRAYDESTROY_BODY13:%.*]]2573// CHECK15:       arraydestroy.body13:2574// CHECK15-NEXT:    [[ARRAYDESTROY_ELEMENTPAST14:%.*]] = phi ptr [ [[TMP10]], [[ARRAYDESTROY_DONE11]] ], [ [[ARRAYDESTROY_ELEMENT15:%.*]], [[ARRAYDESTROY_BODY13]] ]2575// CHECK15-NEXT:    [[ARRAYDESTROY_ELEMENT15]] = getelementptr inbounds [[STRUCT_S_0]], ptr [[ARRAYDESTROY_ELEMENTPAST14]], i32 -12576// CHECK15-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[ARRAYDESTROY_ELEMENT15]]) #[[ATTR3]]2577// CHECK15-NEXT:    [[ARRAYDESTROY_DONE16:%.*]] = icmp eq ptr [[ARRAYDESTROY_ELEMENT15]], [[ARRAY_BEGIN12]]2578// CHECK15-NEXT:    br i1 [[ARRAYDESTROY_DONE16]], label [[ARRAYDESTROY_DONE17:%.*]], label [[ARRAYDESTROY_BODY13]]2579// CHECK15:       arraydestroy.done17:2580// CHECK15-NEXT:    call void @_ZN1SIiED1Ev(ptr noundef nonnull align 4 dereferenceable(4) [[TEST]]) #[[ATTR3]]2581// CHECK15-NEXT:    [[TMP11:%.*]] = load i32, ptr [[RETVAL]], align 42582// CHECK15-NEXT:    ret i32 [[TMP11]]2583//2584//2585// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIfEC2Ev2586// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2587// CHECK15-NEXT:  entry:2588// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42589// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42590// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42591// CHECK15-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 02592// CHECK15-NEXT:    store float 0.000000e+00, ptr [[F]], align 42593// CHECK15-NEXT:    ret void2594//2595//2596// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIfED2Ev2597// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2598// CHECK15-NEXT:  entry:2599// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42600// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42601// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42602// CHECK15-NEXT:    ret void2603//2604//2605// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIfEC2Ef2606// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], float noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2607// CHECK15-NEXT:  entry:2608// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42609// CHECK15-NEXT:    [[A_ADDR:%.*]] = alloca float, align 42610// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42611// CHECK15-NEXT:    store float [[A]], ptr [[A_ADDR]], align 42612// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42613// CHECK15-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 02614// CHECK15-NEXT:    [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 42615// CHECK15-NEXT:    store float [[TMP0]], ptr [[F]], align 42616// CHECK15-NEXT:    ret void2617//2618//2619// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIiEC1Ev2620// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2621// CHECK15-NEXT:  entry:2622// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42623// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42624// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42625// CHECK15-NEXT:    call void @_ZN1SIiEC2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]])2626// CHECK15-NEXT:    ret void2627//2628//2629// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIiEC1Ei2630// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2631// CHECK15-NEXT:  entry:2632// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42633// CHECK15-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 42634// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42635// CHECK15-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 42636// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42637// CHECK15-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 42638// CHECK15-NEXT:    call void @_ZN1SIiEC2Ei(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]], i32 noundef [[TMP0]])2639// CHECK15-NEXT:    ret void2640//2641//2642// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIiED1Ev2643// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2644// CHECK15-NEXT:  entry:2645// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42646// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42647// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42648// CHECK15-NEXT:    call void @_ZN1SIiED2Ev(ptr noundef nonnull align 4 dereferenceable(4) [[THIS1]]) #[[ATTR3]]2649// CHECK15-NEXT:    ret void2650//2651//2652// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIiEC2Ev2653// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2654// CHECK15-NEXT:  entry:2655// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42656// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42657// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42658// CHECK15-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S_0:%.*]], ptr [[THIS1]], i32 0, i32 02659// CHECK15-NEXT:    store i32 0, ptr [[F]], align 42660// CHECK15-NEXT:    ret void2661//2662//2663// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIiEC2Ei2664// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]], i32 noundef [[A:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2665// CHECK15-NEXT:  entry:2666// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42667// CHECK15-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 42668// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42669// CHECK15-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 42670// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42671// CHECK15-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_S_0:%.*]], ptr [[THIS1]], i32 0, i32 02672// CHECK15-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 42673// CHECK15-NEXT:    store i32 [[TMP0]], ptr [[F]], align 42674// CHECK15-NEXT:    ret void2675//2676//2677// CHECK15-LABEL: define {{[^@]+}}@_ZN1SIiED2Ev2678// CHECK15-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[THIS:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {2679// CHECK15-NEXT:  entry:2680// CHECK15-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42681// CHECK15-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42682// CHECK15-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42683// CHECK15-NEXT:    ret void2684//2685