brintos

brintos / llvm-project-archived public Read only

0
0
Text · 244.6 KiB · fde2e32 Raw
3529 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// expected-no-diagnostics3#ifndef HEADER4#define HEADER5// Test host codegen.6// RUN: %clang_cc1 -DCK1 -verify -Wno-vla -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK17// RUN: %clang_cc1 -DCK1 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s8// RUN: %clang_cc1 -DCK1 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK19// RUN: %clang_cc1 -DCK1 -verify -Wno-vla -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK310// RUN: %clang_cc1 -DCK1 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s11// RUN: %clang_cc1 -DCK1 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK312 13// RUN: %clang_cc1 -DCK1 -verify -Wno-vla -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"14// RUN: %clang_cc1 -DCK1 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s15// RUN: %clang_cc1 -DCK1 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"16// RUN: %clang_cc1 -DCK1 -verify -Wno-vla -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"17// RUN: %clang_cc1 -DCK1 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s18// RUN: %clang_cc1 -DCK1 -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"19#ifdef CK120 21int a[100];22 23int teams_argument_global(int n){24  int te = n / 128;25  int th = 128;26  // discard n_addr27 28  #pragma omp target29  #pragma omp teams distribute parallel for num_teams(te), thread_limit(th)30  for(int i = 0; i < n; i++) {31    a[i] = 0;32    #pragma omp cancel for33  }34 35  #pragma omp target36  {{{37  #pragma omp teams distribute parallel for38  for(int i = 0; i < n; i++) {39    a[i] = 0;40  }41  }}}42 43  // outlined target regions44 45 46 47 48  return a[0];49}50 51#endif // CK152 53// Test host codegen.54// RUN: %clang_cc1 -DCK2 -verify -Wno-vla -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK955// RUN: %clang_cc1 -DCK2 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s56// RUN: %clang_cc1 -DCK2 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK957// RUN: %clang_cc1 -DCK2 -verify -Wno-vla -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK1158// RUN: %clang_cc1 -DCK2 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s59// RUN: %clang_cc1 -DCK2 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK1160 61// RUN: %clang_cc1 -DCK2 -verify -Wno-vla -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"62// RUN: %clang_cc1 -DCK2 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s63// RUN: %clang_cc1 -DCK2 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"64// RUN: %clang_cc1 -DCK2 -verify -Wno-vla -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"65// RUN: %clang_cc1 -DCK2 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s66// RUN: %clang_cc1 -DCK2 -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"67#ifdef CK268 69int teams_local_arg(void) {70  int n = 100;71  int a[n];72 73  #pragma omp target74  #pragma omp teams distribute parallel for75  for(int i = 0; i < n; i++) {76    a[i] = 0;77  }78 79  // outlined target region80 81 82  return a[0];83}84#endif // CK285 86// Test host codegen.87// RUN: %clang_cc1 -DCK3 -verify -Wno-vla -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK1788// RUN: %clang_cc1 -DCK3 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s89// RUN: %clang_cc1 -DCK3 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK1790// RUN: %clang_cc1 -DCK3 -verify -Wno-vla -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK1991// RUN: %clang_cc1 -DCK3 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s92// RUN: %clang_cc1 -DCK3 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK1993 94// RUN: %clang_cc1 -DCK3 -verify -Wno-vla -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"95// RUN: %clang_cc1 -DCK3 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s96// RUN: %clang_cc1 -DCK3 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"97// RUN: %clang_cc1 -DCK3 -verify -Wno-vla -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"98// RUN: %clang_cc1 -DCK3 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s99// RUN: %clang_cc1 -DCK3 -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"100#ifdef CK3101 102 103template <typename T, int X, long long Y>104struct SS{105  T a[X];106  float b;107  int foo(void) {108 109    #pragma omp target110    #pragma omp teams distribute parallel for111    for(int i = 0; i < X; i++) {112      a[i] = (T)0;113    }114 115      // outlined target region116 117 118    return a[0];119  }120};121 122int teams_template_struct(void) {123  SS<int, 123, 456> V;124  return V.foo();125 126}127#endif // CK3128 129// Test host codegen.130// RUN: %clang_cc1 -DCK4 -verify -Wno-vla -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK25131// RUN: %clang_cc1 -DCK4 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s132// RUN: %clang_cc1 -DCK4 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK25133// RUN: %clang_cc1 -DCK4 -verify -Wno-vla -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK27134// RUN: %clang_cc1 -DCK4 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s135// RUN: %clang_cc1 -DCK4 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK27136 137// RUN: %clang_cc1 -DCK4 -verify -Wno-vla -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"138// RUN: %clang_cc1 -DCK4 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s139// RUN: %clang_cc1 -DCK4 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"140// RUN: %clang_cc1 -DCK4 -verify -Wno-vla -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"141// RUN: %clang_cc1 -DCK4 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s142// RUN: %clang_cc1 -DCK4 -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"143 144#ifdef CK4145 146template <typename T, int n>147int tmain(T argc) {148  T a[n];149  int te = n/128;150  int th = 128;151#pragma omp target152#pragma omp teams distribute parallel for num_teams(te) thread_limit(th)153  for(int i = 0; i < n; i++) {154    a[i] = (T)0;155  }156  return 0;157}158 159int main (int argc, char **argv) {160  int n = 100;161  int a[n];162#pragma omp target163#pragma omp teams distribute parallel for164  for(int i = 0; i < n; i++) {165    a[i] = 0;166  }167  return tmain<int, 10>(argc);168}169 170 171 172 173 174 175 176#endif // CK4177#endif178// CHECK1-LABEL: define {{[^@]+}}@_Z21teams_argument_globali179// CHECK1-SAME: (i32 noundef signext [[N:%.*]]) #[[ATTR0:[0-9]+]] {180// CHECK1-NEXT:  entry:181// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 4182// CHECK1-NEXT:    [[TE:%.*]] = alloca i32, align 4183// CHECK1-NEXT:    [[TH:%.*]] = alloca i32, align 4184// CHECK1-NEXT:    [[TE_CASTED:%.*]] = alloca i64, align 8185// CHECK1-NEXT:    [[TH_CASTED:%.*]] = alloca i64, align 8186// CHECK1-NEXT:    [[N_CASTED:%.*]] = alloca i64, align 8187// CHECK1-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 8188// CHECK1-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 8189// CHECK1-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 8190// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 4191// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4192// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4193// CHECK1-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8194// CHECK1-NEXT:    [[N_CASTED4:%.*]] = alloca i64, align 8195// CHECK1-NEXT:    [[DOTOFFLOAD_BASEPTRS5:%.*]] = alloca [2 x ptr], align 8196// CHECK1-NEXT:    [[DOTOFFLOAD_PTRS6:%.*]] = alloca [2 x ptr], align 8197// CHECK1-NEXT:    [[DOTOFFLOAD_MAPPERS7:%.*]] = alloca [2 x ptr], align 8198// CHECK1-NEXT:    [[_TMP8:%.*]] = alloca i32, align 4199// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 4200// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_10:%.*]] = alloca i32, align 4201// CHECK1-NEXT:    [[KERNEL_ARGS15:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8202// CHECK1-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 4203// CHECK1-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N_ADDR]], align 4204// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[TMP0]], 128205// CHECK1-NEXT:    store i32 [[DIV]], ptr [[TE]], align 4206// CHECK1-NEXT:    store i32 128, ptr [[TH]], align 4207// CHECK1-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TE]], align 4208// CHECK1-NEXT:    store i32 [[TMP1]], ptr [[TE_CASTED]], align 4209// CHECK1-NEXT:    [[TMP2:%.*]] = load i64, ptr [[TE_CASTED]], align 8210// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TH]], align 4211// CHECK1-NEXT:    store i32 [[TMP3]], ptr [[TH_CASTED]], align 4212// CHECK1-NEXT:    [[TMP4:%.*]] = load i64, ptr [[TH_CASTED]], align 8213// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[N_ADDR]], align 4214// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[N_CASTED]], align 4215// CHECK1-NEXT:    [[TMP6:%.*]] = load i64, ptr [[N_CASTED]], align 8216// CHECK1-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0217// CHECK1-NEXT:    store i64 [[TMP2]], ptr [[TMP7]], align 8218// CHECK1-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0219// CHECK1-NEXT:    store i64 [[TMP2]], ptr [[TMP8]], align 8220// CHECK1-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0221// CHECK1-NEXT:    store ptr null, ptr [[TMP9]], align 8222// CHECK1-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1223// CHECK1-NEXT:    store i64 [[TMP4]], ptr [[TMP10]], align 8224// CHECK1-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1225// CHECK1-NEXT:    store i64 [[TMP4]], ptr [[TMP11]], align 8226// CHECK1-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1227// CHECK1-NEXT:    store ptr null, ptr [[TMP12]], align 8228// CHECK1-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2229// CHECK1-NEXT:    store i64 [[TMP6]], ptr [[TMP13]], align 8230// CHECK1-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2231// CHECK1-NEXT:    store i64 [[TMP6]], ptr [[TMP14]], align 8232// CHECK1-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2233// CHECK1-NEXT:    store ptr null, ptr [[TMP15]], align 8234// CHECK1-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3235// CHECK1-NEXT:    store ptr @a, ptr [[TMP16]], align 8236// CHECK1-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 3237// CHECK1-NEXT:    store ptr @a, ptr [[TMP17]], align 8238// CHECK1-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3239// CHECK1-NEXT:    store ptr null, ptr [[TMP18]], align 8240// CHECK1-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0241// CHECK1-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0242// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TE]], align 4243// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TH]], align 4244// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[N_ADDR]], align 4245// CHECK1-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR_]], align 4246// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4247// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0248// CHECK1-NEXT:    [[DIV2:%.*]] = sdiv i32 [[SUB]], 1249// CHECK1-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV2]], 1250// CHECK1-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_1]], align 4251// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4252// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], 1253// CHECK1-NEXT:    [[TMP26:%.*]] = zext i32 [[ADD]] to i64254// CHECK1-NEXT:    [[TMP27:%.*]] = insertvalue [3 x i32] zeroinitializer, i32 [[TMP21]], 0255// CHECK1-NEXT:    [[TMP28:%.*]] = insertvalue [3 x i32] zeroinitializer, i32 [[TMP22]], 0256// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0257// CHECK1-NEXT:    store i32 3, ptr [[TMP29]], align 4258// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1259// CHECK1-NEXT:    store i32 4, ptr [[TMP30]], align 4260// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2261// CHECK1-NEXT:    store ptr [[TMP19]], ptr [[TMP31]], align 8262// CHECK1-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3263// CHECK1-NEXT:    store ptr [[TMP20]], ptr [[TMP32]], align 8264// CHECK1-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4265// CHECK1-NEXT:    store ptr @.offload_sizes, ptr [[TMP33]], align 8266// CHECK1-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5267// CHECK1-NEXT:    store ptr @.offload_maptypes, ptr [[TMP34]], align 8268// CHECK1-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6269// CHECK1-NEXT:    store ptr null, ptr [[TMP35]], align 8270// CHECK1-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7271// CHECK1-NEXT:    store ptr null, ptr [[TMP36]], align 8272// CHECK1-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8273// CHECK1-NEXT:    store i64 [[TMP26]], ptr [[TMP37]], align 8274// CHECK1-NEXT:    [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9275// CHECK1-NEXT:    store i64 0, ptr [[TMP38]], align 8276// CHECK1-NEXT:    [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10277// CHECK1-NEXT:    store [3 x i32] [[TMP27]], ptr [[TMP39]], align 4278// CHECK1-NEXT:    [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11279// CHECK1-NEXT:    store [3 x i32] [[TMP28]], ptr [[TMP40]], align 4280// CHECK1-NEXT:    [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12281// CHECK1-NEXT:    store i32 0, ptr [[TMP41]], align 4282// CHECK1-NEXT:    [[TMP42:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 [[TMP21]], i32 [[TMP22]], ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.region_id, ptr [[KERNEL_ARGS]])283// CHECK1-NEXT:    [[TMP43:%.*]] = icmp ne i32 [[TMP42]], 0284// CHECK1-NEXT:    br i1 [[TMP43]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]285// CHECK1:       omp_offload.failed:286// CHECK1-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28(i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], ptr @a) #[[ATTR2:[0-9]+]]287// CHECK1-NEXT:    br label [[OMP_OFFLOAD_CONT]]288// CHECK1:       omp_offload.cont:289// CHECK1-NEXT:    [[TMP44:%.*]] = load i32, ptr [[N_ADDR]], align 4290// CHECK1-NEXT:    store i32 [[TMP44]], ptr [[N_CASTED4]], align 4291// CHECK1-NEXT:    [[TMP45:%.*]] = load i64, ptr [[N_CASTED4]], align 8292// CHECK1-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0293// CHECK1-NEXT:    store i64 [[TMP45]], ptr [[TMP46]], align 8294// CHECK1-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS6]], i32 0, i32 0295// CHECK1-NEXT:    store i64 [[TMP45]], ptr [[TMP47]], align 8296// CHECK1-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS7]], i64 0, i64 0297// CHECK1-NEXT:    store ptr null, ptr [[TMP48]], align 8298// CHECK1-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 1299// CHECK1-NEXT:    store ptr @a, ptr [[TMP49]], align 8300// CHECK1-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS6]], i32 0, i32 1301// CHECK1-NEXT:    store ptr @a, ptr [[TMP50]], align 8302// CHECK1-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS7]], i64 0, i64 1303// CHECK1-NEXT:    store ptr null, ptr [[TMP51]], align 8304// CHECK1-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0305// CHECK1-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS6]], i32 0, i32 0306// CHECK1-NEXT:    [[TMP54:%.*]] = load i32, ptr [[N_ADDR]], align 4307// CHECK1-NEXT:    store i32 [[TMP54]], ptr [[DOTCAPTURE_EXPR_9]], align 4308// CHECK1-NEXT:    [[TMP55:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 4309// CHECK1-NEXT:    [[SUB11:%.*]] = sub nsw i32 [[TMP55]], 0310// CHECK1-NEXT:    [[DIV12:%.*]] = sdiv i32 [[SUB11]], 1311// CHECK1-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[DIV12]], 1312// CHECK1-NEXT:    store i32 [[SUB13]], ptr [[DOTCAPTURE_EXPR_10]], align 4313// CHECK1-NEXT:    [[TMP56:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_10]], align 4314// CHECK1-NEXT:    [[ADD14:%.*]] = add nsw i32 [[TMP56]], 1315// CHECK1-NEXT:    [[TMP57:%.*]] = zext i32 [[ADD14]] to i64316// CHECK1-NEXT:    [[TMP58:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 0317// CHECK1-NEXT:    store i32 3, ptr [[TMP58]], align 4318// CHECK1-NEXT:    [[TMP59:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 1319// CHECK1-NEXT:    store i32 2, ptr [[TMP59]], align 4320// CHECK1-NEXT:    [[TMP60:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 2321// CHECK1-NEXT:    store ptr [[TMP52]], ptr [[TMP60]], align 8322// CHECK1-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 3323// CHECK1-NEXT:    store ptr [[TMP53]], ptr [[TMP61]], align 8324// CHECK1-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 4325// CHECK1-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP62]], align 8326// CHECK1-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 5327// CHECK1-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP63]], align 8328// CHECK1-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 6329// CHECK1-NEXT:    store ptr null, ptr [[TMP64]], align 8330// CHECK1-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 7331// CHECK1-NEXT:    store ptr null, ptr [[TMP65]], align 8332// CHECK1-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 8333// CHECK1-NEXT:    store i64 [[TMP57]], ptr [[TMP66]], align 8334// CHECK1-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 9335// CHECK1-NEXT:    store i64 0, ptr [[TMP67]], align 8336// CHECK1-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 10337// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP68]], align 4338// CHECK1-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 11339// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP69]], align 4340// CHECK1-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 12341// CHECK1-NEXT:    store i32 0, ptr [[TMP70]], align 4342// CHECK1-NEXT:    [[TMP71:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.region_id, ptr [[KERNEL_ARGS15]])343// CHECK1-NEXT:    [[TMP72:%.*]] = icmp ne i32 [[TMP71]], 0344// CHECK1-NEXT:    br i1 [[TMP72]], label [[OMP_OFFLOAD_FAILED16:%.*]], label [[OMP_OFFLOAD_CONT17:%.*]]345// CHECK1:       omp_offload.failed16:346// CHECK1-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35(i64 [[TMP45]], ptr @a) #[[ATTR2]]347// CHECK1-NEXT:    br label [[OMP_OFFLOAD_CONT17]]348// CHECK1:       omp_offload.cont17:349// CHECK1-NEXT:    [[TMP73:%.*]] = load i32, ptr @a, align 4350// CHECK1-NEXT:    ret i32 [[TMP73]]351//352//353// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28354// CHECK1-SAME: (i64 noundef [[TE:%.*]], i64 noundef [[TH:%.*]], i64 noundef [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1:[0-9]+]] {355// CHECK1-NEXT:  entry:356// CHECK1-NEXT:    [[TE_ADDR:%.*]] = alloca i64, align 8357// CHECK1-NEXT:    [[TH_ADDR:%.*]] = alloca i64, align 8358// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 8359// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8360// CHECK1-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3]])361// CHECK1-NEXT:    store i64 [[TE]], ptr [[TE_ADDR]], align 8362// CHECK1-NEXT:    store i64 [[TH]], ptr [[TH_ADDR]], align 8363// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 8364// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8365// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 8366// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TE_ADDR]], align 4367// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TH_ADDR]], align 4368// CHECK1-NEXT:    call void @__kmpc_push_num_teams(ptr @[[GLOB3]], i32 [[TMP0]], i32 [[TMP2]], i32 [[TMP3]])369// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.omp_outlined, ptr [[N_ADDR]], ptr [[TMP1]])370// CHECK1-NEXT:    ret void371//372//373// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.omp_outlined374// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {375// CHECK1-NEXT:  entry:376// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8377// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8378// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 8379// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8380// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4381// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 4382// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4383// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4384// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 4385// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4386// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4387// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4388// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4389// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 4390// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8391// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8392// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 8393// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8394// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 8395// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 8396// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 4397// CHECK1-NEXT:    store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_]], align 4398// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4399// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP3]], 0400// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 1401// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1402// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 4403// CHECK1-NEXT:    store i32 0, ptr [[I]], align 4404// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4405// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP4]]406// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]407// CHECK1:       omp.precond.then:408// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 4409// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4410// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_COMB_UB]], align 4411// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4412// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4413// CHECK1-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8414// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 4415// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP7]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)416// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4417// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4418// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP8]], [[TMP9]]419// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]420// CHECK1:       cond.true:421// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4422// CHECK1-NEXT:    br label [[COND_END:%.*]]423// CHECK1:       cond.false:424// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4425// CHECK1-NEXT:    br label [[COND_END]]426// CHECK1:       cond.end:427// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP10]], [[COND_TRUE]] ], [ [[TMP11]], [[COND_FALSE]] ]428// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 4429// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4430// CHECK1-NEXT:    store i32 [[TMP12]], ptr [[DOTOMP_IV]], align 4431// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]432// CHECK1:       omp.inner.for.cond:433// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4434// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4435// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP13]], [[TMP14]]436// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]437// CHECK1:       omp.inner.for.body:438// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4439// CHECK1-NEXT:    [[TMP16:%.*]] = zext i32 [[TMP15]] to i64440// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4441// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i64442// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.omp_outlined.omp_outlined, i64 [[TMP16]], i64 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]])443// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]444// CHECK1:       omp.inner.for.inc:445// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4446// CHECK1-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4447// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]448// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4449// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]450// CHECK1:       omp.inner.for.end:451// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]452// CHECK1:       omp.loop.exit:453// CHECK1-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8454// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 4455// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])456// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]457// CHECK1:       omp.precond.end:458// CHECK1-NEXT:    ret void459//460//461// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.omp_outlined.omp_outlined462// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {463// CHECK1-NEXT:  entry:464// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8465// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8466// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8467// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8468// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 8469// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8470// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4471// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 4472// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4473// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4474// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 4475// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4476// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4477// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4478// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4479// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 4480// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8481// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8482// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 8483// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 8484// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 8485// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8486// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 8487// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 8488// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 4489// CHECK1-NEXT:    store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_]], align 4490// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4491// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP3]], 0492// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 1493// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1494// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 4495// CHECK1-NEXT:    store i32 0, ptr [[I]], align 4496// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4497// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP4]]498// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]499// CHECK1:       omp.precond.then:500// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4501// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4502// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_UB]], align 4503// CHECK1-NEXT:    [[TMP6:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 8504// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP6]] to i32505// CHECK1-NEXT:    [[TMP7:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 8506// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP7]] to i32507// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 4508// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 4509// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4510// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4511// CHECK1-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8512// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 4513// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP9]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)514// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4515// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4516// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]517// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]518// CHECK1:       cond.true:519// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4520// CHECK1-NEXT:    br label [[COND_END:%.*]]521// CHECK1:       cond.false:522// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4523// CHECK1-NEXT:    br label [[COND_END]]524// CHECK1:       cond.end:525// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]526// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4527// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4528// CHECK1-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 4529// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]530// CHECK1:       omp.inner.for.cond:531// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4532// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4533// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]534// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]535// CHECK1:       omp.inner.for.body:536// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4537// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP17]], 1538// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]539// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4540// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[I4]], align 4541// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP18]] to i64542// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [100 x i32], ptr [[TMP1]], i64 0, i64 [[IDXPROM]]543// CHECK1-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 4544// CHECK1-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8545// CHECK1-NEXT:    [[TMP20:%.*]] = load i32, ptr [[TMP19]], align 4546// CHECK1-NEXT:    [[TMP21:%.*]] = call i32 @__kmpc_cancel(ptr @[[GLOB3]], i32 [[TMP20]], i32 2)547// CHECK1-NEXT:    [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 0548// CHECK1-NEXT:    br i1 [[TMP22]], label [[DOTCANCEL_EXIT:%.*]], label [[DOTCANCEL_CONTINUE:%.*]]549// CHECK1:       .cancel.exit:550// CHECK1-NEXT:    br label [[CANCEL_EXIT:%.*]]551// CHECK1:       .cancel.continue:552// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]553// CHECK1:       omp.body.continue:554// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]555// CHECK1:       omp.inner.for.inc:556// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4557// CHECK1-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP23]], 1558// CHECK1-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_IV]], align 4559// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]560// CHECK1:       omp.inner.for.end:561// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]562// CHECK1:       omp.loop.exit:563// CHECK1-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8564// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[TMP24]], align 4565// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP25]])566// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]567// CHECK1:       cancel.exit:568// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8569// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[TMP26]], align 4570// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP27]])571// CHECK1-NEXT:    br label [[CANCEL_CONT:%.*]]572// CHECK1:       omp.precond.end:573// CHECK1-NEXT:    br label [[CANCEL_CONT]]574// CHECK1:       cancel.cont:575// CHECK1-NEXT:    ret void576//577//578// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35579// CHECK1-SAME: (i64 noundef [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {580// CHECK1-NEXT:  entry:581// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 8582// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8583// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 8584// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8585// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8586// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.omp_outlined, ptr [[N_ADDR]], ptr [[TMP0]])587// CHECK1-NEXT:    ret void588//589//590// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.omp_outlined591// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {592// CHECK1-NEXT:  entry:593// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8594// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8595// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 8596// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8597// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4598// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 4599// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4600// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4601// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 4602// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4603// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4604// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4605// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4606// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 4607// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8608// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8609// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 8610// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8611// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 8612// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 8613// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 4614// CHECK1-NEXT:    store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_]], align 4615// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4616// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP3]], 0617// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 1618// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1619// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 4620// CHECK1-NEXT:    store i32 0, ptr [[I]], align 4621// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4622// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP4]]623// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]624// CHECK1:       omp.precond.then:625// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 4626// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4627// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_COMB_UB]], align 4628// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4629// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4630// CHECK1-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8631// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 4632// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP7]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)633// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4634// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4635// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP8]], [[TMP9]]636// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]637// CHECK1:       cond.true:638// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4639// CHECK1-NEXT:    br label [[COND_END:%.*]]640// CHECK1:       cond.false:641// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4642// CHECK1-NEXT:    br label [[COND_END]]643// CHECK1:       cond.end:644// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP10]], [[COND_TRUE]] ], [ [[TMP11]], [[COND_FALSE]] ]645// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 4646// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4647// CHECK1-NEXT:    store i32 [[TMP12]], ptr [[DOTOMP_IV]], align 4648// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]649// CHECK1:       omp.inner.for.cond:650// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4651// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4652// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP13]], [[TMP14]]653// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]654// CHECK1:       omp.inner.for.body:655// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4656// CHECK1-NEXT:    [[TMP16:%.*]] = zext i32 [[TMP15]] to i64657// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4658// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i64659// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.omp_outlined.omp_outlined, i64 [[TMP16]], i64 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]])660// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]661// CHECK1:       omp.inner.for.inc:662// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4663// CHECK1-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4664// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]665// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4666// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]667// CHECK1:       omp.inner.for.end:668// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]669// CHECK1:       omp.loop.exit:670// CHECK1-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8671// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 4672// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])673// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]674// CHECK1:       omp.precond.end:675// CHECK1-NEXT:    ret void676//677//678// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.omp_outlined.omp_outlined679// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {680// CHECK1-NEXT:  entry:681// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8682// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8683// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8684// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8685// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 8686// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8687// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4688// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 4689// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4690// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4691// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 4692// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4693// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4694// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4695// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4696// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 4697// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8698// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8699// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 8700// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 8701// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 8702// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8703// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 8704// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 8705// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 4706// CHECK1-NEXT:    store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_]], align 4707// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4708// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP3]], 0709// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 1710// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1711// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 4712// CHECK1-NEXT:    store i32 0, ptr [[I]], align 4713// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4714// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP4]]715// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]716// CHECK1:       omp.precond.then:717// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4718// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4719// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_UB]], align 4720// CHECK1-NEXT:    [[TMP6:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 8721// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP6]] to i32722// CHECK1-NEXT:    [[TMP7:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 8723// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP7]] to i32724// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 4725// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 4726// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4727// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4728// CHECK1-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8729// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 4730// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP9]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)731// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4732// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4733// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]734// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]735// CHECK1:       cond.true:736// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4737// CHECK1-NEXT:    br label [[COND_END:%.*]]738// CHECK1:       cond.false:739// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4740// CHECK1-NEXT:    br label [[COND_END]]741// CHECK1:       cond.end:742// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]743// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4744// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4745// CHECK1-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 4746// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]747// CHECK1:       omp.inner.for.cond:748// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4749// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4750// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]751// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]752// CHECK1:       omp.inner.for.body:753// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4754// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP17]], 1755// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]756// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4757// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[I4]], align 4758// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP18]] to i64759// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [100 x i32], ptr [[TMP1]], i64 0, i64 [[IDXPROM]]760// CHECK1-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 4761// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]762// CHECK1:       omp.body.continue:763// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]764// CHECK1:       omp.inner.for.inc:765// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4766// CHECK1-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP19]], 1767// CHECK1-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_IV]], align 4768// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]769// CHECK1:       omp.inner.for.end:770// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]771// CHECK1:       omp.loop.exit:772// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8773// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 4774// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP21]])775// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]776// CHECK1:       omp.precond.end:777// CHECK1-NEXT:    ret void778//779//780// CHECK3-LABEL: define {{[^@]+}}@_Z21teams_argument_globali781// CHECK3-SAME: (i32 noundef [[N:%.*]]) #[[ATTR0:[0-9]+]] {782// CHECK3-NEXT:  entry:783// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 4784// CHECK3-NEXT:    [[TE:%.*]] = alloca i32, align 4785// CHECK3-NEXT:    [[TH:%.*]] = alloca i32, align 4786// CHECK3-NEXT:    [[TE_CASTED:%.*]] = alloca i32, align 4787// CHECK3-NEXT:    [[TH_CASTED:%.*]] = alloca i32, align 4788// CHECK3-NEXT:    [[N_CASTED:%.*]] = alloca i32, align 4789// CHECK3-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 4790// CHECK3-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 4791// CHECK3-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 4792// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4793// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4794// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4795// CHECK3-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8796// CHECK3-NEXT:    [[N_CASTED4:%.*]] = alloca i32, align 4797// CHECK3-NEXT:    [[DOTOFFLOAD_BASEPTRS5:%.*]] = alloca [2 x ptr], align 4798// CHECK3-NEXT:    [[DOTOFFLOAD_PTRS6:%.*]] = alloca [2 x ptr], align 4799// CHECK3-NEXT:    [[DOTOFFLOAD_MAPPERS7:%.*]] = alloca [2 x ptr], align 4800// CHECK3-NEXT:    [[_TMP8:%.*]] = alloca i32, align 4801// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 4802// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_10:%.*]] = alloca i32, align 4803// CHECK3-NEXT:    [[KERNEL_ARGS15:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8804// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 4805// CHECK3-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N_ADDR]], align 4806// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[TMP0]], 128807// CHECK3-NEXT:    store i32 [[DIV]], ptr [[TE]], align 4808// CHECK3-NEXT:    store i32 128, ptr [[TH]], align 4809// CHECK3-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TE]], align 4810// CHECK3-NEXT:    store i32 [[TMP1]], ptr [[TE_CASTED]], align 4811// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TE_CASTED]], align 4812// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TH]], align 4813// CHECK3-NEXT:    store i32 [[TMP3]], ptr [[TH_CASTED]], align 4814// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TH_CASTED]], align 4815// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[N_ADDR]], align 4816// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[N_CASTED]], align 4817// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[N_CASTED]], align 4818// CHECK3-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0819// CHECK3-NEXT:    store i32 [[TMP2]], ptr [[TMP7]], align 4820// CHECK3-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0821// CHECK3-NEXT:    store i32 [[TMP2]], ptr [[TMP8]], align 4822// CHECK3-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0823// CHECK3-NEXT:    store ptr null, ptr [[TMP9]], align 4824// CHECK3-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1825// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[TMP10]], align 4826// CHECK3-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 1827// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[TMP11]], align 4828// CHECK3-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1829// CHECK3-NEXT:    store ptr null, ptr [[TMP12]], align 4830// CHECK3-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2831// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[TMP13]], align 4832// CHECK3-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 2833// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[TMP14]], align 4834// CHECK3-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2835// CHECK3-NEXT:    store ptr null, ptr [[TMP15]], align 4836// CHECK3-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3837// CHECK3-NEXT:    store ptr @a, ptr [[TMP16]], align 4838// CHECK3-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 3839// CHECK3-NEXT:    store ptr @a, ptr [[TMP17]], align 4840// CHECK3-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3841// CHECK3-NEXT:    store ptr null, ptr [[TMP18]], align 4842// CHECK3-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0843// CHECK3-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0844// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TE]], align 4845// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TH]], align 4846// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[N_ADDR]], align 4847// CHECK3-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR_]], align 4848// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4849// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP24]], 0850// CHECK3-NEXT:    [[DIV2:%.*]] = sdiv i32 [[SUB]], 1851// CHECK3-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV2]], 1852// CHECK3-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_1]], align 4853// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4854// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], 1855// CHECK3-NEXT:    [[TMP26:%.*]] = zext i32 [[ADD]] to i64856// CHECK3-NEXT:    [[TMP27:%.*]] = insertvalue [3 x i32] zeroinitializer, i32 [[TMP21]], 0857// CHECK3-NEXT:    [[TMP28:%.*]] = insertvalue [3 x i32] zeroinitializer, i32 [[TMP22]], 0858// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0859// CHECK3-NEXT:    store i32 3, ptr [[TMP29]], align 4860// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1861// CHECK3-NEXT:    store i32 4, ptr [[TMP30]], align 4862// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2863// CHECK3-NEXT:    store ptr [[TMP19]], ptr [[TMP31]], align 4864// CHECK3-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3865// CHECK3-NEXT:    store ptr [[TMP20]], ptr [[TMP32]], align 4866// CHECK3-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4867// CHECK3-NEXT:    store ptr @.offload_sizes, ptr [[TMP33]], align 4868// CHECK3-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5869// CHECK3-NEXT:    store ptr @.offload_maptypes, ptr [[TMP34]], align 4870// CHECK3-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6871// CHECK3-NEXT:    store ptr null, ptr [[TMP35]], align 4872// CHECK3-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7873// CHECK3-NEXT:    store ptr null, ptr [[TMP36]], align 4874// CHECK3-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8875// CHECK3-NEXT:    store i64 [[TMP26]], ptr [[TMP37]], align 8876// CHECK3-NEXT:    [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9877// CHECK3-NEXT:    store i64 0, ptr [[TMP38]], align 8878// CHECK3-NEXT:    [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10879// CHECK3-NEXT:    store [3 x i32] [[TMP27]], ptr [[TMP39]], align 4880// CHECK3-NEXT:    [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11881// CHECK3-NEXT:    store [3 x i32] [[TMP28]], ptr [[TMP40]], align 4882// CHECK3-NEXT:    [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12883// CHECK3-NEXT:    store i32 0, ptr [[TMP41]], align 4884// CHECK3-NEXT:    [[TMP42:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 [[TMP21]], i32 [[TMP22]], ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.region_id, ptr [[KERNEL_ARGS]])885// CHECK3-NEXT:    [[TMP43:%.*]] = icmp ne i32 [[TMP42]], 0886// CHECK3-NEXT:    br i1 [[TMP43]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]887// CHECK3:       omp_offload.failed:888// CHECK3-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28(i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], ptr @a) #[[ATTR2:[0-9]+]]889// CHECK3-NEXT:    br label [[OMP_OFFLOAD_CONT]]890// CHECK3:       omp_offload.cont:891// CHECK3-NEXT:    [[TMP44:%.*]] = load i32, ptr [[N_ADDR]], align 4892// CHECK3-NEXT:    store i32 [[TMP44]], ptr [[N_CASTED4]], align 4893// CHECK3-NEXT:    [[TMP45:%.*]] = load i32, ptr [[N_CASTED4]], align 4894// CHECK3-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0895// CHECK3-NEXT:    store i32 [[TMP45]], ptr [[TMP46]], align 4896// CHECK3-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS6]], i32 0, i32 0897// CHECK3-NEXT:    store i32 [[TMP45]], ptr [[TMP47]], align 4898// CHECK3-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS7]], i32 0, i32 0899// CHECK3-NEXT:    store ptr null, ptr [[TMP48]], align 4900// CHECK3-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 1901// CHECK3-NEXT:    store ptr @a, ptr [[TMP49]], align 4902// CHECK3-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS6]], i32 0, i32 1903// CHECK3-NEXT:    store ptr @a, ptr [[TMP50]], align 4904// CHECK3-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS7]], i32 0, i32 1905// CHECK3-NEXT:    store ptr null, ptr [[TMP51]], align 4906// CHECK3-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS5]], i32 0, i32 0907// CHECK3-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS6]], i32 0, i32 0908// CHECK3-NEXT:    [[TMP54:%.*]] = load i32, ptr [[N_ADDR]], align 4909// CHECK3-NEXT:    store i32 [[TMP54]], ptr [[DOTCAPTURE_EXPR_9]], align 4910// CHECK3-NEXT:    [[TMP55:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 4911// CHECK3-NEXT:    [[SUB11:%.*]] = sub nsw i32 [[TMP55]], 0912// CHECK3-NEXT:    [[DIV12:%.*]] = sdiv i32 [[SUB11]], 1913// CHECK3-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[DIV12]], 1914// CHECK3-NEXT:    store i32 [[SUB13]], ptr [[DOTCAPTURE_EXPR_10]], align 4915// CHECK3-NEXT:    [[TMP56:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_10]], align 4916// CHECK3-NEXT:    [[ADD14:%.*]] = add nsw i32 [[TMP56]], 1917// CHECK3-NEXT:    [[TMP57:%.*]] = zext i32 [[ADD14]] to i64918// CHECK3-NEXT:    [[TMP58:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 0919// CHECK3-NEXT:    store i32 3, ptr [[TMP58]], align 4920// CHECK3-NEXT:    [[TMP59:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 1921// CHECK3-NEXT:    store i32 2, ptr [[TMP59]], align 4922// CHECK3-NEXT:    [[TMP60:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 2923// CHECK3-NEXT:    store ptr [[TMP52]], ptr [[TMP60]], align 4924// CHECK3-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 3925// CHECK3-NEXT:    store ptr [[TMP53]], ptr [[TMP61]], align 4926// CHECK3-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 4927// CHECK3-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP62]], align 4928// CHECK3-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 5929// CHECK3-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP63]], align 4930// CHECK3-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 6931// CHECK3-NEXT:    store ptr null, ptr [[TMP64]], align 4932// CHECK3-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 7933// CHECK3-NEXT:    store ptr null, ptr [[TMP65]], align 4934// CHECK3-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 8935// CHECK3-NEXT:    store i64 [[TMP57]], ptr [[TMP66]], align 8936// CHECK3-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 9937// CHECK3-NEXT:    store i64 0, ptr [[TMP67]], align 8938// CHECK3-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 10939// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP68]], align 4940// CHECK3-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 11941// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP69]], align 4942// CHECK3-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS15]], i32 0, i32 12943// CHECK3-NEXT:    store i32 0, ptr [[TMP70]], align 4944// CHECK3-NEXT:    [[TMP71:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.region_id, ptr [[KERNEL_ARGS15]])945// CHECK3-NEXT:    [[TMP72:%.*]] = icmp ne i32 [[TMP71]], 0946// CHECK3-NEXT:    br i1 [[TMP72]], label [[OMP_OFFLOAD_FAILED16:%.*]], label [[OMP_OFFLOAD_CONT17:%.*]]947// CHECK3:       omp_offload.failed16:948// CHECK3-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35(i32 [[TMP45]], ptr @a) #[[ATTR2]]949// CHECK3-NEXT:    br label [[OMP_OFFLOAD_CONT17]]950// CHECK3:       omp_offload.cont17:951// CHECK3-NEXT:    [[TMP73:%.*]] = load i32, ptr @a, align 4952// CHECK3-NEXT:    ret i32 [[TMP73]]953//954//955// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28956// CHECK3-SAME: (i32 noundef [[TE:%.*]], i32 noundef [[TH:%.*]], i32 noundef [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1:[0-9]+]] {957// CHECK3-NEXT:  entry:958// CHECK3-NEXT:    [[TE_ADDR:%.*]] = alloca i32, align 4959// CHECK3-NEXT:    [[TH_ADDR:%.*]] = alloca i32, align 4960// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 4961// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 4962// CHECK3-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3]])963// CHECK3-NEXT:    store i32 [[TE]], ptr [[TE_ADDR]], align 4964// CHECK3-NEXT:    store i32 [[TH]], ptr [[TH_ADDR]], align 4965// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 4966// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 4967// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 4968// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TE_ADDR]], align 4969// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TH_ADDR]], align 4970// CHECK3-NEXT:    call void @__kmpc_push_num_teams(ptr @[[GLOB3]], i32 [[TMP0]], i32 [[TMP2]], i32 [[TMP3]])971// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.omp_outlined, ptr [[N_ADDR]], ptr [[TMP1]])972// CHECK3-NEXT:    ret void973//974//975// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.omp_outlined976// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {977// CHECK3-NEXT:  entry:978// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 4979// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 4980// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 4981// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 4982// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4983// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4984// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4985// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4986// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 4987// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4988// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4989// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4990// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4991// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 4992// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 4993// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 4994// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 4995// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 4996// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 4997// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 4998// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 4999// CHECK3-NEXT:    store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_]], align 41000// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41001// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP3]], 01002// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11003// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11004// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41005// CHECK3-NEXT:    store i32 0, ptr [[I]], align 41006// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41007// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP4]]1008// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1009// CHECK3:       omp.precond.then:1010// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41011// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41012// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_COMB_UB]], align 41013// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41014// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41015// CHECK3-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41016// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 41017// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP7]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1018// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41019// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41020// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP8]], [[TMP9]]1021// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1022// CHECK3:       cond.true:1023// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41024// CHECK3-NEXT:    br label [[COND_END:%.*]]1025// CHECK3:       cond.false:1026// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41027// CHECK3-NEXT:    br label [[COND_END]]1028// CHECK3:       cond.end:1029// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP10]], [[COND_TRUE]] ], [ [[TMP11]], [[COND_FALSE]] ]1030// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41031// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41032// CHECK3-NEXT:    store i32 [[TMP12]], ptr [[DOTOMP_IV]], align 41033// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1034// CHECK3:       omp.inner.for.cond:1035// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41036// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41037// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP13]], [[TMP14]]1038// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1039// CHECK3:       omp.inner.for.body:1040// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41041// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41042// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.omp_outlined.omp_outlined, i32 [[TMP15]], i32 [[TMP16]], ptr [[TMP0]], ptr [[TMP1]])1043// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1044// CHECK3:       omp.inner.for.inc:1045// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41046// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41047// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP17]], [[TMP18]]1048// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41049// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]1050// CHECK3:       omp.inner.for.end:1051// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1052// CHECK3:       omp.loop.exit:1053// CHECK3-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41054// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[TMP19]], align 41055// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP20]])1056// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]1057// CHECK3:       omp.precond.end:1058// CHECK3-NEXT:    ret void1059//1060//1061// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l28.omp_outlined.omp_outlined1062// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {1063// CHECK3-NEXT:  entry:1064// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41065// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41066// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 41067// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 41068// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 41069// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 41070// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41071// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 41072// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41073// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41074// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 41075// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41076// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41077// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41078// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41079// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 41080// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41081// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41082// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 41083// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 41084// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 41085// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 41086// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 41087// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 41088// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 41089// CHECK3-NEXT:    store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_]], align 41090// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41091// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP3]], 01092// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11093// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11094// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41095// CHECK3-NEXT:    store i32 0, ptr [[I]], align 41096// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41097// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP4]]1098// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1099// CHECK3:       omp.precond.then:1100// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41101// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41102// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_UB]], align 41103// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 41104// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 41105// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_LB]], align 41106// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 41107// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41108// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41109// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41110// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 41111// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP9]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1112// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41113// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41114// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]1115// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1116// CHECK3:       cond.true:1117// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41118// CHECK3-NEXT:    br label [[COND_END:%.*]]1119// CHECK3:       cond.false:1120// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41121// CHECK3-NEXT:    br label [[COND_END]]1122// CHECK3:       cond.end:1123// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]1124// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41125// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41126// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 41127// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1128// CHECK3:       omp.inner.for.cond:1129// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41130// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41131// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]1132// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1133// CHECK3:       omp.inner.for.body:1134// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41135// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP17]], 11136// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1137// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 41138// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[I3]], align 41139// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [100 x i32], ptr [[TMP1]], i32 0, i32 [[TMP18]]1140// CHECK3-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 41141// CHECK3-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41142// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[TMP19]], align 41143// CHECK3-NEXT:    [[TMP21:%.*]] = call i32 @__kmpc_cancel(ptr @[[GLOB3]], i32 [[TMP20]], i32 2)1144// CHECK3-NEXT:    [[TMP22:%.*]] = icmp ne i32 [[TMP21]], 01145// CHECK3-NEXT:    br i1 [[TMP22]], label [[DOTCANCEL_EXIT:%.*]], label [[DOTCANCEL_CONTINUE:%.*]]1146// CHECK3:       .cancel.exit:1147// CHECK3-NEXT:    br label [[CANCEL_EXIT:%.*]]1148// CHECK3:       .cancel.continue:1149// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1150// CHECK3:       omp.body.continue:1151// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1152// CHECK3:       omp.inner.for.inc:1153// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41154// CHECK3-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP23]], 11155// CHECK3-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 41156// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]1157// CHECK3:       omp.inner.for.end:1158// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1159// CHECK3:       omp.loop.exit:1160// CHECK3-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41161// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[TMP24]], align 41162// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP25]])1163// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]1164// CHECK3:       cancel.exit:1165// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41166// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[TMP26]], align 41167// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP27]])1168// CHECK3-NEXT:    br label [[CANCEL_CONT:%.*]]1169// CHECK3:       omp.precond.end:1170// CHECK3-NEXT:    br label [[CANCEL_CONT]]1171// CHECK3:       cancel.cont:1172// CHECK3-NEXT:    ret void1173//1174//1175// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l351176// CHECK3-SAME: (i32 noundef [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {1177// CHECK3-NEXT:  entry:1178// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 41179// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 41180// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 41181// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 41182// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 41183// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.omp_outlined, ptr [[N_ADDR]], ptr [[TMP0]])1184// CHECK3-NEXT:    ret void1185//1186//1187// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.omp_outlined1188// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {1189// CHECK3-NEXT:  entry:1190// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41191// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41192// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 41193// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 41194// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41195// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 41196// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41197// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41198// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 41199// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41200// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41201// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41202// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41203// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 41204// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41205// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41206// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 41207// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 41208// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 41209// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 41210// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 41211// CHECK3-NEXT:    store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_]], align 41212// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41213// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP3]], 01214// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11215// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11216// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41217// CHECK3-NEXT:    store i32 0, ptr [[I]], align 41218// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41219// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP4]]1220// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1221// CHECK3:       omp.precond.then:1222// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41223// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41224// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_COMB_UB]], align 41225// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41226// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41227// CHECK3-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41228// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 41229// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP7]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1230// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41231// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41232// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP8]], [[TMP9]]1233// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1234// CHECK3:       cond.true:1235// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41236// CHECK3-NEXT:    br label [[COND_END:%.*]]1237// CHECK3:       cond.false:1238// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41239// CHECK3-NEXT:    br label [[COND_END]]1240// CHECK3:       cond.end:1241// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP10]], [[COND_TRUE]] ], [ [[TMP11]], [[COND_FALSE]] ]1242// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41243// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41244// CHECK3-NEXT:    store i32 [[TMP12]], ptr [[DOTOMP_IV]], align 41245// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1246// CHECK3:       omp.inner.for.cond:1247// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41248// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41249// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP13]], [[TMP14]]1250// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1251// CHECK3:       omp.inner.for.body:1252// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41253// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41254// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.omp_outlined.omp_outlined, i32 [[TMP15]], i32 [[TMP16]], ptr [[TMP0]], ptr [[TMP1]])1255// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1256// CHECK3:       omp.inner.for.inc:1257// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41258// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41259// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP17]], [[TMP18]]1260// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41261// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]1262// CHECK3:       omp.inner.for.end:1263// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1264// CHECK3:       omp.loop.exit:1265// CHECK3-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41266// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[TMP19]], align 41267// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP20]])1268// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]1269// CHECK3:       omp.precond.end:1270// CHECK3-NEXT:    ret void1271//1272//1273// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z21teams_argument_globali_l35.omp_outlined.omp_outlined1274// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(400) [[A:%.*]]) #[[ATTR1]] {1275// CHECK3-NEXT:  entry:1276// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41277// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41278// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 41279// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 41280// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 41281// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 41282// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41283// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 41284// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41285// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41286// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 41287// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41288// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41289// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41290// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41291// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 41292// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41293// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41294// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 41295// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 41296// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 41297// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 41298// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 41299// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 41300// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 41301// CHECK3-NEXT:    store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_]], align 41302// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41303// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP3]], 01304// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11305// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11306// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41307// CHECK3-NEXT:    store i32 0, ptr [[I]], align 41308// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41309// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP4]]1310// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1311// CHECK3:       omp.precond.then:1312// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41313// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41314// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_UB]], align 41315// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 41316// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 41317// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_LB]], align 41318// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 41319// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41320// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41321// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41322// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 41323// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP9]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1324// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41325// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41326// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]1327// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1328// CHECK3:       cond.true:1329// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41330// CHECK3-NEXT:    br label [[COND_END:%.*]]1331// CHECK3:       cond.false:1332// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41333// CHECK3-NEXT:    br label [[COND_END]]1334// CHECK3:       cond.end:1335// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]1336// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41337// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41338// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 41339// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1340// CHECK3:       omp.inner.for.cond:1341// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41342// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41343// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]1344// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1345// CHECK3:       omp.inner.for.body:1346// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41347// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP17]], 11348// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1349// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 41350// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[I3]], align 41351// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [100 x i32], ptr [[TMP1]], i32 0, i32 [[TMP18]]1352// CHECK3-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 41353// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1354// CHECK3:       omp.body.continue:1355// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1356// CHECK3:       omp.inner.for.inc:1357// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41358// CHECK3-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP19]], 11359// CHECK3-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 41360// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]1361// CHECK3:       omp.inner.for.end:1362// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1363// CHECK3:       omp.loop.exit:1364// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41365// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 41366// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP21]])1367// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]1368// CHECK3:       omp.precond.end:1369// CHECK3-NEXT:    ret void1370//1371//1372// CHECK9-LABEL: define {{[^@]+}}@_Z15teams_local_argv1373// CHECK9-SAME: () #[[ATTR0:[0-9]+]] {1374// CHECK9-NEXT:  entry:1375// CHECK9-NEXT:    [[N:%.*]] = alloca i32, align 41376// CHECK9-NEXT:    [[SAVED_STACK:%.*]] = alloca ptr, align 81377// CHECK9-NEXT:    [[__VLA_EXPR0:%.*]] = alloca i64, align 81378// CHECK9-NEXT:    [[N_CASTED:%.*]] = alloca i64, align 81379// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x ptr], align 81380// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x ptr], align 81381// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x ptr], align 81382// CHECK9-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 81383// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 41384// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41385// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41386// CHECK9-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81387// CHECK9-NEXT:    store i32 100, ptr [[N]], align 41388// CHECK9-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 41389// CHECK9-NEXT:    [[TMP1:%.*]] = zext i32 [[TMP0]] to i641390// CHECK9-NEXT:    [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()1391// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[SAVED_STACK]], align 81392// CHECK9-NEXT:    [[VLA:%.*]] = alloca i32, i64 [[TMP1]], align 41393// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 81394// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[N]], align 41395// CHECK9-NEXT:    store i32 [[TMP3]], ptr [[N_CASTED]], align 41396// CHECK9-NEXT:    [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 81397// CHECK9-NEXT:    [[TMP5:%.*]] = mul nuw i64 [[TMP1]], 41398// CHECK9-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes, i64 24, i1 false)1399// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01400// CHECK9-NEXT:    store i64 [[TMP4]], ptr [[TMP6]], align 81401// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01402// CHECK9-NEXT:    store i64 [[TMP4]], ptr [[TMP7]], align 81403// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 01404// CHECK9-NEXT:    store ptr null, ptr [[TMP8]], align 81405// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 11406// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP9]], align 81407// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 11408// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP10]], align 81409// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 11410// CHECK9-NEXT:    store ptr null, ptr [[TMP11]], align 81411// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 21412// CHECK9-NEXT:    store ptr [[VLA]], ptr [[TMP12]], align 81413// CHECK9-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 21414// CHECK9-NEXT:    store ptr [[VLA]], ptr [[TMP13]], align 81415// CHECK9-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 21416// CHECK9-NEXT:    store i64 [[TMP5]], ptr [[TMP14]], align 81417// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 21418// CHECK9-NEXT:    store ptr null, ptr [[TMP15]], align 81419// CHECK9-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01420// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01421// CHECK9-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 01422// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 41423// CHECK9-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 41424// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41425// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 01426// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11427// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11428// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41429// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41430// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 11431// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i641432// CHECK9-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01433// CHECK9-NEXT:    store i32 3, ptr [[TMP23]], align 41434// CHECK9-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11435// CHECK9-NEXT:    store i32 3, ptr [[TMP24]], align 41436// CHECK9-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21437// CHECK9-NEXT:    store ptr [[TMP16]], ptr [[TMP25]], align 81438// CHECK9-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31439// CHECK9-NEXT:    store ptr [[TMP17]], ptr [[TMP26]], align 81440// CHECK9-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41441// CHECK9-NEXT:    store ptr [[TMP18]], ptr [[TMP27]], align 81442// CHECK9-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51443// CHECK9-NEXT:    store ptr @.offload_maptypes, ptr [[TMP28]], align 81444// CHECK9-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61445// CHECK9-NEXT:    store ptr null, ptr [[TMP29]], align 81446// CHECK9-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71447// CHECK9-NEXT:    store ptr null, ptr [[TMP30]], align 81448// CHECK9-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81449// CHECK9-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 81450// CHECK9-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91451// CHECK9-NEXT:    store i64 0, ptr [[TMP32]], align 81452// CHECK9-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101453// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 41454// CHECK9-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111455// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 41456// CHECK9-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121457// CHECK9-NEXT:    store i32 0, ptr [[TMP35]], align 41458// CHECK9-NEXT:    [[TMP36:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, ptr [[KERNEL_ARGS]])1459// CHECK9-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 01460// CHECK9-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1461// CHECK9:       omp_offload.failed:1462// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i64 [[TMP4]], i64 [[TMP1]], ptr [[VLA]]) #[[ATTR3:[0-9]+]]1463// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT]]1464// CHECK9:       omp_offload.cont:1465// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[VLA]], i64 01466// CHECK9-NEXT:    [[TMP38:%.*]] = load i32, ptr [[ARRAYIDX]], align 41467// CHECK9-NEXT:    [[TMP39:%.*]] = load ptr, ptr [[SAVED_STACK]], align 81468// CHECK9-NEXT:    call void @llvm.stackrestore.p0(ptr [[TMP39]])1469// CHECK9-NEXT:    ret i32 [[TMP38]]1470//1471//1472// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l731473// CHECK9-SAME: (i64 noundef [[N:%.*]], i64 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2:[0-9]+]] {1474// CHECK9-NEXT:  entry:1475// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 81476// CHECK9-NEXT:    [[VLA_ADDR:%.*]] = alloca i64, align 81477// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81478// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 81479// CHECK9-NEXT:    store i64 [[VLA]], ptr [[VLA_ADDR]], align 81480// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81481// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[VLA_ADDR]], align 81482// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81483// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 3, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.omp_outlined, ptr [[N_ADDR]], i64 [[TMP0]], ptr [[TMP1]])1484// CHECK9-NEXT:    ret void1485//1486//1487// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.omp_outlined1488// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], i64 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2]] {1489// CHECK9-NEXT:  entry:1490// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81491// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81492// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81493// CHECK9-NEXT:    [[VLA_ADDR:%.*]] = alloca i64, align 81494// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81495// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41496// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 41497// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41498// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41499// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 41500// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41501// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41502// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41503// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41504// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 41505// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81506// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81507// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81508// CHECK9-NEXT:    store i64 [[VLA]], ptr [[VLA_ADDR]], align 81509// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81510// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81511// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[VLA_ADDR]], align 81512// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 81513// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 41514// CHECK9-NEXT:    store i32 [[TMP3]], ptr [[DOTCAPTURE_EXPR_]], align 41515// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41516// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP4]], 01517// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11518// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11519// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41520// CHECK9-NEXT:    store i32 0, ptr [[I]], align 41521// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41522// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP5]]1523// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1524// CHECK9:       omp.precond.then:1525// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41526// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41527// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_COMB_UB]], align 41528// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41529// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41530// CHECK9-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81531// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[TMP7]], align 41532// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP8]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1533// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41534// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41535// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP9]], [[TMP10]]1536// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1537// CHECK9:       cond.true:1538// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41539// CHECK9-NEXT:    br label [[COND_END:%.*]]1540// CHECK9:       cond.false:1541// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41542// CHECK9-NEXT:    br label [[COND_END]]1543// CHECK9:       cond.end:1544// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP11]], [[COND_TRUE]] ], [ [[TMP12]], [[COND_FALSE]] ]1545// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41546// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41547// CHECK9-NEXT:    store i32 [[TMP13]], ptr [[DOTOMP_IV]], align 41548// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1549// CHECK9:       omp.inner.for.cond:1550// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41551// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41552// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP14]], [[TMP15]]1553// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1554// CHECK9:       omp.inner.for.body:1555// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41556// CHECK9-NEXT:    [[TMP17:%.*]] = zext i32 [[TMP16]] to i641557// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41558// CHECK9-NEXT:    [[TMP19:%.*]] = zext i32 [[TMP18]] to i641559// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.omp_outlined.omp_outlined, i64 [[TMP17]], i64 [[TMP19]], ptr [[TMP0]], i64 [[TMP1]], ptr [[TMP2]])1560// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1561// CHECK9:       omp.inner.for.inc:1562// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41563// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41564// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP20]], [[TMP21]]1565// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41566// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]1567// CHECK9:       omp.inner.for.end:1568// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1569// CHECK9:       omp.loop.exit:1570// CHECK9-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81571// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[TMP22]], align 41572// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP23]])1573// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]1574// CHECK9:       omp.precond.end:1575// CHECK9-NEXT:    ret void1576//1577//1578// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.omp_outlined.omp_outlined1579// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], i64 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2]] {1580// CHECK9-NEXT:  entry:1581// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81582// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81583// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81584// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81585// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81586// CHECK9-NEXT:    [[VLA_ADDR:%.*]] = alloca i64, align 81587// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81588// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41589// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 41590// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41591// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41592// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 41593// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41594// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41595// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41596// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41597// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 41598// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81599// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81600// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81601// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81602// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81603// CHECK9-NEXT:    store i64 [[VLA]], ptr [[VLA_ADDR]], align 81604// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81605// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81606// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[VLA_ADDR]], align 81607// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 81608// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 41609// CHECK9-NEXT:    store i32 [[TMP3]], ptr [[DOTCAPTURE_EXPR_]], align 41610// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41611// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP4]], 01612// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11613// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11614// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41615// CHECK9-NEXT:    store i32 0, ptr [[I]], align 41616// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41617// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP5]]1618// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1619// CHECK9:       omp.precond.then:1620// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41621// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41622// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_UB]], align 41623// CHECK9-NEXT:    [[TMP7:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81624// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP7]] to i321625// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81626// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP8]] to i321627// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41628// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 41629// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41630// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41631// CHECK9-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81632// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 41633// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP10]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1634// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41635// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41636// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP11]], [[TMP12]]1637// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1638// CHECK9:       cond.true:1639// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41640// CHECK9-NEXT:    br label [[COND_END:%.*]]1641// CHECK9:       cond.false:1642// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41643// CHECK9-NEXT:    br label [[COND_END]]1644// CHECK9:       cond.end:1645// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP13]], [[COND_TRUE]] ], [ [[TMP14]], [[COND_FALSE]] ]1646// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41647// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41648// CHECK9-NEXT:    store i32 [[TMP15]], ptr [[DOTOMP_IV]], align 41649// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1650// CHECK9:       omp.inner.for.cond:1651// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41652// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41653// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP16]], [[TMP17]]1654// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1655// CHECK9:       omp.inner.for.body:1656// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41657// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP18]], 11658// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1659// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 41660// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[I4]], align 41661// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP19]] to i641662// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i64 [[IDXPROM]]1663// CHECK9-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 41664// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1665// CHECK9:       omp.body.continue:1666// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1667// CHECK9:       omp.inner.for.inc:1668// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41669// CHECK9-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP20]], 11670// CHECK9-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_IV]], align 41671// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]1672// CHECK9:       omp.inner.for.end:1673// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1674// CHECK9:       omp.loop.exit:1675// CHECK9-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81676// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41677// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP22]])1678// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]1679// CHECK9:       omp.precond.end:1680// CHECK9-NEXT:    ret void1681//1682//1683// CHECK11-LABEL: define {{[^@]+}}@_Z15teams_local_argv1684// CHECK11-SAME: () #[[ATTR0:[0-9]+]] {1685// CHECK11-NEXT:  entry:1686// CHECK11-NEXT:    [[N:%.*]] = alloca i32, align 41687// CHECK11-NEXT:    [[SAVED_STACK:%.*]] = alloca ptr, align 41688// CHECK11-NEXT:    [[__VLA_EXPR0:%.*]] = alloca i32, align 41689// CHECK11-NEXT:    [[N_CASTED:%.*]] = alloca i32, align 41690// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x ptr], align 41691// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x ptr], align 41692// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x ptr], align 41693// CHECK11-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 41694// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41695// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41696// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41697// CHECK11-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81698// CHECK11-NEXT:    store i32 100, ptr [[N]], align 41699// CHECK11-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 41700// CHECK11-NEXT:    [[TMP1:%.*]] = call ptr @llvm.stacksave.p0()1701// CHECK11-NEXT:    store ptr [[TMP1]], ptr [[SAVED_STACK]], align 41702// CHECK11-NEXT:    [[VLA:%.*]] = alloca i32, i32 [[TMP0]], align 41703// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[__VLA_EXPR0]], align 41704// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[N]], align 41705// CHECK11-NEXT:    store i32 [[TMP2]], ptr [[N_CASTED]], align 41706// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[N_CASTED]], align 41707// CHECK11-NEXT:    [[TMP4:%.*]] = mul nuw i32 [[TMP0]], 41708// CHECK11-NEXT:    [[TMP5:%.*]] = sext i32 [[TMP4]] to i641709// CHECK11-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES]], ptr align 4 @.offload_sizes, i32 24, i1 false)1710// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01711// CHECK11-NEXT:    store i32 [[TMP3]], ptr [[TMP6]], align 41712// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01713// CHECK11-NEXT:    store i32 [[TMP3]], ptr [[TMP7]], align 41714// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 01715// CHECK11-NEXT:    store ptr null, ptr [[TMP8]], align 41716// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 11717// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[TMP9]], align 41718// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 11719// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[TMP10]], align 41720// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 11721// CHECK11-NEXT:    store ptr null, ptr [[TMP11]], align 41722// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 21723// CHECK11-NEXT:    store ptr [[VLA]], ptr [[TMP12]], align 41724// CHECK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 21725// CHECK11-NEXT:    store ptr [[VLA]], ptr [[TMP13]], align 41726// CHECK11-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 21727// CHECK11-NEXT:    store i64 [[TMP5]], ptr [[TMP14]], align 41728// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 21729// CHECK11-NEXT:    store ptr null, ptr [[TMP15]], align 41730// CHECK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01731// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01732// CHECK11-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 01733// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 41734// CHECK11-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 41735// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41736// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 01737// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11738// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11739// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41740// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41741// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 11742// CHECK11-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i641743// CHECK11-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01744// CHECK11-NEXT:    store i32 3, ptr [[TMP23]], align 41745// CHECK11-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11746// CHECK11-NEXT:    store i32 3, ptr [[TMP24]], align 41747// CHECK11-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21748// CHECK11-NEXT:    store ptr [[TMP16]], ptr [[TMP25]], align 41749// CHECK11-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31750// CHECK11-NEXT:    store ptr [[TMP17]], ptr [[TMP26]], align 41751// CHECK11-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41752// CHECK11-NEXT:    store ptr [[TMP18]], ptr [[TMP27]], align 41753// CHECK11-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51754// CHECK11-NEXT:    store ptr @.offload_maptypes, ptr [[TMP28]], align 41755// CHECK11-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61756// CHECK11-NEXT:    store ptr null, ptr [[TMP29]], align 41757// CHECK11-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71758// CHECK11-NEXT:    store ptr null, ptr [[TMP30]], align 41759// CHECK11-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81760// CHECK11-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 81761// CHECK11-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91762// CHECK11-NEXT:    store i64 0, ptr [[TMP32]], align 81763// CHECK11-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101764// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 41765// CHECK11-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111766// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 41767// CHECK11-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121768// CHECK11-NEXT:    store i32 0, ptr [[TMP35]], align 41769// CHECK11-NEXT:    [[TMP36:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.region_id, ptr [[KERNEL_ARGS]])1770// CHECK11-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 01771// CHECK11-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1772// CHECK11:       omp_offload.failed:1773// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73(i32 [[TMP3]], i32 [[TMP0]], ptr [[VLA]]) #[[ATTR3:[0-9]+]]1774// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT]]1775// CHECK11:       omp_offload.cont:1776// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[VLA]], i32 01777// CHECK11-NEXT:    [[TMP38:%.*]] = load i32, ptr [[ARRAYIDX]], align 41778// CHECK11-NEXT:    [[TMP39:%.*]] = load ptr, ptr [[SAVED_STACK]], align 41779// CHECK11-NEXT:    call void @llvm.stackrestore.p0(ptr [[TMP39]])1780// CHECK11-NEXT:    ret i32 [[TMP38]]1781//1782//1783// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l731784// CHECK11-SAME: (i32 noundef [[N:%.*]], i32 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2:[0-9]+]] {1785// CHECK11-NEXT:  entry:1786// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 41787// CHECK11-NEXT:    [[VLA_ADDR:%.*]] = alloca i32, align 41788// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 41789// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 41790// CHECK11-NEXT:    store i32 [[VLA]], ptr [[VLA_ADDR]], align 41791// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 41792// CHECK11-NEXT:    [[TMP0:%.*]] = load i32, ptr [[VLA_ADDR]], align 41793// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 41794// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 3, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.omp_outlined, ptr [[N_ADDR]], i32 [[TMP0]], ptr [[TMP1]])1795// CHECK11-NEXT:    ret void1796//1797//1798// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.omp_outlined1799// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], i32 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2]] {1800// CHECK11-NEXT:  entry:1801// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41802// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41803// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 41804// CHECK11-NEXT:    [[VLA_ADDR:%.*]] = alloca i32, align 41805// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 41806// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41807// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41808// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41809// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41810// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 41811// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41812// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41813// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41814// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41815// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 41816// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41817// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41818// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 41819// CHECK11-NEXT:    store i32 [[VLA]], ptr [[VLA_ADDR]], align 41820// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 41821// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 41822// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[VLA_ADDR]], align 41823// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 41824// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 41825// CHECK11-NEXT:    store i32 [[TMP3]], ptr [[DOTCAPTURE_EXPR_]], align 41826// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41827// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP4]], 01828// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11829// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11830// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41831// CHECK11-NEXT:    store i32 0, ptr [[I]], align 41832// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41833// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP5]]1834// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1835// CHECK11:       omp.precond.then:1836// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41837// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41838// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_COMB_UB]], align 41839// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41840// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41841// CHECK11-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41842// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[TMP7]], align 41843// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP8]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1844// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41845// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41846// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP9]], [[TMP10]]1847// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1848// CHECK11:       cond.true:1849// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41850// CHECK11-NEXT:    br label [[COND_END:%.*]]1851// CHECK11:       cond.false:1852// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41853// CHECK11-NEXT:    br label [[COND_END]]1854// CHECK11:       cond.end:1855// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP11]], [[COND_TRUE]] ], [ [[TMP12]], [[COND_FALSE]] ]1856// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41857// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41858// CHECK11-NEXT:    store i32 [[TMP13]], ptr [[DOTOMP_IV]], align 41859// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1860// CHECK11:       omp.inner.for.cond:1861// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41862// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41863// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP14]], [[TMP15]]1864// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1865// CHECK11:       omp.inner.for.body:1866// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41867// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41868// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.omp_outlined.omp_outlined, i32 [[TMP16]], i32 [[TMP17]], ptr [[TMP0]], i32 [[TMP1]], ptr [[TMP2]])1869// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1870// CHECK11:       omp.inner.for.inc:1871// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41872// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41873// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], [[TMP19]]1874// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41875// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]1876// CHECK11:       omp.inner.for.end:1877// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1878// CHECK11:       omp.loop.exit:1879// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41880// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 41881// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP21]])1882// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]1883// CHECK11:       omp.precond.end:1884// CHECK11-NEXT:    ret void1885//1886//1887// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z15teams_local_argv_l73.omp_outlined.omp_outlined1888// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], i32 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2]] {1889// CHECK11-NEXT:  entry:1890// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 41891// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 41892// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 41893// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 41894// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 41895// CHECK11-NEXT:    [[VLA_ADDR:%.*]] = alloca i32, align 41896// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 41897// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41898// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41899// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41900// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41901// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 41902// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41903// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41904// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41905// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41906// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 41907// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 41908// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 41909// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 41910// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 41911// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 41912// CHECK11-NEXT:    store i32 [[VLA]], ptr [[VLA_ADDR]], align 41913// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 41914// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 41915// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[VLA_ADDR]], align 41916// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 41917// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 41918// CHECK11-NEXT:    store i32 [[TMP3]], ptr [[DOTCAPTURE_EXPR_]], align 41919// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41920// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP4]], 01921// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11922// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11923// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41924// CHECK11-NEXT:    store i32 0, ptr [[I]], align 41925// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41926// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP5]]1927// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1928// CHECK11:       omp.precond.then:1929// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41930// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41931// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_UB]], align 41932// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 41933// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 41934// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_LB]], align 41935// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_UB]], align 41936// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41937// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41938// CHECK11-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41939// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 41940// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP10]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1941// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41942// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41943// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP11]], [[TMP12]]1944// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1945// CHECK11:       cond.true:1946// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41947// CHECK11-NEXT:    br label [[COND_END:%.*]]1948// CHECK11:       cond.false:1949// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41950// CHECK11-NEXT:    br label [[COND_END]]1951// CHECK11:       cond.end:1952// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP13]], [[COND_TRUE]] ], [ [[TMP14]], [[COND_FALSE]] ]1953// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41954// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41955// CHECK11-NEXT:    store i32 [[TMP15]], ptr [[DOTOMP_IV]], align 41956// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1957// CHECK11:       omp.inner.for.cond:1958// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41959// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41960// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP16]], [[TMP17]]1961// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1962// CHECK11:       omp.inner.for.body:1963// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41964// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP18]], 11965// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1966// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 41967// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[I3]], align 41968// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 [[TMP19]]1969// CHECK11-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 41970// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1971// CHECK11:       omp.body.continue:1972// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1973// CHECK11:       omp.inner.for.inc:1974// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41975// CHECK11-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP20]], 11976// CHECK11-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 41977// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]1978// CHECK11:       omp.inner.for.end:1979// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1980// CHECK11:       omp.loop.exit:1981// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 41982// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 41983// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP22]])1984// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]1985// CHECK11:       omp.precond.end:1986// CHECK11-NEXT:    ret void1987//1988//1989// CHECK17-LABEL: define {{[^@]+}}@_Z21teams_template_structv1990// CHECK17-SAME: () #[[ATTR0:[0-9]+]] {1991// CHECK17-NEXT:  entry:1992// CHECK17-NEXT:    [[V:%.*]] = alloca [[STRUCT_SS:%.*]], align 41993// CHECK17-NEXT:    [[CALL:%.*]] = call noundef signext i32 @_ZN2SSIiLi123ELx456EE3fooEv(ptr noundef nonnull align 4 dereferenceable(496) [[V]])1994// CHECK17-NEXT:    ret i32 [[CALL]]1995//1996//1997// CHECK17-LABEL: define {{[^@]+}}@_ZN2SSIiLi123ELx456EE3fooEv1998// CHECK17-SAME: (ptr noundef nonnull align 4 dereferenceable(496) [[THIS:%.*]]) #[[ATTR0]] comdat {1999// CHECK17-NEXT:  entry:2000// CHECK17-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82001// CHECK17-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 82002// CHECK17-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 82003// CHECK17-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 82004// CHECK17-NEXT:    [[TMP:%.*]] = alloca i32, align 42005// CHECK17-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 82006// CHECK17-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82007// CHECK17-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82008// CHECK17-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_SS:%.*]], ptr [[THIS1]], i32 0, i32 02009// CHECK17-NEXT:    [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02010// CHECK17-NEXT:    store ptr [[THIS1]], ptr [[TMP0]], align 82011// CHECK17-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02012// CHECK17-NEXT:    store ptr [[A]], ptr [[TMP1]], align 82013// CHECK17-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 02014// CHECK17-NEXT:    store ptr null, ptr [[TMP2]], align 82015// CHECK17-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02016// CHECK17-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02017// CHECK17-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 02018// CHECK17-NEXT:    store i32 3, ptr [[TMP5]], align 42019// CHECK17-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12020// CHECK17-NEXT:    store i32 1, ptr [[TMP6]], align 42021// CHECK17-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 22022// CHECK17-NEXT:    store ptr [[TMP3]], ptr [[TMP7]], align 82023// CHECK17-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 32024// CHECK17-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 82025// CHECK17-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 42026// CHECK17-NEXT:    store ptr @.offload_sizes, ptr [[TMP9]], align 82027// CHECK17-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 52028// CHECK17-NEXT:    store ptr @.offload_maptypes, ptr [[TMP10]], align 82029// CHECK17-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 62030// CHECK17-NEXT:    store ptr null, ptr [[TMP11]], align 82031// CHECK17-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 72032// CHECK17-NEXT:    store ptr null, ptr [[TMP12]], align 82033// CHECK17-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 82034// CHECK17-NEXT:    store i64 123, ptr [[TMP13]], align 82035// CHECK17-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 92036// CHECK17-NEXT:    store i64 0, ptr [[TMP14]], align 82037// CHECK17-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 102038// CHECK17-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP15]], align 42039// CHECK17-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 112040// CHECK17-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP16]], align 42041// CHECK17-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 122042// CHECK17-NEXT:    store i32 0, ptr [[TMP17]], align 42043// CHECK17-NEXT:    [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.region_id, ptr [[KERNEL_ARGS]])2044// CHECK17-NEXT:    [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 02045// CHECK17-NEXT:    br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]2046// CHECK17:       omp_offload.failed:2047// CHECK17-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109(ptr [[THIS1]]) #[[ATTR2:[0-9]+]]2048// CHECK17-NEXT:    br label [[OMP_OFFLOAD_CONT]]2049// CHECK17:       omp_offload.cont:2050// CHECK17-NEXT:    [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_SS]], ptr [[THIS1]], i32 0, i32 02051// CHECK17-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [123 x i32], ptr [[A2]], i64 0, i64 02052// CHECK17-NEXT:    [[TMP20:%.*]] = load i32, ptr [[ARRAYIDX]], align 42053// CHECK17-NEXT:    ret i32 [[TMP20]]2054//2055//2056// CHECK17-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l1092057// CHECK17-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1:[0-9]+]] {2058// CHECK17-NEXT:  entry:2059// CHECK17-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82060// CHECK17-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82061// CHECK17-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82062// CHECK17-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.omp_outlined, ptr [[TMP0]])2063// CHECK17-NEXT:    ret void2064//2065//2066// CHECK17-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.omp_outlined2067// CHECK17-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef [[THIS:%.*]]) #[[ATTR1]] {2068// CHECK17-NEXT:  entry:2069// CHECK17-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82070// CHECK17-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82071// CHECK17-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82072// CHECK17-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42073// CHECK17-NEXT:    [[TMP:%.*]] = alloca i32, align 42074// CHECK17-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42075// CHECK17-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42076// CHECK17-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42077// CHECK17-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42078// CHECK17-NEXT:    [[I:%.*]] = alloca i32, align 42079// CHECK17-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82080// CHECK17-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82081// CHECK17-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82082// CHECK17-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82083// CHECK17-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42084// CHECK17-NEXT:    store i32 122, ptr [[DOTOMP_COMB_UB]], align 42085// CHECK17-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42086// CHECK17-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42087// CHECK17-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82088// CHECK17-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 42089// CHECK17-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2090// CHECK17-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42091// CHECK17-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 1222092// CHECK17-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2093// CHECK17:       cond.true:2094// CHECK17-NEXT:    br label [[COND_END:%.*]]2095// CHECK17:       cond.false:2096// CHECK17-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42097// CHECK17-NEXT:    br label [[COND_END]]2098// CHECK17:       cond.end:2099// CHECK17-NEXT:    [[COND:%.*]] = phi i32 [ 122, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]2100// CHECK17-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42101// CHECK17-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42102// CHECK17-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 42103// CHECK17-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2104// CHECK17:       omp.inner.for.cond:2105// CHECK17-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42106// CHECK17-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42107// CHECK17-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]2108// CHECK17-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2109// CHECK17:       omp.inner.for.body:2110// CHECK17-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42111// CHECK17-NEXT:    [[TMP9:%.*]] = zext i32 [[TMP8]] to i642112// CHECK17-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42113// CHECK17-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i642114// CHECK17-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 3, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.omp_outlined.omp_outlined, i64 [[TMP9]], i64 [[TMP11]], ptr [[TMP0]])2115// CHECK17-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2116// CHECK17:       omp.inner.for.inc:2117// CHECK17-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42118// CHECK17-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42119// CHECK17-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]2120// CHECK17-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42121// CHECK17-NEXT:    br label [[OMP_INNER_FOR_COND]]2122// CHECK17:       omp.inner.for.end:2123// CHECK17-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2124// CHECK17:       omp.loop.exit:2125// CHECK17-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])2126// CHECK17-NEXT:    ret void2127//2128//2129// CHECK17-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.omp_outlined.omp_outlined2130// CHECK17-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef [[THIS:%.*]]) #[[ATTR1]] {2131// CHECK17-NEXT:  entry:2132// CHECK17-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82133// CHECK17-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82134// CHECK17-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82135// CHECK17-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82136// CHECK17-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82137// CHECK17-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42138// CHECK17-NEXT:    [[TMP:%.*]] = alloca i32, align 42139// CHECK17-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42140// CHECK17-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42141// CHECK17-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42142// CHECK17-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42143// CHECK17-NEXT:    [[I:%.*]] = alloca i32, align 42144// CHECK17-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82145// CHECK17-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82146// CHECK17-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82147// CHECK17-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82148// CHECK17-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82149// CHECK17-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82150// CHECK17-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42151// CHECK17-NEXT:    store i32 122, ptr [[DOTOMP_UB]], align 42152// CHECK17-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82153// CHECK17-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP1]] to i322154// CHECK17-NEXT:    [[TMP2:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82155// CHECK17-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP2]] to i322156// CHECK17-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42157// CHECK17-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 42158// CHECK17-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42159// CHECK17-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42160// CHECK17-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82161// CHECK17-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 42162// CHECK17-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP4]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2163// CHECK17-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42164// CHECK17-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP5]], 1222165// CHECK17-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2166// CHECK17:       cond.true:2167// CHECK17-NEXT:    br label [[COND_END:%.*]]2168// CHECK17:       cond.false:2169// CHECK17-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42170// CHECK17-NEXT:    br label [[COND_END]]2171// CHECK17:       cond.end:2172// CHECK17-NEXT:    [[COND:%.*]] = phi i32 [ 122, [[COND_TRUE]] ], [ [[TMP6]], [[COND_FALSE]] ]2173// CHECK17-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42174// CHECK17-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42175// CHECK17-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_IV]], align 42176// CHECK17-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2177// CHECK17:       omp.inner.for.cond:2178// CHECK17-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42179// CHECK17-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42180// CHECK17-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP8]], [[TMP9]]2181// CHECK17-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2182// CHECK17:       omp.inner.for.body:2183// CHECK17-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42184// CHECK17-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP10]], 12185// CHECK17-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2186// CHECK17-NEXT:    store i32 [[ADD]], ptr [[I]], align 42187// CHECK17-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_SS:%.*]], ptr [[TMP0]], i32 0, i32 02188// CHECK17-NEXT:    [[TMP11:%.*]] = load i32, ptr [[I]], align 42189// CHECK17-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP11]] to i642190// CHECK17-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [123 x i32], ptr [[A]], i64 0, i64 [[IDXPROM]]2191// CHECK17-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 42192// CHECK17-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2193// CHECK17:       omp.body.continue:2194// CHECK17-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2195// CHECK17:       omp.inner.for.inc:2196// CHECK17-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42197// CHECK17-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP12]], 12198// CHECK17-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 42199// CHECK17-NEXT:    br label [[OMP_INNER_FOR_COND]]2200// CHECK17:       omp.inner.for.end:2201// CHECK17-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2202// CHECK17:       omp.loop.exit:2203// CHECK17-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP4]])2204// CHECK17-NEXT:    ret void2205//2206//2207// CHECK19-LABEL: define {{[^@]+}}@_Z21teams_template_structv2208// CHECK19-SAME: () #[[ATTR0:[0-9]+]] {2209// CHECK19-NEXT:  entry:2210// CHECK19-NEXT:    [[V:%.*]] = alloca [[STRUCT_SS:%.*]], align 42211// CHECK19-NEXT:    [[CALL:%.*]] = call noundef i32 @_ZN2SSIiLi123ELx456EE3fooEv(ptr noundef nonnull align 4 dereferenceable(496) [[V]])2212// CHECK19-NEXT:    ret i32 [[CALL]]2213//2214//2215// CHECK19-LABEL: define {{[^@]+}}@_ZN2SSIiLi123ELx456EE3fooEv2216// CHECK19-SAME: (ptr noundef nonnull align 4 dereferenceable(496) [[THIS:%.*]]) #[[ATTR0]] comdat align 2 {2217// CHECK19-NEXT:  entry:2218// CHECK19-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42219// CHECK19-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 42220// CHECK19-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 42221// CHECK19-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 42222// CHECK19-NEXT:    [[TMP:%.*]] = alloca i32, align 42223// CHECK19-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 82224// CHECK19-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42225// CHECK19-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42226// CHECK19-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_SS:%.*]], ptr [[THIS1]], i32 0, i32 02227// CHECK19-NEXT:    [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02228// CHECK19-NEXT:    store ptr [[THIS1]], ptr [[TMP0]], align 42229// CHECK19-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02230// CHECK19-NEXT:    store ptr [[A]], ptr [[TMP1]], align 42231// CHECK19-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 02232// CHECK19-NEXT:    store ptr null, ptr [[TMP2]], align 42233// CHECK19-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02234// CHECK19-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02235// CHECK19-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 02236// CHECK19-NEXT:    store i32 3, ptr [[TMP5]], align 42237// CHECK19-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12238// CHECK19-NEXT:    store i32 1, ptr [[TMP6]], align 42239// CHECK19-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 22240// CHECK19-NEXT:    store ptr [[TMP3]], ptr [[TMP7]], align 42241// CHECK19-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 32242// CHECK19-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 42243// CHECK19-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 42244// CHECK19-NEXT:    store ptr @.offload_sizes, ptr [[TMP9]], align 42245// CHECK19-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 52246// CHECK19-NEXT:    store ptr @.offload_maptypes, ptr [[TMP10]], align 42247// CHECK19-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 62248// CHECK19-NEXT:    store ptr null, ptr [[TMP11]], align 42249// CHECK19-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 72250// CHECK19-NEXT:    store ptr null, ptr [[TMP12]], align 42251// CHECK19-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 82252// CHECK19-NEXT:    store i64 123, ptr [[TMP13]], align 82253// CHECK19-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 92254// CHECK19-NEXT:    store i64 0, ptr [[TMP14]], align 82255// CHECK19-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 102256// CHECK19-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP15]], align 42257// CHECK19-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 112258// CHECK19-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP16]], align 42259// CHECK19-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 122260// CHECK19-NEXT:    store i32 0, ptr [[TMP17]], align 42261// CHECK19-NEXT:    [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.region_id, ptr [[KERNEL_ARGS]])2262// CHECK19-NEXT:    [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 02263// CHECK19-NEXT:    br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]2264// CHECK19:       omp_offload.failed:2265// CHECK19-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109(ptr [[THIS1]]) #[[ATTR2:[0-9]+]]2266// CHECK19-NEXT:    br label [[OMP_OFFLOAD_CONT]]2267// CHECK19:       omp_offload.cont:2268// CHECK19-NEXT:    [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_SS]], ptr [[THIS1]], i32 0, i32 02269// CHECK19-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [123 x i32], ptr [[A2]], i32 0, i32 02270// CHECK19-NEXT:    [[TMP20:%.*]] = load i32, ptr [[ARRAYIDX]], align 42271// CHECK19-NEXT:    ret i32 [[TMP20]]2272//2273//2274// CHECK19-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l1092275// CHECK19-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1:[0-9]+]] {2276// CHECK19-NEXT:  entry:2277// CHECK19-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42278// CHECK19-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42279// CHECK19-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42280// CHECK19-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.omp_outlined, ptr [[TMP0]])2281// CHECK19-NEXT:    ret void2282//2283//2284// CHECK19-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.omp_outlined2285// CHECK19-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef [[THIS:%.*]]) #[[ATTR1]] {2286// CHECK19-NEXT:  entry:2287// CHECK19-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42288// CHECK19-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42289// CHECK19-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42290// CHECK19-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42291// CHECK19-NEXT:    [[TMP:%.*]] = alloca i32, align 42292// CHECK19-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42293// CHECK19-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42294// CHECK19-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42295// CHECK19-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42296// CHECK19-NEXT:    [[I:%.*]] = alloca i32, align 42297// CHECK19-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42298// CHECK19-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42299// CHECK19-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42300// CHECK19-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42301// CHECK19-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42302// CHECK19-NEXT:    store i32 122, ptr [[DOTOMP_COMB_UB]], align 42303// CHECK19-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42304// CHECK19-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42305// CHECK19-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42306// CHECK19-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 42307// CHECK19-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2308// CHECK19-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42309// CHECK19-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 1222310// CHECK19-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2311// CHECK19:       cond.true:2312// CHECK19-NEXT:    br label [[COND_END:%.*]]2313// CHECK19:       cond.false:2314// CHECK19-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42315// CHECK19-NEXT:    br label [[COND_END]]2316// CHECK19:       cond.end:2317// CHECK19-NEXT:    [[COND:%.*]] = phi i32 [ 122, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]2318// CHECK19-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42319// CHECK19-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42320// CHECK19-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 42321// CHECK19-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2322// CHECK19:       omp.inner.for.cond:2323// CHECK19-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42324// CHECK19-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42325// CHECK19-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]2326// CHECK19-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2327// CHECK19:       omp.inner.for.body:2328// CHECK19-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42329// CHECK19-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42330// CHECK19-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 3, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.omp_outlined.omp_outlined, i32 [[TMP8]], i32 [[TMP9]], ptr [[TMP0]])2331// CHECK19-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2332// CHECK19:       omp.inner.for.inc:2333// CHECK19-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42334// CHECK19-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42335// CHECK19-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP10]], [[TMP11]]2336// CHECK19-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42337// CHECK19-NEXT:    br label [[OMP_INNER_FOR_COND]]2338// CHECK19:       omp.inner.for.end:2339// CHECK19-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2340// CHECK19:       omp.loop.exit:2341// CHECK19-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])2342// CHECK19-NEXT:    ret void2343//2344//2345// CHECK19-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2SSIiLi123ELx456EE3fooEv_l109.omp_outlined.omp_outlined2346// CHECK19-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef [[THIS:%.*]]) #[[ATTR1]] {2347// CHECK19-NEXT:  entry:2348// CHECK19-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42349// CHECK19-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42350// CHECK19-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 42351// CHECK19-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 42352// CHECK19-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 42353// CHECK19-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42354// CHECK19-NEXT:    [[TMP:%.*]] = alloca i32, align 42355// CHECK19-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42356// CHECK19-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42357// CHECK19-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42358// CHECK19-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42359// CHECK19-NEXT:    [[I:%.*]] = alloca i32, align 42360// CHECK19-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42361// CHECK19-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42362// CHECK19-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 42363// CHECK19-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 42364// CHECK19-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 42365// CHECK19-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 42366// CHECK19-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42367// CHECK19-NEXT:    store i32 122, ptr [[DOTOMP_UB]], align 42368// CHECK19-NEXT:    [[TMP1:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 42369// CHECK19-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 42370// CHECK19-NEXT:    store i32 [[TMP1]], ptr [[DOTOMP_LB]], align 42371// CHECK19-NEXT:    store i32 [[TMP2]], ptr [[DOTOMP_UB]], align 42372// CHECK19-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42373// CHECK19-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42374// CHECK19-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42375// CHECK19-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 42376// CHECK19-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP4]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2377// CHECK19-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42378// CHECK19-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP5]], 1222379// CHECK19-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2380// CHECK19:       cond.true:2381// CHECK19-NEXT:    br label [[COND_END:%.*]]2382// CHECK19:       cond.false:2383// CHECK19-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42384// CHECK19-NEXT:    br label [[COND_END]]2385// CHECK19:       cond.end:2386// CHECK19-NEXT:    [[COND:%.*]] = phi i32 [ 122, [[COND_TRUE]] ], [ [[TMP6]], [[COND_FALSE]] ]2387// CHECK19-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42388// CHECK19-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42389// CHECK19-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_IV]], align 42390// CHECK19-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2391// CHECK19:       omp.inner.for.cond:2392// CHECK19-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42393// CHECK19-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42394// CHECK19-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP8]], [[TMP9]]2395// CHECK19-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2396// CHECK19:       omp.inner.for.body:2397// CHECK19-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42398// CHECK19-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP10]], 12399// CHECK19-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2400// CHECK19-NEXT:    store i32 [[ADD]], ptr [[I]], align 42401// CHECK19-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_SS:%.*]], ptr [[TMP0]], i32 0, i32 02402// CHECK19-NEXT:    [[TMP11:%.*]] = load i32, ptr [[I]], align 42403// CHECK19-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [123 x i32], ptr [[A]], i32 0, i32 [[TMP11]]2404// CHECK19-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 42405// CHECK19-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2406// CHECK19:       omp.body.continue:2407// CHECK19-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2408// CHECK19:       omp.inner.for.inc:2409// CHECK19-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42410// CHECK19-NEXT:    [[ADD2:%.*]] = add nsw i32 [[TMP12]], 12411// CHECK19-NEXT:    store i32 [[ADD2]], ptr [[DOTOMP_IV]], align 42412// CHECK19-NEXT:    br label [[OMP_INNER_FOR_COND]]2413// CHECK19:       omp.inner.for.end:2414// CHECK19-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2415// CHECK19:       omp.loop.exit:2416// CHECK19-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP4]])2417// CHECK19-NEXT:    ret void2418//2419//2420// CHECK25-LABEL: define {{[^@]+}}@main2421// CHECK25-SAME: (i32 noundef signext [[ARGC:%.*]], ptr noundef [[ARGV:%.*]]) #[[ATTR0:[0-9]+]] {2422// CHECK25-NEXT:  entry:2423// CHECK25-NEXT:    [[RETVAL:%.*]] = alloca i32, align 42424// CHECK25-NEXT:    [[ARGC_ADDR:%.*]] = alloca i32, align 42425// CHECK25-NEXT:    [[ARGV_ADDR:%.*]] = alloca ptr, align 82426// CHECK25-NEXT:    [[N:%.*]] = alloca i32, align 42427// CHECK25-NEXT:    [[SAVED_STACK:%.*]] = alloca ptr, align 82428// CHECK25-NEXT:    [[__VLA_EXPR0:%.*]] = alloca i64, align 82429// CHECK25-NEXT:    [[N_CASTED:%.*]] = alloca i64, align 82430// CHECK25-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x ptr], align 82431// CHECK25-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x ptr], align 82432// CHECK25-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x ptr], align 82433// CHECK25-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 82434// CHECK25-NEXT:    [[TMP:%.*]] = alloca i32, align 42435// CHECK25-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42436// CHECK25-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42437// CHECK25-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 82438// CHECK25-NEXT:    store i32 0, ptr [[RETVAL]], align 42439// CHECK25-NEXT:    store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 42440// CHECK25-NEXT:    store ptr [[ARGV]], ptr [[ARGV_ADDR]], align 82441// CHECK25-NEXT:    store i32 100, ptr [[N]], align 42442// CHECK25-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 42443// CHECK25-NEXT:    [[TMP1:%.*]] = zext i32 [[TMP0]] to i642444// CHECK25-NEXT:    [[TMP2:%.*]] = call ptr @llvm.stacksave.p0()2445// CHECK25-NEXT:    store ptr [[TMP2]], ptr [[SAVED_STACK]], align 82446// CHECK25-NEXT:    [[VLA:%.*]] = alloca i32, i64 [[TMP1]], align 42447// CHECK25-NEXT:    store i64 [[TMP1]], ptr [[__VLA_EXPR0]], align 82448// CHECK25-NEXT:    [[TMP3:%.*]] = load i32, ptr [[N]], align 42449// CHECK25-NEXT:    store i32 [[TMP3]], ptr [[N_CASTED]], align 42450// CHECK25-NEXT:    [[TMP4:%.*]] = load i64, ptr [[N_CASTED]], align 82451// CHECK25-NEXT:    [[TMP5:%.*]] = mul nuw i64 [[TMP1]], 42452// CHECK25-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes, i64 24, i1 false)2453// CHECK25-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02454// CHECK25-NEXT:    store i64 [[TMP4]], ptr [[TMP6]], align 82455// CHECK25-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02456// CHECK25-NEXT:    store i64 [[TMP4]], ptr [[TMP7]], align 82457// CHECK25-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 02458// CHECK25-NEXT:    store ptr null, ptr [[TMP8]], align 82459// CHECK25-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 12460// CHECK25-NEXT:    store i64 [[TMP1]], ptr [[TMP9]], align 82461// CHECK25-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 12462// CHECK25-NEXT:    store i64 [[TMP1]], ptr [[TMP10]], align 82463// CHECK25-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 12464// CHECK25-NEXT:    store ptr null, ptr [[TMP11]], align 82465// CHECK25-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 22466// CHECK25-NEXT:    store ptr [[VLA]], ptr [[TMP12]], align 82467// CHECK25-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 22468// CHECK25-NEXT:    store ptr [[VLA]], ptr [[TMP13]], align 82469// CHECK25-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 22470// CHECK25-NEXT:    store i64 [[TMP5]], ptr [[TMP14]], align 82471// CHECK25-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 22472// CHECK25-NEXT:    store ptr null, ptr [[TMP15]], align 82473// CHECK25-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02474// CHECK25-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02475// CHECK25-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 02476// CHECK25-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 42477// CHECK25-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 42478// CHECK25-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42479// CHECK25-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 02480// CHECK25-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12481// CHECK25-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12482// CHECK25-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42483// CHECK25-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42484// CHECK25-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 12485// CHECK25-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i642486// CHECK25-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 02487// CHECK25-NEXT:    store i32 3, ptr [[TMP23]], align 42488// CHECK25-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12489// CHECK25-NEXT:    store i32 3, ptr [[TMP24]], align 42490// CHECK25-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 22491// CHECK25-NEXT:    store ptr [[TMP16]], ptr [[TMP25]], align 82492// CHECK25-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 32493// CHECK25-NEXT:    store ptr [[TMP17]], ptr [[TMP26]], align 82494// CHECK25-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 42495// CHECK25-NEXT:    store ptr [[TMP18]], ptr [[TMP27]], align 82496// CHECK25-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 52497// CHECK25-NEXT:    store ptr @.offload_maptypes, ptr [[TMP28]], align 82498// CHECK25-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 62499// CHECK25-NEXT:    store ptr null, ptr [[TMP29]], align 82500// CHECK25-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 72501// CHECK25-NEXT:    store ptr null, ptr [[TMP30]], align 82502// CHECK25-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 82503// CHECK25-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 82504// CHECK25-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 92505// CHECK25-NEXT:    store i64 0, ptr [[TMP32]], align 82506// CHECK25-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 102507// CHECK25-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 42508// CHECK25-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 112509// CHECK25-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 42510// CHECK25-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 122511// CHECK25-NEXT:    store i32 0, ptr [[TMP35]], align 42512// CHECK25-NEXT:    [[TMP36:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, ptr [[KERNEL_ARGS]])2513// CHECK25-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 02514// CHECK25-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]2515// CHECK25:       omp_offload.failed:2516// CHECK25-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i64 [[TMP4]], i64 [[TMP1]], ptr [[VLA]]) #[[ATTR3:[0-9]+]]2517// CHECK25-NEXT:    br label [[OMP_OFFLOAD_CONT]]2518// CHECK25:       omp_offload.cont:2519// CHECK25-NEXT:    [[TMP38:%.*]] = load i32, ptr [[ARGC_ADDR]], align 42520// CHECK25-NEXT:    [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiLi10EEiT_(i32 noundef signext [[TMP38]])2521// CHECK25-NEXT:    store i32 [[CALL]], ptr [[RETVAL]], align 42522// CHECK25-NEXT:    [[TMP39:%.*]] = load ptr, ptr [[SAVED_STACK]], align 82523// CHECK25-NEXT:    call void @llvm.stackrestore.p0(ptr [[TMP39]])2524// CHECK25-NEXT:    [[TMP40:%.*]] = load i32, ptr [[RETVAL]], align 42525// CHECK25-NEXT:    ret i32 [[TMP40]]2526//2527//2528// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l1622529// CHECK25-SAME: (i64 noundef [[N:%.*]], i64 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2:[0-9]+]] {2530// CHECK25-NEXT:  entry:2531// CHECK25-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 82532// CHECK25-NEXT:    [[VLA_ADDR:%.*]] = alloca i64, align 82533// CHECK25-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82534// CHECK25-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 82535// CHECK25-NEXT:    store i64 [[VLA]], ptr [[VLA_ADDR]], align 82536// CHECK25-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82537// CHECK25-NEXT:    [[TMP0:%.*]] = load i64, ptr [[VLA_ADDR]], align 82538// CHECK25-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 82539// CHECK25-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 3, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.omp_outlined, ptr [[N_ADDR]], i64 [[TMP0]], ptr [[TMP1]])2540// CHECK25-NEXT:    ret void2541//2542//2543// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.omp_outlined2544// CHECK25-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], i64 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2]] {2545// CHECK25-NEXT:  entry:2546// CHECK25-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82547// CHECK25-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82548// CHECK25-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82549// CHECK25-NEXT:    [[VLA_ADDR:%.*]] = alloca i64, align 82550// CHECK25-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82551// CHECK25-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42552// CHECK25-NEXT:    [[TMP:%.*]] = alloca i32, align 42553// CHECK25-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42554// CHECK25-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42555// CHECK25-NEXT:    [[I:%.*]] = alloca i32, align 42556// CHECK25-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42557// CHECK25-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42558// CHECK25-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42559// CHECK25-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42560// CHECK25-NEXT:    [[I3:%.*]] = alloca i32, align 42561// CHECK25-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82562// CHECK25-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82563// CHECK25-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82564// CHECK25-NEXT:    store i64 [[VLA]], ptr [[VLA_ADDR]], align 82565// CHECK25-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82566// CHECK25-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 82567// CHECK25-NEXT:    [[TMP1:%.*]] = load i64, ptr [[VLA_ADDR]], align 82568// CHECK25-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 82569// CHECK25-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 42570// CHECK25-NEXT:    store i32 [[TMP3]], ptr [[DOTCAPTURE_EXPR_]], align 42571// CHECK25-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42572// CHECK25-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP4]], 02573// CHECK25-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12574// CHECK25-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12575// CHECK25-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42576// CHECK25-NEXT:    store i32 0, ptr [[I]], align 42577// CHECK25-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42578// CHECK25-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP5]]2579// CHECK25-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2580// CHECK25:       omp.precond.then:2581// CHECK25-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42582// CHECK25-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42583// CHECK25-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_COMB_UB]], align 42584// CHECK25-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42585// CHECK25-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42586// CHECK25-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82587// CHECK25-NEXT:    [[TMP8:%.*]] = load i32, ptr [[TMP7]], align 42588// CHECK25-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP8]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2589// CHECK25-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42590// CHECK25-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42591// CHECK25-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP9]], [[TMP10]]2592// CHECK25-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2593// CHECK25:       cond.true:2594// CHECK25-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42595// CHECK25-NEXT:    br label [[COND_END:%.*]]2596// CHECK25:       cond.false:2597// CHECK25-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42598// CHECK25-NEXT:    br label [[COND_END]]2599// CHECK25:       cond.end:2600// CHECK25-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP11]], [[COND_TRUE]] ], [ [[TMP12]], [[COND_FALSE]] ]2601// CHECK25-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42602// CHECK25-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42603// CHECK25-NEXT:    store i32 [[TMP13]], ptr [[DOTOMP_IV]], align 42604// CHECK25-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2605// CHECK25:       omp.inner.for.cond:2606// CHECK25-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42607// CHECK25-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42608// CHECK25-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP14]], [[TMP15]]2609// CHECK25-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2610// CHECK25:       omp.inner.for.body:2611// CHECK25-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42612// CHECK25-NEXT:    [[TMP17:%.*]] = zext i32 [[TMP16]] to i642613// CHECK25-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42614// CHECK25-NEXT:    [[TMP19:%.*]] = zext i32 [[TMP18]] to i642615// CHECK25-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.omp_outlined.omp_outlined, i64 [[TMP17]], i64 [[TMP19]], ptr [[TMP0]], i64 [[TMP1]], ptr [[TMP2]])2616// CHECK25-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2617// CHECK25:       omp.inner.for.inc:2618// CHECK25-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42619// CHECK25-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42620// CHECK25-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP20]], [[TMP21]]2621// CHECK25-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42622// CHECK25-NEXT:    br label [[OMP_INNER_FOR_COND]]2623// CHECK25:       omp.inner.for.end:2624// CHECK25-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2625// CHECK25:       omp.loop.exit:2626// CHECK25-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82627// CHECK25-NEXT:    [[TMP23:%.*]] = load i32, ptr [[TMP22]], align 42628// CHECK25-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP23]])2629// CHECK25-NEXT:    br label [[OMP_PRECOND_END]]2630// CHECK25:       omp.precond.end:2631// CHECK25-NEXT:    ret void2632//2633//2634// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.omp_outlined.omp_outlined2635// CHECK25-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], i64 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2]] {2636// CHECK25-NEXT:  entry:2637// CHECK25-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82638// CHECK25-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82639// CHECK25-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82640// CHECK25-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82641// CHECK25-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82642// CHECK25-NEXT:    [[VLA_ADDR:%.*]] = alloca i64, align 82643// CHECK25-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82644// CHECK25-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42645// CHECK25-NEXT:    [[TMP:%.*]] = alloca i32, align 42646// CHECK25-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42647// CHECK25-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42648// CHECK25-NEXT:    [[I:%.*]] = alloca i32, align 42649// CHECK25-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42650// CHECK25-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42651// CHECK25-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42652// CHECK25-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42653// CHECK25-NEXT:    [[I4:%.*]] = alloca i32, align 42654// CHECK25-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82655// CHECK25-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82656// CHECK25-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82657// CHECK25-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82658// CHECK25-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82659// CHECK25-NEXT:    store i64 [[VLA]], ptr [[VLA_ADDR]], align 82660// CHECK25-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82661// CHECK25-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 82662// CHECK25-NEXT:    [[TMP1:%.*]] = load i64, ptr [[VLA_ADDR]], align 82663// CHECK25-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 82664// CHECK25-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 42665// CHECK25-NEXT:    store i32 [[TMP3]], ptr [[DOTCAPTURE_EXPR_]], align 42666// CHECK25-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42667// CHECK25-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP4]], 02668// CHECK25-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12669// CHECK25-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12670// CHECK25-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42671// CHECK25-NEXT:    store i32 0, ptr [[I]], align 42672// CHECK25-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42673// CHECK25-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP5]]2674// CHECK25-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2675// CHECK25:       omp.precond.then:2676// CHECK25-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42677// CHECK25-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42678// CHECK25-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_UB]], align 42679// CHECK25-NEXT:    [[TMP7:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82680// CHECK25-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP7]] to i322681// CHECK25-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82682// CHECK25-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP8]] to i322683// CHECK25-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42684// CHECK25-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 42685// CHECK25-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42686// CHECK25-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42687// CHECK25-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82688// CHECK25-NEXT:    [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 42689// CHECK25-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP10]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2690// CHECK25-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42691// CHECK25-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42692// CHECK25-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP11]], [[TMP12]]2693// CHECK25-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2694// CHECK25:       cond.true:2695// CHECK25-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42696// CHECK25-NEXT:    br label [[COND_END:%.*]]2697// CHECK25:       cond.false:2698// CHECK25-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42699// CHECK25-NEXT:    br label [[COND_END]]2700// CHECK25:       cond.end:2701// CHECK25-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP13]], [[COND_TRUE]] ], [ [[TMP14]], [[COND_FALSE]] ]2702// CHECK25-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42703// CHECK25-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42704// CHECK25-NEXT:    store i32 [[TMP15]], ptr [[DOTOMP_IV]], align 42705// CHECK25-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2706// CHECK25:       omp.inner.for.cond:2707// CHECK25-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42708// CHECK25-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42709// CHECK25-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP16]], [[TMP17]]2710// CHECK25-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2711// CHECK25:       omp.inner.for.body:2712// CHECK25-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42713// CHECK25-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP18]], 12714// CHECK25-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2715// CHECK25-NEXT:    store i32 [[ADD]], ptr [[I4]], align 42716// CHECK25-NEXT:    [[TMP19:%.*]] = load i32, ptr [[I4]], align 42717// CHECK25-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP19]] to i642718// CHECK25-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i64 [[IDXPROM]]2719// CHECK25-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 42720// CHECK25-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2721// CHECK25:       omp.body.continue:2722// CHECK25-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2723// CHECK25:       omp.inner.for.inc:2724// CHECK25-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42725// CHECK25-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP20]], 12726// CHECK25-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_IV]], align 42727// CHECK25-NEXT:    br label [[OMP_INNER_FOR_COND]]2728// CHECK25:       omp.inner.for.end:2729// CHECK25-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2730// CHECK25:       omp.loop.exit:2731// CHECK25-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82732// CHECK25-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 42733// CHECK25-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP22]])2734// CHECK25-NEXT:    br label [[OMP_PRECOND_END]]2735// CHECK25:       omp.precond.end:2736// CHECK25-NEXT:    ret void2737//2738//2739// CHECK25-LABEL: define {{[^@]+}}@_Z5tmainIiLi10EEiT_2740// CHECK25-SAME: (i32 noundef signext [[ARGC:%.*]]) #[[ATTR5:[0-9]+]] comdat {2741// CHECK25-NEXT:  entry:2742// CHECK25-NEXT:    [[ARGC_ADDR:%.*]] = alloca i32, align 42743// CHECK25-NEXT:    [[A:%.*]] = alloca [10 x i32], align 42744// CHECK25-NEXT:    [[TE:%.*]] = alloca i32, align 42745// CHECK25-NEXT:    [[TH:%.*]] = alloca i32, align 42746// CHECK25-NEXT:    [[TE_CASTED:%.*]] = alloca i64, align 82747// CHECK25-NEXT:    [[TH_CASTED:%.*]] = alloca i64, align 82748// CHECK25-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x ptr], align 82749// CHECK25-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x ptr], align 82750// CHECK25-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x ptr], align 82751// CHECK25-NEXT:    [[TMP:%.*]] = alloca i32, align 42752// CHECK25-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 82753// CHECK25-NEXT:    store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 42754// CHECK25-NEXT:    store i32 0, ptr [[TE]], align 42755// CHECK25-NEXT:    store i32 128, ptr [[TH]], align 42756// CHECK25-NEXT:    [[TMP0:%.*]] = load i32, ptr [[TE]], align 42757// CHECK25-NEXT:    store i32 [[TMP0]], ptr [[TE_CASTED]], align 42758// CHECK25-NEXT:    [[TMP1:%.*]] = load i64, ptr [[TE_CASTED]], align 82759// CHECK25-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TH]], align 42760// CHECK25-NEXT:    store i32 [[TMP2]], ptr [[TH_CASTED]], align 42761// CHECK25-NEXT:    [[TMP3:%.*]] = load i64, ptr [[TH_CASTED]], align 82762// CHECK25-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02763// CHECK25-NEXT:    store i64 [[TMP1]], ptr [[TMP4]], align 82764// CHECK25-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02765// CHECK25-NEXT:    store i64 [[TMP1]], ptr [[TMP5]], align 82766// CHECK25-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 02767// CHECK25-NEXT:    store ptr null, ptr [[TMP6]], align 82768// CHECK25-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 12769// CHECK25-NEXT:    store i64 [[TMP3]], ptr [[TMP7]], align 82770// CHECK25-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 12771// CHECK25-NEXT:    store i64 [[TMP3]], ptr [[TMP8]], align 82772// CHECK25-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 12773// CHECK25-NEXT:    store ptr null, ptr [[TMP9]], align 82774// CHECK25-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 22775// CHECK25-NEXT:    store ptr [[A]], ptr [[TMP10]], align 82776// CHECK25-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 22777// CHECK25-NEXT:    store ptr [[A]], ptr [[TMP11]], align 82778// CHECK25-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 22779// CHECK25-NEXT:    store ptr null, ptr [[TMP12]], align 82780// CHECK25-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02781// CHECK25-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02782// CHECK25-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TE]], align 42783// CHECK25-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TH]], align 42784// CHECK25-NEXT:    [[TMP17:%.*]] = insertvalue [3 x i32] zeroinitializer, i32 [[TMP15]], 02785// CHECK25-NEXT:    [[TMP18:%.*]] = insertvalue [3 x i32] zeroinitializer, i32 [[TMP16]], 02786// CHECK25-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 02787// CHECK25-NEXT:    store i32 3, ptr [[TMP19]], align 42788// CHECK25-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12789// CHECK25-NEXT:    store i32 3, ptr [[TMP20]], align 42790// CHECK25-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 22791// CHECK25-NEXT:    store ptr [[TMP13]], ptr [[TMP21]], align 82792// CHECK25-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 32793// CHECK25-NEXT:    store ptr [[TMP14]], ptr [[TMP22]], align 82794// CHECK25-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 42795// CHECK25-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP23]], align 82796// CHECK25-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 52797// CHECK25-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP24]], align 82798// CHECK25-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 62799// CHECK25-NEXT:    store ptr null, ptr [[TMP25]], align 82800// CHECK25-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 72801// CHECK25-NEXT:    store ptr null, ptr [[TMP26]], align 82802// CHECK25-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 82803// CHECK25-NEXT:    store i64 10, ptr [[TMP27]], align 82804// CHECK25-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 92805// CHECK25-NEXT:    store i64 0, ptr [[TMP28]], align 82806// CHECK25-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 102807// CHECK25-NEXT:    store [3 x i32] [[TMP17]], ptr [[TMP29]], align 42808// CHECK25-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 112809// CHECK25-NEXT:    store [3 x i32] [[TMP18]], ptr [[TMP30]], align 42810// CHECK25-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 122811// CHECK25-NEXT:    store i32 0, ptr [[TMP31]], align 42812// CHECK25-NEXT:    [[TMP32:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 [[TMP15]], i32 [[TMP16]], ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, ptr [[KERNEL_ARGS]])2813// CHECK25-NEXT:    [[TMP33:%.*]] = icmp ne i32 [[TMP32]], 02814// CHECK25-NEXT:    br i1 [[TMP33]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]2815// CHECK25:       omp_offload.failed:2816// CHECK25-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151(i64 [[TMP1]], i64 [[TMP3]], ptr [[A]]) #[[ATTR3]]2817// CHECK25-NEXT:    br label [[OMP_OFFLOAD_CONT]]2818// CHECK25:       omp_offload.cont:2819// CHECK25-NEXT:    ret i32 02820//2821//2822// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l1512823// CHECK25-SAME: (i64 noundef [[TE:%.*]], i64 noundef [[TH:%.*]], ptr noundef nonnull align 4 dereferenceable(40) [[A:%.*]]) #[[ATTR2]] {2824// CHECK25-NEXT:  entry:2825// CHECK25-NEXT:    [[TE_ADDR:%.*]] = alloca i64, align 82826// CHECK25-NEXT:    [[TH_ADDR:%.*]] = alloca i64, align 82827// CHECK25-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82828// CHECK25-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3]])2829// CHECK25-NEXT:    store i64 [[TE]], ptr [[TE_ADDR]], align 82830// CHECK25-NEXT:    store i64 [[TH]], ptr [[TH_ADDR]], align 82831// CHECK25-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82832// CHECK25-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 82833// CHECK25-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TE_ADDR]], align 42834// CHECK25-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TH_ADDR]], align 42835// CHECK25-NEXT:    call void @__kmpc_push_num_teams(ptr @[[GLOB3]], i32 [[TMP0]], i32 [[TMP2]], i32 [[TMP3]])2836// CHECK25-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.omp_outlined, ptr [[TMP1]])2837// CHECK25-NEXT:    ret void2838//2839//2840// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.omp_outlined2841// CHECK25-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(40) [[A:%.*]]) #[[ATTR2]] {2842// CHECK25-NEXT:  entry:2843// CHECK25-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82844// CHECK25-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82845// CHECK25-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82846// CHECK25-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42847// CHECK25-NEXT:    [[TMP:%.*]] = alloca i32, align 42848// CHECK25-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42849// CHECK25-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42850// CHECK25-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42851// CHECK25-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42852// CHECK25-NEXT:    [[I:%.*]] = alloca i32, align 42853// CHECK25-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82854// CHECK25-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82855// CHECK25-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82856// CHECK25-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 82857// CHECK25-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42858// CHECK25-NEXT:    store i32 9, ptr [[DOTOMP_COMB_UB]], align 42859// CHECK25-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42860// CHECK25-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42861// CHECK25-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82862// CHECK25-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 42863// CHECK25-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2864// CHECK25-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42865// CHECK25-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 92866// CHECK25-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2867// CHECK25:       cond.true:2868// CHECK25-NEXT:    br label [[COND_END:%.*]]2869// CHECK25:       cond.false:2870// CHECK25-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42871// CHECK25-NEXT:    br label [[COND_END]]2872// CHECK25:       cond.end:2873// CHECK25-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]2874// CHECK25-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42875// CHECK25-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42876// CHECK25-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 42877// CHECK25-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2878// CHECK25:       omp.inner.for.cond:2879// CHECK25-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42880// CHECK25-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42881// CHECK25-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]2882// CHECK25-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2883// CHECK25:       omp.inner.for.body:2884// CHECK25-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42885// CHECK25-NEXT:    [[TMP9:%.*]] = zext i32 [[TMP8]] to i642886// CHECK25-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42887// CHECK25-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i642888// CHECK25-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 3, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.omp_outlined.omp_outlined, i64 [[TMP9]], i64 [[TMP11]], ptr [[TMP0]])2889// CHECK25-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2890// CHECK25:       omp.inner.for.inc:2891// CHECK25-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42892// CHECK25-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42893// CHECK25-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]2894// CHECK25-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42895// CHECK25-NEXT:    br label [[OMP_INNER_FOR_COND]]2896// CHECK25:       omp.inner.for.end:2897// CHECK25-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2898// CHECK25:       omp.loop.exit:2899// CHECK25-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])2900// CHECK25-NEXT:    ret void2901//2902//2903// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.omp_outlined.omp_outlined2904// CHECK25-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(40) [[A:%.*]]) #[[ATTR2]] {2905// CHECK25-NEXT:  entry:2906// CHECK25-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82907// CHECK25-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82908// CHECK25-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82909// CHECK25-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82910// CHECK25-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82911// CHECK25-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42912// CHECK25-NEXT:    [[TMP:%.*]] = alloca i32, align 42913// CHECK25-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42914// CHECK25-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42915// CHECK25-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42916// CHECK25-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42917// CHECK25-NEXT:    [[I:%.*]] = alloca i32, align 42918// CHECK25-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82919// CHECK25-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82920// CHECK25-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82921// CHECK25-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82922// CHECK25-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82923// CHECK25-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 82924// CHECK25-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42925// CHECK25-NEXT:    store i32 9, ptr [[DOTOMP_UB]], align 42926// CHECK25-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82927// CHECK25-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP1]] to i322928// CHECK25-NEXT:    [[TMP2:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82929// CHECK25-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP2]] to i322930// CHECK25-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42931// CHECK25-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 42932// CHECK25-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42933// CHECK25-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42934// CHECK25-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82935// CHECK25-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 42936// CHECK25-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP4]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2937// CHECK25-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42938// CHECK25-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP5]], 92939// CHECK25-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2940// CHECK25:       cond.true:2941// CHECK25-NEXT:    br label [[COND_END:%.*]]2942// CHECK25:       cond.false:2943// CHECK25-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42944// CHECK25-NEXT:    br label [[COND_END]]2945// CHECK25:       cond.end:2946// CHECK25-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP6]], [[COND_FALSE]] ]2947// CHECK25-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42948// CHECK25-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42949// CHECK25-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_IV]], align 42950// CHECK25-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2951// CHECK25:       omp.inner.for.cond:2952// CHECK25-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42953// CHECK25-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42954// CHECK25-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP8]], [[TMP9]]2955// CHECK25-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2956// CHECK25:       omp.inner.for.body:2957// CHECK25-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42958// CHECK25-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP10]], 12959// CHECK25-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2960// CHECK25-NEXT:    store i32 [[ADD]], ptr [[I]], align 42961// CHECK25-NEXT:    [[TMP11:%.*]] = load i32, ptr [[I]], align 42962// CHECK25-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP11]] to i642963// CHECK25-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x i32], ptr [[TMP0]], i64 0, i64 [[IDXPROM]]2964// CHECK25-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 42965// CHECK25-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2966// CHECK25:       omp.body.continue:2967// CHECK25-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2968// CHECK25:       omp.inner.for.inc:2969// CHECK25-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42970// CHECK25-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP12]], 12971// CHECK25-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 42972// CHECK25-NEXT:    br label [[OMP_INNER_FOR_COND]]2973// CHECK25:       omp.inner.for.end:2974// CHECK25-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2975// CHECK25:       omp.loop.exit:2976// CHECK25-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP4]])2977// CHECK25-NEXT:    ret void2978//2979//2980// CHECK27-LABEL: define {{[^@]+}}@main2981// CHECK27-SAME: (i32 noundef [[ARGC:%.*]], ptr noundef [[ARGV:%.*]]) #[[ATTR0:[0-9]+]] {2982// CHECK27-NEXT:  entry:2983// CHECK27-NEXT:    [[RETVAL:%.*]] = alloca i32, align 42984// CHECK27-NEXT:    [[ARGC_ADDR:%.*]] = alloca i32, align 42985// CHECK27-NEXT:    [[ARGV_ADDR:%.*]] = alloca ptr, align 42986// CHECK27-NEXT:    [[N:%.*]] = alloca i32, align 42987// CHECK27-NEXT:    [[SAVED_STACK:%.*]] = alloca ptr, align 42988// CHECK27-NEXT:    [[__VLA_EXPR0:%.*]] = alloca i32, align 42989// CHECK27-NEXT:    [[N_CASTED:%.*]] = alloca i32, align 42990// CHECK27-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x ptr], align 42991// CHECK27-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x ptr], align 42992// CHECK27-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x ptr], align 42993// CHECK27-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 42994// CHECK27-NEXT:    [[TMP:%.*]] = alloca i32, align 42995// CHECK27-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42996// CHECK27-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42997// CHECK27-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 82998// CHECK27-NEXT:    store i32 0, ptr [[RETVAL]], align 42999// CHECK27-NEXT:    store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 43000// CHECK27-NEXT:    store ptr [[ARGV]], ptr [[ARGV_ADDR]], align 43001// CHECK27-NEXT:    store i32 100, ptr [[N]], align 43002// CHECK27-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 43003// CHECK27-NEXT:    [[TMP1:%.*]] = call ptr @llvm.stacksave.p0()3004// CHECK27-NEXT:    store ptr [[TMP1]], ptr [[SAVED_STACK]], align 43005// CHECK27-NEXT:    [[VLA:%.*]] = alloca i32, i32 [[TMP0]], align 43006// CHECK27-NEXT:    store i32 [[TMP0]], ptr [[__VLA_EXPR0]], align 43007// CHECK27-NEXT:    [[TMP2:%.*]] = load i32, ptr [[N]], align 43008// CHECK27-NEXT:    store i32 [[TMP2]], ptr [[N_CASTED]], align 43009// CHECK27-NEXT:    [[TMP3:%.*]] = load i32, ptr [[N_CASTED]], align 43010// CHECK27-NEXT:    [[TMP4:%.*]] = mul nuw i32 [[TMP0]], 43011// CHECK27-NEXT:    [[TMP5:%.*]] = sext i32 [[TMP4]] to i643012// CHECK27-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES]], ptr align 4 @.offload_sizes, i32 24, i1 false)3013// CHECK27-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 03014// CHECK27-NEXT:    store i32 [[TMP3]], ptr [[TMP6]], align 43015// CHECK27-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 03016// CHECK27-NEXT:    store i32 [[TMP3]], ptr [[TMP7]], align 43017// CHECK27-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 03018// CHECK27-NEXT:    store ptr null, ptr [[TMP8]], align 43019// CHECK27-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 13020// CHECK27-NEXT:    store i32 [[TMP0]], ptr [[TMP9]], align 43021// CHECK27-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 13022// CHECK27-NEXT:    store i32 [[TMP0]], ptr [[TMP10]], align 43023// CHECK27-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 13024// CHECK27-NEXT:    store ptr null, ptr [[TMP11]], align 43025// CHECK27-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 23026// CHECK27-NEXT:    store ptr [[VLA]], ptr [[TMP12]], align 43027// CHECK27-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 23028// CHECK27-NEXT:    store ptr [[VLA]], ptr [[TMP13]], align 43029// CHECK27-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 23030// CHECK27-NEXT:    store i64 [[TMP5]], ptr [[TMP14]], align 43031// CHECK27-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 23032// CHECK27-NEXT:    store ptr null, ptr [[TMP15]], align 43033// CHECK27-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 03034// CHECK27-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 03035// CHECK27-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 03036// CHECK27-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 43037// CHECK27-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 43038// CHECK27-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43039// CHECK27-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 03040// CHECK27-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13041// CHECK27-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13042// CHECK27-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43043// CHECK27-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43044// CHECK27-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 13045// CHECK27-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i643046// CHECK27-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 03047// CHECK27-NEXT:    store i32 3, ptr [[TMP23]], align 43048// CHECK27-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 13049// CHECK27-NEXT:    store i32 3, ptr [[TMP24]], align 43050// CHECK27-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 23051// CHECK27-NEXT:    store ptr [[TMP16]], ptr [[TMP25]], align 43052// CHECK27-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 33053// CHECK27-NEXT:    store ptr [[TMP17]], ptr [[TMP26]], align 43054// CHECK27-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 43055// CHECK27-NEXT:    store ptr [[TMP18]], ptr [[TMP27]], align 43056// CHECK27-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 53057// CHECK27-NEXT:    store ptr @.offload_maptypes, ptr [[TMP28]], align 43058// CHECK27-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 63059// CHECK27-NEXT:    store ptr null, ptr [[TMP29]], align 43060// CHECK27-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 73061// CHECK27-NEXT:    store ptr null, ptr [[TMP30]], align 43062// CHECK27-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 83063// CHECK27-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 83064// CHECK27-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 93065// CHECK27-NEXT:    store i64 0, ptr [[TMP32]], align 83066// CHECK27-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 103067// CHECK27-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 43068// CHECK27-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 113069// CHECK27-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 43070// CHECK27-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 123071// CHECK27-NEXT:    store i32 0, ptr [[TMP35]], align 43072// CHECK27-NEXT:    [[TMP36:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.region_id, ptr [[KERNEL_ARGS]])3073// CHECK27-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 03074// CHECK27-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]3075// CHECK27:       omp_offload.failed:3076// CHECK27-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162(i32 [[TMP3]], i32 [[TMP0]], ptr [[VLA]]) #[[ATTR3:[0-9]+]]3077// CHECK27-NEXT:    br label [[OMP_OFFLOAD_CONT]]3078// CHECK27:       omp_offload.cont:3079// CHECK27-NEXT:    [[TMP38:%.*]] = load i32, ptr [[ARGC_ADDR]], align 43080// CHECK27-NEXT:    [[CALL:%.*]] = call noundef i32 @_Z5tmainIiLi10EEiT_(i32 noundef [[TMP38]])3081// CHECK27-NEXT:    store i32 [[CALL]], ptr [[RETVAL]], align 43082// CHECK27-NEXT:    [[TMP39:%.*]] = load ptr, ptr [[SAVED_STACK]], align 43083// CHECK27-NEXT:    call void @llvm.stackrestore.p0(ptr [[TMP39]])3084// CHECK27-NEXT:    [[TMP40:%.*]] = load i32, ptr [[RETVAL]], align 43085// CHECK27-NEXT:    ret i32 [[TMP40]]3086//3087//3088// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l1623089// CHECK27-SAME: (i32 noundef [[N:%.*]], i32 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2:[0-9]+]] {3090// CHECK27-NEXT:  entry:3091// CHECK27-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 43092// CHECK27-NEXT:    [[VLA_ADDR:%.*]] = alloca i32, align 43093// CHECK27-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43094// CHECK27-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 43095// CHECK27-NEXT:    store i32 [[VLA]], ptr [[VLA_ADDR]], align 43096// CHECK27-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43097// CHECK27-NEXT:    [[TMP0:%.*]] = load i32, ptr [[VLA_ADDR]], align 43098// CHECK27-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43099// CHECK27-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 3, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.omp_outlined, ptr [[N_ADDR]], i32 [[TMP0]], ptr [[TMP1]])3100// CHECK27-NEXT:    ret void3101//3102//3103// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.omp_outlined3104// CHECK27-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], i32 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2]] {3105// CHECK27-NEXT:  entry:3106// CHECK27-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43107// CHECK27-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43108// CHECK27-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43109// CHECK27-NEXT:    [[VLA_ADDR:%.*]] = alloca i32, align 43110// CHECK27-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43111// CHECK27-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43112// CHECK27-NEXT:    [[TMP:%.*]] = alloca i32, align 43113// CHECK27-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43114// CHECK27-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43115// CHECK27-NEXT:    [[I:%.*]] = alloca i32, align 43116// CHECK27-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43117// CHECK27-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43118// CHECK27-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43119// CHECK27-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43120// CHECK27-NEXT:    [[I3:%.*]] = alloca i32, align 43121// CHECK27-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43122// CHECK27-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43123// CHECK27-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43124// CHECK27-NEXT:    store i32 [[VLA]], ptr [[VLA_ADDR]], align 43125// CHECK27-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43126// CHECK27-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43127// CHECK27-NEXT:    [[TMP1:%.*]] = load i32, ptr [[VLA_ADDR]], align 43128// CHECK27-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 43129// CHECK27-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 43130// CHECK27-NEXT:    store i32 [[TMP3]], ptr [[DOTCAPTURE_EXPR_]], align 43131// CHECK27-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43132// CHECK27-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP4]], 03133// CHECK27-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13134// CHECK27-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13135// CHECK27-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43136// CHECK27-NEXT:    store i32 0, ptr [[I]], align 43137// CHECK27-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43138// CHECK27-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP5]]3139// CHECK27-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3140// CHECK27:       omp.precond.then:3141// CHECK27-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43142// CHECK27-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43143// CHECK27-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_COMB_UB]], align 43144// CHECK27-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43145// CHECK27-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43146// CHECK27-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43147// CHECK27-NEXT:    [[TMP8:%.*]] = load i32, ptr [[TMP7]], align 43148// CHECK27-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP8]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3149// CHECK27-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43150// CHECK27-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43151// CHECK27-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP9]], [[TMP10]]3152// CHECK27-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3153// CHECK27:       cond.true:3154// CHECK27-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43155// CHECK27-NEXT:    br label [[COND_END:%.*]]3156// CHECK27:       cond.false:3157// CHECK27-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43158// CHECK27-NEXT:    br label [[COND_END]]3159// CHECK27:       cond.end:3160// CHECK27-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP11]], [[COND_TRUE]] ], [ [[TMP12]], [[COND_FALSE]] ]3161// CHECK27-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43162// CHECK27-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43163// CHECK27-NEXT:    store i32 [[TMP13]], ptr [[DOTOMP_IV]], align 43164// CHECK27-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3165// CHECK27:       omp.inner.for.cond:3166// CHECK27-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43167// CHECK27-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43168// CHECK27-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP14]], [[TMP15]]3169// CHECK27-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3170// CHECK27:       omp.inner.for.body:3171// CHECK27-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43172// CHECK27-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43173// CHECK27-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.omp_outlined.omp_outlined, i32 [[TMP16]], i32 [[TMP17]], ptr [[TMP0]], i32 [[TMP1]], ptr [[TMP2]])3174// CHECK27-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3175// CHECK27:       omp.inner.for.inc:3176// CHECK27-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43177// CHECK27-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43178// CHECK27-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], [[TMP19]]3179// CHECK27-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43180// CHECK27-NEXT:    br label [[OMP_INNER_FOR_COND]]3181// CHECK27:       omp.inner.for.end:3182// CHECK27-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3183// CHECK27:       omp.loop.exit:3184// CHECK27-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43185// CHECK27-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 43186// CHECK27-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP21]])3187// CHECK27-NEXT:    br label [[OMP_PRECOND_END]]3188// CHECK27:       omp.precond.end:3189// CHECK27-NEXT:    ret void3190//3191//3192// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l162.omp_outlined.omp_outlined3193// CHECK27-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], i32 noundef [[VLA:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR2]] {3194// CHECK27-NEXT:  entry:3195// CHECK27-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43196// CHECK27-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43197// CHECK27-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43198// CHECK27-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43199// CHECK27-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43200// CHECK27-NEXT:    [[VLA_ADDR:%.*]] = alloca i32, align 43201// CHECK27-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43202// CHECK27-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43203// CHECK27-NEXT:    [[TMP:%.*]] = alloca i32, align 43204// CHECK27-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43205// CHECK27-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43206// CHECK27-NEXT:    [[I:%.*]] = alloca i32, align 43207// CHECK27-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43208// CHECK27-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43209// CHECK27-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43210// CHECK27-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43211// CHECK27-NEXT:    [[I3:%.*]] = alloca i32, align 43212// CHECK27-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43213// CHECK27-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43214// CHECK27-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43215// CHECK27-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43216// CHECK27-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43217// CHECK27-NEXT:    store i32 [[VLA]], ptr [[VLA_ADDR]], align 43218// CHECK27-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43219// CHECK27-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43220// CHECK27-NEXT:    [[TMP1:%.*]] = load i32, ptr [[VLA_ADDR]], align 43221// CHECK27-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 43222// CHECK27-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP0]], align 43223// CHECK27-NEXT:    store i32 [[TMP3]], ptr [[DOTCAPTURE_EXPR_]], align 43224// CHECK27-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43225// CHECK27-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP4]], 03226// CHECK27-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13227// CHECK27-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13228// CHECK27-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43229// CHECK27-NEXT:    store i32 0, ptr [[I]], align 43230// CHECK27-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43231// CHECK27-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP5]]3232// CHECK27-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3233// CHECK27:       omp.precond.then:3234// CHECK27-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43235// CHECK27-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43236// CHECK27-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_UB]], align 43237// CHECK27-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43238// CHECK27-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43239// CHECK27-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_LB]], align 43240// CHECK27-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_UB]], align 43241// CHECK27-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43242// CHECK27-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43243// CHECK27-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43244// CHECK27-NEXT:    [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 43245// CHECK27-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP10]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3246// CHECK27-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43247// CHECK27-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43248// CHECK27-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP11]], [[TMP12]]3249// CHECK27-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3250// CHECK27:       cond.true:3251// CHECK27-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43252// CHECK27-NEXT:    br label [[COND_END:%.*]]3253// CHECK27:       cond.false:3254// CHECK27-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43255// CHECK27-NEXT:    br label [[COND_END]]3256// CHECK27:       cond.end:3257// CHECK27-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP13]], [[COND_TRUE]] ], [ [[TMP14]], [[COND_FALSE]] ]3258// CHECK27-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43259// CHECK27-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43260// CHECK27-NEXT:    store i32 [[TMP15]], ptr [[DOTOMP_IV]], align 43261// CHECK27-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3262// CHECK27:       omp.inner.for.cond:3263// CHECK27-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43264// CHECK27-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43265// CHECK27-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP16]], [[TMP17]]3266// CHECK27-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3267// CHECK27:       omp.inner.for.body:3268// CHECK27-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43269// CHECK27-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP18]], 13270// CHECK27-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3271// CHECK27-NEXT:    store i32 [[ADD]], ptr [[I3]], align 43272// CHECK27-NEXT:    [[TMP19:%.*]] = load i32, ptr [[I3]], align 43273// CHECK27-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 [[TMP19]]3274// CHECK27-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 43275// CHECK27-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3276// CHECK27:       omp.body.continue:3277// CHECK27-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3278// CHECK27:       omp.inner.for.inc:3279// CHECK27-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43280// CHECK27-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP20]], 13281// CHECK27-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 43282// CHECK27-NEXT:    br label [[OMP_INNER_FOR_COND]]3283// CHECK27:       omp.inner.for.end:3284// CHECK27-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3285// CHECK27:       omp.loop.exit:3286// CHECK27-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43287// CHECK27-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 43288// CHECK27-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP22]])3289// CHECK27-NEXT:    br label [[OMP_PRECOND_END]]3290// CHECK27:       omp.precond.end:3291// CHECK27-NEXT:    ret void3292//3293//3294// CHECK27-LABEL: define {{[^@]+}}@_Z5tmainIiLi10EEiT_3295// CHECK27-SAME: (i32 noundef [[ARGC:%.*]]) #[[ATTR5:[0-9]+]] comdat {3296// CHECK27-NEXT:  entry:3297// CHECK27-NEXT:    [[ARGC_ADDR:%.*]] = alloca i32, align 43298// CHECK27-NEXT:    [[A:%.*]] = alloca [10 x i32], align 43299// CHECK27-NEXT:    [[TE:%.*]] = alloca i32, align 43300// CHECK27-NEXT:    [[TH:%.*]] = alloca i32, align 43301// CHECK27-NEXT:    [[TE_CASTED:%.*]] = alloca i32, align 43302// CHECK27-NEXT:    [[TH_CASTED:%.*]] = alloca i32, align 43303// CHECK27-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x ptr], align 43304// CHECK27-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x ptr], align 43305// CHECK27-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x ptr], align 43306// CHECK27-NEXT:    [[TMP:%.*]] = alloca i32, align 43307// CHECK27-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 83308// CHECK27-NEXT:    store i32 [[ARGC]], ptr [[ARGC_ADDR]], align 43309// CHECK27-NEXT:    store i32 0, ptr [[TE]], align 43310// CHECK27-NEXT:    store i32 128, ptr [[TH]], align 43311// CHECK27-NEXT:    [[TMP0:%.*]] = load i32, ptr [[TE]], align 43312// CHECK27-NEXT:    store i32 [[TMP0]], ptr [[TE_CASTED]], align 43313// CHECK27-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TE_CASTED]], align 43314// CHECK27-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TH]], align 43315// CHECK27-NEXT:    store i32 [[TMP2]], ptr [[TH_CASTED]], align 43316// CHECK27-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TH_CASTED]], align 43317// CHECK27-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 03318// CHECK27-NEXT:    store i32 [[TMP1]], ptr [[TMP4]], align 43319// CHECK27-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 03320// CHECK27-NEXT:    store i32 [[TMP1]], ptr [[TMP5]], align 43321// CHECK27-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 03322// CHECK27-NEXT:    store ptr null, ptr [[TMP6]], align 43323// CHECK27-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 13324// CHECK27-NEXT:    store i32 [[TMP3]], ptr [[TMP7]], align 43325// CHECK27-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 13326// CHECK27-NEXT:    store i32 [[TMP3]], ptr [[TMP8]], align 43327// CHECK27-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 13328// CHECK27-NEXT:    store ptr null, ptr [[TMP9]], align 43329// CHECK27-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 23330// CHECK27-NEXT:    store ptr [[A]], ptr [[TMP10]], align 43331// CHECK27-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 23332// CHECK27-NEXT:    store ptr [[A]], ptr [[TMP11]], align 43333// CHECK27-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 23334// CHECK27-NEXT:    store ptr null, ptr [[TMP12]], align 43335// CHECK27-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 03336// CHECK27-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 03337// CHECK27-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TE]], align 43338// CHECK27-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TH]], align 43339// CHECK27-NEXT:    [[TMP17:%.*]] = insertvalue [3 x i32] zeroinitializer, i32 [[TMP15]], 03340// CHECK27-NEXT:    [[TMP18:%.*]] = insertvalue [3 x i32] zeroinitializer, i32 [[TMP16]], 03341// CHECK27-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 03342// CHECK27-NEXT:    store i32 3, ptr [[TMP19]], align 43343// CHECK27-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 13344// CHECK27-NEXT:    store i32 3, ptr [[TMP20]], align 43345// CHECK27-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 23346// CHECK27-NEXT:    store ptr [[TMP13]], ptr [[TMP21]], align 43347// CHECK27-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 33348// CHECK27-NEXT:    store ptr [[TMP14]], ptr [[TMP22]], align 43349// CHECK27-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 43350// CHECK27-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP23]], align 43351// CHECK27-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 53352// CHECK27-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP24]], align 43353// CHECK27-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 63354// CHECK27-NEXT:    store ptr null, ptr [[TMP25]], align 43355// CHECK27-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 73356// CHECK27-NEXT:    store ptr null, ptr [[TMP26]], align 43357// CHECK27-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 83358// CHECK27-NEXT:    store i64 10, ptr [[TMP27]], align 83359// CHECK27-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 93360// CHECK27-NEXT:    store i64 0, ptr [[TMP28]], align 83361// CHECK27-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 103362// CHECK27-NEXT:    store [3 x i32] [[TMP17]], ptr [[TMP29]], align 43363// CHECK27-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 113364// CHECK27-NEXT:    store [3 x i32] [[TMP18]], ptr [[TMP30]], align 43365// CHECK27-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 123366// CHECK27-NEXT:    store i32 0, ptr [[TMP31]], align 43367// CHECK27-NEXT:    [[TMP32:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 [[TMP15]], i32 [[TMP16]], ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.region_id, ptr [[KERNEL_ARGS]])3368// CHECK27-NEXT:    [[TMP33:%.*]] = icmp ne i32 [[TMP32]], 03369// CHECK27-NEXT:    br i1 [[TMP33]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]3370// CHECK27:       omp_offload.failed:3371// CHECK27-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151(i32 [[TMP1]], i32 [[TMP3]], ptr [[A]]) #[[ATTR3]]3372// CHECK27-NEXT:    br label [[OMP_OFFLOAD_CONT]]3373// CHECK27:       omp_offload.cont:3374// CHECK27-NEXT:    ret i32 03375//3376//3377// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l1513378// CHECK27-SAME: (i32 noundef [[TE:%.*]], i32 noundef [[TH:%.*]], ptr noundef nonnull align 4 dereferenceable(40) [[A:%.*]]) #[[ATTR2]] {3379// CHECK27-NEXT:  entry:3380// CHECK27-NEXT:    [[TE_ADDR:%.*]] = alloca i32, align 43381// CHECK27-NEXT:    [[TH_ADDR:%.*]] = alloca i32, align 43382// CHECK27-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43383// CHECK27-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB3]])3384// CHECK27-NEXT:    store i32 [[TE]], ptr [[TE_ADDR]], align 43385// CHECK27-NEXT:    store i32 [[TH]], ptr [[TH_ADDR]], align 43386// CHECK27-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43387// CHECK27-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43388// CHECK27-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TE_ADDR]], align 43389// CHECK27-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TH_ADDR]], align 43390// CHECK27-NEXT:    call void @__kmpc_push_num_teams(ptr @[[GLOB3]], i32 [[TMP0]], i32 [[TMP2]], i32 [[TMP3]])3391// CHECK27-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.omp_outlined, ptr [[TMP1]])3392// CHECK27-NEXT:    ret void3393//3394//3395// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.omp_outlined3396// CHECK27-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(40) [[A:%.*]]) #[[ATTR2]] {3397// CHECK27-NEXT:  entry:3398// CHECK27-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43399// CHECK27-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43400// CHECK27-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43401// CHECK27-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43402// CHECK27-NEXT:    [[TMP:%.*]] = alloca i32, align 43403// CHECK27-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43404// CHECK27-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43405// CHECK27-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43406// CHECK27-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43407// CHECK27-NEXT:    [[I:%.*]] = alloca i32, align 43408// CHECK27-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43409// CHECK27-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43410// CHECK27-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43411// CHECK27-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 43412// CHECK27-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43413// CHECK27-NEXT:    store i32 9, ptr [[DOTOMP_COMB_UB]], align 43414// CHECK27-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43415// CHECK27-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43416// CHECK27-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43417// CHECK27-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 43418// CHECK27-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3419// CHECK27-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43420// CHECK27-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 93421// CHECK27-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3422// CHECK27:       cond.true:3423// CHECK27-NEXT:    br label [[COND_END:%.*]]3424// CHECK27:       cond.false:3425// CHECK27-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43426// CHECK27-NEXT:    br label [[COND_END]]3427// CHECK27:       cond.end:3428// CHECK27-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]3429// CHECK27-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43430// CHECK27-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43431// CHECK27-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 43432// CHECK27-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3433// CHECK27:       omp.inner.for.cond:3434// CHECK27-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43435// CHECK27-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43436// CHECK27-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]3437// CHECK27-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3438// CHECK27:       omp.inner.for.body:3439// CHECK27-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43440// CHECK27-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43441// CHECK27-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 3, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.omp_outlined.omp_outlined, i32 [[TMP8]], i32 [[TMP9]], ptr [[TMP0]])3442// CHECK27-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3443// CHECK27:       omp.inner.for.inc:3444// CHECK27-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43445// CHECK27-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43446// CHECK27-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP10]], [[TMP11]]3447// CHECK27-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43448// CHECK27-NEXT:    br label [[OMP_INNER_FOR_COND]]3449// CHECK27:       omp.inner.for.end:3450// CHECK27-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3451// CHECK27:       omp.loop.exit:3452// CHECK27-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])3453// CHECK27-NEXT:    ret void3454//3455//3456// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiLi10EEiT__l151.omp_outlined.omp_outlined3457// CHECK27-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(40) [[A:%.*]]) #[[ATTR2]] {3458// CHECK27-NEXT:  entry:3459// CHECK27-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43460// CHECK27-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43461// CHECK27-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43462// CHECK27-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43463// CHECK27-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43464// CHECK27-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43465// CHECK27-NEXT:    [[TMP:%.*]] = alloca i32, align 43466// CHECK27-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43467// CHECK27-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43468// CHECK27-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43469// CHECK27-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43470// CHECK27-NEXT:    [[I:%.*]] = alloca i32, align 43471// CHECK27-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43472// CHECK27-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43473// CHECK27-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43474// CHECK27-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43475// CHECK27-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43476// CHECK27-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 43477// CHECK27-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43478// CHECK27-NEXT:    store i32 9, ptr [[DOTOMP_UB]], align 43479// CHECK27-NEXT:    [[TMP1:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43480// CHECK27-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43481// CHECK27-NEXT:    store i32 [[TMP1]], ptr [[DOTOMP_LB]], align 43482// CHECK27-NEXT:    store i32 [[TMP2]], ptr [[DOTOMP_UB]], align 43483// CHECK27-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43484// CHECK27-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43485// CHECK27-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43486// CHECK27-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 43487// CHECK27-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP4]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3488// CHECK27-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43489// CHECK27-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP5]], 93490// CHECK27-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3491// CHECK27:       cond.true:3492// CHECK27-NEXT:    br label [[COND_END:%.*]]3493// CHECK27:       cond.false:3494// CHECK27-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43495// CHECK27-NEXT:    br label [[COND_END]]3496// CHECK27:       cond.end:3497// CHECK27-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP6]], [[COND_FALSE]] ]3498// CHECK27-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43499// CHECK27-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43500// CHECK27-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_IV]], align 43501// CHECK27-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3502// CHECK27:       omp.inner.for.cond:3503// CHECK27-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43504// CHECK27-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43505// CHECK27-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP8]], [[TMP9]]3506// CHECK27-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3507// CHECK27:       omp.inner.for.body:3508// CHECK27-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43509// CHECK27-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP10]], 13510// CHECK27-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3511// CHECK27-NEXT:    store i32 [[ADD]], ptr [[I]], align 43512// CHECK27-NEXT:    [[TMP11:%.*]] = load i32, ptr [[I]], align 43513// CHECK27-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x i32], ptr [[TMP0]], i32 0, i32 [[TMP11]]3514// CHECK27-NEXT:    store i32 0, ptr [[ARRAYIDX]], align 43515// CHECK27-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3516// CHECK27:       omp.body.continue:3517// CHECK27-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3518// CHECK27:       omp.inner.for.inc:3519// CHECK27-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43520// CHECK27-NEXT:    [[ADD2:%.*]] = add nsw i32 [[TMP12]], 13521// CHECK27-NEXT:    store i32 [[ADD2]], ptr [[DOTOMP_IV]], align 43522// CHECK27-NEXT:    br label [[OMP_INNER_FOR_COND]]3523// CHECK27:       omp.inner.for.end:3524// CHECK27-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3525// CHECK27:       omp.loop.exit:3526// CHECK27-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP4]])3527// CHECK27-NEXT:    ret void3528//3529