brintos

brintos / llvm-project-archived public Read only

0
0
Text · 247.0 KiB · c44699e Raw
3211 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// Test host codegen.3// RUN: %clang_cc1  -verify -Wno-vla -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix CHECK4// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s5// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -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 CHECK6// RUN: %clang_cc1  -verify -Wno-vla -fopenmp -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix CHECK7// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s8// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -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 CHECK9 10// RUN: %clang_cc1  -verify -Wno-vla -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s11// RUN: %clang_cc1  -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s12// RUN: %clang_cc1  -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 --check-prefix SIMD-ONLY0 %s13// RUN: %clang_cc1  -verify -Wno-vla -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s14// RUN: %clang_cc1  -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s15// RUN: %clang_cc1  -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 --check-prefix SIMD-ONLY0 %s16 17// Test target codegen - host bc file has to be created first.18// RUN: %clang_cc1  -verify -Wno-vla -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc19// RUN: %clang_cc1  -verify -Wno-vla -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s --check-prefix TCHECK20// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t %s21// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix TCHECK22// RUN: %clang_cc1  -verify -Wno-vla -fopenmp -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm-bc %s -o %t-x86-host.bc23// RUN: %clang_cc1  -verify -Wno-vla -fopenmp -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s --check-prefix TCHECK24// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o %t %s25// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck %s --check-prefix TCHECK26 27// RUN: %clang_cc1  -verify -Wno-vla -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc28// RUN: %clang_cc1  -verify -Wno-vla -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck --check-prefix SIMD-ONLY1 %s29// RUN: %clang_cc1  -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t %s30// RUN: %clang_cc1  -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s31// RUN: %clang_cc1  -verify -Wno-vla -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm-bc %s -o %t-x86-host.bc32// RUN: %clang_cc1  -verify -Wno-vla -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck --check-prefix SIMD-ONLY1 %s33// RUN: %clang_cc1  -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -o %t %s34// RUN: %clang_cc1  -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s35 36// expected-no-diagnostics37#ifndef HEADER38#define HEADER39 40 41 42 43 44// Check target registration is registered as a Ctor.45 46 47template<typename tx, typename ty>48struct TT{49  tx X;50  ty Y;51};52 53int global;54extern int global;55 56int foo(int n) {57  int a = 0;58  short aa = 0;59  float b[10];60  float bn[n];61  double c[5][10];62  double cn[5][n];63  TT<long long, char> d;64  static long *plocal;65 66  #pragma omp target teams loop device(global + a) depend(in: global) depend(out: a, b, cn[4])67  for (int i = 0; i < 10; ++i) {68  }69 70 71 72 73 74 75 76  #pragma omp target teams loop device(global + a) depend(inout: global, a, bn) if(target:a)77  for (int i = 0; i < *plocal; ++i) {78    static int local1;79    *plocal = global;80    local1 = global;81  }82 83  #pragma omp target teams loop if(0) firstprivate(global) depend(out:global)84  for (int i = 0; i < global; ++i) {85    global += 1;86  }87 88  return a;89}90 91// Check that the offloading functions are emitted and that the arguments are92// correct and loaded correctly for the target regions in foo().93 94 95 96 97 98 99 100// Create stack storage and store argument in there.101 102 103 104#endif105// CHECK-64-LABEL: define {{[^@]+}}@_Z3fooi106// CHECK-64-SAME: (i32 noundef signext [[N:%.*]]) #[[ATTR0:[0-9]+]] {107// CHECK-64-NEXT:  entry:108// CHECK-64-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 4109// CHECK-64-NEXT:    [[A:%.*]] = alloca i32, align 4110// CHECK-64-NEXT:    [[AA:%.*]] = alloca i16, align 2111// CHECK-64-NEXT:    [[B:%.*]] = alloca [10 x float], align 4112// CHECK-64-NEXT:    [[SAVED_STACK:%.*]] = alloca i8*, align 8113// CHECK-64-NEXT:    [[__VLA_EXPR0:%.*]] = alloca i64, align 8114// CHECK-64-NEXT:    [[C:%.*]] = alloca [5 x [10 x double]], align 8115// CHECK-64-NEXT:    [[__VLA_EXPR1:%.*]] = alloca i64, align 8116// CHECK-64-NEXT:    [[D:%.*]] = alloca [[STRUCT_TT:%.*]], align 8117// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4118// CHECK-64-NEXT:    [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 4119// CHECK-64-NEXT:    [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 8120// CHECK-64-NEXT:    [[DEP_COUNTER_ADDR:%.*]] = alloca i64, align 8121// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 4122// CHECK-64-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i64, align 8123// CHECK-64-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x i8*], align 8124// CHECK-64-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x i8*], align 8125// CHECK-64-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x i8*], align 8126// CHECK-64-NEXT:    [[AGG_CAPTURED4:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 8127// CHECK-64-NEXT:    [[DOTDEP_ARR_ADDR5:%.*]] = alloca [3 x %struct.kmp_depend_info], align 8128// CHECK-64-NEXT:    [[DEP_COUNTER_ADDR6:%.*]] = alloca i64, align 8129// CHECK-64-NEXT:    [[AGG_CAPTURED7:%.*]] = alloca [[STRUCT_ANON_0]], align 8130// CHECK-64-NEXT:    [[DOTDEP_ARR_ADDR8:%.*]] = alloca [3 x %struct.kmp_depend_info], align 8131// CHECK-64-NEXT:    [[DEP_COUNTER_ADDR9:%.*]] = alloca i64, align 8132// CHECK-64-NEXT:    [[GLOBAL_CASTED10:%.*]] = alloca i64, align 8133// CHECK-64-NEXT:    [[AGG_CAPTURED12:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 4134// CHECK-64-NEXT:    [[DOTDEP_ARR_ADDR13:%.*]] = alloca [1 x %struct.kmp_depend_info], align 8135// CHECK-64-NEXT:    [[DEP_COUNTER_ADDR14:%.*]] = alloca i64, align 8136// CHECK-64-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB3:[0-9]+]])137// CHECK-64-NEXT:    store i32 [[N]], i32* [[N_ADDR]], align 4138// CHECK-64-NEXT:    store i32 0, i32* [[A]], align 4139// CHECK-64-NEXT:    store i16 0, i16* [[AA]], align 2140// CHECK-64-NEXT:    [[TMP1:%.*]] = load i32, i32* [[N_ADDR]], align 4141// CHECK-64-NEXT:    [[TMP2:%.*]] = zext i32 [[TMP1]] to i64142// CHECK-64-NEXT:    [[TMP3:%.*]] = call i8* @llvm.stacksave()143// CHECK-64-NEXT:    store i8* [[TMP3]], i8** [[SAVED_STACK]], align 8144// CHECK-64-NEXT:    [[VLA:%.*]] = alloca float, i64 [[TMP2]], align 4145// CHECK-64-NEXT:    store i64 [[TMP2]], i64* [[__VLA_EXPR0]], align 8146// CHECK-64-NEXT:    [[TMP4:%.*]] = load i32, i32* [[N_ADDR]], align 4147// CHECK-64-NEXT:    [[TMP5:%.*]] = zext i32 [[TMP4]] to i64148// CHECK-64-NEXT:    [[TMP6:%.*]] = mul nuw i64 5, [[TMP5]]149// CHECK-64-NEXT:    [[VLA1:%.*]] = alloca double, i64 [[TMP6]], align 8150// CHECK-64-NEXT:    store i64 [[TMP5]], i64* [[__VLA_EXPR1]], align 8151// CHECK-64-NEXT:    [[TMP7:%.*]] = load i32, i32* @global, align 4152// CHECK-64-NEXT:    [[TMP8:%.*]] = load i32, i32* [[A]], align 4153// CHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP7]], [[TMP8]]154// CHECK-64-NEXT:    store i32 [[ADD]], i32* [[DOTCAPTURE_EXPR_]], align 4155// CHECK-64-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[AGG_CAPTURED]], i32 0, i32 0156// CHECK-64-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4157// CHECK-64-NEXT:    store i32 [[TMP10]], i32* [[TMP9]], align 4158// CHECK-64-NEXT:    [[TMP11:%.*]] = call i8* @__kmpc_omp_task_alloc(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i64 40, i64 4, i32 (i32, i8*)* bitcast (i32 (i32, %struct.kmp_task_t_with_privates*)* @.omp_task_entry. to i32 (i32, i8*)*))159// CHECK-64-NEXT:    [[TMP12:%.*]] = bitcast i8* [[TMP11]] to %struct.kmp_task_t_with_privates*160// CHECK-64-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], %struct.kmp_task_t_with_privates* [[TMP12]], i32 0, i32 0161// CHECK-64-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP13]], i32 0, i32 0162// CHECK-64-NEXT:    [[TMP15:%.*]] = load i8*, i8** [[TMP14]], align 8163// CHECK-64-NEXT:    [[TMP16:%.*]] = bitcast %struct.anon* [[AGG_CAPTURED]] to i8*164// CHECK-64-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 [[TMP15]], i8* align 4 [[TMP16]], i64 4, i1 false)165// CHECK-64-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], [4 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR]], i64 0, i64 0166// CHECK-64-NEXT:    [[TMP18:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], %struct.kmp_depend_info* [[TMP17]], i64 0167// CHECK-64-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP18]], i32 0, i32 0168// CHECK-64-NEXT:    store i64 ptrtoint (i32* @global to i64), i64* [[TMP19]], align 8169// CHECK-64-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP18]], i32 0, i32 1170// CHECK-64-NEXT:    store i64 4, i64* [[TMP20]], align 8171// CHECK-64-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP18]], i32 0, i32 2172// CHECK-64-NEXT:    store i8 1, i8* [[TMP21]], align 8173// CHECK-64-NEXT:    [[TMP22:%.*]] = ptrtoint i32* [[A]] to i64174// CHECK-64-NEXT:    [[TMP23:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP17]], i64 1175// CHECK-64-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP23]], i32 0, i32 0176// CHECK-64-NEXT:    store i64 [[TMP22]], i64* [[TMP24]], align 8177// CHECK-64-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP23]], i32 0, i32 1178// CHECK-64-NEXT:    store i64 4, i64* [[TMP25]], align 8179// CHECK-64-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP23]], i32 0, i32 2180// CHECK-64-NEXT:    store i8 3, i8* [[TMP26]], align 8181// CHECK-64-NEXT:    [[TMP27:%.*]] = ptrtoint [10 x float]* [[B]] to i64182// CHECK-64-NEXT:    [[TMP28:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP17]], i64 2183// CHECK-64-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP28]], i32 0, i32 0184// CHECK-64-NEXT:    store i64 [[TMP27]], i64* [[TMP29]], align 8185// CHECK-64-NEXT:    [[TMP30:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP28]], i32 0, i32 1186// CHECK-64-NEXT:    store i64 40, i64* [[TMP30]], align 8187// CHECK-64-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP28]], i32 0, i32 2188// CHECK-64-NEXT:    store i8 3, i8* [[TMP31]], align 8189// CHECK-64-NEXT:    [[TMP32:%.*]] = mul nsw i64 4, [[TMP5]]190// CHECK-64-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, double* [[VLA1]], i64 [[TMP32]]191// CHECK-64-NEXT:    [[TMP33:%.*]] = mul nuw i64 [[TMP5]], 8192// CHECK-64-NEXT:    [[TMP34:%.*]] = ptrtoint double* [[ARRAYIDX]] to i64193// CHECK-64-NEXT:    [[TMP35:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP17]], i64 3194// CHECK-64-NEXT:    [[TMP36:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP35]], i32 0, i32 0195// CHECK-64-NEXT:    store i64 [[TMP34]], i64* [[TMP36]], align 8196// CHECK-64-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP35]], i32 0, i32 1197// CHECK-64-NEXT:    store i64 [[TMP33]], i64* [[TMP37]], align 8198// CHECK-64-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP35]], i32 0, i32 2199// CHECK-64-NEXT:    store i8 3, i8* [[TMP38]], align 8200// CHECK-64-NEXT:    store i64 4, i64* [[DEP_COUNTER_ADDR]], align 8201// CHECK-64-NEXT:    [[TMP39:%.*]] = bitcast %struct.kmp_depend_info* [[TMP17]] to i8*202// CHECK-64-NEXT:    call void @__kmpc_omp_taskwait_deps_51(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 4, i8* [[TMP39]], i32 0, i8* null, i32 0)203// CHECK-64-NEXT:    call void @__kmpc_omp_task_begin_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP11]])204// CHECK-64-NEXT:    [[TMP40:%.*]] = call i32 @.omp_task_entry.(i32 [[TMP0]], %struct.kmp_task_t_with_privates* [[TMP12]]) #[[ATTR3:[0-9]+]]205// CHECK-64-NEXT:    call void @__kmpc_omp_task_complete_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP11]])206// CHECK-64-NEXT:    [[TMP41:%.*]] = load i32, i32* @global, align 4207// CHECK-64-NEXT:    [[TMP42:%.*]] = load i32, i32* [[A]], align 4208// CHECK-64-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP41]], [[TMP42]]209// CHECK-64-NEXT:    store i32 [[ADD3]], i32* [[DOTCAPTURE_EXPR_2]], align 4210// CHECK-64-NEXT:    [[TMP43:%.*]] = load i64*, i64** @_ZZ3fooiE6plocal, align 8211// CHECK-64-NEXT:    [[TMP44:%.*]] = load i32, i32* @global, align 4212// CHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_CASTED]] to i32*213// CHECK-64-NEXT:    store i32 [[TMP44]], i32* [[CONV]], align 4214// CHECK-64-NEXT:    [[TMP45:%.*]] = load i64, i64* [[GLOBAL_CASTED]], align 8215// CHECK-64-NEXT:    [[TMP46:%.*]] = load i32, i32* [[A]], align 4216// CHECK-64-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP46]], 0217// CHECK-64-NEXT:    br i1 [[TOBOOL]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_ELSE:%.*]]218// CHECK-64:       omp_if.then:219// CHECK-64-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0220// CHECK-64-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i64**221// CHECK-64-NEXT:    store i64* [[TMP43]], i64** [[TMP48]], align 8222// CHECK-64-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0223// CHECK-64-NEXT:    [[TMP50:%.*]] = bitcast i8** [[TMP49]] to i64**224// CHECK-64-NEXT:    store i64* [[TMP43]], i64** [[TMP50]], align 8225// CHECK-64-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0226// CHECK-64-NEXT:    store i8* null, i8** [[TMP51]], align 8227// CHECK-64-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1228// CHECK-64-NEXT:    [[TMP53:%.*]] = bitcast i8** [[TMP52]] to i64*229// CHECK-64-NEXT:    store i64 [[TMP45]], i64* [[TMP53]], align 8230// CHECK-64-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1231// CHECK-64-NEXT:    [[TMP55:%.*]] = bitcast i8** [[TMP54]] to i64*232// CHECK-64-NEXT:    store i64 [[TMP45]], i64* [[TMP55]], align 8233// CHECK-64-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1234// CHECK-64-NEXT:    store i8* null, i8** [[TMP56]], align 8235// CHECK-64-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0236// CHECK-64-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0237// CHECK-64-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED4]], i32 0, i32 0238// CHECK-64-NEXT:    [[TMP60:%.*]] = load i64*, i64** @_ZZ3fooiE6plocal, align 8239// CHECK-64-NEXT:    store i64* [[TMP60]], i64** [[TMP59]], align 8240// CHECK-64-NEXT:    [[TMP61:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED4]], i32 0, i32 1241// CHECK-64-NEXT:    [[TMP62:%.*]] = load i32, i32* @global, align 4242// CHECK-64-NEXT:    store i32 [[TMP62]], i32* [[TMP61]], align 8243// CHECK-64-NEXT:    [[TMP63:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED4]], i32 0, i32 2244// CHECK-64-NEXT:    [[TMP64:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4245// CHECK-64-NEXT:    store i32 [[TMP64]], i32* [[TMP63]], align 4246// CHECK-64-NEXT:    [[TMP65:%.*]] = call i8* @__kmpc_omp_task_alloc(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i64 104, i64 16, i32 (i32, i8*)* bitcast (i32 (i32, %struct.kmp_task_t_with_privates.1*)* @.omp_task_entry..6 to i32 (i32, i8*)*))247// CHECK-64-NEXT:    [[TMP66:%.*]] = bitcast i8* [[TMP65]] to %struct.kmp_task_t_with_privates.1*248// CHECK-64-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], %struct.kmp_task_t_with_privates.1* [[TMP66]], i32 0, i32 0249// CHECK-64-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP67]], i32 0, i32 0250// CHECK-64-NEXT:    [[TMP69:%.*]] = load i8*, i8** [[TMP68]], align 8251// CHECK-64-NEXT:    [[TMP70:%.*]] = bitcast %struct.anon.0* [[AGG_CAPTURED4]] to i8*252// CHECK-64-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP69]], i8* align 8 [[TMP70]], i64 16, i1 false)253// CHECK-64-NEXT:    [[TMP71:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1]], %struct.kmp_task_t_with_privates.1* [[TMP66]], i32 0, i32 1254// CHECK-64-NEXT:    [[TMP72:%.*]] = bitcast i8* [[TMP69]] to %struct.anon.0*255// CHECK-64-NEXT:    [[TMP73:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T:%.*]], %struct..kmp_privates.t* [[TMP71]], i32 0, i32 0256// CHECK-64-NEXT:    [[TMP74:%.*]] = load i64*, i64** @_ZZ3fooiE6plocal, align 8257// CHECK-64-NEXT:    store i64* [[TMP74]], i64** [[TMP73]], align 8258// CHECK-64-NEXT:    [[TMP75:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP71]], i32 0, i32 1259// CHECK-64-NEXT:    [[TMP76:%.*]] = bitcast [2 x i8*]* [[TMP75]] to i8*260// CHECK-64-NEXT:    [[TMP77:%.*]] = bitcast i8** [[TMP57]] to i8*261// CHECK-64-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP76]], i8* align 8 [[TMP77]], i64 16, i1 false)262// CHECK-64-NEXT:    [[TMP78:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP71]], i32 0, i32 2263// CHECK-64-NEXT:    [[TMP79:%.*]] = bitcast [2 x i8*]* [[TMP78]] to i8*264// CHECK-64-NEXT:    [[TMP80:%.*]] = bitcast i8** [[TMP58]] to i8*265// CHECK-64-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP79]], i8* align 8 [[TMP80]], i64 16, i1 false)266// CHECK-64-NEXT:    [[TMP81:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP71]], i32 0, i32 3267// CHECK-64-NEXT:    [[TMP82:%.*]] = bitcast [2 x i64]* [[TMP81]] to i8*268// CHECK-64-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP82]], i8* align 8 bitcast ([2 x i64]* @.offload_sizes to i8*), i64 16, i1 false)269// CHECK-64-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP71]], i32 0, i32 4270// CHECK-64-NEXT:    [[TMP84:%.*]] = load i32, i32* @global, align 4271// CHECK-64-NEXT:    store i32 [[TMP84]], i32* [[TMP83]], align 8272// CHECK-64-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], [3 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR5]], i64 0, i64 0273// CHECK-64-NEXT:    [[TMP86:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP85]], i64 0274// CHECK-64-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP86]], i32 0, i32 0275// CHECK-64-NEXT:    store i64 ptrtoint (i32* @global to i64), i64* [[TMP87]], align 8276// CHECK-64-NEXT:    [[TMP88:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP86]], i32 0, i32 1277// CHECK-64-NEXT:    store i64 4, i64* [[TMP88]], align 8278// CHECK-64-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP86]], i32 0, i32 2279// CHECK-64-NEXT:    store i8 3, i8* [[TMP89]], align 8280// CHECK-64-NEXT:    [[TMP90:%.*]] = ptrtoint i32* [[A]] to i64281// CHECK-64-NEXT:    [[TMP91:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP85]], i64 1282// CHECK-64-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP91]], i32 0, i32 0283// CHECK-64-NEXT:    store i64 [[TMP90]], i64* [[TMP92]], align 8284// CHECK-64-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP91]], i32 0, i32 1285// CHECK-64-NEXT:    store i64 4, i64* [[TMP93]], align 8286// CHECK-64-NEXT:    [[TMP94:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP91]], i32 0, i32 2287// CHECK-64-NEXT:    store i8 3, i8* [[TMP94]], align 8288// CHECK-64-NEXT:    [[TMP95:%.*]] = mul nuw i64 [[TMP2]], 4289// CHECK-64-NEXT:    [[TMP96:%.*]] = ptrtoint float* [[VLA]] to i64290// CHECK-64-NEXT:    [[TMP97:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP85]], i64 2291// CHECK-64-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP97]], i32 0, i32 0292// CHECK-64-NEXT:    store i64 [[TMP96]], i64* [[TMP98]], align 8293// CHECK-64-NEXT:    [[TMP99:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP97]], i32 0, i32 1294// CHECK-64-NEXT:    store i64 [[TMP95]], i64* [[TMP99]], align 8295// CHECK-64-NEXT:    [[TMP100:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP97]], i32 0, i32 2296// CHECK-64-NEXT:    store i8 3, i8* [[TMP100]], align 8297// CHECK-64-NEXT:    store i64 3, i64* [[DEP_COUNTER_ADDR6]], align 8298// CHECK-64-NEXT:    [[TMP101:%.*]] = bitcast %struct.kmp_depend_info* [[TMP85]] to i8*299// CHECK-64-NEXT:    call void @__kmpc_omp_taskwait_deps_51(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 3, i8* [[TMP101]], i32 0, i8* null, i32 0)300// CHECK-64-NEXT:    call void @__kmpc_omp_task_begin_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP65]])301// CHECK-64-NEXT:    [[TMP102:%.*]] = call i32 @.omp_task_entry..6(i32 [[TMP0]], %struct.kmp_task_t_with_privates.1* [[TMP66]]) #[[ATTR3]]302// CHECK-64-NEXT:    call void @__kmpc_omp_task_complete_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP65]])303// CHECK-64-NEXT:    br label [[OMP_IF_END:%.*]]304// CHECK-64:       omp_if.else:305// CHECK-64-NEXT:    [[TMP103:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED7]], i32 0, i32 0306// CHECK-64-NEXT:    [[TMP104:%.*]] = load i64*, i64** @_ZZ3fooiE6plocal, align 8307// CHECK-64-NEXT:    store i64* [[TMP104]], i64** [[TMP103]], align 8308// CHECK-64-NEXT:    [[TMP105:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED7]], i32 0, i32 1309// CHECK-64-NEXT:    [[TMP106:%.*]] = load i32, i32* @global, align 4310// CHECK-64-NEXT:    store i32 [[TMP106]], i32* [[TMP105]], align 8311// CHECK-64-NEXT:    [[TMP107:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED7]], i32 0, i32 2312// CHECK-64-NEXT:    [[TMP108:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 4313// CHECK-64-NEXT:    store i32 [[TMP108]], i32* [[TMP107]], align 4314// CHECK-64-NEXT:    [[TMP109:%.*]] = call i8* @__kmpc_omp_task_alloc(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i64 56, i64 16, i32 (i32, i8*)* bitcast (i32 (i32, %struct.kmp_task_t_with_privates.2*)* @.omp_task_entry..9 to i32 (i32, i8*)*))315// CHECK-64-NEXT:    [[TMP110:%.*]] = bitcast i8* [[TMP109]] to %struct.kmp_task_t_with_privates.2*316// CHECK-64-NEXT:    [[TMP111:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_2:%.*]], %struct.kmp_task_t_with_privates.2* [[TMP110]], i32 0, i32 0317// CHECK-64-NEXT:    [[TMP112:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP111]], i32 0, i32 0318// CHECK-64-NEXT:    [[TMP113:%.*]] = load i8*, i8** [[TMP112]], align 8319// CHECK-64-NEXT:    [[TMP114:%.*]] = bitcast %struct.anon.0* [[AGG_CAPTURED7]] to i8*320// CHECK-64-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP113]], i8* align 8 [[TMP114]], i64 16, i1 false)321// CHECK-64-NEXT:    [[TMP115:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_2]], %struct.kmp_task_t_with_privates.2* [[TMP110]], i32 0, i32 1322// CHECK-64-NEXT:    [[TMP116:%.*]] = bitcast i8* [[TMP113]] to %struct.anon.0*323// CHECK-64-NEXT:    [[TMP117:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_3:%.*]], %struct..kmp_privates.t.3* [[TMP115]], i32 0, i32 0324// CHECK-64-NEXT:    [[TMP118:%.*]] = load i64*, i64** @_ZZ3fooiE6plocal, align 8325// CHECK-64-NEXT:    store i64* [[TMP118]], i64** [[TMP117]], align 8326// CHECK-64-NEXT:    [[TMP119:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_3]], %struct..kmp_privates.t.3* [[TMP115]], i32 0, i32 1327// CHECK-64-NEXT:    [[TMP120:%.*]] = load i32, i32* @global, align 4328// CHECK-64-NEXT:    store i32 [[TMP120]], i32* [[TMP119]], align 8329// CHECK-64-NEXT:    [[TMP121:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], [3 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR8]], i64 0, i64 0330// CHECK-64-NEXT:    [[TMP122:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP121]], i64 0331// CHECK-64-NEXT:    [[TMP123:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP122]], i32 0, i32 0332// CHECK-64-NEXT:    store i64 ptrtoint (i32* @global to i64), i64* [[TMP123]], align 8333// CHECK-64-NEXT:    [[TMP124:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP122]], i32 0, i32 1334// CHECK-64-NEXT:    store i64 4, i64* [[TMP124]], align 8335// CHECK-64-NEXT:    [[TMP125:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP122]], i32 0, i32 2336// CHECK-64-NEXT:    store i8 3, i8* [[TMP125]], align 8337// CHECK-64-NEXT:    [[TMP126:%.*]] = ptrtoint i32* [[A]] to i64338// CHECK-64-NEXT:    [[TMP127:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP121]], i64 1339// CHECK-64-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP127]], i32 0, i32 0340// CHECK-64-NEXT:    store i64 [[TMP126]], i64* [[TMP128]], align 8341// CHECK-64-NEXT:    [[TMP129:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP127]], i32 0, i32 1342// CHECK-64-NEXT:    store i64 4, i64* [[TMP129]], align 8343// CHECK-64-NEXT:    [[TMP130:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP127]], i32 0, i32 2344// CHECK-64-NEXT:    store i8 3, i8* [[TMP130]], align 8345// CHECK-64-NEXT:    [[TMP131:%.*]] = mul nuw i64 [[TMP2]], 4346// CHECK-64-NEXT:    [[TMP132:%.*]] = ptrtoint float* [[VLA]] to i64347// CHECK-64-NEXT:    [[TMP133:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP121]], i64 2348// CHECK-64-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP133]], i32 0, i32 0349// CHECK-64-NEXT:    store i64 [[TMP132]], i64* [[TMP134]], align 8350// CHECK-64-NEXT:    [[TMP135:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP133]], i32 0, i32 1351// CHECK-64-NEXT:    store i64 [[TMP131]], i64* [[TMP135]], align 8352// CHECK-64-NEXT:    [[TMP136:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP133]], i32 0, i32 2353// CHECK-64-NEXT:    store i8 3, i8* [[TMP136]], align 8354// CHECK-64-NEXT:    store i64 3, i64* [[DEP_COUNTER_ADDR9]], align 8355// CHECK-64-NEXT:    [[TMP137:%.*]] = bitcast %struct.kmp_depend_info* [[TMP121]] to i8*356// CHECK-64-NEXT:    call void @__kmpc_omp_taskwait_deps_51(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 3, i8* [[TMP137]], i32 0, i8* null, i32 0)357// CHECK-64-NEXT:    call void @__kmpc_omp_task_begin_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP109]])358// CHECK-64-NEXT:    [[TMP138:%.*]] = call i32 @.omp_task_entry..9(i32 [[TMP0]], %struct.kmp_task_t_with_privates.2* [[TMP110]]) #[[ATTR3]]359// CHECK-64-NEXT:    call void @__kmpc_omp_task_complete_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP109]])360// CHECK-64-NEXT:    br label [[OMP_IF_END]]361// CHECK-64:       omp_if.end:362// CHECK-64-NEXT:    [[TMP139:%.*]] = load i32, i32* @global, align 4363// CHECK-64-NEXT:    [[CONV11:%.*]] = bitcast i64* [[GLOBAL_CASTED10]] to i32*364// CHECK-64-NEXT:    store i32 [[TMP139]], i32* [[CONV11]], align 4365// CHECK-64-NEXT:    [[TMP140:%.*]] = load i64, i64* [[GLOBAL_CASTED10]], align 8366// CHECK-64-NEXT:    [[TMP141:%.*]] = getelementptr inbounds [[STRUCT_ANON_4]], %struct.anon.4* [[AGG_CAPTURED12]], i32 0, i32 0367// CHECK-64-NEXT:    [[TMP142:%.*]] = load i32, i32* @global, align 4368// CHECK-64-NEXT:    store i32 [[TMP142]], i32* [[TMP141]], align 4369// CHECK-64-NEXT:    [[TMP143:%.*]] = call i8* @__kmpc_omp_task_alloc(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i64 48, i64 4, i32 (i32, i8*)* bitcast (i32 (i32, %struct.kmp_task_t_with_privates.5*)* @.omp_task_entry..14 to i32 (i32, i8*)*))370// CHECK-64-NEXT:    [[TMP144:%.*]] = bitcast i8* [[TMP143]] to %struct.kmp_task_t_with_privates.5*371// CHECK-64-NEXT:    [[TMP145:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], %struct.kmp_task_t_with_privates.5* [[TMP144]], i32 0, i32 0372// CHECK-64-NEXT:    [[TMP146:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP145]], i32 0, i32 0373// CHECK-64-NEXT:    [[TMP147:%.*]] = load i8*, i8** [[TMP146]], align 8374// CHECK-64-NEXT:    [[TMP148:%.*]] = bitcast %struct.anon.4* [[AGG_CAPTURED12]] to i8*375// CHECK-64-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 [[TMP147]], i8* align 4 [[TMP148]], i64 4, i1 false)376// CHECK-64-NEXT:    [[TMP149:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5]], %struct.kmp_task_t_with_privates.5* [[TMP144]], i32 0, i32 1377// CHECK-64-NEXT:    [[TMP150:%.*]] = bitcast i8* [[TMP147]] to %struct.anon.4*378// CHECK-64-NEXT:    [[TMP151:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_6:%.*]], %struct..kmp_privates.t.6* [[TMP149]], i32 0, i32 0379// CHECK-64-NEXT:    [[TMP152:%.*]] = load i32, i32* @global, align 4380// CHECK-64-NEXT:    store i32 [[TMP152]], i32* [[TMP151]], align 8381// CHECK-64-NEXT:    [[TMP153:%.*]] = getelementptr inbounds [1 x %struct.kmp_depend_info], [1 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR13]], i64 0, i64 0382// CHECK-64-NEXT:    [[TMP154:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP153]], i64 0383// CHECK-64-NEXT:    [[TMP155:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP154]], i32 0, i32 0384// CHECK-64-NEXT:    store i64 ptrtoint (i32* @global to i64), i64* [[TMP155]], align 8385// CHECK-64-NEXT:    [[TMP156:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP154]], i32 0, i32 1386// CHECK-64-NEXT:    store i64 4, i64* [[TMP156]], align 8387// CHECK-64-NEXT:    [[TMP157:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP154]], i32 0, i32 2388// CHECK-64-NEXT:    store i8 3, i8* [[TMP157]], align 8389// CHECK-64-NEXT:    store i64 1, i64* [[DEP_COUNTER_ADDR14]], align 8390// CHECK-64-NEXT:    [[TMP158:%.*]] = bitcast %struct.kmp_depend_info* [[TMP153]] to i8*391// CHECK-64-NEXT:    call void @__kmpc_omp_taskwait_deps_51(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i8* [[TMP158]], i32 0, i8* null, i32 0)392// CHECK-64-NEXT:    call void @__kmpc_omp_task_begin_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP143]])393// CHECK-64-NEXT:    [[TMP159:%.*]] = call i32 @.omp_task_entry..14(i32 [[TMP0]], %struct.kmp_task_t_with_privates.5* [[TMP144]]) #[[ATTR3]]394// CHECK-64-NEXT:    call void @__kmpc_omp_task_complete_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP143]])395// CHECK-64-NEXT:    [[TMP160:%.*]] = load i32, i32* [[A]], align 4396// CHECK-64-NEXT:    [[TMP161:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8397// CHECK-64-NEXT:    call void @llvm.stackrestore(i8* [[TMP161]])398// CHECK-64-NEXT:    ret i32 [[TMP160]]399// CHECK-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l66400// CHECK-64-SAME: () #[[ATTR2:[0-9]+]] {401// CHECK-64-NEXT:  entry:402// CHECK-64-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*))403// CHECK-64-NEXT:    ret void404// CHECK-64-LABEL: define {{[^@]+}}@.omp_outlined.405// CHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {406// CHECK-64-NEXT:  entry:407// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8408// CHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8409// CHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4410// CHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 4411// CHECK-64-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4412// CHECK-64-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4413// CHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4414// CHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4415// CHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 4416// CHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8417// CHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8418// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 4419// CHECK-64-NEXT:    store i32 9, i32* [[DOTOMP_COMB_UB]], align 4420// CHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 4421// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 4422// CHECK-64-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8423// CHECK-64-NEXT:    [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4424// CHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)425// CHECK-64-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 4426// CHECK-64-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 9427// CHECK-64-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]428// CHECK-64:       cond.true:429// CHECK-64-NEXT:    br label [[COND_END:%.*]]430// CHECK-64:       cond.false:431// CHECK-64-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 4432// CHECK-64-NEXT:    br label [[COND_END]]433// CHECK-64:       cond.end:434// CHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]435// CHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 4436// CHECK-64-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 4437// CHECK-64-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_IV]], align 4438// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]439// CHECK-64:       omp.inner.for.cond:440// CHECK-64-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4441// CHECK-64-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 4442// CHECK-64-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]443// CHECK-64-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]444// CHECK-64:       omp.inner.for.body:445// CHECK-64-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 4446// CHECK-64-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i64447// CHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 4448// CHECK-64-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i64449// CHECK-64-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB3]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP8]], i64 [[TMP10]])450// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]451// CHECK-64:       omp.inner.for.inc:452// CHECK-64-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4453// CHECK-64-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 4454// CHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]455// CHECK-64-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4456// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]457// CHECK-64:       omp.inner.for.end:458// CHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]459// CHECK-64:       omp.loop.exit:460// CHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 [[TMP1]])461// CHECK-64-NEXT:    ret void462// CHECK-64-LABEL: define {{[^@]+}}@.omp_outlined..1463// CHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] {464// CHECK-64-NEXT:  entry:465// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8466// CHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8467// CHECK-64-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8468// CHECK-64-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8469// CHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4470// CHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 4471// CHECK-64-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4472// CHECK-64-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4473// CHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4474// CHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4475// CHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 4476// CHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8477// CHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8478// CHECK-64-NEXT:    store i64 [[DOTPREVIOUS_LB_]], i64* [[DOTPREVIOUS_LB__ADDR]], align 8479// CHECK-64-NEXT:    store i64 [[DOTPREVIOUS_UB_]], i64* [[DOTPREVIOUS_UB__ADDR]], align 8480// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 4481// CHECK-64-NEXT:    store i32 9, i32* [[DOTOMP_UB]], align 4482// CHECK-64-NEXT:    [[TMP0:%.*]] = load i64, i64* [[DOTPREVIOUS_LB__ADDR]], align 8483// CHECK-64-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i32484// CHECK-64-NEXT:    [[TMP1:%.*]] = load i64, i64* [[DOTPREVIOUS_UB__ADDR]], align 8485// CHECK-64-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i32486// CHECK-64-NEXT:    store i32 [[CONV]], i32* [[DOTOMP_LB]], align 4487// CHECK-64-NEXT:    store i32 [[CONV1]], i32* [[DOTOMP_UB]], align 4488// CHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 4489// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 4490// CHECK-64-NEXT:    [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8491// CHECK-64-NEXT:    [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4492// CHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP3]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)493// CHECK-64-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4494// CHECK-64-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 9495// CHECK-64-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]496// CHECK-64:       cond.true:497// CHECK-64-NEXT:    br label [[COND_END:%.*]]498// CHECK-64:       cond.false:499// CHECK-64-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4500// CHECK-64-NEXT:    br label [[COND_END]]501// CHECK-64:       cond.end:502// CHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]503// CHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 4504// CHECK-64-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4505// CHECK-64-NEXT:    store i32 [[TMP6]], i32* [[DOTOMP_IV]], align 4506// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]507// CHECK-64:       omp.inner.for.cond:508// CHECK-64-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4509// CHECK-64-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4510// CHECK-64-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]511// CHECK-64-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]512// CHECK-64:       omp.inner.for.body:513// CHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4514// CHECK-64-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 1515// CHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]516// CHECK-64-NEXT:    store i32 [[ADD]], i32* [[I]], align 4517// CHECK-64-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]518// CHECK-64:       omp.body.continue:519// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]520// CHECK-64:       omp.inner.for.inc:521// CHECK-64-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4522// CHECK-64-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 1523// CHECK-64-NEXT:    store i32 [[ADD3]], i32* [[DOTOMP_IV]], align 4524// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]525// CHECK-64:       omp.inner.for.end:526// CHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]527// CHECK-64:       omp.loop.exit:528// CHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP3]])529// CHECK-64-NEXT:    ret void530// CHECK-64-LABEL: define {{[^@]+}}@.omp_task_entry.531// CHECK-64-SAME: (i32 noundef signext [[TMP0:%.*]], %struct.kmp_task_t_with_privates* noalias noundef [[TMP1:%.*]]) #[[ATTR4:[0-9]+]] {532// CHECK-64-NEXT:  entry:533// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4534// CHECK-64-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca i32*, align 8535// CHECK-64-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca i8*, align 8536// CHECK-64-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca void (i8*, ...)*, align 8537// CHECK-64-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca i8*, align 8538// CHECK-64-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca %struct.anon*, align 8539// CHECK-64-NEXT:    [[KERNEL_ARGS_I:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8540// CHECK-64-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4541// CHECK-64-NEXT:    [[DOTADDR1:%.*]] = alloca %struct.kmp_task_t_with_privates*, align 8542// CHECK-64-NEXT:    store i32 [[TMP0]], i32* [[DOTADDR]], align 4543// CHECK-64-NEXT:    store %struct.kmp_task_t_with_privates* [[TMP1]], %struct.kmp_task_t_with_privates** [[DOTADDR1]], align 8544// CHECK-64-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTADDR]], align 4545// CHECK-64-NEXT:    [[TMP3:%.*]] = load %struct.kmp_task_t_with_privates*, %struct.kmp_task_t_with_privates** [[DOTADDR1]], align 8546// CHECK-64-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], %struct.kmp_task_t_with_privates* [[TMP3]], i32 0, i32 0547// CHECK-64-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 2548// CHECK-64-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 0549// CHECK-64-NEXT:    [[TMP7:%.*]] = load i8*, i8** [[TMP6]], align 8550// CHECK-64-NEXT:    [[TMP8:%.*]] = bitcast i8* [[TMP7]] to %struct.anon*551// CHECK-64-NEXT:    [[TMP9:%.*]] = bitcast %struct.kmp_task_t_with_privates* [[TMP3]] to i8*552// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META7:![0-9]+]])553// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])554// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META12:![0-9]+]])555// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META14:![0-9]+]])556// CHECK-64-NEXT:    store i32 [[TMP2]], i32* [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias !16557// CHECK-64-NEXT:    store i32* [[TMP5]], i32** [[DOTPART_ID__ADDR_I]], align 8, !noalias !16558// CHECK-64-NEXT:    store i8* null, i8** [[DOTPRIVATES__ADDR_I]], align 8, !noalias !16559// CHECK-64-NEXT:    store void (i8*, ...)* null, void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 8, !noalias !16560// CHECK-64-NEXT:    store i8* [[TMP9]], i8** [[DOTTASK_T__ADDR_I]], align 8, !noalias !16561// CHECK-64-NEXT:    store %struct.anon* [[TMP8]], %struct.anon** [[__CONTEXT_ADDR_I]], align 8, !noalias !16562// CHECK-64-NEXT:    [[TMP10:%.*]] = load %struct.anon*, %struct.anon** [[__CONTEXT_ADDR_I]], align 8, !noalias !16563// CHECK-64-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP10]], i32 0, i32 0564// CHECK-64-NEXT:    [[TMP12:%.*]] = load i32, i32* [[TMP11]], align 4565// CHECK-64-NEXT:    [[TMP13:%.*]] = sext i32 [[TMP12]] to i64566// CHECK-64-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 0567// CHECK-64-NEXT:    store i32 2, i32* [[TMP14]], align 4, !noalias !16568// CHECK-64-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 1569// CHECK-64-NEXT:    store i32 0, i32* [[TMP15]], align 4, !noalias !16570// CHECK-64-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 2571// CHECK-64-NEXT:    store i8** null, i8*** [[TMP16]], align 8, !noalias !16572// CHECK-64-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 3573// CHECK-64-NEXT:    store i8** null, i8*** [[TMP17]], align 8, !noalias !16574// CHECK-64-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 4575// CHECK-64-NEXT:    store i64* null, i64** [[TMP18]], align 8, !noalias !16576// CHECK-64-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 5577// CHECK-64-NEXT:    store i64* null, i64** [[TMP19]], align 8, !noalias !16578// CHECK-64-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 6579// CHECK-64-NEXT:    store i8** null, i8*** [[TMP20]], align 8, !noalias !16580// CHECK-64-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 7581// CHECK-64-NEXT:    store i8** null, i8*** [[TMP21]], align 8, !noalias !16582// CHECK-64-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 8583// CHECK-64-NEXT:    store i64 10, i64* [[TMP22]], align 8, !noalias !16584// CHECK-64-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 9585// CHECK-64-NEXT:    store i64 0, i64* [[TMP23]], align 8, !noalias !16586// CHECK-64-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 10587// CHECK-64-NEXT:    store [3 x i32] zeroinitializer, [3 x i32]* [[TMP24]], align 4, !noalias !16588// CHECK-64-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 11589// CHECK-64-NEXT:    store [3 x i32] zeroinitializer, [3 x i32]* [[TMP25]], align 4, !noalias !16590// CHECK-64-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 12591// CHECK-64-NEXT:    store i32 0, i32* [[TMP26]], align 4, !noalias !16592// CHECK-64-NEXT:    [[TMP27:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB3]], i64 [[TMP13]], i32 0, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l66.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]])593// CHECK-64-NEXT:    [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 0594// CHECK-64-NEXT:    br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__2_EXIT:%.*]]595// CHECK-64:       omp_offload.failed.i:596// CHECK-64-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l66() #[[ATTR3]]597// CHECK-64-NEXT:    br label [[DOTOMP_OUTLINED__2_EXIT]]598// CHECK-64:       .omp_outlined..2.exit:599// CHECK-64-NEXT:    ret i32 0600// CHECK-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l76601// CHECK-64-SAME: (i64* noundef [[PLOCAL:%.*]], i64 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {602// CHECK-64-NEXT:  entry:603// CHECK-64-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i64*, align 8604// CHECK-64-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i64, align 8605// CHECK-64-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i64, align 8606// CHECK-64-NEXT:    store i64* [[PLOCAL]], i64** [[PLOCAL_ADDR]], align 8607// CHECK-64-NEXT:    store i64 [[GLOBAL]], i64* [[GLOBAL_ADDR]], align 8608// CHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_ADDR]] to i32*609// CHECK-64-NEXT:    [[TMP0:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 8610// CHECK-64-NEXT:    [[TMP1:%.*]] = load i32, i32* [[CONV]], align 4611// CHECK-64-NEXT:    [[CONV1:%.*]] = bitcast i64* [[GLOBAL_CASTED]] to i32*612// CHECK-64-NEXT:    store i32 [[TMP1]], i32* [[CONV1]], align 4613// CHECK-64-NEXT:    [[TMP2:%.*]] = load i64, i64* [[GLOBAL_CASTED]], align 8614// CHECK-64-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64* [[TMP0]], i64 [[TMP2]])615// CHECK-64-NEXT:    ret void616// CHECK-64-LABEL: define {{[^@]+}}@.omp_outlined..3617// CHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i64* noundef [[PLOCAL:%.*]], i64 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {618// CHECK-64-NEXT:  entry:619// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8620// CHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8621// CHECK-64-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i64*, align 8622// CHECK-64-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i64, align 8623// CHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4624// CHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 4625// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i64, align 8626// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4627// CHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 4628// CHECK-64-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4629// CHECK-64-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4630// CHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4631// CHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4632// CHECK-64-NEXT:    [[I4:%.*]] = alloca i32, align 4633// CHECK-64-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i64, align 8634// CHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8635// CHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8636// CHECK-64-NEXT:    store i64* [[PLOCAL]], i64** [[PLOCAL_ADDR]], align 8637// CHECK-64-NEXT:    store i64 [[GLOBAL]], i64* [[GLOBAL_ADDR]], align 8638// CHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_ADDR]] to i32*639// CHECK-64-NEXT:    [[TMP0:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 8640// CHECK-64-NEXT:    [[TMP1:%.*]] = load i64, i64* [[TMP0]], align 8641// CHECK-64-NEXT:    store i64 [[TMP1]], i64* [[DOTCAPTURE_EXPR_]], align 8642// CHECK-64-NEXT:    [[TMP2:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_]], align 8643// CHECK-64-NEXT:    [[SUB:%.*]] = sub nsw i64 [[TMP2]], 0644// CHECK-64-NEXT:    [[DIV:%.*]] = sdiv i64 [[SUB]], 1645// CHECK-64-NEXT:    [[CONV2:%.*]] = trunc i64 [[DIV]] to i32646// CHECK-64-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[CONV2]], 1647// CHECK-64-NEXT:    store i32 [[SUB3]], i32* [[DOTCAPTURE_EXPR_1]], align 4648// CHECK-64-NEXT:    store i32 0, i32* [[I]], align 4649// CHECK-64-NEXT:    [[TMP3:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_]], align 8650// CHECK-64-NEXT:    [[CMP:%.*]] = icmp slt i64 0, [[TMP3]]651// CHECK-64-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]652// CHECK-64:       omp.precond.then:653// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 4654// CHECK-64-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4655// CHECK-64-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_COMB_UB]], align 4656// CHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 4657// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 4658// CHECK-64-NEXT:    [[TMP5:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8659// CHECK-64-NEXT:    [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4660// CHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1]], i32 [[TMP6]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)661// CHECK-64-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 4662// CHECK-64-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4663// CHECK-64-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP7]], [[TMP8]]664// CHECK-64-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]665// CHECK-64:       cond.true:666// CHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4667// CHECK-64-NEXT:    br label [[COND_END:%.*]]668// CHECK-64:       cond.false:669// CHECK-64-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 4670// CHECK-64-NEXT:    br label [[COND_END]]671// CHECK-64:       cond.end:672// CHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP9]], [[COND_TRUE]] ], [ [[TMP10]], [[COND_FALSE]] ]673// CHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 4674// CHECK-64-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 4675// CHECK-64-NEXT:    store i32 [[TMP11]], i32* [[DOTOMP_IV]], align 4676// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]677// CHECK-64:       omp.inner.for.cond:678// CHECK-64-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4679// CHECK-64-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 4680// CHECK-64-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP12]], [[TMP13]]681// CHECK-64-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]682// CHECK-64:       omp.inner.for.body:683// CHECK-64-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 4684// CHECK-64-NEXT:    [[TMP15:%.*]] = zext i32 [[TMP14]] to i64685// CHECK-64-NEXT:    [[TMP16:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 4686// CHECK-64-NEXT:    [[TMP17:%.*]] = zext i32 [[TMP16]] to i64687// CHECK-64-NEXT:    [[TMP18:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 8688// CHECK-64-NEXT:    [[TMP19:%.*]] = load i32, i32* [[CONV]], align 4689// CHECK-64-NEXT:    [[CONV7:%.*]] = bitcast i64* [[GLOBAL_CASTED]] to i32*690// CHECK-64-NEXT:    store i32 [[TMP19]], i32* [[CONV7]], align 4691// CHECK-64-NEXT:    [[TMP20:%.*]] = load i64, i64* [[GLOBAL_CASTED]], align 8692// CHECK-64-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB3]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64*, i64)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP15]], i64 [[TMP17]], i64* [[TMP18]], i64 [[TMP20]])693// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]694// CHECK-64:       omp.inner.for.inc:695// CHECK-64-NEXT:    [[TMP21:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4696// CHECK-64-NEXT:    [[TMP22:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 4697// CHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]698// CHECK-64-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 4699// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]700// CHECK-64:       omp.inner.for.end:701// CHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]702// CHECK-64:       omp.loop.exit:703// CHECK-64-NEXT:    [[TMP23:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8704// CHECK-64-NEXT:    [[TMP24:%.*]] = load i32, i32* [[TMP23]], align 4705// CHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP24]])706// CHECK-64-NEXT:    br label [[OMP_PRECOND_END]]707// CHECK-64:       omp.precond.end:708// CHECK-64-NEXT:    ret void709// CHECK-64-LABEL: define {{[^@]+}}@.omp_outlined..4710// CHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], i64* noundef [[PLOCAL:%.*]], i64 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {711// CHECK-64-NEXT:  entry:712// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8713// CHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8714// CHECK-64-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8715// CHECK-64-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8716// CHECK-64-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i64*, align 8717// CHECK-64-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i64, align 8718// CHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4719// CHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 4720// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i64, align 8721// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4722// CHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 4723// CHECK-64-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4724// CHECK-64-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4725// CHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4726// CHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4727// CHECK-64-NEXT:    [[I6:%.*]] = alloca i32, align 4728// CHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8729// CHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8730// CHECK-64-NEXT:    store i64 [[DOTPREVIOUS_LB_]], i64* [[DOTPREVIOUS_LB__ADDR]], align 8731// CHECK-64-NEXT:    store i64 [[DOTPREVIOUS_UB_]], i64* [[DOTPREVIOUS_UB__ADDR]], align 8732// CHECK-64-NEXT:    store i64* [[PLOCAL]], i64** [[PLOCAL_ADDR]], align 8733// CHECK-64-NEXT:    store i64 [[GLOBAL]], i64* [[GLOBAL_ADDR]], align 8734// CHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_ADDR]] to i32*735// CHECK-64-NEXT:    [[TMP0:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 8736// CHECK-64-NEXT:    [[TMP1:%.*]] = load i64, i64* [[TMP0]], align 8737// CHECK-64-NEXT:    store i64 [[TMP1]], i64* [[DOTCAPTURE_EXPR_]], align 8738// CHECK-64-NEXT:    [[TMP2:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_]], align 8739// CHECK-64-NEXT:    [[SUB:%.*]] = sub nsw i64 [[TMP2]], 0740// CHECK-64-NEXT:    [[DIV:%.*]] = sdiv i64 [[SUB]], 1741// CHECK-64-NEXT:    [[CONV2:%.*]] = trunc i64 [[DIV]] to i32742// CHECK-64-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[CONV2]], 1743// CHECK-64-NEXT:    store i32 [[SUB3]], i32* [[DOTCAPTURE_EXPR_1]], align 4744// CHECK-64-NEXT:    store i32 0, i32* [[I]], align 4745// CHECK-64-NEXT:    [[TMP3:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_]], align 8746// CHECK-64-NEXT:    [[CMP:%.*]] = icmp slt i64 0, [[TMP3]]747// CHECK-64-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]748// CHECK-64:       omp.precond.then:749// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 4750// CHECK-64-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4751// CHECK-64-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_UB]], align 4752// CHECK-64-NEXT:    [[TMP5:%.*]] = load i64, i64* [[DOTPREVIOUS_LB__ADDR]], align 8753// CHECK-64-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP5]] to i32754// CHECK-64-NEXT:    [[TMP6:%.*]] = load i64, i64* [[DOTPREVIOUS_UB__ADDR]], align 8755// CHECK-64-NEXT:    [[CONV5:%.*]] = trunc i64 [[TMP6]] to i32756// CHECK-64-NEXT:    store i32 [[CONV4]], i32* [[DOTOMP_LB]], align 4757// CHECK-64-NEXT:    store i32 [[CONV5]], i32* [[DOTOMP_UB]], align 4758// CHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 4759// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 4760// CHECK-64-NEXT:    [[TMP7:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8761// CHECK-64-NEXT:    [[TMP8:%.*]] = load i32, i32* [[TMP7]], align 4762// CHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP8]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)763// CHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4764// CHECK-64-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4765// CHECK-64-NEXT:    [[CMP7:%.*]] = icmp sgt i32 [[TMP9]], [[TMP10]]766// CHECK-64-NEXT:    br i1 [[CMP7]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]767// CHECK-64:       cond.true:768// CHECK-64-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4769// CHECK-64-NEXT:    br label [[COND_END:%.*]]770// CHECK-64:       cond.false:771// CHECK-64-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4772// CHECK-64-NEXT:    br label [[COND_END]]773// CHECK-64:       cond.end:774// CHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP11]], [[COND_TRUE]] ], [ [[TMP12]], [[COND_FALSE]] ]775// CHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 4776// CHECK-64-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4777// CHECK-64-NEXT:    store i32 [[TMP13]], i32* [[DOTOMP_IV]], align 4778// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]779// CHECK-64:       omp.inner.for.cond:780// CHECK-64-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4781// CHECK-64-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4782// CHECK-64-NEXT:    [[CMP8:%.*]] = icmp sle i32 [[TMP14]], [[TMP15]]783// CHECK-64-NEXT:    br i1 [[CMP8]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]784// CHECK-64:       omp.inner.for.body:785// CHECK-64-NEXT:    [[TMP16:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4786// CHECK-64-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP16]], 1787// CHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]788// CHECK-64-NEXT:    store i32 [[ADD]], i32* [[I6]], align 4789// CHECK-64-NEXT:    [[TMP17:%.*]] = load i32, i32* [[CONV]], align 4790// CHECK-64-NEXT:    [[CONV9:%.*]] = sext i32 [[TMP17]] to i64791// CHECK-64-NEXT:    [[TMP18:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 8792// CHECK-64-NEXT:    store i64 [[CONV9]], i64* [[TMP18]], align 8793// CHECK-64-NEXT:    [[TMP19:%.*]] = load i32, i32* [[CONV]], align 4794// CHECK-64-NEXT:    store i32 [[TMP19]], i32* @_ZZ3fooiE6local1, align 4795// CHECK-64-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]796// CHECK-64:       omp.body.continue:797// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]798// CHECK-64:       omp.inner.for.inc:799// CHECK-64-NEXT:    [[TMP20:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4800// CHECK-64-NEXT:    [[ADD10:%.*]] = add nsw i32 [[TMP20]], 1801// CHECK-64-NEXT:    store i32 [[ADD10]], i32* [[DOTOMP_IV]], align 4802// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]803// CHECK-64:       omp.inner.for.end:804// CHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]805// CHECK-64:       omp.loop.exit:806// CHECK-64-NEXT:    [[TMP21:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8807// CHECK-64-NEXT:    [[TMP22:%.*]] = load i32, i32* [[TMP21]], align 4808// CHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP22]])809// CHECK-64-NEXT:    br label [[OMP_PRECOND_END]]810// CHECK-64:       omp.precond.end:811// CHECK-64-NEXT:    ret void812// CHECK-64-LABEL: define {{[^@]+}}@.omp_task_privates_map.813// CHECK-64-SAME: (%struct..kmp_privates.t* noalias noundef [[TMP0:%.*]], i64*** noalias noundef [[TMP1:%.*]], i32** noalias noundef [[TMP2:%.*]], [2 x i8*]** noalias noundef [[TMP3:%.*]], [2 x i8*]** noalias noundef [[TMP4:%.*]], [2 x i64]** noalias noundef [[TMP5:%.*]]) #[[ATTR7:[0-9]+]] {814// CHECK-64-NEXT:  entry:815// CHECK-64-NEXT:    [[DOTADDR:%.*]] = alloca %struct..kmp_privates.t*, align 8816// CHECK-64-NEXT:    [[DOTADDR1:%.*]] = alloca i64***, align 8817// CHECK-64-NEXT:    [[DOTADDR2:%.*]] = alloca i32**, align 8818// CHECK-64-NEXT:    [[DOTADDR3:%.*]] = alloca [2 x i8*]**, align 8819// CHECK-64-NEXT:    [[DOTADDR4:%.*]] = alloca [2 x i8*]**, align 8820// CHECK-64-NEXT:    [[DOTADDR5:%.*]] = alloca [2 x i64]**, align 8821// CHECK-64-NEXT:    store %struct..kmp_privates.t* [[TMP0]], %struct..kmp_privates.t** [[DOTADDR]], align 8822// CHECK-64-NEXT:    store i64*** [[TMP1]], i64**** [[DOTADDR1]], align 8823// CHECK-64-NEXT:    store i32** [[TMP2]], i32*** [[DOTADDR2]], align 8824// CHECK-64-NEXT:    store [2 x i8*]** [[TMP3]], [2 x i8*]*** [[DOTADDR3]], align 8825// CHECK-64-NEXT:    store [2 x i8*]** [[TMP4]], [2 x i8*]*** [[DOTADDR4]], align 8826// CHECK-64-NEXT:    store [2 x i64]** [[TMP5]], [2 x i64]*** [[DOTADDR5]], align 8827// CHECK-64-NEXT:    [[TMP6:%.*]] = load %struct..kmp_privates.t*, %struct..kmp_privates.t** [[DOTADDR]], align 8828// CHECK-64-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T:%.*]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 0829// CHECK-64-NEXT:    [[TMP8:%.*]] = load i64***, i64**** [[DOTADDR1]], align 8830// CHECK-64-NEXT:    store i64** [[TMP7]], i64*** [[TMP8]], align 8831// CHECK-64-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 1832// CHECK-64-NEXT:    [[TMP10:%.*]] = load [2 x i8*]**, [2 x i8*]*** [[DOTADDR3]], align 8833// CHECK-64-NEXT:    store [2 x i8*]* [[TMP9]], [2 x i8*]** [[TMP10]], align 8834// CHECK-64-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 2835// CHECK-64-NEXT:    [[TMP12:%.*]] = load [2 x i8*]**, [2 x i8*]*** [[DOTADDR4]], align 8836// CHECK-64-NEXT:    store [2 x i8*]* [[TMP11]], [2 x i8*]** [[TMP12]], align 8837// CHECK-64-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 3838// CHECK-64-NEXT:    [[TMP14:%.*]] = load [2 x i64]**, [2 x i64]*** [[DOTADDR5]], align 8839// CHECK-64-NEXT:    store [2 x i64]* [[TMP13]], [2 x i64]** [[TMP14]], align 8840// CHECK-64-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 4841// CHECK-64-NEXT:    [[TMP16:%.*]] = load i32**, i32*** [[DOTADDR2]], align 8842// CHECK-64-NEXT:    store i32* [[TMP15]], i32** [[TMP16]], align 8843// CHECK-64-NEXT:    ret void844// CHECK-64-LABEL: define {{[^@]+}}@.omp_task_entry..6845// CHECK-64-SAME: (i32 noundef signext [[TMP0:%.*]], %struct.kmp_task_t_with_privates.1* noalias noundef [[TMP1:%.*]]) #[[ATTR4]] {846// CHECK-64-NEXT:  entry:847// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4848// CHECK-64-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca i32*, align 8849// CHECK-64-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca i8*, align 8850// CHECK-64-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca void (i8*, ...)*, align 8851// CHECK-64-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca i8*, align 8852// CHECK-64-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca %struct.anon.0*, align 8853// CHECK-64-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca i64**, align 8854// CHECK-64-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR1_I:%.*]] = alloca i32*, align 8855// CHECK-64-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR2_I:%.*]] = alloca [2 x i8*]*, align 8856// CHECK-64-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR3_I:%.*]] = alloca [2 x i8*]*, align 8857// CHECK-64-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR4_I:%.*]] = alloca [2 x i64]*, align 8858// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR__I:%.*]] = alloca i64, align 8859// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_5_I:%.*]] = alloca i32, align 4860// CHECK-64-NEXT:    [[GLOBAL_CASTED_I:%.*]] = alloca i64, align 8861// CHECK-64-NEXT:    [[KERNEL_ARGS_I:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8862// CHECK-64-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4863// CHECK-64-NEXT:    [[DOTADDR1:%.*]] = alloca %struct.kmp_task_t_with_privates.1*, align 8864// CHECK-64-NEXT:    store i32 [[TMP0]], i32* [[DOTADDR]], align 4865// CHECK-64-NEXT:    store %struct.kmp_task_t_with_privates.1* [[TMP1]], %struct.kmp_task_t_with_privates.1** [[DOTADDR1]], align 8866// CHECK-64-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTADDR]], align 4867// CHECK-64-NEXT:    [[TMP3:%.*]] = load %struct.kmp_task_t_with_privates.1*, %struct.kmp_task_t_with_privates.1** [[DOTADDR1]], align 8868// CHECK-64-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], %struct.kmp_task_t_with_privates.1* [[TMP3]], i32 0, i32 0869// CHECK-64-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 2870// CHECK-64-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 0871// CHECK-64-NEXT:    [[TMP7:%.*]] = load i8*, i8** [[TMP6]], align 8872// CHECK-64-NEXT:    [[TMP8:%.*]] = bitcast i8* [[TMP7]] to %struct.anon.0*873// CHECK-64-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1]], %struct.kmp_task_t_with_privates.1* [[TMP3]], i32 0, i32 1874// CHECK-64-NEXT:    [[TMP10:%.*]] = bitcast %struct..kmp_privates.t* [[TMP9]] to i8*875// CHECK-64-NEXT:    [[TMP11:%.*]] = bitcast %struct.kmp_task_t_with_privates.1* [[TMP3]] to i8*876// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META17:![0-9]+]])877// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])878// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META22:![0-9]+]])879// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META24:![0-9]+]])880// CHECK-64-NEXT:    store i32 [[TMP2]], i32* [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias !26881// CHECK-64-NEXT:    store i32* [[TMP5]], i32** [[DOTPART_ID__ADDR_I]], align 8, !noalias !26882// CHECK-64-NEXT:    store i8* [[TMP10]], i8** [[DOTPRIVATES__ADDR_I]], align 8, !noalias !26883// CHECK-64-NEXT:    store void (i8*, ...)* bitcast (void (%struct..kmp_privates.t*, i64***, i32**, [2 x i8*]**, [2 x i8*]**, [2 x i64]**)* @.omp_task_privates_map. to void (i8*, ...)*), void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 8, !noalias !26884// CHECK-64-NEXT:    store i8* [[TMP11]], i8** [[DOTTASK_T__ADDR_I]], align 8, !noalias !26885// CHECK-64-NEXT:    store %struct.anon.0* [[TMP8]], %struct.anon.0** [[__CONTEXT_ADDR_I]], align 8, !noalias !26886// CHECK-64-NEXT:    [[TMP12:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR_I]], align 8, !noalias !26887// CHECK-64-NEXT:    [[TMP13:%.*]] = load void (i8*, ...)*, void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 8, !noalias !26888// CHECK-64-NEXT:    [[TMP14:%.*]] = load i8*, i8** [[DOTPRIVATES__ADDR_I]], align 8, !noalias !26889// CHECK-64-NEXT:    [[TMP15:%.*]] = bitcast void (i8*, ...)* [[TMP13]] to void (i8*, i64***, i32**, [2 x i8*]**, [2 x i8*]**, [2 x i64]**)*890// CHECK-64-NEXT:    call void [[TMP15]](i8* [[TMP14]], i64*** [[DOTFIRSTPRIV_PTR_ADDR_I]], i32** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [2 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [2 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], [2 x i64]** [[DOTFIRSTPRIV_PTR_ADDR4_I]]) #[[ATTR3]]891// CHECK-64-NEXT:    [[TMP16:%.*]] = load i64**, i64*** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !26892// CHECK-64-NEXT:    [[TMP17:%.*]] = load i32*, i32** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !26893// CHECK-64-NEXT:    [[TMP18:%.*]] = load [2 x i8*]*, [2 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 8, !noalias !26894// CHECK-64-NEXT:    [[TMP19:%.*]] = load [2 x i8*]*, [2 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !26895// CHECK-64-NEXT:    [[TMP20:%.*]] = load [2 x i64]*, [2 x i64]** [[DOTFIRSTPRIV_PTR_ADDR4_I]], align 8, !noalias !26896// CHECK-64-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[TMP18]], i64 0, i64 0897// CHECK-64-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[TMP19]], i64 0, i64 0898// CHECK-64-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [2 x i64], [2 x i64]* [[TMP20]], i64 0, i64 0899// CHECK-64-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP12]], i32 0, i32 2900// CHECK-64-NEXT:    [[TMP25:%.*]] = load i32, i32* [[TMP24]], align 4901// CHECK-64-NEXT:    [[TMP26:%.*]] = sext i32 [[TMP25]] to i64902// CHECK-64-NEXT:    [[TMP27:%.*]] = load i64*, i64** [[TMP16]], align 8903// CHECK-64-NEXT:    [[TMP28:%.*]] = load i64, i64* [[TMP27]], align 8904// CHECK-64-NEXT:    store i64 [[TMP28]], i64* [[DOTCAPTURE_EXPR__I]], align 8, !noalias !26905// CHECK-64-NEXT:    [[TMP29:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__I]], align 8, !noalias !26906// CHECK-64-NEXT:    [[CONV_I:%.*]] = trunc i64 [[TMP29]] to i32907// CHECK-64-NEXT:    [[SUB6_I:%.*]] = sub nsw i32 [[CONV_I]], 1908// CHECK-64-NEXT:    store i32 [[SUB6_I]], i32* [[DOTCAPTURE_EXPR_5_I]], align 4, !noalias !26909// CHECK-64-NEXT:    [[TMP30:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_5_I]], align 4, !noalias !26910// CHECK-64-NEXT:    [[ADD_I:%.*]] = add nsw i32 [[TMP30]], 1911// CHECK-64-NEXT:    [[TMP31:%.*]] = zext i32 [[ADD_I]] to i64912// CHECK-64-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 0913// CHECK-64-NEXT:    store i32 2, i32* [[TMP32]], align 4, !noalias !26914// CHECK-64-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 1915// CHECK-64-NEXT:    store i32 2, i32* [[TMP33]], align 4, !noalias !26916// CHECK-64-NEXT:    [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 2917// CHECK-64-NEXT:    store i8** [[TMP21]], i8*** [[TMP34]], align 8, !noalias !26918// CHECK-64-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 3919// CHECK-64-NEXT:    store i8** [[TMP22]], i8*** [[TMP35]], align 8, !noalias !26920// CHECK-64-NEXT:    [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 4921// CHECK-64-NEXT:    store i64* [[TMP23]], i64** [[TMP36]], align 8, !noalias !26922// CHECK-64-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 5923// CHECK-64-NEXT:    store i64* getelementptr inbounds ([2 x i64], [2 x i64]* @.offload_maptypes, i32 0, i32 0), i64** [[TMP37]], align 8, !noalias !26924// CHECK-64-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 6925// CHECK-64-NEXT:    store i8** null, i8*** [[TMP38]], align 8, !noalias !26926// CHECK-64-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 7927// CHECK-64-NEXT:    store i8** null, i8*** [[TMP39]], align 8, !noalias !26928// CHECK-64-NEXT:    [[TMP40:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 8929// CHECK-64-NEXT:    store i64 [[TMP31]], i64* [[TMP40]], align 8, !noalias !26930// CHECK-64-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 9931// CHECK-64-NEXT:    store i64 0, i64* [[TMP41]], align 8, !noalias !26932// CHECK-64-NEXT:    [[TMP42:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 10933// CHECK-64-NEXT:    store [3 x i32] zeroinitializer, [3 x i32]* [[TMP42]], align 4, !noalias !26934// CHECK-64-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 11935// CHECK-64-NEXT:    store [3 x i32] zeroinitializer, [3 x i32]* [[TMP43]], align 4, !noalias !26936// CHECK-64-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 12937// CHECK-64-NEXT:    store i32 0, i32* [[TMP44]], align 4, !noalias !26938// CHECK-64-NEXT:    [[TMP45:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB3]], i64 [[TMP26]], i32 0, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l76.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]])939// CHECK-64-NEXT:    [[TMP46:%.*]] = icmp ne i32 [[TMP45]], 0940// CHECK-64-NEXT:    br i1 [[TMP46]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__5_EXIT:%.*]]941// CHECK-64:       omp_offload.failed.i:942// CHECK-64-NEXT:    [[TMP47:%.*]] = load i64*, i64** [[TMP16]], align 8943// CHECK-64-NEXT:    [[TMP48:%.*]] = load i32, i32* @global, align 4, !noalias !26944// CHECK-64-NEXT:    [[CONV7_I:%.*]] = bitcast i64* [[GLOBAL_CASTED_I]] to i32*945// CHECK-64-NEXT:    store i32 [[TMP48]], i32* [[CONV7_I]], align 4, !noalias !26946// CHECK-64-NEXT:    [[TMP49:%.*]] = load i64, i64* [[GLOBAL_CASTED_I]], align 8, !noalias !26947// CHECK-64-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l76(i64* [[TMP47]], i64 [[TMP49]]) #[[ATTR3]]948// CHECK-64-NEXT:    br label [[DOTOMP_OUTLINED__5_EXIT]]949// CHECK-64:       .omp_outlined..5.exit:950// CHECK-64-NEXT:    ret i32 0951// CHECK-64-LABEL: define {{[^@]+}}@.omp_task_privates_map..8952// CHECK-64-SAME: (%struct..kmp_privates.t.3* noalias noundef [[TMP0:%.*]], i64*** noalias noundef [[TMP1:%.*]], i32** noalias noundef [[TMP2:%.*]]) #[[ATTR7]] {953// CHECK-64-NEXT:  entry:954// CHECK-64-NEXT:    [[DOTADDR:%.*]] = alloca %struct..kmp_privates.t.3*, align 8955// CHECK-64-NEXT:    [[DOTADDR1:%.*]] = alloca i64***, align 8956// CHECK-64-NEXT:    [[DOTADDR2:%.*]] = alloca i32**, align 8957// CHECK-64-NEXT:    store %struct..kmp_privates.t.3* [[TMP0]], %struct..kmp_privates.t.3** [[DOTADDR]], align 8958// CHECK-64-NEXT:    store i64*** [[TMP1]], i64**** [[DOTADDR1]], align 8959// CHECK-64-NEXT:    store i32** [[TMP2]], i32*** [[DOTADDR2]], align 8960// CHECK-64-NEXT:    [[TMP3:%.*]] = load %struct..kmp_privates.t.3*, %struct..kmp_privates.t.3** [[DOTADDR]], align 8961// CHECK-64-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_3:%.*]], %struct..kmp_privates.t.3* [[TMP3]], i32 0, i32 0962// CHECK-64-NEXT:    [[TMP5:%.*]] = load i64***, i64**** [[DOTADDR1]], align 8963// CHECK-64-NEXT:    store i64** [[TMP4]], i64*** [[TMP5]], align 8964// CHECK-64-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_3]], %struct..kmp_privates.t.3* [[TMP3]], i32 0, i32 1965// CHECK-64-NEXT:    [[TMP7:%.*]] = load i32**, i32*** [[DOTADDR2]], align 8966// CHECK-64-NEXT:    store i32* [[TMP6]], i32** [[TMP7]], align 8967// CHECK-64-NEXT:    ret void968// CHECK-64-LABEL: define {{[^@]+}}@.omp_task_entry..9969// CHECK-64-SAME: (i32 noundef signext [[TMP0:%.*]], %struct.kmp_task_t_with_privates.2* noalias noundef [[TMP1:%.*]]) #[[ATTR4]] {970// CHECK-64-NEXT:  entry:971// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 4972// CHECK-64-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca i32*, align 8973// CHECK-64-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca i8*, align 8974// CHECK-64-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca void (i8*, ...)*, align 8975// CHECK-64-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca i8*, align 8976// CHECK-64-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca %struct.anon.0*, align 8977// CHECK-64-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca i64**, align 8978// CHECK-64-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR1_I:%.*]] = alloca i32*, align 8979// CHECK-64-NEXT:    [[GLOBAL_CASTED_I:%.*]] = alloca i64, align 8980// CHECK-64-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 4981// CHECK-64-NEXT:    [[DOTADDR1:%.*]] = alloca %struct.kmp_task_t_with_privates.2*, align 8982// CHECK-64-NEXT:    store i32 [[TMP0]], i32* [[DOTADDR]], align 4983// CHECK-64-NEXT:    store %struct.kmp_task_t_with_privates.2* [[TMP1]], %struct.kmp_task_t_with_privates.2** [[DOTADDR1]], align 8984// CHECK-64-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTADDR]], align 4985// CHECK-64-NEXT:    [[TMP3:%.*]] = load %struct.kmp_task_t_with_privates.2*, %struct.kmp_task_t_with_privates.2** [[DOTADDR1]], align 8986// CHECK-64-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_2:%.*]], %struct.kmp_task_t_with_privates.2* [[TMP3]], i32 0, i32 0987// CHECK-64-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 2988// CHECK-64-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 0989// CHECK-64-NEXT:    [[TMP7:%.*]] = load i8*, i8** [[TMP6]], align 8990// CHECK-64-NEXT:    [[TMP8:%.*]] = bitcast i8* [[TMP7]] to %struct.anon.0*991// CHECK-64-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_2]], %struct.kmp_task_t_with_privates.2* [[TMP3]], i32 0, i32 1992// CHECK-64-NEXT:    [[TMP10:%.*]] = bitcast %struct..kmp_privates.t.3* [[TMP9]] to i8*993// CHECK-64-NEXT:    [[TMP11:%.*]] = bitcast %struct.kmp_task_t_with_privates.2* [[TMP3]] to i8*994// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META27:![0-9]+]])995// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META30:![0-9]+]])996// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META32:![0-9]+]])997// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META34:![0-9]+]])998// CHECK-64-NEXT:    store i32 [[TMP2]], i32* [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias !36999// CHECK-64-NEXT:    store i32* [[TMP5]], i32** [[DOTPART_ID__ADDR_I]], align 8, !noalias !361000// CHECK-64-NEXT:    store i8* [[TMP10]], i8** [[DOTPRIVATES__ADDR_I]], align 8, !noalias !361001// CHECK-64-NEXT:    store void (i8*, ...)* bitcast (void (%struct..kmp_privates.t.3*, i64***, i32**)* @.omp_task_privates_map..8 to void (i8*, ...)*), void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 8, !noalias !361002// CHECK-64-NEXT:    store i8* [[TMP11]], i8** [[DOTTASK_T__ADDR_I]], align 8, !noalias !361003// CHECK-64-NEXT:    store %struct.anon.0* [[TMP8]], %struct.anon.0** [[__CONTEXT_ADDR_I]], align 8, !noalias !361004// CHECK-64-NEXT:    [[TMP12:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR_I]], align 8, !noalias !361005// CHECK-64-NEXT:    [[TMP13:%.*]] = load void (i8*, ...)*, void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 8, !noalias !361006// CHECK-64-NEXT:    [[TMP14:%.*]] = load i8*, i8** [[DOTPRIVATES__ADDR_I]], align 8, !noalias !361007// CHECK-64-NEXT:    [[TMP15:%.*]] = bitcast void (i8*, ...)* [[TMP13]] to void (i8*, i64***, i32**)*1008// CHECK-64-NEXT:    call void [[TMP15]](i8* [[TMP14]], i64*** [[DOTFIRSTPRIV_PTR_ADDR_I]], i32** [[DOTFIRSTPRIV_PTR_ADDR1_I]]) #[[ATTR3]]1009// CHECK-64-NEXT:    [[TMP16:%.*]] = load i64**, i64*** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !361010// CHECK-64-NEXT:    [[TMP17:%.*]] = load i32*, i32** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !361011// CHECK-64-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP12]], i32 0, i32 21012// CHECK-64-NEXT:    [[TMP19:%.*]] = load i64*, i64** [[TMP16]], align 81013// CHECK-64-NEXT:    [[TMP20:%.*]] = load i32, i32* @global, align 4, !noalias !361014// CHECK-64-NEXT:    [[CONV_I:%.*]] = bitcast i64* [[GLOBAL_CASTED_I]] to i32*1015// CHECK-64-NEXT:    store i32 [[TMP20]], i32* [[CONV_I]], align 4, !noalias !361016// CHECK-64-NEXT:    [[TMP21:%.*]] = load i64, i64* [[GLOBAL_CASTED_I]], align 8, !noalias !361017// CHECK-64-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l76(i64* [[TMP19]], i64 [[TMP21]]) #[[ATTR3]]1018// CHECK-64-NEXT:    ret i32 01019// CHECK-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l831020// CHECK-64-SAME: (i64 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {1021// CHECK-64-NEXT:  entry:1022// CHECK-64-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i64, align 81023// CHECK-64-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i64, align 81024// CHECK-64-NEXT:    store i64 [[GLOBAL]], i64* [[GLOBAL_ADDR]], align 81025// CHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_ADDR]] to i32*1026// CHECK-64-NEXT:    [[TMP0:%.*]] = load i32, i32* [[CONV]], align 41027// CHECK-64-NEXT:    [[CONV1:%.*]] = bitcast i64* [[GLOBAL_CASTED]] to i32*1028// CHECK-64-NEXT:    store i32 [[TMP0]], i32* [[CONV1]], align 41029// CHECK-64-NEXT:    [[TMP1:%.*]] = load i64, i64* [[GLOBAL_CASTED]], align 81030// CHECK-64-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i64 [[TMP1]])1031// CHECK-64-NEXT:    ret void1032// CHECK-64-LABEL: define {{[^@]+}}@.omp_outlined..101033// CHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {1034// CHECK-64-NEXT:  entry:1035// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 81036// CHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 81037// CHECK-64-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i64, align 81038// CHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41039// CHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 41040// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41041// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41042// CHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 41043// CHECK-64-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41044// CHECK-64-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41045// CHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41046// CHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41047// CHECK-64-NEXT:    [[I3:%.*]] = alloca i32, align 41048// CHECK-64-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i64, align 81049// CHECK-64-NEXT:    [[DOTBOUND_ZERO_ADDR:%.*]] = alloca i32, align 41050// CHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 81051// CHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 81052// CHECK-64-NEXT:    store i64 [[GLOBAL]], i64* [[GLOBAL_ADDR]], align 81053// CHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_ADDR]] to i32*1054// CHECK-64-NEXT:    [[TMP0:%.*]] = load i32, i32* [[CONV]], align 41055// CHECK-64-NEXT:    store i32 [[TMP0]], i32* [[DOTCAPTURE_EXPR_]], align 41056// CHECK-64-NEXT:    [[TMP1:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 41057// CHECK-64-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 01058// CHECK-64-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11059// CHECK-64-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11060// CHECK-64-NEXT:    store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 41061// CHECK-64-NEXT:    store i32 0, i32* [[I]], align 41062// CHECK-64-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 41063// CHECK-64-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP2]]1064// CHECK-64-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1065// CHECK-64:       omp.precond.then:1066// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 41067// CHECK-64-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41068// CHECK-64-NEXT:    store i32 [[TMP3]], i32* [[DOTOMP_COMB_UB]], align 41069// CHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 41070// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 41071// CHECK-64-NEXT:    [[TMP4:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 81072// CHECK-64-NEXT:    [[TMP5:%.*]] = load i32, i32* [[TMP4]], align 41073// CHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1]], i32 [[TMP5]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)1074// CHECK-64-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41075// CHECK-64-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41076// CHECK-64-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP6]], [[TMP7]]1077// CHECK-64-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1078// CHECK-64:       cond.true:1079// CHECK-64-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41080// CHECK-64-NEXT:    br label [[COND_END:%.*]]1081// CHECK-64:       cond.false:1082// CHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41083// CHECK-64-NEXT:    br label [[COND_END]]1084// CHECK-64:       cond.end:1085// CHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP8]], [[COND_TRUE]] ], [ [[TMP9]], [[COND_FALSE]] ]1086// CHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 41087// CHECK-64-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 41088// CHECK-64-NEXT:    store i32 [[TMP10]], i32* [[DOTOMP_IV]], align 41089// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1090// CHECK-64:       omp.inner.for.cond:1091// CHECK-64-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41092// CHECK-64-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41093// CHECK-64-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP11]], [[TMP12]]1094// CHECK-64-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1095// CHECK-64:       omp.inner.for.body:1096// CHECK-64-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 41097// CHECK-64-NEXT:    [[TMP14:%.*]] = zext i32 [[TMP13]] to i641098// CHECK-64-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41099// CHECK-64-NEXT:    [[TMP16:%.*]] = zext i32 [[TMP15]] to i641100// CHECK-64-NEXT:    [[TMP17:%.*]] = load i32, i32* [[CONV]], align 41101// CHECK-64-NEXT:    [[CONV6:%.*]] = bitcast i64* [[GLOBAL_CASTED]] to i32*1102// CHECK-64-NEXT:    store i32 [[TMP17]], i32* [[CONV6]], align 41103// CHECK-64-NEXT:    [[TMP18:%.*]] = load i64, i64* [[GLOBAL_CASTED]], align 81104// CHECK-64-NEXT:    [[TMP19:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 81105// CHECK-64-NEXT:    [[TMP20:%.*]] = load i32, i32* [[TMP19]], align 41106// CHECK-64-NEXT:    call void @__kmpc_serialized_parallel(%struct.ident_t* @[[GLOB3]], i32 [[TMP20]])1107// CHECK-64-NEXT:    [[TMP21:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 81108// CHECK-64-NEXT:    store i32 0, i32* [[DOTBOUND_ZERO_ADDR]], align 41109// CHECK-64-NEXT:    call void @.omp_outlined..11(i32* [[TMP21]], i32* [[DOTBOUND_ZERO_ADDR]], i64 [[TMP14]], i64 [[TMP16]], i64 [[TMP18]]) #[[ATTR3]]1110// CHECK-64-NEXT:    call void @__kmpc_end_serialized_parallel(%struct.ident_t* @[[GLOB3]], i32 [[TMP20]])1111// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1112// CHECK-64:       omp.inner.for.inc:1113// CHECK-64-NEXT:    [[TMP22:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41114// CHECK-64-NEXT:    [[TMP23:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 41115// CHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP22]], [[TMP23]]1116// CHECK-64-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 41117// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]1118// CHECK-64:       omp.inner.for.end:1119// CHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1120// CHECK-64:       omp.loop.exit:1121// CHECK-64-NEXT:    [[TMP24:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 81122// CHECK-64-NEXT:    [[TMP25:%.*]] = load i32, i32* [[TMP24]], align 41123// CHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP25]])1124// CHECK-64-NEXT:    br label [[OMP_PRECOND_END]]1125// CHECK-64:       omp.precond.end:1126// CHECK-64-NEXT:    ret void1127// CHECK-64-LABEL: define {{[^@]+}}@.omp_outlined..111128// CHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], i64 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {1129// CHECK-64-NEXT:  entry:1130// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 81131// CHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 81132// CHECK-64-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81133// CHECK-64-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81134// CHECK-64-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i64, align 81135// CHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41136// CHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 41137// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41138// CHECK-64-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41139// CHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 41140// CHECK-64-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41141// CHECK-64-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41142// CHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41143// CHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41144// CHECK-64-NEXT:    [[I5:%.*]] = alloca i32, align 41145// CHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 81146// CHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 81147// CHECK-64-NEXT:    store i64 [[DOTPREVIOUS_LB_]], i64* [[DOTPREVIOUS_LB__ADDR]], align 81148// CHECK-64-NEXT:    store i64 [[DOTPREVIOUS_UB_]], i64* [[DOTPREVIOUS_UB__ADDR]], align 81149// CHECK-64-NEXT:    store i64 [[GLOBAL]], i64* [[GLOBAL_ADDR]], align 81150// CHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_ADDR]] to i32*1151// CHECK-64-NEXT:    [[TMP0:%.*]] = load i32, i32* [[CONV]], align 41152// CHECK-64-NEXT:    store i32 [[TMP0]], i32* [[DOTCAPTURE_EXPR_]], align 41153// CHECK-64-NEXT:    [[TMP1:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 41154// CHECK-64-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 01155// CHECK-64-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11156// CHECK-64-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11157// CHECK-64-NEXT:    store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 41158// CHECK-64-NEXT:    store i32 0, i32* [[I]], align 41159// CHECK-64-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 41160// CHECK-64-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP2]]1161// CHECK-64-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1162// CHECK-64:       omp.precond.then:1163// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 41164// CHECK-64-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41165// CHECK-64-NEXT:    store i32 [[TMP3]], i32* [[DOTOMP_UB]], align 41166// CHECK-64-NEXT:    [[TMP4:%.*]] = load i64, i64* [[DOTPREVIOUS_LB__ADDR]], align 81167// CHECK-64-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP4]] to i321168// CHECK-64-NEXT:    [[TMP5:%.*]] = load i64, i64* [[DOTPREVIOUS_UB__ADDR]], align 81169// CHECK-64-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP5]] to i321170// CHECK-64-NEXT:    store i32 [[CONV3]], i32* [[DOTOMP_LB]], align 41171// CHECK-64-NEXT:    store i32 [[CONV4]], i32* [[DOTOMP_UB]], align 41172// CHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 41173// CHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 41174// CHECK-64-NEXT:    [[TMP6:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 81175// CHECK-64-NEXT:    [[TMP7:%.*]] = load i32, i32* [[TMP6]], align 41176// CHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP7]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)1177// CHECK-64-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_UB]], align 41178// CHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41179// CHECK-64-NEXT:    [[CMP6:%.*]] = icmp sgt i32 [[TMP8]], [[TMP9]]1180// CHECK-64-NEXT:    br i1 [[CMP6]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1181// CHECK-64:       cond.true:1182// CHECK-64-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41183// CHECK-64-NEXT:    br label [[COND_END:%.*]]1184// CHECK-64:       cond.false:1185// CHECK-64-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_UB]], align 41186// CHECK-64-NEXT:    br label [[COND_END]]1187// CHECK-64:       cond.end:1188// CHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP10]], [[COND_TRUE]] ], [ [[TMP11]], [[COND_FALSE]] ]1189// CHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 41190// CHECK-64-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_LB]], align 41191// CHECK-64-NEXT:    store i32 [[TMP12]], i32* [[DOTOMP_IV]], align 41192// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1193// CHECK-64:       omp.inner.for.cond:1194// CHECK-64-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41195// CHECK-64-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_UB]], align 41196// CHECK-64-NEXT:    [[CMP7:%.*]] = icmp sle i32 [[TMP13]], [[TMP14]]1197// CHECK-64-NEXT:    br i1 [[CMP7]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1198// CHECK-64:       omp.inner.for.body:1199// CHECK-64-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41200// CHECK-64-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP15]], 11201// CHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1202// CHECK-64-NEXT:    store i32 [[ADD]], i32* [[I5]], align 41203// CHECK-64-NEXT:    [[TMP16:%.*]] = load i32, i32* [[CONV]], align 41204// CHECK-64-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP16]], 11205// CHECK-64-NEXT:    store i32 [[ADD8]], i32* [[CONV]], align 41206// CHECK-64-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1207// CHECK-64:       omp.body.continue:1208// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1209// CHECK-64:       omp.inner.for.inc:1210// CHECK-64-NEXT:    [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41211// CHECK-64-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP17]], 11212// CHECK-64-NEXT:    store i32 [[ADD9]], i32* [[DOTOMP_IV]], align 41213// CHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]1214// CHECK-64:       omp.inner.for.end:1215// CHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1216// CHECK-64:       omp.loop.exit:1217// CHECK-64-NEXT:    [[TMP18:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 81218// CHECK-64-NEXT:    [[TMP19:%.*]] = load i32, i32* [[TMP18]], align 41219// CHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP19]])1220// CHECK-64-NEXT:    br label [[OMP_PRECOND_END]]1221// CHECK-64:       omp.precond.end:1222// CHECK-64-NEXT:    ret void1223// CHECK-64-LABEL: define {{[^@]+}}@.omp_task_privates_map..131224// CHECK-64-SAME: (%struct..kmp_privates.t.6* noalias noundef [[TMP0:%.*]], i32** noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {1225// CHECK-64-NEXT:  entry:1226// CHECK-64-NEXT:    [[DOTADDR:%.*]] = alloca %struct..kmp_privates.t.6*, align 81227// CHECK-64-NEXT:    [[DOTADDR1:%.*]] = alloca i32**, align 81228// CHECK-64-NEXT:    store %struct..kmp_privates.t.6* [[TMP0]], %struct..kmp_privates.t.6** [[DOTADDR]], align 81229// CHECK-64-NEXT:    store i32** [[TMP1]], i32*** [[DOTADDR1]], align 81230// CHECK-64-NEXT:    [[TMP2:%.*]] = load %struct..kmp_privates.t.6*, %struct..kmp_privates.t.6** [[DOTADDR]], align 81231// CHECK-64-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_6:%.*]], %struct..kmp_privates.t.6* [[TMP2]], i32 0, i32 01232// CHECK-64-NEXT:    [[TMP4:%.*]] = load i32**, i32*** [[DOTADDR1]], align 81233// CHECK-64-NEXT:    store i32* [[TMP3]], i32** [[TMP4]], align 81234// CHECK-64-NEXT:    ret void1235// CHECK-64-LABEL: define {{[^@]+}}@.omp_task_entry..141236// CHECK-64-SAME: (i32 noundef signext [[TMP0:%.*]], %struct.kmp_task_t_with_privates.5* noalias noundef [[TMP1:%.*]]) #[[ATTR4]] {1237// CHECK-64-NEXT:  entry:1238// CHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41239// CHECK-64-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca i32*, align 81240// CHECK-64-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca i8*, align 81241// CHECK-64-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca void (i8*, ...)*, align 81242// CHECK-64-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca i8*, align 81243// CHECK-64-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca %struct.anon.4*, align 81244// CHECK-64-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca i32*, align 81245// CHECK-64-NEXT:    [[GLOBAL_CASTED_I:%.*]] = alloca i64, align 81246// CHECK-64-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 41247// CHECK-64-NEXT:    [[DOTADDR1:%.*]] = alloca %struct.kmp_task_t_with_privates.5*, align 81248// CHECK-64-NEXT:    store i32 [[TMP0]], i32* [[DOTADDR]], align 41249// CHECK-64-NEXT:    store %struct.kmp_task_t_with_privates.5* [[TMP1]], %struct.kmp_task_t_with_privates.5** [[DOTADDR1]], align 81250// CHECK-64-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTADDR]], align 41251// CHECK-64-NEXT:    [[TMP3:%.*]] = load %struct.kmp_task_t_with_privates.5*, %struct.kmp_task_t_with_privates.5** [[DOTADDR1]], align 81252// CHECK-64-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], %struct.kmp_task_t_with_privates.5* [[TMP3]], i32 0, i32 01253// CHECK-64-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 21254// CHECK-64-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 01255// CHECK-64-NEXT:    [[TMP7:%.*]] = load i8*, i8** [[TMP6]], align 81256// CHECK-64-NEXT:    [[TMP8:%.*]] = bitcast i8* [[TMP7]] to %struct.anon.4*1257// CHECK-64-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5]], %struct.kmp_task_t_with_privates.5* [[TMP3]], i32 0, i32 11258// CHECK-64-NEXT:    [[TMP10:%.*]] = bitcast %struct..kmp_privates.t.6* [[TMP9]] to i8*1259// CHECK-64-NEXT:    [[TMP11:%.*]] = bitcast %struct.kmp_task_t_with_privates.5* [[TMP3]] to i8*1260// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META37:![0-9]+]])1261// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META40:![0-9]+]])1262// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META42:![0-9]+]])1263// CHECK-64-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META44:![0-9]+]])1264// CHECK-64-NEXT:    store i32 [[TMP2]], i32* [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias !461265// CHECK-64-NEXT:    store i32* [[TMP5]], i32** [[DOTPART_ID__ADDR_I]], align 8, !noalias !461266// CHECK-64-NEXT:    store i8* [[TMP10]], i8** [[DOTPRIVATES__ADDR_I]], align 8, !noalias !461267// CHECK-64-NEXT:    store void (i8*, ...)* bitcast (void (%struct..kmp_privates.t.6*, i32**)* @.omp_task_privates_map..13 to void (i8*, ...)*), void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 8, !noalias !461268// CHECK-64-NEXT:    store i8* [[TMP11]], i8** [[DOTTASK_T__ADDR_I]], align 8, !noalias !461269// CHECK-64-NEXT:    store %struct.anon.4* [[TMP8]], %struct.anon.4** [[__CONTEXT_ADDR_I]], align 8, !noalias !461270// CHECK-64-NEXT:    [[TMP12:%.*]] = load %struct.anon.4*, %struct.anon.4** [[__CONTEXT_ADDR_I]], align 8, !noalias !461271// CHECK-64-NEXT:    [[TMP13:%.*]] = load void (i8*, ...)*, void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 8, !noalias !461272// CHECK-64-NEXT:    [[TMP14:%.*]] = load i8*, i8** [[DOTPRIVATES__ADDR_I]], align 8, !noalias !461273// CHECK-64-NEXT:    [[TMP15:%.*]] = bitcast void (i8*, ...)* [[TMP13]] to void (i8*, i32**)*1274// CHECK-64-NEXT:    call void [[TMP15]](i8* [[TMP14]], i32** [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR3]]1275// CHECK-64-NEXT:    [[TMP16:%.*]] = load i32*, i32** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !461276// CHECK-64-NEXT:    [[TMP17:%.*]] = load i32, i32* [[TMP16]], align 41277// CHECK-64-NEXT:    [[CONV_I:%.*]] = bitcast i64* [[GLOBAL_CASTED_I]] to i32*1278// CHECK-64-NEXT:    store i32 [[TMP17]], i32* [[CONV_I]], align 4, !noalias !461279// CHECK-64-NEXT:    [[TMP18:%.*]] = load i64, i64* [[GLOBAL_CASTED_I]], align 8, !noalias !461280// CHECK-64-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l83(i64 [[TMP18]]) #[[ATTR3]]1281// CHECK-64-NEXT:    ret i32 01282// CHECK-64-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg1283// CHECK-64-SAME: () #[[ATTR7]] {1284// CHECK-64-NEXT:  entry:1285// CHECK-64-NEXT:    call void @__tgt_register_requires(i64 1)1286// CHECK-64-NEXT:    ret void1287// CHECK-32-LABEL: define {{[^@]+}}@_Z3fooi1288// CHECK-32-SAME: (i32 noundef [[N:%.*]]) #[[ATTR0:[0-9]+]] {1289// CHECK-32-NEXT:  entry:1290// CHECK-32-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 41291// CHECK-32-NEXT:    [[A:%.*]] = alloca i32, align 41292// CHECK-32-NEXT:    [[AA:%.*]] = alloca i16, align 21293// CHECK-32-NEXT:    [[B:%.*]] = alloca [10 x float], align 41294// CHECK-32-NEXT:    [[SAVED_STACK:%.*]] = alloca i8*, align 41295// CHECK-32-NEXT:    [[__VLA_EXPR0:%.*]] = alloca i32, align 41296// CHECK-32-NEXT:    [[C:%.*]] = alloca [5 x [10 x double]], align 81297// CHECK-32-NEXT:    [[__VLA_EXPR1:%.*]] = alloca i32, align 41298// CHECK-32-NEXT:    [[D:%.*]] = alloca [[STRUCT_TT:%.*]], align 41299// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41300// CHECK-32-NEXT:    [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 41301// CHECK-32-NEXT:    [[DOTDEP_ARR_ADDR:%.*]] = alloca [4 x %struct.kmp_depend_info], align 41302// CHECK-32-NEXT:    [[DEP_COUNTER_ADDR:%.*]] = alloca i32, align 41303// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 41304// CHECK-32-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i32, align 41305// CHECK-32-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [2 x i8*], align 41306// CHECK-32-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [2 x i8*], align 41307// CHECK-32-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [2 x i8*], align 41308// CHECK-32-NEXT:    [[AGG_CAPTURED4:%.*]] = alloca [[STRUCT_ANON_0:%.*]], align 41309// CHECK-32-NEXT:    [[DOTDEP_ARR_ADDR5:%.*]] = alloca [3 x %struct.kmp_depend_info], align 41310// CHECK-32-NEXT:    [[DEP_COUNTER_ADDR6:%.*]] = alloca i32, align 41311// CHECK-32-NEXT:    [[AGG_CAPTURED7:%.*]] = alloca [[STRUCT_ANON_0]], align 41312// CHECK-32-NEXT:    [[DOTDEP_ARR_ADDR8:%.*]] = alloca [3 x %struct.kmp_depend_info], align 41313// CHECK-32-NEXT:    [[DEP_COUNTER_ADDR9:%.*]] = alloca i32, align 41314// CHECK-32-NEXT:    [[GLOBAL_CASTED10:%.*]] = alloca i32, align 41315// CHECK-32-NEXT:    [[AGG_CAPTURED11:%.*]] = alloca [[STRUCT_ANON_4:%.*]], align 41316// CHECK-32-NEXT:    [[DOTDEP_ARR_ADDR12:%.*]] = alloca [1 x %struct.kmp_depend_info], align 41317// CHECK-32-NEXT:    [[DEP_COUNTER_ADDR13:%.*]] = alloca i32, align 41318// CHECK-32-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(%struct.ident_t* @[[GLOB3:[0-9]+]])1319// CHECK-32-NEXT:    store i32 [[N]], i32* [[N_ADDR]], align 41320// CHECK-32-NEXT:    store i32 0, i32* [[A]], align 41321// CHECK-32-NEXT:    store i16 0, i16* [[AA]], align 21322// CHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[N_ADDR]], align 41323// CHECK-32-NEXT:    [[TMP2:%.*]] = call i8* @llvm.stacksave()1324// CHECK-32-NEXT:    store i8* [[TMP2]], i8** [[SAVED_STACK]], align 41325// CHECK-32-NEXT:    [[VLA:%.*]] = alloca float, i32 [[TMP1]], align 41326// CHECK-32-NEXT:    store i32 [[TMP1]], i32* [[__VLA_EXPR0]], align 41327// CHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[N_ADDR]], align 41328// CHECK-32-NEXT:    [[TMP4:%.*]] = mul nuw i32 5, [[TMP3]]1329// CHECK-32-NEXT:    [[VLA1:%.*]] = alloca double, i32 [[TMP4]], align 81330// CHECK-32-NEXT:    store i32 [[TMP3]], i32* [[__VLA_EXPR1]], align 41331// CHECK-32-NEXT:    [[TMP5:%.*]] = load i32, i32* @global, align 41332// CHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[A]], align 41333// CHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP5]], [[TMP6]]1334// CHECK-32-NEXT:    store i32 [[ADD]], i32* [[DOTCAPTURE_EXPR_]], align 41335// CHECK-32-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[AGG_CAPTURED]], i32 0, i32 01336// CHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 41337// CHECK-32-NEXT:    store i32 [[TMP8]], i32* [[TMP7]], align 41338// CHECK-32-NEXT:    [[TMP9:%.*]] = call i8* @__kmpc_omp_task_alloc(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i32 20, i32 4, i32 (i32, i8*)* bitcast (i32 (i32, %struct.kmp_task_t_with_privates*)* @.omp_task_entry. to i32 (i32, i8*)*))1339// CHECK-32-NEXT:    [[TMP10:%.*]] = bitcast i8* [[TMP9]] to %struct.kmp_task_t_with_privates*1340// CHECK-32-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], %struct.kmp_task_t_with_privates* [[TMP10]], i32 0, i32 01341// CHECK-32-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP11]], i32 0, i32 01342// CHECK-32-NEXT:    [[TMP13:%.*]] = load i8*, i8** [[TMP12]], align 41343// CHECK-32-NEXT:    [[TMP14:%.*]] = bitcast %struct.anon* [[AGG_CAPTURED]] to i8*1344// CHECK-32-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP13]], i8* align 4 [[TMP14]], i32 4, i1 false)1345// CHECK-32-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x %struct.kmp_depend_info], [4 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR]], i32 0, i32 01346// CHECK-32-NEXT:    [[TMP16:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO:%.*]], %struct.kmp_depend_info* [[TMP15]], i32 01347// CHECK-32-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP16]], i32 0, i32 01348// CHECK-32-NEXT:    store i32 ptrtoint (i32* @global to i32), i32* [[TMP17]], align 41349// CHECK-32-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP16]], i32 0, i32 11350// CHECK-32-NEXT:    store i32 4, i32* [[TMP18]], align 41351// CHECK-32-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP16]], i32 0, i32 21352// CHECK-32-NEXT:    store i8 1, i8* [[TMP19]], align 41353// CHECK-32-NEXT:    [[TMP20:%.*]] = ptrtoint i32* [[A]] to i321354// CHECK-32-NEXT:    [[TMP21:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP15]], i32 11355// CHECK-32-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP21]], i32 0, i32 01356// CHECK-32-NEXT:    store i32 [[TMP20]], i32* [[TMP22]], align 41357// CHECK-32-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP21]], i32 0, i32 11358// CHECK-32-NEXT:    store i32 4, i32* [[TMP23]], align 41359// CHECK-32-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP21]], i32 0, i32 21360// CHECK-32-NEXT:    store i8 3, i8* [[TMP24]], align 41361// CHECK-32-NEXT:    [[TMP25:%.*]] = ptrtoint [10 x float]* [[B]] to i321362// CHECK-32-NEXT:    [[TMP26:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP15]], i32 21363// CHECK-32-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP26]], i32 0, i32 01364// CHECK-32-NEXT:    store i32 [[TMP25]], i32* [[TMP27]], align 41365// CHECK-32-NEXT:    [[TMP28:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP26]], i32 0, i32 11366// CHECK-32-NEXT:    store i32 40, i32* [[TMP28]], align 41367// CHECK-32-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP26]], i32 0, i32 21368// CHECK-32-NEXT:    store i8 3, i8* [[TMP29]], align 41369// CHECK-32-NEXT:    [[TMP30:%.*]] = mul nsw i32 4, [[TMP3]]1370// CHECK-32-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, double* [[VLA1]], i32 [[TMP30]]1371// CHECK-32-NEXT:    [[TMP31:%.*]] = mul nuw i32 [[TMP3]], 81372// CHECK-32-NEXT:    [[TMP32:%.*]] = ptrtoint double* [[ARRAYIDX]] to i321373// CHECK-32-NEXT:    [[TMP33:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP15]], i32 31374// CHECK-32-NEXT:    [[TMP34:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP33]], i32 0, i32 01375// CHECK-32-NEXT:    store i32 [[TMP32]], i32* [[TMP34]], align 41376// CHECK-32-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP33]], i32 0, i32 11377// CHECK-32-NEXT:    store i32 [[TMP31]], i32* [[TMP35]], align 41378// CHECK-32-NEXT:    [[TMP36:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP33]], i32 0, i32 21379// CHECK-32-NEXT:    store i8 3, i8* [[TMP36]], align 41380// CHECK-32-NEXT:    store i32 4, i32* [[DEP_COUNTER_ADDR]], align 41381// CHECK-32-NEXT:    [[TMP37:%.*]] = bitcast %struct.kmp_depend_info* [[TMP15]] to i8*1382// CHECK-32-NEXT:    call void @__kmpc_omp_taskwait_deps_51(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 4, i8* [[TMP37]], i32 0, i8* null, i32 0)1383// CHECK-32-NEXT:    call void @__kmpc_omp_task_begin_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP9]])1384// CHECK-32-NEXT:    [[TMP38:%.*]] = call i32 @.omp_task_entry.(i32 [[TMP0]], %struct.kmp_task_t_with_privates* [[TMP10]]) #[[ATTR3:[0-9]+]]1385// CHECK-32-NEXT:    call void @__kmpc_omp_task_complete_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP9]])1386// CHECK-32-NEXT:    [[TMP39:%.*]] = load i32, i32* @global, align 41387// CHECK-32-NEXT:    [[TMP40:%.*]] = load i32, i32* [[A]], align 41388// CHECK-32-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP39]], [[TMP40]]1389// CHECK-32-NEXT:    store i32 [[ADD3]], i32* [[DOTCAPTURE_EXPR_2]], align 41390// CHECK-32-NEXT:    [[TMP41:%.*]] = load i32*, i32** @_ZZ3fooiE6plocal, align 41391// CHECK-32-NEXT:    [[TMP42:%.*]] = load i32, i32* @global, align 41392// CHECK-32-NEXT:    store i32 [[TMP42]], i32* [[GLOBAL_CASTED]], align 41393// CHECK-32-NEXT:    [[TMP43:%.*]] = load i32, i32* [[GLOBAL_CASTED]], align 41394// CHECK-32-NEXT:    [[TMP44:%.*]] = load i32, i32* [[A]], align 41395// CHECK-32-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP44]], 01396// CHECK-32-NEXT:    br i1 [[TOBOOL]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_ELSE:%.*]]1397// CHECK-32:       omp_if.then:1398// CHECK-32-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01399// CHECK-32-NEXT:    [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32**1400// CHECK-32-NEXT:    store i32* [[TMP41]], i32** [[TMP46]], align 41401// CHECK-32-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 01402// CHECK-32-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32**1403// CHECK-32-NEXT:    store i32* [[TMP41]], i32** [[TMP48]], align 41404// CHECK-32-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 01405// CHECK-32-NEXT:    store i8* null, i8** [[TMP49]], align 41406// CHECK-32-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 11407// CHECK-32-NEXT:    [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32*1408// CHECK-32-NEXT:    store i32 [[TMP43]], i32* [[TMP51]], align 41409// CHECK-32-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 11410// CHECK-32-NEXT:    [[TMP53:%.*]] = bitcast i8** [[TMP52]] to i32*1411// CHECK-32-NEXT:    store i32 [[TMP43]], i32* [[TMP53]], align 41412// CHECK-32-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 11413// CHECK-32-NEXT:    store i8* null, i8** [[TMP54]], align 41414// CHECK-32-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01415// CHECK-32-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 01416// CHECK-32-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED4]], i32 0, i32 01417// CHECK-32-NEXT:    [[TMP58:%.*]] = load i32*, i32** @_ZZ3fooiE6plocal, align 41418// CHECK-32-NEXT:    store i32* [[TMP58]], i32** [[TMP57]], align 41419// CHECK-32-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED4]], i32 0, i32 11420// CHECK-32-NEXT:    [[TMP60:%.*]] = load i32, i32* @global, align 41421// CHECK-32-NEXT:    store i32 [[TMP60]], i32* [[TMP59]], align 41422// CHECK-32-NEXT:    [[TMP61:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED4]], i32 0, i32 21423// CHECK-32-NEXT:    [[TMP62:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 41424// CHECK-32-NEXT:    store i32 [[TMP62]], i32* [[TMP61]], align 41425// CHECK-32-NEXT:    [[TMP63:%.*]] = call i8* @__kmpc_omp_task_alloc(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i32 60, i32 12, i32 (i32, i8*)* bitcast (i32 (i32, %struct.kmp_task_t_with_privates.1*)* @.omp_task_entry..6 to i32 (i32, i8*)*))1426// CHECK-32-NEXT:    [[TMP64:%.*]] = bitcast i8* [[TMP63]] to %struct.kmp_task_t_with_privates.1*1427// CHECK-32-NEXT:    [[TMP65:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], %struct.kmp_task_t_with_privates.1* [[TMP64]], i32 0, i32 01428// CHECK-32-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP65]], i32 0, i32 01429// CHECK-32-NEXT:    [[TMP67:%.*]] = load i8*, i8** [[TMP66]], align 41430// CHECK-32-NEXT:    [[TMP68:%.*]] = bitcast %struct.anon.0* [[AGG_CAPTURED4]] to i8*1431// CHECK-32-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP67]], i8* align 4 [[TMP68]], i32 12, i1 false)1432// CHECK-32-NEXT:    [[TMP69:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1]], %struct.kmp_task_t_with_privates.1* [[TMP64]], i32 0, i32 11433// CHECK-32-NEXT:    [[TMP70:%.*]] = bitcast i8* [[TMP67]] to %struct.anon.0*1434// CHECK-32-NEXT:    [[TMP71:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T:%.*]], %struct..kmp_privates.t* [[TMP69]], i32 0, i32 01435// CHECK-32-NEXT:    [[TMP72:%.*]] = bitcast [2 x i64]* [[TMP71]] to i8*1436// CHECK-32-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP72]], i8* align 4 bitcast ([2 x i64]* @.offload_sizes to i8*), i32 16, i1 false)1437// CHECK-32-NEXT:    [[TMP73:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP69]], i32 0, i32 11438// CHECK-32-NEXT:    [[TMP74:%.*]] = load i32*, i32** @_ZZ3fooiE6plocal, align 41439// CHECK-32-NEXT:    store i32* [[TMP74]], i32** [[TMP73]], align 41440// CHECK-32-NEXT:    [[TMP75:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP69]], i32 0, i32 21441// CHECK-32-NEXT:    [[TMP76:%.*]] = load i32, i32* @global, align 41442// CHECK-32-NEXT:    store i32 [[TMP76]], i32* [[TMP75]], align 41443// CHECK-32-NEXT:    [[TMP77:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP69]], i32 0, i32 31444// CHECK-32-NEXT:    [[TMP78:%.*]] = bitcast [2 x i8*]* [[TMP77]] to i8*1445// CHECK-32-NEXT:    [[TMP79:%.*]] = bitcast i8** [[TMP55]] to i8*1446// CHECK-32-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP78]], i8* align 4 [[TMP79]], i32 8, i1 false)1447// CHECK-32-NEXT:    [[TMP80:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP69]], i32 0, i32 41448// CHECK-32-NEXT:    [[TMP81:%.*]] = bitcast [2 x i8*]* [[TMP80]] to i8*1449// CHECK-32-NEXT:    [[TMP82:%.*]] = bitcast i8** [[TMP56]] to i8*1450// CHECK-32-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP81]], i8* align 4 [[TMP82]], i32 8, i1 false)1451// CHECK-32-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], [3 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR5]], i32 0, i32 01452// CHECK-32-NEXT:    [[TMP84:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP83]], i32 01453// CHECK-32-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP84]], i32 0, i32 01454// CHECK-32-NEXT:    store i32 ptrtoint (i32* @global to i32), i32* [[TMP85]], align 41455// CHECK-32-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP84]], i32 0, i32 11456// CHECK-32-NEXT:    store i32 4, i32* [[TMP86]], align 41457// CHECK-32-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP84]], i32 0, i32 21458// CHECK-32-NEXT:    store i8 3, i8* [[TMP87]], align 41459// CHECK-32-NEXT:    [[TMP88:%.*]] = ptrtoint i32* [[A]] to i321460// CHECK-32-NEXT:    [[TMP89:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP83]], i32 11461// CHECK-32-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP89]], i32 0, i32 01462// CHECK-32-NEXT:    store i32 [[TMP88]], i32* [[TMP90]], align 41463// CHECK-32-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP89]], i32 0, i32 11464// CHECK-32-NEXT:    store i32 4, i32* [[TMP91]], align 41465// CHECK-32-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP89]], i32 0, i32 21466// CHECK-32-NEXT:    store i8 3, i8* [[TMP92]], align 41467// CHECK-32-NEXT:    [[TMP93:%.*]] = mul nuw i32 [[TMP1]], 41468// CHECK-32-NEXT:    [[TMP94:%.*]] = ptrtoint float* [[VLA]] to i321469// CHECK-32-NEXT:    [[TMP95:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP83]], i32 21470// CHECK-32-NEXT:    [[TMP96:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP95]], i32 0, i32 01471// CHECK-32-NEXT:    store i32 [[TMP94]], i32* [[TMP96]], align 41472// CHECK-32-NEXT:    [[TMP97:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP95]], i32 0, i32 11473// CHECK-32-NEXT:    store i32 [[TMP93]], i32* [[TMP97]], align 41474// CHECK-32-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP95]], i32 0, i32 21475// CHECK-32-NEXT:    store i8 3, i8* [[TMP98]], align 41476// CHECK-32-NEXT:    store i32 3, i32* [[DEP_COUNTER_ADDR6]], align 41477// CHECK-32-NEXT:    [[TMP99:%.*]] = bitcast %struct.kmp_depend_info* [[TMP83]] to i8*1478// CHECK-32-NEXT:    call void @__kmpc_omp_taskwait_deps_51(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 3, i8* [[TMP99]], i32 0, i8* null, i32 0)1479// CHECK-32-NEXT:    call void @__kmpc_omp_task_begin_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP63]])1480// CHECK-32-NEXT:    [[TMP100:%.*]] = call i32 @.omp_task_entry..6(i32 [[TMP0]], %struct.kmp_task_t_with_privates.1* [[TMP64]]) #[[ATTR3]]1481// CHECK-32-NEXT:    call void @__kmpc_omp_task_complete_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP63]])1482// CHECK-32-NEXT:    br label [[OMP_IF_END:%.*]]1483// CHECK-32:       omp_if.else:1484// CHECK-32-NEXT:    [[TMP101:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED7]], i32 0, i32 01485// CHECK-32-NEXT:    [[TMP102:%.*]] = load i32*, i32** @_ZZ3fooiE6plocal, align 41486// CHECK-32-NEXT:    store i32* [[TMP102]], i32** [[TMP101]], align 41487// CHECK-32-NEXT:    [[TMP103:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED7]], i32 0, i32 11488// CHECK-32-NEXT:    [[TMP104:%.*]] = load i32, i32* @global, align 41489// CHECK-32-NEXT:    store i32 [[TMP104]], i32* [[TMP103]], align 41490// CHECK-32-NEXT:    [[TMP105:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[AGG_CAPTURED7]], i32 0, i32 21491// CHECK-32-NEXT:    [[TMP106:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_2]], align 41492// CHECK-32-NEXT:    store i32 [[TMP106]], i32* [[TMP105]], align 41493// CHECK-32-NEXT:    [[TMP107:%.*]] = call i8* @__kmpc_omp_task_alloc(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i32 28, i32 12, i32 (i32, i8*)* bitcast (i32 (i32, %struct.kmp_task_t_with_privates.2*)* @.omp_task_entry..9 to i32 (i32, i8*)*))1494// CHECK-32-NEXT:    [[TMP108:%.*]] = bitcast i8* [[TMP107]] to %struct.kmp_task_t_with_privates.2*1495// CHECK-32-NEXT:    [[TMP109:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_2:%.*]], %struct.kmp_task_t_with_privates.2* [[TMP108]], i32 0, i32 01496// CHECK-32-NEXT:    [[TMP110:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP109]], i32 0, i32 01497// CHECK-32-NEXT:    [[TMP111:%.*]] = load i8*, i8** [[TMP110]], align 41498// CHECK-32-NEXT:    [[TMP112:%.*]] = bitcast %struct.anon.0* [[AGG_CAPTURED7]] to i8*1499// CHECK-32-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP111]], i8* align 4 [[TMP112]], i32 12, i1 false)1500// CHECK-32-NEXT:    [[TMP113:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_2]], %struct.kmp_task_t_with_privates.2* [[TMP108]], i32 0, i32 11501// CHECK-32-NEXT:    [[TMP114:%.*]] = bitcast i8* [[TMP111]] to %struct.anon.0*1502// CHECK-32-NEXT:    [[TMP115:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_3:%.*]], %struct..kmp_privates.t.3* [[TMP113]], i32 0, i32 01503// CHECK-32-NEXT:    [[TMP116:%.*]] = load i32*, i32** @_ZZ3fooiE6plocal, align 41504// CHECK-32-NEXT:    store i32* [[TMP116]], i32** [[TMP115]], align 41505// CHECK-32-NEXT:    [[TMP117:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_3]], %struct..kmp_privates.t.3* [[TMP113]], i32 0, i32 11506// CHECK-32-NEXT:    [[TMP118:%.*]] = load i32, i32* @global, align 41507// CHECK-32-NEXT:    store i32 [[TMP118]], i32* [[TMP117]], align 41508// CHECK-32-NEXT:    [[TMP119:%.*]] = getelementptr inbounds [3 x %struct.kmp_depend_info], [3 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR8]], i32 0, i32 01509// CHECK-32-NEXT:    [[TMP120:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP119]], i32 01510// CHECK-32-NEXT:    [[TMP121:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP120]], i32 0, i32 01511// CHECK-32-NEXT:    store i32 ptrtoint (i32* @global to i32), i32* [[TMP121]], align 41512// CHECK-32-NEXT:    [[TMP122:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP120]], i32 0, i32 11513// CHECK-32-NEXT:    store i32 4, i32* [[TMP122]], align 41514// CHECK-32-NEXT:    [[TMP123:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP120]], i32 0, i32 21515// CHECK-32-NEXT:    store i8 3, i8* [[TMP123]], align 41516// CHECK-32-NEXT:    [[TMP124:%.*]] = ptrtoint i32* [[A]] to i321517// CHECK-32-NEXT:    [[TMP125:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP119]], i32 11518// CHECK-32-NEXT:    [[TMP126:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP125]], i32 0, i32 01519// CHECK-32-NEXT:    store i32 [[TMP124]], i32* [[TMP126]], align 41520// CHECK-32-NEXT:    [[TMP127:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP125]], i32 0, i32 11521// CHECK-32-NEXT:    store i32 4, i32* [[TMP127]], align 41522// CHECK-32-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP125]], i32 0, i32 21523// CHECK-32-NEXT:    store i8 3, i8* [[TMP128]], align 41524// CHECK-32-NEXT:    [[TMP129:%.*]] = mul nuw i32 [[TMP1]], 41525// CHECK-32-NEXT:    [[TMP130:%.*]] = ptrtoint float* [[VLA]] to i321526// CHECK-32-NEXT:    [[TMP131:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP119]], i32 21527// CHECK-32-NEXT:    [[TMP132:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP131]], i32 0, i32 01528// CHECK-32-NEXT:    store i32 [[TMP130]], i32* [[TMP132]], align 41529// CHECK-32-NEXT:    [[TMP133:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP131]], i32 0, i32 11530// CHECK-32-NEXT:    store i32 [[TMP129]], i32* [[TMP133]], align 41531// CHECK-32-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP131]], i32 0, i32 21532// CHECK-32-NEXT:    store i8 3, i8* [[TMP134]], align 41533// CHECK-32-NEXT:    store i32 3, i32* [[DEP_COUNTER_ADDR9]], align 41534// CHECK-32-NEXT:    [[TMP135:%.*]] = bitcast %struct.kmp_depend_info* [[TMP119]] to i8*1535// CHECK-32-NEXT:    call void @__kmpc_omp_taskwait_deps_51(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 3, i8* [[TMP135]], i32 0, i8* null, i32 0)1536// CHECK-32-NEXT:    call void @__kmpc_omp_task_begin_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP107]])1537// CHECK-32-NEXT:    [[TMP136:%.*]] = call i32 @.omp_task_entry..9(i32 [[TMP0]], %struct.kmp_task_t_with_privates.2* [[TMP108]]) #[[ATTR3]]1538// CHECK-32-NEXT:    call void @__kmpc_omp_task_complete_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP107]])1539// CHECK-32-NEXT:    br label [[OMP_IF_END]]1540// CHECK-32:       omp_if.end:1541// CHECK-32-NEXT:    [[TMP137:%.*]] = load i32, i32* @global, align 41542// CHECK-32-NEXT:    store i32 [[TMP137]], i32* [[GLOBAL_CASTED10]], align 41543// CHECK-32-NEXT:    [[TMP138:%.*]] = load i32, i32* [[GLOBAL_CASTED10]], align 41544// CHECK-32-NEXT:    [[TMP139:%.*]] = getelementptr inbounds [[STRUCT_ANON_4]], %struct.anon.4* [[AGG_CAPTURED11]], i32 0, i32 01545// CHECK-32-NEXT:    [[TMP140:%.*]] = load i32, i32* @global, align 41546// CHECK-32-NEXT:    store i32 [[TMP140]], i32* [[TMP139]], align 41547// CHECK-32-NEXT:    [[TMP141:%.*]] = call i8* @__kmpc_omp_task_alloc(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i32 24, i32 4, i32 (i32, i8*)* bitcast (i32 (i32, %struct.kmp_task_t_with_privates.5*)* @.omp_task_entry..14 to i32 (i32, i8*)*))1548// CHECK-32-NEXT:    [[TMP142:%.*]] = bitcast i8* [[TMP141]] to %struct.kmp_task_t_with_privates.5*1549// CHECK-32-NEXT:    [[TMP143:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], %struct.kmp_task_t_with_privates.5* [[TMP142]], i32 0, i32 01550// CHECK-32-NEXT:    [[TMP144:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP143]], i32 0, i32 01551// CHECK-32-NEXT:    [[TMP145:%.*]] = load i8*, i8** [[TMP144]], align 41552// CHECK-32-NEXT:    [[TMP146:%.*]] = bitcast %struct.anon.4* [[AGG_CAPTURED11]] to i8*1553// CHECK-32-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP145]], i8* align 4 [[TMP146]], i32 4, i1 false)1554// CHECK-32-NEXT:    [[TMP147:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5]], %struct.kmp_task_t_with_privates.5* [[TMP142]], i32 0, i32 11555// CHECK-32-NEXT:    [[TMP148:%.*]] = bitcast i8* [[TMP145]] to %struct.anon.4*1556// CHECK-32-NEXT:    [[TMP149:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_6:%.*]], %struct..kmp_privates.t.6* [[TMP147]], i32 0, i32 01557// CHECK-32-NEXT:    [[TMP150:%.*]] = load i32, i32* @global, align 41558// CHECK-32-NEXT:    store i32 [[TMP150]], i32* [[TMP149]], align 41559// CHECK-32-NEXT:    [[TMP151:%.*]] = getelementptr inbounds [1 x %struct.kmp_depend_info], [1 x %struct.kmp_depend_info]* [[DOTDEP_ARR_ADDR12]], i32 0, i32 01560// CHECK-32-NEXT:    [[TMP152:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP151]], i32 01561// CHECK-32-NEXT:    [[TMP153:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP152]], i32 0, i32 01562// CHECK-32-NEXT:    store i32 ptrtoint (i32* @global to i32), i32* [[TMP153]], align 41563// CHECK-32-NEXT:    [[TMP154:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP152]], i32 0, i32 11564// CHECK-32-NEXT:    store i32 4, i32* [[TMP154]], align 41565// CHECK-32-NEXT:    [[TMP155:%.*]] = getelementptr inbounds [[STRUCT_KMP_DEPEND_INFO]], %struct.kmp_depend_info* [[TMP152]], i32 0, i32 21566// CHECK-32-NEXT:    store i8 3, i8* [[TMP155]], align 41567// CHECK-32-NEXT:    store i32 1, i32* [[DEP_COUNTER_ADDR13]], align 41568// CHECK-32-NEXT:    [[TMP156:%.*]] = bitcast %struct.kmp_depend_info* [[TMP151]] to i8*1569// CHECK-32-NEXT:    call void @__kmpc_omp_taskwait_deps_51(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i32 1, i8* [[TMP156]], i32 0, i8* null, i32 0)1570// CHECK-32-NEXT:    call void @__kmpc_omp_task_begin_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP141]])1571// CHECK-32-NEXT:    [[TMP157:%.*]] = call i32 @.omp_task_entry..14(i32 [[TMP0]], %struct.kmp_task_t_with_privates.5* [[TMP142]]) #[[ATTR3]]1572// CHECK-32-NEXT:    call void @__kmpc_omp_task_complete_if0(%struct.ident_t* @[[GLOB3]], i32 [[TMP0]], i8* [[TMP141]])1573// CHECK-32-NEXT:    [[TMP158:%.*]] = load i32, i32* [[A]], align 41574// CHECK-32-NEXT:    [[TMP159:%.*]] = load i8*, i8** [[SAVED_STACK]], align 41575// CHECK-32-NEXT:    call void @llvm.stackrestore(i8* [[TMP159]])1576// CHECK-32-NEXT:    ret i32 [[TMP158]]1577// CHECK-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l661578// CHECK-32-SAME: () #[[ATTR2:[0-9]+]] {1579// CHECK-32-NEXT:  entry:1580// CHECK-32-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*))1581// CHECK-32-NEXT:    ret void1582// CHECK-32-LABEL: define {{[^@]+}}@.omp_outlined.1583// CHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {1584// CHECK-32-NEXT:  entry:1585// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 41586// CHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 41587// CHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41588// CHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 41589// CHECK-32-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41590// CHECK-32-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41591// CHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41592// CHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41593// CHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 41594// CHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 41595// CHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 41596// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 41597// CHECK-32-NEXT:    store i32 9, i32* [[DOTOMP_COMB_UB]], align 41598// CHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 41599// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 41600// CHECK-32-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 41601// CHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 41602// CHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)1603// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41604// CHECK-32-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 91605// CHECK-32-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1606// CHECK-32:       cond.true:1607// CHECK-32-NEXT:    br label [[COND_END:%.*]]1608// CHECK-32:       cond.false:1609// CHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41610// CHECK-32-NEXT:    br label [[COND_END]]1611// CHECK-32:       cond.end:1612// CHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]1613// CHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 41614// CHECK-32-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 41615// CHECK-32-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_IV]], align 41616// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1617// CHECK-32:       omp.inner.for.cond:1618// CHECK-32-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41619// CHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41620// CHECK-32-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]1621// CHECK-32-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1622// CHECK-32:       omp.inner.for.body:1623// CHECK-32-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 41624// CHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41625// CHECK-32-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB3]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP7]], i32 [[TMP8]])1626// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1627// CHECK-32:       omp.inner.for.inc:1628// CHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41629// CHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 41630// CHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]1631// CHECK-32-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 41632// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]1633// CHECK-32:       omp.inner.for.end:1634// CHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1635// CHECK-32:       omp.loop.exit:1636// CHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 [[TMP1]])1637// CHECK-32-NEXT:    ret void1638// CHECK-32-LABEL: define {{[^@]+}}@.omp_outlined..11639// CHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] {1640// CHECK-32-NEXT:  entry:1641// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 41642// CHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 41643// CHECK-32-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 41644// CHECK-32-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 41645// CHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41646// CHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 41647// CHECK-32-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41648// CHECK-32-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41649// CHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41650// CHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41651// CHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 41652// CHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 41653// CHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 41654// CHECK-32-NEXT:    store i32 [[DOTPREVIOUS_LB_]], i32* [[DOTPREVIOUS_LB__ADDR]], align 41655// CHECK-32-NEXT:    store i32 [[DOTPREVIOUS_UB_]], i32* [[DOTPREVIOUS_UB__ADDR]], align 41656// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 41657// CHECK-32-NEXT:    store i32 9, i32* [[DOTOMP_UB]], align 41658// CHECK-32-NEXT:    [[TMP0:%.*]] = load i32, i32* [[DOTPREVIOUS_LB__ADDR]], align 41659// CHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[DOTPREVIOUS_UB__ADDR]], align 41660// CHECK-32-NEXT:    store i32 [[TMP0]], i32* [[DOTOMP_LB]], align 41661// CHECK-32-NEXT:    store i32 [[TMP1]], i32* [[DOTOMP_UB]], align 41662// CHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 41663// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 41664// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 41665// CHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 41666// CHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP3]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)1667// CHECK-32-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTOMP_UB]], align 41668// CHECK-32-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 91669// CHECK-32-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1670// CHECK-32:       cond.true:1671// CHECK-32-NEXT:    br label [[COND_END:%.*]]1672// CHECK-32:       cond.false:1673// CHECK-32-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTOMP_UB]], align 41674// CHECK-32-NEXT:    br label [[COND_END]]1675// CHECK-32:       cond.end:1676// CHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]1677// CHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 41678// CHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_LB]], align 41679// CHECK-32-NEXT:    store i32 [[TMP6]], i32* [[DOTOMP_IV]], align 41680// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1681// CHECK-32:       omp.inner.for.cond:1682// CHECK-32-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41683// CHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_UB]], align 41684// CHECK-32-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]1685// CHECK-32-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1686// CHECK-32:       omp.inner.for.body:1687// CHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41688// CHECK-32-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 11689// CHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1690// CHECK-32-NEXT:    store i32 [[ADD]], i32* [[I]], align 41691// CHECK-32-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1692// CHECK-32:       omp.body.continue:1693// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1694// CHECK-32:       omp.inner.for.inc:1695// CHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41696// CHECK-32-NEXT:    [[ADD2:%.*]] = add nsw i32 [[TMP10]], 11697// CHECK-32-NEXT:    store i32 [[ADD2]], i32* [[DOTOMP_IV]], align 41698// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]1699// CHECK-32:       omp.inner.for.end:1700// CHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1701// CHECK-32:       omp.loop.exit:1702// CHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP3]])1703// CHECK-32-NEXT:    ret void1704// CHECK-32-LABEL: define {{[^@]+}}@.omp_task_entry.1705// CHECK-32-SAME: (i32 noundef [[TMP0:%.*]], %struct.kmp_task_t_with_privates* noalias noundef [[TMP1:%.*]]) #[[ATTR4:[0-9]+]] {1706// CHECK-32-NEXT:  entry:1707// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 41708// CHECK-32-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca i32*, align 41709// CHECK-32-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca i8*, align 41710// CHECK-32-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca void (i8*, ...)*, align 41711// CHECK-32-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca i8*, align 41712// CHECK-32-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca %struct.anon*, align 41713// CHECK-32-NEXT:    [[KERNEL_ARGS_I:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81714// CHECK-32-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 41715// CHECK-32-NEXT:    [[DOTADDR1:%.*]] = alloca %struct.kmp_task_t_with_privates*, align 41716// CHECK-32-NEXT:    store i32 [[TMP0]], i32* [[DOTADDR]], align 41717// CHECK-32-NEXT:    store %struct.kmp_task_t_with_privates* [[TMP1]], %struct.kmp_task_t_with_privates** [[DOTADDR1]], align 41718// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTADDR]], align 41719// CHECK-32-NEXT:    [[TMP3:%.*]] = load %struct.kmp_task_t_with_privates*, %struct.kmp_task_t_with_privates** [[DOTADDR1]], align 41720// CHECK-32-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES:%.*]], %struct.kmp_task_t_with_privates* [[TMP3]], i32 0, i32 01721// CHECK-32-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 21722// CHECK-32-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 01723// CHECK-32-NEXT:    [[TMP7:%.*]] = load i8*, i8** [[TMP6]], align 41724// CHECK-32-NEXT:    [[TMP8:%.*]] = bitcast i8* [[TMP7]] to %struct.anon*1725// CHECK-32-NEXT:    [[TMP9:%.*]] = bitcast %struct.kmp_task_t_with_privates* [[TMP3]] to i8*1726// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])1727// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META11:![0-9]+]])1728// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])1729// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META15:![0-9]+]])1730// CHECK-32-NEXT:    store i32 [[TMP2]], i32* [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias !171731// CHECK-32-NEXT:    store i32* [[TMP5]], i32** [[DOTPART_ID__ADDR_I]], align 4, !noalias !171732// CHECK-32-NEXT:    store i8* null, i8** [[DOTPRIVATES__ADDR_I]], align 4, !noalias !171733// CHECK-32-NEXT:    store void (i8*, ...)* null, void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 4, !noalias !171734// CHECK-32-NEXT:    store i8* [[TMP9]], i8** [[DOTTASK_T__ADDR_I]], align 4, !noalias !171735// CHECK-32-NEXT:    store %struct.anon* [[TMP8]], %struct.anon** [[__CONTEXT_ADDR_I]], align 4, !noalias !171736// CHECK-32-NEXT:    [[TMP10:%.*]] = load %struct.anon*, %struct.anon** [[__CONTEXT_ADDR_I]], align 4, !noalias !171737// CHECK-32-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP10]], i32 0, i32 01738// CHECK-32-NEXT:    [[TMP12:%.*]] = load i32, i32* [[TMP11]], align 41739// CHECK-32-NEXT:    [[TMP13:%.*]] = sext i32 [[TMP12]] to i641740// CHECK-32-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 01741// CHECK-32-NEXT:    store i32 2, i32* [[TMP14]], align 4, !noalias !171742// CHECK-32-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 11743// CHECK-32-NEXT:    store i32 0, i32* [[TMP15]], align 4, !noalias !171744// CHECK-32-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 21745// CHECK-32-NEXT:    store i8** null, i8*** [[TMP16]], align 4, !noalias !171746// CHECK-32-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 31747// CHECK-32-NEXT:    store i8** null, i8*** [[TMP17]], align 4, !noalias !171748// CHECK-32-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 41749// CHECK-32-NEXT:    store i64* null, i64** [[TMP18]], align 4, !noalias !171750// CHECK-32-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 51751// CHECK-32-NEXT:    store i64* null, i64** [[TMP19]], align 4, !noalias !171752// CHECK-32-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 61753// CHECK-32-NEXT:    store i8** null, i8*** [[TMP20]], align 4, !noalias !171754// CHECK-32-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 71755// CHECK-32-NEXT:    store i8** null, i8*** [[TMP21]], align 4, !noalias !171756// CHECK-32-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 81757// CHECK-32-NEXT:    store i64 10, i64* [[TMP22]], align 8, !noalias !171758// CHECK-32-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 91759// CHECK-32-NEXT:    store i64 0, i64* [[TMP23]], align 8, !noalias !171760// CHECK-32-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 101761// CHECK-32-NEXT:    store [3 x i32] zeroinitializer, [3 x i32]* [[TMP24]], align 4, !noalias !171762// CHECK-32-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 111763// CHECK-32-NEXT:    store [3 x i32] zeroinitializer, [3 x i32]* [[TMP25]], align 4, !noalias !171764// CHECK-32-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 121765// CHECK-32-NEXT:    store i32 0, i32* [[TMP26]], align 4, !noalias !171766// CHECK-32-NEXT:    [[TMP27:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB3]], i64 [[TMP13]], i32 0, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l66.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]])1767// CHECK-32-NEXT:    [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 01768// CHECK-32-NEXT:    br i1 [[TMP28]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__2_EXIT:%.*]]1769// CHECK-32:       omp_offload.failed.i:1770// CHECK-32-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l66() #[[ATTR3]]1771// CHECK-32-NEXT:    br label [[DOTOMP_OUTLINED__2_EXIT]]1772// CHECK-32:       .omp_outlined..2.exit:1773// CHECK-32-NEXT:    ret i32 01774// CHECK-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l761775// CHECK-32-SAME: (i32* noundef [[PLOCAL:%.*]], i32 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {1776// CHECK-32-NEXT:  entry:1777// CHECK-32-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i32*, align 41778// CHECK-32-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i32, align 41779// CHECK-32-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i32, align 41780// CHECK-32-NEXT:    store i32* [[PLOCAL]], i32** [[PLOCAL_ADDR]], align 41781// CHECK-32-NEXT:    store i32 [[GLOBAL]], i32* [[GLOBAL_ADDR]], align 41782// CHECK-32-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 41783// CHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 41784// CHECK-32-NEXT:    store i32 [[TMP1]], i32* [[GLOBAL_CASTED]], align 41785// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[GLOBAL_CASTED]], align 41786// CHECK-32-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32* [[TMP0]], i32 [[TMP2]])1787// CHECK-32-NEXT:    ret void1788// CHECK-32-LABEL: define {{[^@]+}}@.omp_outlined..31789// CHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i32* noundef [[PLOCAL:%.*]], i32 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {1790// CHECK-32-NEXT:  entry:1791// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 41792// CHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 41793// CHECK-32-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i32*, align 41794// CHECK-32-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i32, align 41795// CHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41796// CHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 41797// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41798// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41799// CHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 41800// CHECK-32-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41801// CHECK-32-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41802// CHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41803// CHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41804// CHECK-32-NEXT:    [[I3:%.*]] = alloca i32, align 41805// CHECK-32-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i32, align 41806// CHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 41807// CHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 41808// CHECK-32-NEXT:    store i32* [[PLOCAL]], i32** [[PLOCAL_ADDR]], align 41809// CHECK-32-NEXT:    store i32 [[GLOBAL]], i32* [[GLOBAL_ADDR]], align 41810// CHECK-32-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 41811// CHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 41812// CHECK-32-NEXT:    store i32 [[TMP1]], i32* [[DOTCAPTURE_EXPR_]], align 41813// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 41814// CHECK-32-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP2]], 01815// CHECK-32-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11816// CHECK-32-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11817// CHECK-32-NEXT:    store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 41818// CHECK-32-NEXT:    store i32 0, i32* [[I]], align 41819// CHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 41820// CHECK-32-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP3]]1821// CHECK-32-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1822// CHECK-32:       omp.precond.then:1823// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 41824// CHECK-32-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41825// CHECK-32-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_COMB_UB]], align 41826// CHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 41827// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 41828// CHECK-32-NEXT:    [[TMP5:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 41829// CHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 41830// CHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1]], i32 [[TMP6]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)1831// CHECK-32-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41832// CHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41833// CHECK-32-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP7]], [[TMP8]]1834// CHECK-32-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1835// CHECK-32:       cond.true:1836// CHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41837// CHECK-32-NEXT:    br label [[COND_END:%.*]]1838// CHECK-32:       cond.false:1839// CHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41840// CHECK-32-NEXT:    br label [[COND_END]]1841// CHECK-32:       cond.end:1842// CHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP9]], [[COND_TRUE]] ], [ [[TMP10]], [[COND_FALSE]] ]1843// CHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 41844// CHECK-32-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 41845// CHECK-32-NEXT:    store i32 [[TMP11]], i32* [[DOTOMP_IV]], align 41846// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1847// CHECK-32:       omp.inner.for.cond:1848// CHECK-32-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41849// CHECK-32-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41850// CHECK-32-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP12]], [[TMP13]]1851// CHECK-32-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1852// CHECK-32:       omp.inner.for.body:1853// CHECK-32-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 41854// CHECK-32-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 41855// CHECK-32-NEXT:    [[TMP16:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 41856// CHECK-32-NEXT:    [[TMP17:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 41857// CHECK-32-NEXT:    store i32 [[TMP17]], i32* [[GLOBAL_CASTED]], align 41858// CHECK-32-NEXT:    [[TMP18:%.*]] = load i32, i32* [[GLOBAL_CASTED]], align 41859// CHECK-32-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB3]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32*, i32)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP14]], i32 [[TMP15]], i32* [[TMP16]], i32 [[TMP18]])1860// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1861// CHECK-32:       omp.inner.for.inc:1862// CHECK-32-NEXT:    [[TMP19:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41863// CHECK-32-NEXT:    [[TMP20:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 41864// CHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]1865// CHECK-32-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 41866// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]1867// CHECK-32:       omp.inner.for.end:1868// CHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1869// CHECK-32:       omp.loop.exit:1870// CHECK-32-NEXT:    [[TMP21:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 41871// CHECK-32-NEXT:    [[TMP22:%.*]] = load i32, i32* [[TMP21]], align 41872// CHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP22]])1873// CHECK-32-NEXT:    br label [[OMP_PRECOND_END]]1874// CHECK-32:       omp.precond.end:1875// CHECK-32-NEXT:    ret void1876// CHECK-32-LABEL: define {{[^@]+}}@.omp_outlined..41877// CHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], i32* noundef [[PLOCAL:%.*]], i32 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {1878// CHECK-32-NEXT:  entry:1879// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 41880// CHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 41881// CHECK-32-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 41882// CHECK-32-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 41883// CHECK-32-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i32*, align 41884// CHECK-32-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i32, align 41885// CHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41886// CHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 41887// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41888// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41889// CHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 41890// CHECK-32-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41891// CHECK-32-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41892// CHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41893// CHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41894// CHECK-32-NEXT:    [[I3:%.*]] = alloca i32, align 41895// CHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 41896// CHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 41897// CHECK-32-NEXT:    store i32 [[DOTPREVIOUS_LB_]], i32* [[DOTPREVIOUS_LB__ADDR]], align 41898// CHECK-32-NEXT:    store i32 [[DOTPREVIOUS_UB_]], i32* [[DOTPREVIOUS_UB__ADDR]], align 41899// CHECK-32-NEXT:    store i32* [[PLOCAL]], i32** [[PLOCAL_ADDR]], align 41900// CHECK-32-NEXT:    store i32 [[GLOBAL]], i32* [[GLOBAL_ADDR]], align 41901// CHECK-32-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 41902// CHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 41903// CHECK-32-NEXT:    store i32 [[TMP1]], i32* [[DOTCAPTURE_EXPR_]], align 41904// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 41905// CHECK-32-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP2]], 01906// CHECK-32-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11907// CHECK-32-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11908// CHECK-32-NEXT:    store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 41909// CHECK-32-NEXT:    store i32 0, i32* [[I]], align 41910// CHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 41911// CHECK-32-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP3]]1912// CHECK-32-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1913// CHECK-32:       omp.precond.then:1914// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 41915// CHECK-32-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41916// CHECK-32-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_UB]], align 41917// CHECK-32-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTPREVIOUS_LB__ADDR]], align 41918// CHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTPREVIOUS_UB__ADDR]], align 41919// CHECK-32-NEXT:    store i32 [[TMP5]], i32* [[DOTOMP_LB]], align 41920// CHECK-32-NEXT:    store i32 [[TMP6]], i32* [[DOTOMP_UB]], align 41921// CHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 41922// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 41923// CHECK-32-NEXT:    [[TMP7:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 41924// CHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[TMP7]], align 41925// CHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP8]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)1926// CHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_UB]], align 41927// CHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41928// CHECK-32-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP9]], [[TMP10]]1929// CHECK-32-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1930// CHECK-32:       cond.true:1931// CHECK-32-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 41932// CHECK-32-NEXT:    br label [[COND_END:%.*]]1933// CHECK-32:       cond.false:1934// CHECK-32-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_UB]], align 41935// CHECK-32-NEXT:    br label [[COND_END]]1936// CHECK-32:       cond.end:1937// CHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP11]], [[COND_TRUE]] ], [ [[TMP12]], [[COND_FALSE]] ]1938// CHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 41939// CHECK-32-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_LB]], align 41940// CHECK-32-NEXT:    store i32 [[TMP13]], i32* [[DOTOMP_IV]], align 41941// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1942// CHECK-32:       omp.inner.for.cond:1943// CHECK-32-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41944// CHECK-32-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_UB]], align 41945// CHECK-32-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP14]], [[TMP15]]1946// CHECK-32-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1947// CHECK-32:       omp.inner.for.body:1948// CHECK-32-NEXT:    [[TMP16:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41949// CHECK-32-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP16]], 11950// CHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1951// CHECK-32-NEXT:    store i32 [[ADD]], i32* [[I3]], align 41952// CHECK-32-NEXT:    [[TMP17:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 41953// CHECK-32-NEXT:    [[TMP18:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 41954// CHECK-32-NEXT:    store i32 [[TMP17]], i32* [[TMP18]], align 41955// CHECK-32-NEXT:    [[TMP19:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 41956// CHECK-32-NEXT:    store i32 [[TMP19]], i32* @_ZZ3fooiE6local1, align 41957// CHECK-32-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1958// CHECK-32:       omp.body.continue:1959// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1960// CHECK-32:       omp.inner.for.inc:1961// CHECK-32-NEXT:    [[TMP20:%.*]] = load i32, i32* [[DOTOMP_IV]], align 41962// CHECK-32-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP20]], 11963// CHECK-32-NEXT:    store i32 [[ADD6]], i32* [[DOTOMP_IV]], align 41964// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]1965// CHECK-32:       omp.inner.for.end:1966// CHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1967// CHECK-32:       omp.loop.exit:1968// CHECK-32-NEXT:    [[TMP21:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 41969// CHECK-32-NEXT:    [[TMP22:%.*]] = load i32, i32* [[TMP21]], align 41970// CHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP22]])1971// CHECK-32-NEXT:    br label [[OMP_PRECOND_END]]1972// CHECK-32:       omp.precond.end:1973// CHECK-32-NEXT:    ret void1974// CHECK-32-LABEL: define {{[^@]+}}@.omp_task_privates_map.1975// CHECK-32-SAME: (%struct..kmp_privates.t* noalias noundef [[TMP0:%.*]], i32*** noalias noundef [[TMP1:%.*]], i32** noalias noundef [[TMP2:%.*]], [2 x i8*]** noalias noundef [[TMP3:%.*]], [2 x i8*]** noalias noundef [[TMP4:%.*]], [2 x i64]** noalias noundef [[TMP5:%.*]]) #[[ATTR7:[0-9]+]] {1976// CHECK-32-NEXT:  entry:1977// CHECK-32-NEXT:    [[DOTADDR:%.*]] = alloca %struct..kmp_privates.t*, align 41978// CHECK-32-NEXT:    [[DOTADDR1:%.*]] = alloca i32***, align 41979// CHECK-32-NEXT:    [[DOTADDR2:%.*]] = alloca i32**, align 41980// CHECK-32-NEXT:    [[DOTADDR3:%.*]] = alloca [2 x i8*]**, align 41981// CHECK-32-NEXT:    [[DOTADDR4:%.*]] = alloca [2 x i8*]**, align 41982// CHECK-32-NEXT:    [[DOTADDR5:%.*]] = alloca [2 x i64]**, align 41983// CHECK-32-NEXT:    store %struct..kmp_privates.t* [[TMP0]], %struct..kmp_privates.t** [[DOTADDR]], align 41984// CHECK-32-NEXT:    store i32*** [[TMP1]], i32**** [[DOTADDR1]], align 41985// CHECK-32-NEXT:    store i32** [[TMP2]], i32*** [[DOTADDR2]], align 41986// CHECK-32-NEXT:    store [2 x i8*]** [[TMP3]], [2 x i8*]*** [[DOTADDR3]], align 41987// CHECK-32-NEXT:    store [2 x i8*]** [[TMP4]], [2 x i8*]*** [[DOTADDR4]], align 41988// CHECK-32-NEXT:    store [2 x i64]** [[TMP5]], [2 x i64]*** [[DOTADDR5]], align 41989// CHECK-32-NEXT:    [[TMP6:%.*]] = load %struct..kmp_privates.t*, %struct..kmp_privates.t** [[DOTADDR]], align 41990// CHECK-32-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T:%.*]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 01991// CHECK-32-NEXT:    [[TMP8:%.*]] = load [2 x i64]**, [2 x i64]*** [[DOTADDR5]], align 41992// CHECK-32-NEXT:    store [2 x i64]* [[TMP7]], [2 x i64]** [[TMP8]], align 41993// CHECK-32-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 11994// CHECK-32-NEXT:    [[TMP10:%.*]] = load i32***, i32**** [[DOTADDR1]], align 41995// CHECK-32-NEXT:    store i32** [[TMP9]], i32*** [[TMP10]], align 41996// CHECK-32-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 21997// CHECK-32-NEXT:    [[TMP12:%.*]] = load i32**, i32*** [[DOTADDR2]], align 41998// CHECK-32-NEXT:    store i32* [[TMP11]], i32** [[TMP12]], align 41999// CHECK-32-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 32000// CHECK-32-NEXT:    [[TMP14:%.*]] = load [2 x i8*]**, [2 x i8*]*** [[DOTADDR3]], align 42001// CHECK-32-NEXT:    store [2 x i8*]* [[TMP13]], [2 x i8*]** [[TMP14]], align 42002// CHECK-32-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T]], %struct..kmp_privates.t* [[TMP6]], i32 0, i32 42003// CHECK-32-NEXT:    [[TMP16:%.*]] = load [2 x i8*]**, [2 x i8*]*** [[DOTADDR4]], align 42004// CHECK-32-NEXT:    store [2 x i8*]* [[TMP15]], [2 x i8*]** [[TMP16]], align 42005// CHECK-32-NEXT:    ret void2006// CHECK-32-LABEL: define {{[^@]+}}@.omp_task_entry..62007// CHECK-32-SAME: (i32 noundef [[TMP0:%.*]], %struct.kmp_task_t_with_privates.1* noalias noundef [[TMP1:%.*]]) #[[ATTR4]] {2008// CHECK-32-NEXT:  entry:2009// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42010// CHECK-32-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca i32*, align 42011// CHECK-32-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca i8*, align 42012// CHECK-32-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca void (i8*, ...)*, align 42013// CHECK-32-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca i8*, align 42014// CHECK-32-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca %struct.anon.0*, align 42015// CHECK-32-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca i32**, align 42016// CHECK-32-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR1_I:%.*]] = alloca i32*, align 42017// CHECK-32-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR2_I:%.*]] = alloca [2 x i8*]*, align 42018// CHECK-32-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR3_I:%.*]] = alloca [2 x i8*]*, align 42019// CHECK-32-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR4_I:%.*]] = alloca [2 x i64]*, align 42020// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR__I:%.*]] = alloca i32, align 42021// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_5_I:%.*]] = alloca i32, align 42022// CHECK-32-NEXT:    [[GLOBAL_CASTED_I:%.*]] = alloca i32, align 42023// CHECK-32-NEXT:    [[KERNEL_ARGS_I:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 82024// CHECK-32-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 42025// CHECK-32-NEXT:    [[DOTADDR1:%.*]] = alloca %struct.kmp_task_t_with_privates.1*, align 42026// CHECK-32-NEXT:    store i32 [[TMP0]], i32* [[DOTADDR]], align 42027// CHECK-32-NEXT:    store %struct.kmp_task_t_with_privates.1* [[TMP1]], %struct.kmp_task_t_with_privates.1** [[DOTADDR1]], align 42028// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTADDR]], align 42029// CHECK-32-NEXT:    [[TMP3:%.*]] = load %struct.kmp_task_t_with_privates.1*, %struct.kmp_task_t_with_privates.1** [[DOTADDR1]], align 42030// CHECK-32-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1:%.*]], %struct.kmp_task_t_with_privates.1* [[TMP3]], i32 0, i32 02031// CHECK-32-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 22032// CHECK-32-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 02033// CHECK-32-NEXT:    [[TMP7:%.*]] = load i8*, i8** [[TMP6]], align 42034// CHECK-32-NEXT:    [[TMP8:%.*]] = bitcast i8* [[TMP7]] to %struct.anon.0*2035// CHECK-32-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_1]], %struct.kmp_task_t_with_privates.1* [[TMP3]], i32 0, i32 12036// CHECK-32-NEXT:    [[TMP10:%.*]] = bitcast %struct..kmp_privates.t* [[TMP9]] to i8*2037// CHECK-32-NEXT:    [[TMP11:%.*]] = bitcast %struct.kmp_task_t_with_privates.1* [[TMP3]] to i8*2038// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])2039// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META21:![0-9]+]])2040// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META23:![0-9]+]])2041// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META25:![0-9]+]])2042// CHECK-32-NEXT:    store i32 [[TMP2]], i32* [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias !272043// CHECK-32-NEXT:    store i32* [[TMP5]], i32** [[DOTPART_ID__ADDR_I]], align 4, !noalias !272044// CHECK-32-NEXT:    store i8* [[TMP10]], i8** [[DOTPRIVATES__ADDR_I]], align 4, !noalias !272045// CHECK-32-NEXT:    store void (i8*, ...)* bitcast (void (%struct..kmp_privates.t*, i32***, i32**, [2 x i8*]**, [2 x i8*]**, [2 x i64]**)* @.omp_task_privates_map. to void (i8*, ...)*), void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 4, !noalias !272046// CHECK-32-NEXT:    store i8* [[TMP11]], i8** [[DOTTASK_T__ADDR_I]], align 4, !noalias !272047// CHECK-32-NEXT:    store %struct.anon.0* [[TMP8]], %struct.anon.0** [[__CONTEXT_ADDR_I]], align 4, !noalias !272048// CHECK-32-NEXT:    [[TMP12:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR_I]], align 4, !noalias !272049// CHECK-32-NEXT:    [[TMP13:%.*]] = load void (i8*, ...)*, void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 4, !noalias !272050// CHECK-32-NEXT:    [[TMP14:%.*]] = load i8*, i8** [[DOTPRIVATES__ADDR_I]], align 4, !noalias !272051// CHECK-32-NEXT:    [[TMP15:%.*]] = bitcast void (i8*, ...)* [[TMP13]] to void (i8*, i32***, i32**, [2 x i8*]**, [2 x i8*]**, [2 x i64]**)*2052// CHECK-32-NEXT:    call void [[TMP15]](i8* [[TMP14]], i32*** [[DOTFIRSTPRIV_PTR_ADDR_I]], i32** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [2 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [2 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], [2 x i64]** [[DOTFIRSTPRIV_PTR_ADDR4_I]]) #[[ATTR3]]2053// CHECK-32-NEXT:    [[TMP16:%.*]] = load i32**, i32*** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !272054// CHECK-32-NEXT:    [[TMP17:%.*]] = load i32*, i32** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !272055// CHECK-32-NEXT:    [[TMP18:%.*]] = load [2 x i8*]*, [2 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 4, !noalias !272056// CHECK-32-NEXT:    [[TMP19:%.*]] = load [2 x i8*]*, [2 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !272057// CHECK-32-NEXT:    [[TMP20:%.*]] = load [2 x i64]*, [2 x i64]** [[DOTFIRSTPRIV_PTR_ADDR4_I]], align 4, !noalias !272058// CHECK-32-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[TMP18]], i32 0, i32 02059// CHECK-32-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[TMP19]], i32 0, i32 02060// CHECK-32-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [2 x i64], [2 x i64]* [[TMP20]], i32 0, i32 02061// CHECK-32-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP12]], i32 0, i32 22062// CHECK-32-NEXT:    [[TMP25:%.*]] = load i32, i32* [[TMP24]], align 42063// CHECK-32-NEXT:    [[TMP26:%.*]] = sext i32 [[TMP25]] to i642064// CHECK-32-NEXT:    [[TMP27:%.*]] = load i32*, i32** [[TMP16]], align 42065// CHECK-32-NEXT:    [[TMP28:%.*]] = load i32, i32* [[TMP27]], align 42066// CHECK-32-NEXT:    store i32 [[TMP28]], i32* [[DOTCAPTURE_EXPR__I]], align 4, !noalias !272067// CHECK-32-NEXT:    [[TMP29:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__I]], align 4, !noalias !272068// CHECK-32-NEXT:    [[SUB6_I:%.*]] = sub nsw i32 [[TMP29]], 12069// CHECK-32-NEXT:    store i32 [[SUB6_I]], i32* [[DOTCAPTURE_EXPR_5_I]], align 4, !noalias !272070// CHECK-32-NEXT:    [[TMP30:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_5_I]], align 4, !noalias !272071// CHECK-32-NEXT:    [[ADD_I:%.*]] = add nsw i32 [[TMP30]], 12072// CHECK-32-NEXT:    [[TMP31:%.*]] = zext i32 [[ADD_I]] to i642073// CHECK-32-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 02074// CHECK-32-NEXT:    store i32 2, i32* [[TMP32]], align 4, !noalias !272075// CHECK-32-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 12076// CHECK-32-NEXT:    store i32 2, i32* [[TMP33]], align 4, !noalias !272077// CHECK-32-NEXT:    [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 22078// CHECK-32-NEXT:    store i8** [[TMP21]], i8*** [[TMP34]], align 4, !noalias !272079// CHECK-32-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 32080// CHECK-32-NEXT:    store i8** [[TMP22]], i8*** [[TMP35]], align 4, !noalias !272081// CHECK-32-NEXT:    [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 42082// CHECK-32-NEXT:    store i64* [[TMP23]], i64** [[TMP36]], align 4, !noalias !272083// CHECK-32-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 52084// CHECK-32-NEXT:    store i64* getelementptr inbounds ([2 x i64], [2 x i64]* @.offload_maptypes, i32 0, i32 0), i64** [[TMP37]], align 4, !noalias !272085// CHECK-32-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 62086// CHECK-32-NEXT:    store i8** null, i8*** [[TMP38]], align 4, !noalias !272087// CHECK-32-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 72088// CHECK-32-NEXT:    store i8** null, i8*** [[TMP39]], align 4, !noalias !272089// CHECK-32-NEXT:    [[TMP40:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 82090// CHECK-32-NEXT:    store i64 [[TMP31]], i64* [[TMP40]], align 8, !noalias !272091// CHECK-32-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 92092// CHECK-32-NEXT:    store i64 0, i64* [[TMP41]], align 8, !noalias !272093// CHECK-32-NEXT:    [[TMP42:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 102094// CHECK-32-NEXT:    store [3 x i32] zeroinitializer, [3 x i32]* [[TMP42]], align 4, !noalias !272095// CHECK-32-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 112096// CHECK-32-NEXT:    store [3 x i32] zeroinitializer, [3 x i32]* [[TMP43]], align 4, !noalias !272097// CHECK-32-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]], i32 0, i32 122098// CHECK-32-NEXT:    store i32 0, i32* [[TMP44]], align 4, !noalias !272099// CHECK-32-NEXT:    [[TMP45:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB3]], i64 [[TMP26]], i32 0, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l76.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS_I]])2100// CHECK-32-NEXT:    [[TMP46:%.*]] = icmp ne i32 [[TMP45]], 02101// CHECK-32-NEXT:    br i1 [[TMP46]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__5_EXIT:%.*]]2102// CHECK-32:       omp_offload.failed.i:2103// CHECK-32-NEXT:    [[TMP47:%.*]] = load i32*, i32** [[TMP16]], align 42104// CHECK-32-NEXT:    [[TMP48:%.*]] = load i32, i32* @global, align 4, !noalias !272105// CHECK-32-NEXT:    store i32 [[TMP48]], i32* [[GLOBAL_CASTED_I]], align 4, !noalias !272106// CHECK-32-NEXT:    [[TMP49:%.*]] = load i32, i32* [[GLOBAL_CASTED_I]], align 4, !noalias !272107// CHECK-32-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l76(i32* [[TMP47]], i32 [[TMP49]]) #[[ATTR3]]2108// CHECK-32-NEXT:    br label [[DOTOMP_OUTLINED__5_EXIT]]2109// CHECK-32:       .omp_outlined..5.exit:2110// CHECK-32-NEXT:    ret i32 02111// CHECK-32-LABEL: define {{[^@]+}}@.omp_task_privates_map..82112// CHECK-32-SAME: (%struct..kmp_privates.t.3* noalias noundef [[TMP0:%.*]], i32*** noalias noundef [[TMP1:%.*]], i32** noalias noundef [[TMP2:%.*]]) #[[ATTR7]] {2113// CHECK-32-NEXT:  entry:2114// CHECK-32-NEXT:    [[DOTADDR:%.*]] = alloca %struct..kmp_privates.t.3*, align 42115// CHECK-32-NEXT:    [[DOTADDR1:%.*]] = alloca i32***, align 42116// CHECK-32-NEXT:    [[DOTADDR2:%.*]] = alloca i32**, align 42117// CHECK-32-NEXT:    store %struct..kmp_privates.t.3* [[TMP0]], %struct..kmp_privates.t.3** [[DOTADDR]], align 42118// CHECK-32-NEXT:    store i32*** [[TMP1]], i32**** [[DOTADDR1]], align 42119// CHECK-32-NEXT:    store i32** [[TMP2]], i32*** [[DOTADDR2]], align 42120// CHECK-32-NEXT:    [[TMP3:%.*]] = load %struct..kmp_privates.t.3*, %struct..kmp_privates.t.3** [[DOTADDR]], align 42121// CHECK-32-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_3:%.*]], %struct..kmp_privates.t.3* [[TMP3]], i32 0, i32 02122// CHECK-32-NEXT:    [[TMP5:%.*]] = load i32***, i32**** [[DOTADDR1]], align 42123// CHECK-32-NEXT:    store i32** [[TMP4]], i32*** [[TMP5]], align 42124// CHECK-32-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_3]], %struct..kmp_privates.t.3* [[TMP3]], i32 0, i32 12125// CHECK-32-NEXT:    [[TMP7:%.*]] = load i32**, i32*** [[DOTADDR2]], align 42126// CHECK-32-NEXT:    store i32* [[TMP6]], i32** [[TMP7]], align 42127// CHECK-32-NEXT:    ret void2128// CHECK-32-LABEL: define {{[^@]+}}@.omp_task_entry..92129// CHECK-32-SAME: (i32 noundef [[TMP0:%.*]], %struct.kmp_task_t_with_privates.2* noalias noundef [[TMP1:%.*]]) #[[ATTR4]] {2130// CHECK-32-NEXT:  entry:2131// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42132// CHECK-32-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca i32*, align 42133// CHECK-32-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca i8*, align 42134// CHECK-32-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca void (i8*, ...)*, align 42135// CHECK-32-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca i8*, align 42136// CHECK-32-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca %struct.anon.0*, align 42137// CHECK-32-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca i32**, align 42138// CHECK-32-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR1_I:%.*]] = alloca i32*, align 42139// CHECK-32-NEXT:    [[GLOBAL_CASTED_I:%.*]] = alloca i32, align 42140// CHECK-32-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 42141// CHECK-32-NEXT:    [[DOTADDR1:%.*]] = alloca %struct.kmp_task_t_with_privates.2*, align 42142// CHECK-32-NEXT:    store i32 [[TMP0]], i32* [[DOTADDR]], align 42143// CHECK-32-NEXT:    store %struct.kmp_task_t_with_privates.2* [[TMP1]], %struct.kmp_task_t_with_privates.2** [[DOTADDR1]], align 42144// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTADDR]], align 42145// CHECK-32-NEXT:    [[TMP3:%.*]] = load %struct.kmp_task_t_with_privates.2*, %struct.kmp_task_t_with_privates.2** [[DOTADDR1]], align 42146// CHECK-32-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_2:%.*]], %struct.kmp_task_t_with_privates.2* [[TMP3]], i32 0, i32 02147// CHECK-32-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 22148// CHECK-32-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 02149// CHECK-32-NEXT:    [[TMP7:%.*]] = load i8*, i8** [[TMP6]], align 42150// CHECK-32-NEXT:    [[TMP8:%.*]] = bitcast i8* [[TMP7]] to %struct.anon.0*2151// CHECK-32-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_2]], %struct.kmp_task_t_with_privates.2* [[TMP3]], i32 0, i32 12152// CHECK-32-NEXT:    [[TMP10:%.*]] = bitcast %struct..kmp_privates.t.3* [[TMP9]] to i8*2153// CHECK-32-NEXT:    [[TMP11:%.*]] = bitcast %struct.kmp_task_t_with_privates.2* [[TMP3]] to i8*2154// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META28:![0-9]+]])2155// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META31:![0-9]+]])2156// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META33:![0-9]+]])2157// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META35:![0-9]+]])2158// CHECK-32-NEXT:    store i32 [[TMP2]], i32* [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias !372159// CHECK-32-NEXT:    store i32* [[TMP5]], i32** [[DOTPART_ID__ADDR_I]], align 4, !noalias !372160// CHECK-32-NEXT:    store i8* [[TMP10]], i8** [[DOTPRIVATES__ADDR_I]], align 4, !noalias !372161// CHECK-32-NEXT:    store void (i8*, ...)* bitcast (void (%struct..kmp_privates.t.3*, i32***, i32**)* @.omp_task_privates_map..8 to void (i8*, ...)*), void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 4, !noalias !372162// CHECK-32-NEXT:    store i8* [[TMP11]], i8** [[DOTTASK_T__ADDR_I]], align 4, !noalias !372163// CHECK-32-NEXT:    store %struct.anon.0* [[TMP8]], %struct.anon.0** [[__CONTEXT_ADDR_I]], align 4, !noalias !372164// CHECK-32-NEXT:    [[TMP12:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR_I]], align 4, !noalias !372165// CHECK-32-NEXT:    [[TMP13:%.*]] = load void (i8*, ...)*, void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 4, !noalias !372166// CHECK-32-NEXT:    [[TMP14:%.*]] = load i8*, i8** [[DOTPRIVATES__ADDR_I]], align 4, !noalias !372167// CHECK-32-NEXT:    [[TMP15:%.*]] = bitcast void (i8*, ...)* [[TMP13]] to void (i8*, i32***, i32**)*2168// CHECK-32-NEXT:    call void [[TMP15]](i8* [[TMP14]], i32*** [[DOTFIRSTPRIV_PTR_ADDR_I]], i32** [[DOTFIRSTPRIV_PTR_ADDR1_I]]) #[[ATTR3]]2169// CHECK-32-NEXT:    [[TMP16:%.*]] = load i32**, i32*** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !372170// CHECK-32-NEXT:    [[TMP17:%.*]] = load i32*, i32** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !372171// CHECK-32-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP12]], i32 0, i32 22172// CHECK-32-NEXT:    [[TMP19:%.*]] = load i32*, i32** [[TMP16]], align 42173// CHECK-32-NEXT:    [[TMP20:%.*]] = load i32, i32* @global, align 4, !noalias !372174// CHECK-32-NEXT:    store i32 [[TMP20]], i32* [[GLOBAL_CASTED_I]], align 4, !noalias !372175// CHECK-32-NEXT:    [[TMP21:%.*]] = load i32, i32* [[GLOBAL_CASTED_I]], align 4, !noalias !372176// CHECK-32-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l76(i32* [[TMP19]], i32 [[TMP21]]) #[[ATTR3]]2177// CHECK-32-NEXT:    ret i32 02178// CHECK-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l832179// CHECK-32-SAME: (i32 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {2180// CHECK-32-NEXT:  entry:2181// CHECK-32-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i32, align 42182// CHECK-32-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i32, align 42183// CHECK-32-NEXT:    store i32 [[GLOBAL]], i32* [[GLOBAL_ADDR]], align 42184// CHECK-32-NEXT:    [[TMP0:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 42185// CHECK-32-NEXT:    store i32 [[TMP0]], i32* [[GLOBAL_CASTED]], align 42186// CHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[GLOBAL_CASTED]], align 42187// CHECK-32-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..10 to void (i32*, i32*, ...)*), i32 [[TMP1]])2188// CHECK-32-NEXT:    ret void2189// CHECK-32-LABEL: define {{[^@]+}}@.omp_outlined..102190// CHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {2191// CHECK-32-NEXT:  entry:2192// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 42193// CHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 42194// CHECK-32-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i32, align 42195// CHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42196// CHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 42197// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42198// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42199// CHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 42200// CHECK-32-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42201// CHECK-32-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42202// CHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42203// CHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42204// CHECK-32-NEXT:    [[I3:%.*]] = alloca i32, align 42205// CHECK-32-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i32, align 42206// CHECK-32-NEXT:    [[DOTBOUND_ZERO_ADDR:%.*]] = alloca i32, align 42207// CHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 42208// CHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 42209// CHECK-32-NEXT:    store i32 [[GLOBAL]], i32* [[GLOBAL_ADDR]], align 42210// CHECK-32-NEXT:    [[TMP0:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 42211// CHECK-32-NEXT:    store i32 [[TMP0]], i32* [[DOTCAPTURE_EXPR_]], align 42212// CHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 42213// CHECK-32-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 02214// CHECK-32-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12215// CHECK-32-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12216// CHECK-32-NEXT:    store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 42217// CHECK-32-NEXT:    store i32 0, i32* [[I]], align 42218// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 42219// CHECK-32-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP2]]2220// CHECK-32-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2221// CHECK-32:       omp.precond.then:2222// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 42223// CHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42224// CHECK-32-NEXT:    store i32 [[TMP3]], i32* [[DOTOMP_COMB_UB]], align 42225// CHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 42226// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 42227// CHECK-32-NEXT:    [[TMP4:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 42228// CHECK-32-NEXT:    [[TMP5:%.*]] = load i32, i32* [[TMP4]], align 42229// CHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1]], i32 [[TMP5]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)2230// CHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42231// CHECK-32-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42232// CHECK-32-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP6]], [[TMP7]]2233// CHECK-32-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2234// CHECK-32:       cond.true:2235// CHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42236// CHECK-32-NEXT:    br label [[COND_END:%.*]]2237// CHECK-32:       cond.false:2238// CHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42239// CHECK-32-NEXT:    br label [[COND_END]]2240// CHECK-32:       cond.end:2241// CHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP8]], [[COND_TRUE]] ], [ [[TMP9]], [[COND_FALSE]] ]2242// CHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 42243// CHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42244// CHECK-32-NEXT:    store i32 [[TMP10]], i32* [[DOTOMP_IV]], align 42245// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2246// CHECK-32:       omp.inner.for.cond:2247// CHECK-32-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42248// CHECK-32-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42249// CHECK-32-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP11]], [[TMP12]]2250// CHECK-32-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2251// CHECK-32:       omp.inner.for.body:2252// CHECK-32-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42253// CHECK-32-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42254// CHECK-32-NEXT:    [[TMP15:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 42255// CHECK-32-NEXT:    store i32 [[TMP15]], i32* [[GLOBAL_CASTED]], align 42256// CHECK-32-NEXT:    [[TMP16:%.*]] = load i32, i32* [[GLOBAL_CASTED]], align 42257// CHECK-32-NEXT:    [[TMP17:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 42258// CHECK-32-NEXT:    [[TMP18:%.*]] = load i32, i32* [[TMP17]], align 42259// CHECK-32-NEXT:    call void @__kmpc_serialized_parallel(%struct.ident_t* @[[GLOB3]], i32 [[TMP18]])2260// CHECK-32-NEXT:    [[TMP19:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 42261// CHECK-32-NEXT:    store i32 0, i32* [[DOTBOUND_ZERO_ADDR]], align 42262// CHECK-32-NEXT:    call void @.omp_outlined..11(i32* [[TMP19]], i32* [[DOTBOUND_ZERO_ADDR]], i32 [[TMP13]], i32 [[TMP14]], i32 [[TMP16]]) #[[ATTR3]]2263// CHECK-32-NEXT:    call void @__kmpc_end_serialized_parallel(%struct.ident_t* @[[GLOB3]], i32 [[TMP18]])2264// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2265// CHECK-32:       omp.inner.for.inc:2266// CHECK-32-NEXT:    [[TMP20:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42267// CHECK-32-NEXT:    [[TMP21:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 42268// CHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP20]], [[TMP21]]2269// CHECK-32-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 42270// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]2271// CHECK-32:       omp.inner.for.end:2272// CHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2273// CHECK-32:       omp.loop.exit:2274// CHECK-32-NEXT:    [[TMP22:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 42275// CHECK-32-NEXT:    [[TMP23:%.*]] = load i32, i32* [[TMP22]], align 42276// CHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP23]])2277// CHECK-32-NEXT:    br label [[OMP_PRECOND_END]]2278// CHECK-32:       omp.precond.end:2279// CHECK-32-NEXT:    ret void2280// CHECK-32-LABEL: define {{[^@]+}}@.omp_outlined..112281// CHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], i32 noundef [[GLOBAL:%.*]]) #[[ATTR2]] {2282// CHECK-32-NEXT:  entry:2283// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 42284// CHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 42285// CHECK-32-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 42286// CHECK-32-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 42287// CHECK-32-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i32, align 42288// CHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42289// CHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 42290// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42291// CHECK-32-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42292// CHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 42293// CHECK-32-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42294// CHECK-32-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42295// CHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42296// CHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42297// CHECK-32-NEXT:    [[I3:%.*]] = alloca i32, align 42298// CHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 42299// CHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 42300// CHECK-32-NEXT:    store i32 [[DOTPREVIOUS_LB_]], i32* [[DOTPREVIOUS_LB__ADDR]], align 42301// CHECK-32-NEXT:    store i32 [[DOTPREVIOUS_UB_]], i32* [[DOTPREVIOUS_UB__ADDR]], align 42302// CHECK-32-NEXT:    store i32 [[GLOBAL]], i32* [[GLOBAL_ADDR]], align 42303// CHECK-32-NEXT:    [[TMP0:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 42304// CHECK-32-NEXT:    store i32 [[TMP0]], i32* [[DOTCAPTURE_EXPR_]], align 42305// CHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 42306// CHECK-32-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 02307// CHECK-32-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12308// CHECK-32-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12309// CHECK-32-NEXT:    store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 42310// CHECK-32-NEXT:    store i32 0, i32* [[I]], align 42311// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 42312// CHECK-32-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP2]]2313// CHECK-32-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2314// CHECK-32:       omp.precond.then:2315// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 42316// CHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42317// CHECK-32-NEXT:    store i32 [[TMP3]], i32* [[DOTOMP_UB]], align 42318// CHECK-32-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTPREVIOUS_LB__ADDR]], align 42319// CHECK-32-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTPREVIOUS_UB__ADDR]], align 42320// CHECK-32-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_LB]], align 42321// CHECK-32-NEXT:    store i32 [[TMP5]], i32* [[DOTOMP_UB]], align 42322// CHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 42323// CHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 42324// CHECK-32-NEXT:    [[TMP6:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 42325// CHECK-32-NEXT:    [[TMP7:%.*]] = load i32, i32* [[TMP6]], align 42326// CHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP7]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)2327// CHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42328// CHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42329// CHECK-32-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP8]], [[TMP9]]2330// CHECK-32-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2331// CHECK-32:       cond.true:2332// CHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42333// CHECK-32-NEXT:    br label [[COND_END:%.*]]2334// CHECK-32:       cond.false:2335// CHECK-32-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42336// CHECK-32-NEXT:    br label [[COND_END]]2337// CHECK-32:       cond.end:2338// CHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP10]], [[COND_TRUE]] ], [ [[TMP11]], [[COND_FALSE]] ]2339// CHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 42340// CHECK-32-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_LB]], align 42341// CHECK-32-NEXT:    store i32 [[TMP12]], i32* [[DOTOMP_IV]], align 42342// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2343// CHECK-32:       omp.inner.for.cond:2344// CHECK-32-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42345// CHECK-32-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42346// CHECK-32-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP13]], [[TMP14]]2347// CHECK-32-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2348// CHECK-32:       omp.inner.for.body:2349// CHECK-32-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42350// CHECK-32-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP15]], 12351// CHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2352// CHECK-32-NEXT:    store i32 [[ADD]], i32* [[I3]], align 42353// CHECK-32-NEXT:    [[TMP16:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 42354// CHECK-32-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP16]], 12355// CHECK-32-NEXT:    store i32 [[ADD6]], i32* [[GLOBAL_ADDR]], align 42356// CHECK-32-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2357// CHECK-32:       omp.body.continue:2358// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2359// CHECK-32:       omp.inner.for.inc:2360// CHECK-32-NEXT:    [[TMP17:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42361// CHECK-32-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP17]], 12362// CHECK-32-NEXT:    store i32 [[ADD7]], i32* [[DOTOMP_IV]], align 42363// CHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]2364// CHECK-32:       omp.inner.for.end:2365// CHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2366// CHECK-32:       omp.loop.exit:2367// CHECK-32-NEXT:    [[TMP18:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 42368// CHECK-32-NEXT:    [[TMP19:%.*]] = load i32, i32* [[TMP18]], align 42369// CHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP19]])2370// CHECK-32-NEXT:    br label [[OMP_PRECOND_END]]2371// CHECK-32:       omp.precond.end:2372// CHECK-32-NEXT:    ret void2373// CHECK-32-LABEL: define {{[^@]+}}@.omp_task_privates_map..132374// CHECK-32-SAME: (%struct..kmp_privates.t.6* noalias noundef [[TMP0:%.*]], i32** noalias noundef [[TMP1:%.*]]) #[[ATTR7]] {2375// CHECK-32-NEXT:  entry:2376// CHECK-32-NEXT:    [[DOTADDR:%.*]] = alloca %struct..kmp_privates.t.6*, align 42377// CHECK-32-NEXT:    [[DOTADDR1:%.*]] = alloca i32**, align 42378// CHECK-32-NEXT:    store %struct..kmp_privates.t.6* [[TMP0]], %struct..kmp_privates.t.6** [[DOTADDR]], align 42379// CHECK-32-NEXT:    store i32** [[TMP1]], i32*** [[DOTADDR1]], align 42380// CHECK-32-NEXT:    [[TMP2:%.*]] = load %struct..kmp_privates.t.6*, %struct..kmp_privates.t.6** [[DOTADDR]], align 42381// CHECK-32-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [[STRUCT__KMP_PRIVATES_T_6:%.*]], %struct..kmp_privates.t.6* [[TMP2]], i32 0, i32 02382// CHECK-32-NEXT:    [[TMP4:%.*]] = load i32**, i32*** [[DOTADDR1]], align 42383// CHECK-32-NEXT:    store i32* [[TMP3]], i32** [[TMP4]], align 42384// CHECK-32-NEXT:    ret void2385// CHECK-32-LABEL: define {{[^@]+}}@.omp_task_entry..142386// CHECK-32-SAME: (i32 noundef [[TMP0:%.*]], %struct.kmp_task_t_with_privates.5* noalias noundef [[TMP1:%.*]]) #[[ATTR4]] {2387// CHECK-32-NEXT:  entry:2388// CHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR_I:%.*]] = alloca i32, align 42389// CHECK-32-NEXT:    [[DOTPART_ID__ADDR_I:%.*]] = alloca i32*, align 42390// CHECK-32-NEXT:    [[DOTPRIVATES__ADDR_I:%.*]] = alloca i8*, align 42391// CHECK-32-NEXT:    [[DOTCOPY_FN__ADDR_I:%.*]] = alloca void (i8*, ...)*, align 42392// CHECK-32-NEXT:    [[DOTTASK_T__ADDR_I:%.*]] = alloca i8*, align 42393// CHECK-32-NEXT:    [[__CONTEXT_ADDR_I:%.*]] = alloca %struct.anon.4*, align 42394// CHECK-32-NEXT:    [[DOTFIRSTPRIV_PTR_ADDR_I:%.*]] = alloca i32*, align 42395// CHECK-32-NEXT:    [[GLOBAL_CASTED_I:%.*]] = alloca i32, align 42396// CHECK-32-NEXT:    [[DOTADDR:%.*]] = alloca i32, align 42397// CHECK-32-NEXT:    [[DOTADDR1:%.*]] = alloca %struct.kmp_task_t_with_privates.5*, align 42398// CHECK-32-NEXT:    store i32 [[TMP0]], i32* [[DOTADDR]], align 42399// CHECK-32-NEXT:    store %struct.kmp_task_t_with_privates.5* [[TMP1]], %struct.kmp_task_t_with_privates.5** [[DOTADDR1]], align 42400// CHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTADDR]], align 42401// CHECK-32-NEXT:    [[TMP3:%.*]] = load %struct.kmp_task_t_with_privates.5*, %struct.kmp_task_t_with_privates.5** [[DOTADDR1]], align 42402// CHECK-32-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5:%.*]], %struct.kmp_task_t_with_privates.5* [[TMP3]], i32 0, i32 02403// CHECK-32-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T:%.*]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 22404// CHECK-32-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T]], %struct.kmp_task_t* [[TMP4]], i32 0, i32 02405// CHECK-32-NEXT:    [[TMP7:%.*]] = load i8*, i8** [[TMP6]], align 42406// CHECK-32-NEXT:    [[TMP8:%.*]] = bitcast i8* [[TMP7]] to %struct.anon.4*2407// CHECK-32-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [[STRUCT_KMP_TASK_T_WITH_PRIVATES_5]], %struct.kmp_task_t_with_privates.5* [[TMP3]], i32 0, i32 12408// CHECK-32-NEXT:    [[TMP10:%.*]] = bitcast %struct..kmp_privates.t.6* [[TMP9]] to i8*2409// CHECK-32-NEXT:    [[TMP11:%.*]] = bitcast %struct.kmp_task_t_with_privates.5* [[TMP3]] to i8*2410// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META38:![0-9]+]])2411// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META41:![0-9]+]])2412// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META43:![0-9]+]])2413// CHECK-32-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata [[META45:![0-9]+]])2414// CHECK-32-NEXT:    store i32 [[TMP2]], i32* [[DOTGLOBAL_TID__ADDR_I]], align 4, !noalias !472415// CHECK-32-NEXT:    store i32* [[TMP5]], i32** [[DOTPART_ID__ADDR_I]], align 4, !noalias !472416// CHECK-32-NEXT:    store i8* [[TMP10]], i8** [[DOTPRIVATES__ADDR_I]], align 4, !noalias !472417// CHECK-32-NEXT:    store void (i8*, ...)* bitcast (void (%struct..kmp_privates.t.6*, i32**)* @.omp_task_privates_map..13 to void (i8*, ...)*), void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 4, !noalias !472418// CHECK-32-NEXT:    store i8* [[TMP11]], i8** [[DOTTASK_T__ADDR_I]], align 4, !noalias !472419// CHECK-32-NEXT:    store %struct.anon.4* [[TMP8]], %struct.anon.4** [[__CONTEXT_ADDR_I]], align 4, !noalias !472420// CHECK-32-NEXT:    [[TMP12:%.*]] = load %struct.anon.4*, %struct.anon.4** [[__CONTEXT_ADDR_I]], align 4, !noalias !472421// CHECK-32-NEXT:    [[TMP13:%.*]] = load void (i8*, ...)*, void (i8*, ...)** [[DOTCOPY_FN__ADDR_I]], align 4, !noalias !472422// CHECK-32-NEXT:    [[TMP14:%.*]] = load i8*, i8** [[DOTPRIVATES__ADDR_I]], align 4, !noalias !472423// CHECK-32-NEXT:    [[TMP15:%.*]] = bitcast void (i8*, ...)* [[TMP13]] to void (i8*, i32**)*2424// CHECK-32-NEXT:    call void [[TMP15]](i8* [[TMP14]], i32** [[DOTFIRSTPRIV_PTR_ADDR_I]]) #[[ATTR3]]2425// CHECK-32-NEXT:    [[TMP16:%.*]] = load i32*, i32** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !472426// CHECK-32-NEXT:    [[TMP17:%.*]] = load i32, i32* [[TMP16]], align 42427// CHECK-32-NEXT:    store i32 [[TMP17]], i32* [[GLOBAL_CASTED_I]], align 4, !noalias !472428// CHECK-32-NEXT:    [[TMP18:%.*]] = load i32, i32* [[GLOBAL_CASTED_I]], align 4, !noalias !472429// CHECK-32-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l83(i32 [[TMP18]]) #[[ATTR3]]2430// CHECK-32-NEXT:    ret i32 02431// CHECK-32-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg2432// CHECK-32-SAME: () #[[ATTR7]] {2433// CHECK-32-NEXT:  entry:2434// CHECK-32-NEXT:    call void @__tgt_register_requires(i64 1)2435// CHECK-32-NEXT:    ret void2436// TCHECK-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l662437// TCHECK-64-SAME: () #[[ATTR0:[0-9]+]] {2438// TCHECK-64-NEXT:  entry:2439// TCHECK-64-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*))2440// TCHECK-64-NEXT:    ret void2441// TCHECK-64-LABEL: define {{[^@]+}}@.omp_outlined.2442// TCHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {2443// TCHECK-64-NEXT:  entry:2444// TCHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 82445// TCHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 82446// TCHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42447// TCHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 42448// TCHECK-64-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42449// TCHECK-64-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42450// TCHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42451// TCHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42452// TCHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 42453// TCHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 82454// TCHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 82455// TCHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 42456// TCHECK-64-NEXT:    store i32 9, i32* [[DOTOMP_COMB_UB]], align 42457// TCHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 42458// TCHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 42459// TCHECK-64-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 82460// TCHECK-64-NEXT:    [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 42461// TCHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)2462// TCHECK-64-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42463// TCHECK-64-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 92464// TCHECK-64-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2465// TCHECK-64:       cond.true:2466// TCHECK-64-NEXT:    br label [[COND_END:%.*]]2467// TCHECK-64:       cond.false:2468// TCHECK-64-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42469// TCHECK-64-NEXT:    br label [[COND_END]]2470// TCHECK-64:       cond.end:2471// TCHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]2472// TCHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 42473// TCHECK-64-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42474// TCHECK-64-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_IV]], align 42475// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2476// TCHECK-64:       omp.inner.for.cond:2477// TCHECK-64-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42478// TCHECK-64-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42479// TCHECK-64-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]2480// TCHECK-64-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2481// TCHECK-64:       omp.inner.for.body:2482// TCHECK-64-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42483// TCHECK-64-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i642484// TCHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42485// TCHECK-64-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i642486// TCHECK-64-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB3]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP8]], i64 [[TMP10]])2487// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2488// TCHECK-64:       omp.inner.for.inc:2489// TCHECK-64-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42490// TCHECK-64-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 42491// TCHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]2492// TCHECK-64-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 42493// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]2494// TCHECK-64:       omp.inner.for.end:2495// TCHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2496// TCHECK-64:       omp.loop.exit:2497// TCHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 [[TMP1]])2498// TCHECK-64-NEXT:    ret void2499// TCHECK-64-LABEL: define {{[^@]+}}@.omp_outlined..12500// TCHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR0]] {2501// TCHECK-64-NEXT:  entry:2502// TCHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 82503// TCHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 82504// TCHECK-64-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82505// TCHECK-64-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82506// TCHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42507// TCHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 42508// TCHECK-64-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42509// TCHECK-64-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42510// TCHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42511// TCHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42512// TCHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 42513// TCHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 82514// TCHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 82515// TCHECK-64-NEXT:    store i64 [[DOTPREVIOUS_LB_]], i64* [[DOTPREVIOUS_LB__ADDR]], align 82516// TCHECK-64-NEXT:    store i64 [[DOTPREVIOUS_UB_]], i64* [[DOTPREVIOUS_UB__ADDR]], align 82517// TCHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 42518// TCHECK-64-NEXT:    store i32 9, i32* [[DOTOMP_UB]], align 42519// TCHECK-64-NEXT:    [[TMP0:%.*]] = load i64, i64* [[DOTPREVIOUS_LB__ADDR]], align 82520// TCHECK-64-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i322521// TCHECK-64-NEXT:    [[TMP1:%.*]] = load i64, i64* [[DOTPREVIOUS_UB__ADDR]], align 82522// TCHECK-64-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i322523// TCHECK-64-NEXT:    store i32 [[CONV]], i32* [[DOTOMP_LB]], align 42524// TCHECK-64-NEXT:    store i32 [[CONV1]], i32* [[DOTOMP_UB]], align 42525// TCHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 42526// TCHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 42527// TCHECK-64-NEXT:    [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 82528// TCHECK-64-NEXT:    [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 42529// TCHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP3]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)2530// TCHECK-64-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42531// TCHECK-64-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 92532// TCHECK-64-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2533// TCHECK-64:       cond.true:2534// TCHECK-64-NEXT:    br label [[COND_END:%.*]]2535// TCHECK-64:       cond.false:2536// TCHECK-64-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42537// TCHECK-64-NEXT:    br label [[COND_END]]2538// TCHECK-64:       cond.end:2539// TCHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]2540// TCHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 42541// TCHECK-64-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_LB]], align 42542// TCHECK-64-NEXT:    store i32 [[TMP6]], i32* [[DOTOMP_IV]], align 42543// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2544// TCHECK-64:       omp.inner.for.cond:2545// TCHECK-64-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42546// TCHECK-64-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42547// TCHECK-64-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]2548// TCHECK-64-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2549// TCHECK-64:       omp.inner.for.body:2550// TCHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42551// TCHECK-64-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 12552// TCHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2553// TCHECK-64-NEXT:    store i32 [[ADD]], i32* [[I]], align 42554// TCHECK-64-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2555// TCHECK-64:       omp.body.continue:2556// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2557// TCHECK-64:       omp.inner.for.inc:2558// TCHECK-64-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42559// TCHECK-64-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 12560// TCHECK-64-NEXT:    store i32 [[ADD3]], i32* [[DOTOMP_IV]], align 42561// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]2562// TCHECK-64:       omp.inner.for.end:2563// TCHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2564// TCHECK-64:       omp.loop.exit:2565// TCHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP3]])2566// TCHECK-64-NEXT:    ret void2567// TCHECK-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l762568// TCHECK-64-SAME: (i64* noundef [[PLOCAL:%.*]], i64 noundef [[GLOBAL:%.*]]) #[[ATTR0]] {2569// TCHECK-64-NEXT:  entry:2570// TCHECK-64-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i64*, align 82571// TCHECK-64-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i64, align 82572// TCHECK-64-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i64, align 82573// TCHECK-64-NEXT:    store i64* [[PLOCAL]], i64** [[PLOCAL_ADDR]], align 82574// TCHECK-64-NEXT:    store i64 [[GLOBAL]], i64* [[GLOBAL_ADDR]], align 82575// TCHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_ADDR]] to i32*2576// TCHECK-64-NEXT:    [[TMP0:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 82577// TCHECK-64-NEXT:    [[TMP1:%.*]] = load i32, i32* [[CONV]], align 42578// TCHECK-64-NEXT:    [[CONV1:%.*]] = bitcast i64* [[GLOBAL_CASTED]] to i32*2579// TCHECK-64-NEXT:    store i32 [[TMP1]], i32* [[CONV1]], align 42580// TCHECK-64-NEXT:    [[TMP2:%.*]] = load i64, i64* [[GLOBAL_CASTED]], align 82581// TCHECK-64-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64*, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64* [[TMP0]], i64 [[TMP2]])2582// TCHECK-64-NEXT:    ret void2583// TCHECK-64-LABEL: define {{[^@]+}}@.omp_outlined..22584// TCHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i64* noundef [[PLOCAL:%.*]], i64 noundef [[GLOBAL:%.*]]) #[[ATTR0]] {2585// TCHECK-64-NEXT:  entry:2586// TCHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 82587// TCHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 82588// TCHECK-64-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i64*, align 82589// TCHECK-64-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i64, align 82590// TCHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42591// TCHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 42592// TCHECK-64-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i64, align 82593// TCHECK-64-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42594// TCHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 42595// TCHECK-64-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42596// TCHECK-64-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42597// TCHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42598// TCHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42599// TCHECK-64-NEXT:    [[I4:%.*]] = alloca i32, align 42600// TCHECK-64-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i64, align 82601// TCHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 82602// TCHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 82603// TCHECK-64-NEXT:    store i64* [[PLOCAL]], i64** [[PLOCAL_ADDR]], align 82604// TCHECK-64-NEXT:    store i64 [[GLOBAL]], i64* [[GLOBAL_ADDR]], align 82605// TCHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_ADDR]] to i32*2606// TCHECK-64-NEXT:    [[TMP0:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 82607// TCHECK-64-NEXT:    [[TMP1:%.*]] = load i64, i64* [[TMP0]], align 82608// TCHECK-64-NEXT:    store i64 [[TMP1]], i64* [[DOTCAPTURE_EXPR_]], align 82609// TCHECK-64-NEXT:    [[TMP2:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_]], align 82610// TCHECK-64-NEXT:    [[SUB:%.*]] = sub nsw i64 [[TMP2]], 02611// TCHECK-64-NEXT:    [[DIV:%.*]] = sdiv i64 [[SUB]], 12612// TCHECK-64-NEXT:    [[CONV2:%.*]] = trunc i64 [[DIV]] to i322613// TCHECK-64-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[CONV2]], 12614// TCHECK-64-NEXT:    store i32 [[SUB3]], i32* [[DOTCAPTURE_EXPR_1]], align 42615// TCHECK-64-NEXT:    store i32 0, i32* [[I]], align 42616// TCHECK-64-NEXT:    [[TMP3:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_]], align 82617// TCHECK-64-NEXT:    [[CMP:%.*]] = icmp slt i64 0, [[TMP3]]2618// TCHECK-64-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2619// TCHECK-64:       omp.precond.then:2620// TCHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 42621// TCHECK-64-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42622// TCHECK-64-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_COMB_UB]], align 42623// TCHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 42624// TCHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 42625// TCHECK-64-NEXT:    [[TMP5:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 82626// TCHECK-64-NEXT:    [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 42627// TCHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1]], i32 [[TMP6]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)2628// TCHECK-64-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42629// TCHECK-64-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42630// TCHECK-64-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP7]], [[TMP8]]2631// TCHECK-64-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2632// TCHECK-64:       cond.true:2633// TCHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42634// TCHECK-64-NEXT:    br label [[COND_END:%.*]]2635// TCHECK-64:       cond.false:2636// TCHECK-64-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42637// TCHECK-64-NEXT:    br label [[COND_END]]2638// TCHECK-64:       cond.end:2639// TCHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP9]], [[COND_TRUE]] ], [ [[TMP10]], [[COND_FALSE]] ]2640// TCHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 42641// TCHECK-64-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42642// TCHECK-64-NEXT:    store i32 [[TMP11]], i32* [[DOTOMP_IV]], align 42643// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2644// TCHECK-64:       omp.inner.for.cond:2645// TCHECK-64-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42646// TCHECK-64-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42647// TCHECK-64-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP12]], [[TMP13]]2648// TCHECK-64-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2649// TCHECK-64:       omp.inner.for.body:2650// TCHECK-64-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42651// TCHECK-64-NEXT:    [[TMP15:%.*]] = zext i32 [[TMP14]] to i642652// TCHECK-64-NEXT:    [[TMP16:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42653// TCHECK-64-NEXT:    [[TMP17:%.*]] = zext i32 [[TMP16]] to i642654// TCHECK-64-NEXT:    [[TMP18:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 82655// TCHECK-64-NEXT:    [[TMP19:%.*]] = load i32, i32* [[CONV]], align 42656// TCHECK-64-NEXT:    [[CONV7:%.*]] = bitcast i64* [[GLOBAL_CASTED]] to i32*2657// TCHECK-64-NEXT:    store i32 [[TMP19]], i32* [[CONV7]], align 42658// TCHECK-64-NEXT:    [[TMP20:%.*]] = load i64, i64* [[GLOBAL_CASTED]], align 82659// TCHECK-64-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB3]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP15]], i64 [[TMP17]], i64* [[TMP18]], i64 [[TMP20]])2660// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2661// TCHECK-64:       omp.inner.for.inc:2662// TCHECK-64-NEXT:    [[TMP21:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42663// TCHECK-64-NEXT:    [[TMP22:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 42664// TCHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]2665// TCHECK-64-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 42666// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]2667// TCHECK-64:       omp.inner.for.end:2668// TCHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2669// TCHECK-64:       omp.loop.exit:2670// TCHECK-64-NEXT:    [[TMP23:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 82671// TCHECK-64-NEXT:    [[TMP24:%.*]] = load i32, i32* [[TMP23]], align 42672// TCHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP24]])2673// TCHECK-64-NEXT:    br label [[OMP_PRECOND_END]]2674// TCHECK-64:       omp.precond.end:2675// TCHECK-64-NEXT:    ret void2676// TCHECK-64-LABEL: define {{[^@]+}}@.omp_outlined..32677// TCHECK-64-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], i64* noundef [[PLOCAL:%.*]], i64 noundef [[GLOBAL:%.*]]) #[[ATTR0]] {2678// TCHECK-64-NEXT:  entry:2679// TCHECK-64-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 82680// TCHECK-64-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 82681// TCHECK-64-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82682// TCHECK-64-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82683// TCHECK-64-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i64*, align 82684// TCHECK-64-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i64, align 82685// TCHECK-64-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42686// TCHECK-64-NEXT:    [[TMP:%.*]] = alloca i32, align 42687// TCHECK-64-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i64, align 82688// TCHECK-64-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42689// TCHECK-64-NEXT:    [[I:%.*]] = alloca i32, align 42690// TCHECK-64-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42691// TCHECK-64-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42692// TCHECK-64-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42693// TCHECK-64-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42694// TCHECK-64-NEXT:    [[I6:%.*]] = alloca i32, align 42695// TCHECK-64-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 82696// TCHECK-64-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 82697// TCHECK-64-NEXT:    store i64 [[DOTPREVIOUS_LB_]], i64* [[DOTPREVIOUS_LB__ADDR]], align 82698// TCHECK-64-NEXT:    store i64 [[DOTPREVIOUS_UB_]], i64* [[DOTPREVIOUS_UB__ADDR]], align 82699// TCHECK-64-NEXT:    store i64* [[PLOCAL]], i64** [[PLOCAL_ADDR]], align 82700// TCHECK-64-NEXT:    store i64 [[GLOBAL]], i64* [[GLOBAL_ADDR]], align 82701// TCHECK-64-NEXT:    [[CONV:%.*]] = bitcast i64* [[GLOBAL_ADDR]] to i32*2702// TCHECK-64-NEXT:    [[TMP0:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 82703// TCHECK-64-NEXT:    [[TMP1:%.*]] = load i64, i64* [[TMP0]], align 82704// TCHECK-64-NEXT:    store i64 [[TMP1]], i64* [[DOTCAPTURE_EXPR_]], align 82705// TCHECK-64-NEXT:    [[TMP2:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_]], align 82706// TCHECK-64-NEXT:    [[SUB:%.*]] = sub nsw i64 [[TMP2]], 02707// TCHECK-64-NEXT:    [[DIV:%.*]] = sdiv i64 [[SUB]], 12708// TCHECK-64-NEXT:    [[CONV2:%.*]] = trunc i64 [[DIV]] to i322709// TCHECK-64-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[CONV2]], 12710// TCHECK-64-NEXT:    store i32 [[SUB3]], i32* [[DOTCAPTURE_EXPR_1]], align 42711// TCHECK-64-NEXT:    store i32 0, i32* [[I]], align 42712// TCHECK-64-NEXT:    [[TMP3:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR_]], align 82713// TCHECK-64-NEXT:    [[CMP:%.*]] = icmp slt i64 0, [[TMP3]]2714// TCHECK-64-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2715// TCHECK-64:       omp.precond.then:2716// TCHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 42717// TCHECK-64-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42718// TCHECK-64-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_UB]], align 42719// TCHECK-64-NEXT:    [[TMP5:%.*]] = load i64, i64* [[DOTPREVIOUS_LB__ADDR]], align 82720// TCHECK-64-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP5]] to i322721// TCHECK-64-NEXT:    [[TMP6:%.*]] = load i64, i64* [[DOTPREVIOUS_UB__ADDR]], align 82722// TCHECK-64-NEXT:    [[CONV5:%.*]] = trunc i64 [[TMP6]] to i322723// TCHECK-64-NEXT:    store i32 [[CONV4]], i32* [[DOTOMP_LB]], align 42724// TCHECK-64-NEXT:    store i32 [[CONV5]], i32* [[DOTOMP_UB]], align 42725// TCHECK-64-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 42726// TCHECK-64-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 42727// TCHECK-64-NEXT:    [[TMP7:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 82728// TCHECK-64-NEXT:    [[TMP8:%.*]] = load i32, i32* [[TMP7]], align 42729// TCHECK-64-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP8]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)2730// TCHECK-64-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42731// TCHECK-64-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42732// TCHECK-64-NEXT:    [[CMP7:%.*]] = icmp sgt i32 [[TMP9]], [[TMP10]]2733// TCHECK-64-NEXT:    br i1 [[CMP7]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2734// TCHECK-64:       cond.true:2735// TCHECK-64-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42736// TCHECK-64-NEXT:    br label [[COND_END:%.*]]2737// TCHECK-64:       cond.false:2738// TCHECK-64-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42739// TCHECK-64-NEXT:    br label [[COND_END]]2740// TCHECK-64:       cond.end:2741// TCHECK-64-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP11]], [[COND_TRUE]] ], [ [[TMP12]], [[COND_FALSE]] ]2742// TCHECK-64-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 42743// TCHECK-64-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_LB]], align 42744// TCHECK-64-NEXT:    store i32 [[TMP13]], i32* [[DOTOMP_IV]], align 42745// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2746// TCHECK-64:       omp.inner.for.cond:2747// TCHECK-64-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42748// TCHECK-64-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42749// TCHECK-64-NEXT:    [[CMP8:%.*]] = icmp sle i32 [[TMP14]], [[TMP15]]2750// TCHECK-64-NEXT:    br i1 [[CMP8]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2751// TCHECK-64:       omp.inner.for.body:2752// TCHECK-64-NEXT:    [[TMP16:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42753// TCHECK-64-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP16]], 12754// TCHECK-64-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2755// TCHECK-64-NEXT:    store i32 [[ADD]], i32* [[I6]], align 42756// TCHECK-64-NEXT:    [[TMP17:%.*]] = load i32, i32* [[CONV]], align 42757// TCHECK-64-NEXT:    [[CONV9:%.*]] = sext i32 [[TMP17]] to i642758// TCHECK-64-NEXT:    [[TMP18:%.*]] = load i64*, i64** [[PLOCAL_ADDR]], align 82759// TCHECK-64-NEXT:    store i64 [[CONV9]], i64* [[TMP18]], align 82760// TCHECK-64-NEXT:    [[TMP19:%.*]] = load i32, i32* [[CONV]], align 42761// TCHECK-64-NEXT:    store i32 [[TMP19]], i32* @_ZZ3fooiE6local1, align 42762// TCHECK-64-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2763// TCHECK-64:       omp.body.continue:2764// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2765// TCHECK-64:       omp.inner.for.inc:2766// TCHECK-64-NEXT:    [[TMP20:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42767// TCHECK-64-NEXT:    [[ADD10:%.*]] = add nsw i32 [[TMP20]], 12768// TCHECK-64-NEXT:    store i32 [[ADD10]], i32* [[DOTOMP_IV]], align 42769// TCHECK-64-NEXT:    br label [[OMP_INNER_FOR_COND]]2770// TCHECK-64:       omp.inner.for.end:2771// TCHECK-64-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2772// TCHECK-64:       omp.loop.exit:2773// TCHECK-64-NEXT:    [[TMP21:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 82774// TCHECK-64-NEXT:    [[TMP22:%.*]] = load i32, i32* [[TMP21]], align 42775// TCHECK-64-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP22]])2776// TCHECK-64-NEXT:    br label [[OMP_PRECOND_END]]2777// TCHECK-64:       omp.precond.end:2778// TCHECK-64-NEXT:    ret void2779// TCHECK-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l662780// TCHECK-32-SAME: () #[[ATTR0:[0-9]+]] {2781// TCHECK-32-NEXT:  entry:2782// TCHECK-32-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*))2783// TCHECK-32-NEXT:    ret void2784// TCHECK-32-LABEL: define {{[^@]+}}@.omp_outlined.2785// TCHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {2786// TCHECK-32-NEXT:  entry:2787// TCHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 42788// TCHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 42789// TCHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42790// TCHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 42791// TCHECK-32-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42792// TCHECK-32-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42793// TCHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42794// TCHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42795// TCHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 42796// TCHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 42797// TCHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 42798// TCHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 42799// TCHECK-32-NEXT:    store i32 9, i32* [[DOTOMP_COMB_UB]], align 42800// TCHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 42801// TCHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 42802// TCHECK-32-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 42803// TCHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 42804// TCHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)2805// TCHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42806// TCHECK-32-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 92807// TCHECK-32-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2808// TCHECK-32:       cond.true:2809// TCHECK-32-NEXT:    br label [[COND_END:%.*]]2810// TCHECK-32:       cond.false:2811// TCHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42812// TCHECK-32-NEXT:    br label [[COND_END]]2813// TCHECK-32:       cond.end:2814// TCHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]2815// TCHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 42816// TCHECK-32-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42817// TCHECK-32-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_IV]], align 42818// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2819// TCHECK-32:       omp.inner.for.cond:2820// TCHECK-32-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42821// TCHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42822// TCHECK-32-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]2823// TCHECK-32-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2824// TCHECK-32:       omp.inner.for.body:2825// TCHECK-32-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42826// TCHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42827// TCHECK-32-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB3]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP7]], i32 [[TMP8]])2828// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2829// TCHECK-32:       omp.inner.for.inc:2830// TCHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42831// TCHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 42832// TCHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP9]], [[TMP10]]2833// TCHECK-32-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 42834// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]2835// TCHECK-32:       omp.inner.for.end:2836// TCHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2837// TCHECK-32:       omp.loop.exit:2838// TCHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 [[TMP1]])2839// TCHECK-32-NEXT:    ret void2840// TCHECK-32-LABEL: define {{[^@]+}}@.omp_outlined..12841// TCHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR0]] {2842// TCHECK-32-NEXT:  entry:2843// TCHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 42844// TCHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 42845// TCHECK-32-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 42846// TCHECK-32-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 42847// TCHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42848// TCHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 42849// TCHECK-32-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42850// TCHECK-32-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42851// TCHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42852// TCHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42853// TCHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 42854// TCHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 42855// TCHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 42856// TCHECK-32-NEXT:    store i32 [[DOTPREVIOUS_LB_]], i32* [[DOTPREVIOUS_LB__ADDR]], align 42857// TCHECK-32-NEXT:    store i32 [[DOTPREVIOUS_UB_]], i32* [[DOTPREVIOUS_UB__ADDR]], align 42858// TCHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 42859// TCHECK-32-NEXT:    store i32 9, i32* [[DOTOMP_UB]], align 42860// TCHECK-32-NEXT:    [[TMP0:%.*]] = load i32, i32* [[DOTPREVIOUS_LB__ADDR]], align 42861// TCHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[DOTPREVIOUS_UB__ADDR]], align 42862// TCHECK-32-NEXT:    store i32 [[TMP0]], i32* [[DOTOMP_LB]], align 42863// TCHECK-32-NEXT:    store i32 [[TMP1]], i32* [[DOTOMP_UB]], align 42864// TCHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 42865// TCHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 42866// TCHECK-32-NEXT:    [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 42867// TCHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 42868// TCHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP3]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)2869// TCHECK-32-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42870// TCHECK-32-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 92871// TCHECK-32-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2872// TCHECK-32:       cond.true:2873// TCHECK-32-NEXT:    br label [[COND_END:%.*]]2874// TCHECK-32:       cond.false:2875// TCHECK-32-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42876// TCHECK-32-NEXT:    br label [[COND_END]]2877// TCHECK-32:       cond.end:2878// TCHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ 9, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]2879// TCHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 42880// TCHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTOMP_LB]], align 42881// TCHECK-32-NEXT:    store i32 [[TMP6]], i32* [[DOTOMP_IV]], align 42882// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2883// TCHECK-32:       omp.inner.for.cond:2884// TCHECK-32-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42885// TCHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTOMP_UB]], align 42886// TCHECK-32-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]2887// TCHECK-32-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2888// TCHECK-32:       omp.inner.for.body:2889// TCHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42890// TCHECK-32-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 12891// TCHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2892// TCHECK-32-NEXT:    store i32 [[ADD]], i32* [[I]], align 42893// TCHECK-32-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2894// TCHECK-32:       omp.body.continue:2895// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2896// TCHECK-32:       omp.inner.for.inc:2897// TCHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42898// TCHECK-32-NEXT:    [[ADD2:%.*]] = add nsw i32 [[TMP10]], 12899// TCHECK-32-NEXT:    store i32 [[ADD2]], i32* [[DOTOMP_IV]], align 42900// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]2901// TCHECK-32:       omp.inner.for.end:2902// TCHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2903// TCHECK-32:       omp.loop.exit:2904// TCHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP3]])2905// TCHECK-32-NEXT:    ret void2906// TCHECK-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l762907// TCHECK-32-SAME: (i32* noundef [[PLOCAL:%.*]], i32 noundef [[GLOBAL:%.*]]) #[[ATTR0]] {2908// TCHECK-32-NEXT:  entry:2909// TCHECK-32-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i32*, align 42910// TCHECK-32-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i32, align 42911// TCHECK-32-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i32, align 42912// TCHECK-32-NEXT:    store i32* [[PLOCAL]], i32** [[PLOCAL_ADDR]], align 42913// TCHECK-32-NEXT:    store i32 [[GLOBAL]], i32* [[GLOBAL_ADDR]], align 42914// TCHECK-32-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 42915// TCHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 42916// TCHECK-32-NEXT:    store i32 [[TMP1]], i32* [[GLOBAL_CASTED]], align 42917// TCHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[GLOBAL_CASTED]], align 42918// TCHECK-32-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB3]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32* [[TMP0]], i32 [[TMP2]])2919// TCHECK-32-NEXT:    ret void2920// TCHECK-32-LABEL: define {{[^@]+}}@.omp_outlined..22921// TCHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i32* noundef [[PLOCAL:%.*]], i32 noundef [[GLOBAL:%.*]]) #[[ATTR0]] {2922// TCHECK-32-NEXT:  entry:2923// TCHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 42924// TCHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 42925// TCHECK-32-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i32*, align 42926// TCHECK-32-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i32, align 42927// TCHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42928// TCHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 42929// TCHECK-32-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42930// TCHECK-32-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42931// TCHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 42932// TCHECK-32-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42933// TCHECK-32-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42934// TCHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42935// TCHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42936// TCHECK-32-NEXT:    [[I3:%.*]] = alloca i32, align 42937// TCHECK-32-NEXT:    [[GLOBAL_CASTED:%.*]] = alloca i32, align 42938// TCHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 42939// TCHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 42940// TCHECK-32-NEXT:    store i32* [[PLOCAL]], i32** [[PLOCAL_ADDR]], align 42941// TCHECK-32-NEXT:    store i32 [[GLOBAL]], i32* [[GLOBAL_ADDR]], align 42942// TCHECK-32-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 42943// TCHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 42944// TCHECK-32-NEXT:    store i32 [[TMP1]], i32* [[DOTCAPTURE_EXPR_]], align 42945// TCHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 42946// TCHECK-32-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP2]], 02947// TCHECK-32-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12948// TCHECK-32-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12949// TCHECK-32-NEXT:    store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 42950// TCHECK-32-NEXT:    store i32 0, i32* [[I]], align 42951// TCHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 42952// TCHECK-32-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP3]]2953// TCHECK-32-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2954// TCHECK-32:       omp.precond.then:2955// TCHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_COMB_LB]], align 42956// TCHECK-32-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42957// TCHECK-32-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_COMB_UB]], align 42958// TCHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 42959// TCHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 42960// TCHECK-32-NEXT:    [[TMP5:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 42961// TCHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 42962// TCHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1]], i32 [[TMP6]], i32 92, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_COMB_LB]], i32* [[DOTOMP_COMB_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)2963// TCHECK-32-NEXT:    [[TMP7:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42964// TCHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42965// TCHECK-32-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP7]], [[TMP8]]2966// TCHECK-32-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2967// TCHECK-32:       cond.true:2968// TCHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 42969// TCHECK-32-NEXT:    br label [[COND_END:%.*]]2970// TCHECK-32:       cond.false:2971// TCHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42972// TCHECK-32-NEXT:    br label [[COND_END]]2973// TCHECK-32:       cond.end:2974// TCHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP9]], [[COND_TRUE]] ], [ [[TMP10]], [[COND_FALSE]] ]2975// TCHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_COMB_UB]], align 42976// TCHECK-32-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42977// TCHECK-32-NEXT:    store i32 [[TMP11]], i32* [[DOTOMP_IV]], align 42978// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2979// TCHECK-32:       omp.inner.for.cond:2980// TCHECK-32-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42981// TCHECK-32-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42982// TCHECK-32-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP12]], [[TMP13]]2983// TCHECK-32-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2984// TCHECK-32:       omp.inner.for.body:2985// TCHECK-32-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_COMB_LB]], align 42986// TCHECK-32-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_COMB_UB]], align 42987// TCHECK-32-NEXT:    [[TMP16:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 42988// TCHECK-32-NEXT:    [[TMP17:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 42989// TCHECK-32-NEXT:    store i32 [[TMP17]], i32* [[GLOBAL_CASTED]], align 42990// TCHECK-32-NEXT:    [[TMP18:%.*]] = load i32, i32* [[GLOBAL_CASTED]], align 42991// TCHECK-32-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB3]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP14]], i32 [[TMP15]], i32* [[TMP16]], i32 [[TMP18]])2992// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2993// TCHECK-32:       omp.inner.for.inc:2994// TCHECK-32-NEXT:    [[TMP19:%.*]] = load i32, i32* [[DOTOMP_IV]], align 42995// TCHECK-32-NEXT:    [[TMP20:%.*]] = load i32, i32* [[DOTOMP_STRIDE]], align 42996// TCHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]2997// TCHECK-32-NEXT:    store i32 [[ADD]], i32* [[DOTOMP_IV]], align 42998// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]2999// TCHECK-32:       omp.inner.for.end:3000// TCHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3001// TCHECK-32:       omp.loop.exit:3002// TCHECK-32-NEXT:    [[TMP21:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 43003// TCHECK-32-NEXT:    [[TMP22:%.*]] = load i32, i32* [[TMP21]], align 43004// TCHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP22]])3005// TCHECK-32-NEXT:    br label [[OMP_PRECOND_END]]3006// TCHECK-32:       omp.precond.end:3007// TCHECK-32-NEXT:    ret void3008// TCHECK-32-LABEL: define {{[^@]+}}@.omp_outlined..33009// TCHECK-32-SAME: (i32* noalias noundef [[DOTGLOBAL_TID_:%.*]], i32* noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], i32* noundef [[PLOCAL:%.*]], i32 noundef [[GLOBAL:%.*]]) #[[ATTR0]] {3010// TCHECK-32-NEXT:  entry:3011// TCHECK-32-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 43012// TCHECK-32-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 43013// TCHECK-32-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43014// TCHECK-32-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43015// TCHECK-32-NEXT:    [[PLOCAL_ADDR:%.*]] = alloca i32*, align 43016// TCHECK-32-NEXT:    [[GLOBAL_ADDR:%.*]] = alloca i32, align 43017// TCHECK-32-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43018// TCHECK-32-NEXT:    [[TMP:%.*]] = alloca i32, align 43019// TCHECK-32-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43020// TCHECK-32-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43021// TCHECK-32-NEXT:    [[I:%.*]] = alloca i32, align 43022// TCHECK-32-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43023// TCHECK-32-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43024// TCHECK-32-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43025// TCHECK-32-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43026// TCHECK-32-NEXT:    [[I3:%.*]] = alloca i32, align 43027// TCHECK-32-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 43028// TCHECK-32-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 43029// TCHECK-32-NEXT:    store i32 [[DOTPREVIOUS_LB_]], i32* [[DOTPREVIOUS_LB__ADDR]], align 43030// TCHECK-32-NEXT:    store i32 [[DOTPREVIOUS_UB_]], i32* [[DOTPREVIOUS_UB__ADDR]], align 43031// TCHECK-32-NEXT:    store i32* [[PLOCAL]], i32** [[PLOCAL_ADDR]], align 43032// TCHECK-32-NEXT:    store i32 [[GLOBAL]], i32* [[GLOBAL_ADDR]], align 43033// TCHECK-32-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 43034// TCHECK-32-NEXT:    [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 43035// TCHECK-32-NEXT:    store i32 [[TMP1]], i32* [[DOTCAPTURE_EXPR_]], align 43036// TCHECK-32-NEXT:    [[TMP2:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 43037// TCHECK-32-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP2]], 03038// TCHECK-32-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13039// TCHECK-32-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13040// TCHECK-32-NEXT:    store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 43041// TCHECK-32-NEXT:    store i32 0, i32* [[I]], align 43042// TCHECK-32-NEXT:    [[TMP3:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 43043// TCHECK-32-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP3]]3044// TCHECK-32-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3045// TCHECK-32:       omp.precond.then:3046// TCHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 43047// TCHECK-32-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 43048// TCHECK-32-NEXT:    store i32 [[TMP4]], i32* [[DOTOMP_UB]], align 43049// TCHECK-32-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTPREVIOUS_LB__ADDR]], align 43050// TCHECK-32-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTPREVIOUS_UB__ADDR]], align 43051// TCHECK-32-NEXT:    store i32 [[TMP5]], i32* [[DOTOMP_LB]], align 43052// TCHECK-32-NEXT:    store i32 [[TMP6]], i32* [[DOTOMP_UB]], align 43053// TCHECK-32-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 43054// TCHECK-32-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 43055// TCHECK-32-NEXT:    [[TMP7:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 43056// TCHECK-32-NEXT:    [[TMP8:%.*]] = load i32, i32* [[TMP7]], align 43057// TCHECK-32-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB2]], i32 [[TMP8]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1)3058// TCHECK-32-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_UB]], align 43059// TCHECK-32-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 43060// TCHECK-32-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP9]], [[TMP10]]3061// TCHECK-32-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3062// TCHECK-32:       cond.true:3063// TCHECK-32-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 43064// TCHECK-32-NEXT:    br label [[COND_END:%.*]]3065// TCHECK-32:       cond.false:3066// TCHECK-32-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_UB]], align 43067// TCHECK-32-NEXT:    br label [[COND_END]]3068// TCHECK-32:       cond.end:3069// TCHECK-32-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP11]], [[COND_TRUE]] ], [ [[TMP12]], [[COND_FALSE]] ]3070// TCHECK-32-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 43071// TCHECK-32-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_LB]], align 43072// TCHECK-32-NEXT:    store i32 [[TMP13]], i32* [[DOTOMP_IV]], align 43073// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3074// TCHECK-32:       omp.inner.for.cond:3075// TCHECK-32-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IV]], align 43076// TCHECK-32-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_UB]], align 43077// TCHECK-32-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP14]], [[TMP15]]3078// TCHECK-32-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3079// TCHECK-32:       omp.inner.for.body:3080// TCHECK-32-NEXT:    [[TMP16:%.*]] = load i32, i32* [[DOTOMP_IV]], align 43081// TCHECK-32-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP16]], 13082// TCHECK-32-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3083// TCHECK-32-NEXT:    store i32 [[ADD]], i32* [[I3]], align 43084// TCHECK-32-NEXT:    [[TMP17:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 43085// TCHECK-32-NEXT:    [[TMP18:%.*]] = load i32*, i32** [[PLOCAL_ADDR]], align 43086// TCHECK-32-NEXT:    store i32 [[TMP17]], i32* [[TMP18]], align 43087// TCHECK-32-NEXT:    [[TMP19:%.*]] = load i32, i32* [[GLOBAL_ADDR]], align 43088// TCHECK-32-NEXT:    store i32 [[TMP19]], i32* @_ZZ3fooiE6local1, align 43089// TCHECK-32-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3090// TCHECK-32:       omp.body.continue:3091// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3092// TCHECK-32:       omp.inner.for.inc:3093// TCHECK-32-NEXT:    [[TMP20:%.*]] = load i32, i32* [[DOTOMP_IV]], align 43094// TCHECK-32-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP20]], 13095// TCHECK-32-NEXT:    store i32 [[ADD6]], i32* [[DOTOMP_IV]], align 43096// TCHECK-32-NEXT:    br label [[OMP_INNER_FOR_COND]]3097// TCHECK-32:       omp.inner.for.end:3098// TCHECK-32-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3099// TCHECK-32:       omp.loop.exit:3100// TCHECK-32-NEXT:    [[TMP21:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 43101// TCHECK-32-NEXT:    [[TMP22:%.*]] = load i32, i32* [[TMP21]], align 43102// TCHECK-32-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB2]], i32 [[TMP22]])3103// TCHECK-32-NEXT:    br label [[OMP_PRECOND_END]]3104// TCHECK-32:       omp.precond.end:3105// TCHECK-32-NEXT:    ret void3106// CHECK-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l663107// CHECK-SAME: () #[[ATTR2:[0-9]+]] {3108// CHECK-NEXT:  entry:3109// CHECK-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3:[0-9]+]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l66.omp_outlined)3110// CHECK-NEXT:    ret void3111//3112//3113//3114//3115//3116//3117//3118//3119//3120//3121//3122//3123//3124//3125//3126//3127//3128//3129//3130//3131//3132//3133//3134//3135//3136//3137//3138//3139//3140//3141//3142//3143//3144//3145//3146//3147//3148//3149//3150//3151//3152//3153//3154//3155//3156//3157//3158//3159//3160//3161//3162//3163//3164//3165//3166//3167//3168//3169//3170//3171//3172//3173//3174//3175//3176//3177//3178//3179//3180//3181//3182//3183//3184//3185//3186//3187//3188//3189//3190//3191//3192//3193//3194//3195//3196//3197//3198//3199//3200//3201//3202//3203//3204//3205//3206//3207//// NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3208// SIMD-ONLY0: {{.*}}3209// SIMD-ONLY1: {{.*}}3210// TCHECK: {{.*}}3211