brintos

brintos / llvm-project-archived public Read only

0
0
Text · 505.9 KiB · bf979d7 Raw
7499 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _2// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --check-prefix=CHECK13// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s4// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK15 6// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"7// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s8// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"9 10// RUN: %clang_cc1 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --check-prefix=CHECK511// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s12// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK513 14// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"15// RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s16// RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"17 18// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple aarch64-unknown-unknown -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --check-prefix=CHECK919// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple aarch64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s20// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple aarch64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK921 22// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple aarch64-unknown-unknown -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"23// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple aarch64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s24// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple aarch64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"25 26// RUN: %clang_cc1 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple aarch64-unknown-unknown -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --check-prefix=CHECK1327// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple aarch64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s28// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple aarch64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK1329 30// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple aarch64-unknown-unknown -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"31// RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple aarch64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s32// RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple aarch64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"33 34// expected-no-diagnostics35#ifndef HEADER36#define HEADER37 38typedef __INTPTR_TYPE__ intptr_t;39 40 41void foo();42 43struct S {44  intptr_t a, b, c;45  S(intptr_t a) : a(a) {}46  operator char() { extern void mayThrow(); mayThrow(); return a; }47  ~S() {}48};49 50template <typename T, int C>51int tmain() {52#pragma omp target53#pragma omp teams54#pragma omp distribute parallel for num_threads(C)55  for (int i = 0; i < 100; i++)56    foo();57#pragma omp target58#pragma omp teams59#pragma omp distribute parallel for num_threads(T(23))60  for (int i = 0; i < 100; i++)61    foo();62  return 0;63}64 65int main() {66  S s(0);67  char a = s;68#pragma omp target69#pragma omp teams70#pragma omp distribute parallel for num_threads(2)71  for (int i = 0; i < 100; i++) {72    foo();73  }74#pragma omp target75#pragma omp teams76 77#pragma omp distribute parallel for num_threads(a)78  for (int i = 0; i < 100; i++) {79    foo();80  }81  return a + tmain<char, 5>() + tmain<S, 1>();82}83 84// tmain 585 86// tmain 187 88 89 90 91 92 93 94 95#endif96// CHECK3-LABEL: define {{[^@]+}}@main97// CHECK3-SAME: () #[[ATTR0:[0-9]+]] personality ptr @__gxx_personality_v0 {98// CHECK3-NEXT:  entry:99// CHECK3-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4100// CHECK3-NEXT:    [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 8101// CHECK3-NEXT:    [[A:%.*]] = alloca i8, align 1102// CHECK3-NEXT:    [[EXN_SLOT:%.*]] = alloca ptr, align 8103// CHECK3-NEXT:    [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 4104// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4105// CHECK3-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8106// CHECK3-NEXT:    [[A_CASTED:%.*]] = alloca i64, align 8107// CHECK3-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8108// CHECK3-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8109// CHECK3-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8110// CHECK3-NEXT:    [[_TMP1:%.*]] = alloca i32, align 4111// CHECK3-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8112// CHECK3-NEXT:    store i32 0, ptr [[RETVAL]], align 4113// CHECK3-NEXT:    call void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[S]], i64 noundef 0)114// CHECK3-NEXT:    [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[S]])115// CHECK3-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]116// CHECK3:       invoke.cont:117// CHECK3-NEXT:    store i8 [[CALL]], ptr [[A]], align 1118// CHECK3-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0119// CHECK3-NEXT:    store i32 3, ptr [[TMP0]], align 4120// CHECK3-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1121// CHECK3-NEXT:    store i32 0, ptr [[TMP1]], align 4122// CHECK3-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2123// CHECK3-NEXT:    store ptr null, ptr [[TMP2]], align 8124// CHECK3-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3125// CHECK3-NEXT:    store ptr null, ptr [[TMP3]], align 8126// CHECK3-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4127// CHECK3-NEXT:    store ptr null, ptr [[TMP4]], align 8128// CHECK3-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5129// CHECK3-NEXT:    store ptr null, ptr [[TMP5]], align 8130// CHECK3-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6131// CHECK3-NEXT:    store ptr null, ptr [[TMP6]], align 8132// CHECK3-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7133// CHECK3-NEXT:    store ptr null, ptr [[TMP7]], align 8134// CHECK3-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8135// CHECK3-NEXT:    store i64 100, ptr [[TMP8]], align 8136// CHECK3-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9137// CHECK3-NEXT:    store i64 0, ptr [[TMP9]], align 8138// CHECK3-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10139// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 4140// CHECK3-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11141// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 4142// CHECK3-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12143// CHECK3-NEXT:    store i32 0, ptr [[TMP12]], align 4144// CHECK3-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.region_id, ptr [[KERNEL_ARGS]])145// CHECK3-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 0146// CHECK3-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]147// CHECK3:       omp_offload.failed:148// CHECK3-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92() #[[ATTR3:[0-9]+]]149// CHECK3-NEXT:    br label [[OMP_OFFLOAD_CONT]]150// CHECK3:       lpad:151// CHECK3-NEXT:    [[TMP15:%.*]] = landingpad { ptr, i32 }152// CHECK3-NEXT:            cleanup153// CHECK3-NEXT:    [[TMP16:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 0154// CHECK3-NEXT:    store ptr [[TMP16]], ptr [[EXN_SLOT]], align 8155// CHECK3-NEXT:    [[TMP17:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 1156// CHECK3-NEXT:    store i32 [[TMP17]], ptr [[EHSELECTOR_SLOT]], align 4157// CHECK3-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]158// CHECK3-NEXT:    br label [[EH_RESUME:%.*]]159// CHECK3:       omp_offload.cont:160// CHECK3-NEXT:    [[TMP18:%.*]] = load i8, ptr [[A]], align 1161// CHECK3-NEXT:    store i8 [[TMP18]], ptr [[A_CASTED]], align 1162// CHECK3-NEXT:    [[TMP19:%.*]] = load i64, ptr [[A_CASTED]], align 8163// CHECK3-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0164// CHECK3-NEXT:    store i64 [[TMP19]], ptr [[TMP20]], align 8165// CHECK3-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0166// CHECK3-NEXT:    store i64 [[TMP19]], ptr [[TMP21]], align 8167// CHECK3-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0168// CHECK3-NEXT:    store ptr null, ptr [[TMP22]], align 8169// CHECK3-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0170// CHECK3-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0171// CHECK3-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 0172// CHECK3-NEXT:    store i32 3, ptr [[TMP25]], align 4173// CHECK3-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 1174// CHECK3-NEXT:    store i32 1, ptr [[TMP26]], align 4175// CHECK3-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 2176// CHECK3-NEXT:    store ptr [[TMP23]], ptr [[TMP27]], align 8177// CHECK3-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 3178// CHECK3-NEXT:    store ptr [[TMP24]], ptr [[TMP28]], align 8179// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 4180// CHECK3-NEXT:    store ptr @.offload_sizes, ptr [[TMP29]], align 8181// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 5182// CHECK3-NEXT:    store ptr @.offload_maptypes, ptr [[TMP30]], align 8183// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 6184// CHECK3-NEXT:    store ptr null, ptr [[TMP31]], align 8185// CHECK3-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 7186// CHECK3-NEXT:    store ptr null, ptr [[TMP32]], align 8187// CHECK3-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 8188// CHECK3-NEXT:    store i64 100, ptr [[TMP33]], align 8189// CHECK3-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 9190// CHECK3-NEXT:    store i64 0, ptr [[TMP34]], align 8191// CHECK3-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 10192// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP35]], align 4193// CHECK3-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 11194// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP36]], align 4195// CHECK3-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 12196// CHECK3-NEXT:    store i32 0, ptr [[TMP37]], align 4197// CHECK3-NEXT:    [[TMP38:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.region_id, ptr [[KERNEL_ARGS2]])198// CHECK3-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 0199// CHECK3-NEXT:    br i1 [[TMP39]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]200// CHECK3:       omp_offload.failed3:201// CHECK3-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102(i64 [[TMP19]]) #[[ATTR3]]202// CHECK3-NEXT:    br label [[OMP_OFFLOAD_CONT4]]203// CHECK3:       omp_offload.cont4:204// CHECK3-NEXT:    [[TMP40:%.*]] = load i8, ptr [[A]], align 1205// CHECK3-NEXT:    [[CONV:%.*]] = sext i8 [[TMP40]] to i32206// CHECK3-NEXT:    [[CALL6:%.*]] = invoke noundef i32 @_Z5tmainIcLi5EEiv()207// CHECK3-NEXT:            to label [[INVOKE_CONT5:%.*]] unwind label [[LPAD]]208// CHECK3:       invoke.cont5:209// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CALL6]]210// CHECK3-NEXT:    [[CALL8:%.*]] = invoke noundef i32 @_Z5tmainI1SLi1EEiv()211// CHECK3-NEXT:            to label [[INVOKE_CONT7:%.*]] unwind label [[LPAD]]212// CHECK3:       invoke.cont7:213// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[ADD]], [[CALL8]]214// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[RETVAL]], align 4215// CHECK3-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]216// CHECK3-NEXT:    [[TMP41:%.*]] = load i32, ptr [[RETVAL]], align 4217// CHECK3-NEXT:    ret i32 [[TMP41]]218// CHECK3:       eh.resume:219// CHECK3-NEXT:    [[EXN:%.*]] = load ptr, ptr [[EXN_SLOT]], align 8220// CHECK3-NEXT:    [[SEL:%.*]] = load i32, ptr [[EHSELECTOR_SLOT]], align 4221// CHECK3-NEXT:    [[LPAD_VAL:%.*]] = insertvalue { ptr, i32 } poison, ptr [[EXN]], 0222// CHECK3-NEXT:    [[LPAD_VAL10:%.*]] = insertvalue { ptr, i32 } [[LPAD_VAL]], i32 [[SEL]], 1223// CHECK3-NEXT:    resume { ptr, i32 } [[LPAD_VAL10]]224// CHECK3-LABEL: define {{[^@]+}}@_ZN1SC1El225// CHECK3-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {226// CHECK3-NEXT:  entry:227// CHECK3-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8228// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 8229// CHECK3-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8230// CHECK3-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 8231// CHECK3-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8232// CHECK3-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 8233// CHECK3-NEXT:    call void @_ZN1SC2El(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]], i64 noundef [[TMP0]])234// CHECK3-NEXT:    ret void235// CHECK3-LABEL: define {{[^@]+}}@_ZN1ScvcEv236// CHECK3-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 {237// CHECK3-NEXT:  entry:238// CHECK3-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8239// CHECK3-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8240// CHECK3-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8241// CHECK3-NEXT:    call void @_Z8mayThrowv()242// CHECK3-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0243// CHECK3-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A]], align 8244// CHECK3-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i8245// CHECK3-NEXT:    ret i8 [[CONV]]246// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92247// CHECK3-SAME: () #[[ATTR2:[0-9]+]] {248// CHECK3-NEXT:  entry:249// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.omp_outlined)250// CHECK3-NEXT:    ret void251// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.omp_outlined252// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {253// CHECK3-NEXT:  entry:254// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8255// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8256// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4257// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4258// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4259// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4260// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4261// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4262// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 4263// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8264// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8265// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 4266// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 4267// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4268// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4269// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8270// CHECK3-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4271// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)272// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4273// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 99274// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]275// CHECK3:       cond.true:276// CHECK3-NEXT:    br label [[COND_END:%.*]]277// CHECK3:       cond.false:278// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4279// CHECK3-NEXT:    br label [[COND_END]]280// CHECK3:       cond.end:281// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]282// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 4283// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4284// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4285// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]286// CHECK3:       omp.inner.for.cond:287// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4288// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4289// CHECK3-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]290// CHECK3-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]291// CHECK3:       omp.inner.for.body:292// CHECK3-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 2)293// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4294// CHECK3-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i64295// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4296// CHECK3-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i64297// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])298// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]299// CHECK3:       omp.inner.for.inc:300// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4301// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4302// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]303// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4304// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]305// CHECK3:       omp.inner.for.end:306// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]307// CHECK3:       omp.loop.exit:308// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])309// CHECK3-NEXT:    ret void310// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.omp_outlined.omp_outlined311// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {312// CHECK3-NEXT:  entry:313// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8314// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8315// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8316// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8317// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4318// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4319// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4320// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4321// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4322// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4323// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 4324// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8325// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8326// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 8327// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 8328// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4329// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 4330// CHECK3-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 8331// CHECK3-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i32332// CHECK3-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 8333// CHECK3-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i32334// CHECK3-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 4335// CHECK3-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 4336// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4337// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4338// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8339// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4340// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)341// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4342// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 99343// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]344// CHECK3:       cond.true:345// CHECK3-NEXT:    br label [[COND_END:%.*]]346// CHECK3:       cond.false:347// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4348// CHECK3-NEXT:    br label [[COND_END]]349// CHECK3:       cond.end:350// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]351// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4352// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4353// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 4354// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]355// CHECK3:       omp.inner.for.cond:356// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4357// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4358// CHECK3-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]359// CHECK3-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]360// CHECK3:       omp.inner.for.body:361// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4362// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 1363// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]364// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I]], align 4365// CHECK3-NEXT:    invoke void @_Z3foov()366// CHECK3-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]367// CHECK3:       invoke.cont:368// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]369// CHECK3:       omp.body.continue:370// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]371// CHECK3:       omp.inner.for.inc:372// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4373// CHECK3-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 1374// CHECK3-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4375// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]376// CHECK3:       omp.inner.for.end:377// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]378// CHECK3:       omp.loop.exit:379// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])380// CHECK3-NEXT:    ret void381// CHECK3:       terminate.lpad:382// CHECK3-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }383// CHECK3-NEXT:            catch ptr null384// CHECK3-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 0385// CHECK3-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7:[0-9]+]]386// CHECK3-NEXT:    unreachable387// CHECK3-LABEL: define {{[^@]+}}@__clang_call_terminate388// CHECK3-SAME: (ptr noundef [[TMP0:%.*]]) #[[ATTR5:[0-9]+]] comdat {389// CHECK3-NEXT:    [[TMP2:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP0]]) #[[ATTR3]]390// CHECK3-NEXT:    call void @_ZSt9terminatev() #[[ATTR7]]391// CHECK3-NEXT:    unreachable392// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102393// CHECK3-SAME: (i64 noundef [[A:%.*]]) #[[ATTR2]] {394// CHECK3-NEXT:  entry:395// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 8396// CHECK3-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 8397// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.omp_outlined, ptr [[A_ADDR]])398// CHECK3-NEXT:    ret void399// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.omp_outlined400// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 1 dereferenceable(1) [[A:%.*]]) #[[ATTR2]] {401// CHECK3-NEXT:  entry:402// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8403// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8404// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8405// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4406// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4407// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4408// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4409// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4410// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4411// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 4412// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8413// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8414// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8415// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8, !nonnull [[META17:![0-9]+]]416// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 4417// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 4418// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4419// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4420// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8421// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 4422// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)423// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4424// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 99425// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]426// CHECK3:       cond.true:427// CHECK3-NEXT:    br label [[COND_END:%.*]]428// CHECK3:       cond.false:429// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4430// CHECK3-NEXT:    br label [[COND_END]]431// CHECK3:       cond.end:432// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]433// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 4434// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4435// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 4436// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]437// CHECK3:       omp.inner.for.cond:438// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4439// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4440// CHECK3-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]441// CHECK3-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]442// CHECK3:       omp.inner.for.body:443// CHECK3-NEXT:    [[TMP8:%.*]] = load i8, ptr [[TMP0]], align 1444// CHECK3-NEXT:    [[TMP9:%.*]] = sext i8 [[TMP8]] to i32445// CHECK3-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP2]], i32 [[TMP9]])446// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4447// CHECK3-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i64448// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4449// CHECK3-NEXT:    [[TMP13:%.*]] = zext i32 [[TMP12]] to i64450// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.omp_outlined.omp_outlined, i64 [[TMP11]], i64 [[TMP13]])451// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]452// CHECK3:       omp.inner.for.inc:453// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4454// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4455// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]456// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4457// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]458// CHECK3:       omp.inner.for.end:459// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]460// CHECK3:       omp.loop.exit:461// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])462// CHECK3-NEXT:    ret void463// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.omp_outlined.omp_outlined464// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {465// CHECK3-NEXT:  entry:466// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8467// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8468// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8469// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8470// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4471// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4472// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4473// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4474// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4475// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4476// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 4477// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8478// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8479// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 8480// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 8481// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4482// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 4483// CHECK3-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 8484// CHECK3-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i32485// CHECK3-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 8486// CHECK3-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i32487// CHECK3-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 4488// CHECK3-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 4489// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4490// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4491// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8492// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4493// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)494// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4495// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 99496// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]497// CHECK3:       cond.true:498// CHECK3-NEXT:    br label [[COND_END:%.*]]499// CHECK3:       cond.false:500// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4501// CHECK3-NEXT:    br label [[COND_END]]502// CHECK3:       cond.end:503// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]504// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4505// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4506// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 4507// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]508// CHECK3:       omp.inner.for.cond:509// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4510// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4511// CHECK3-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]512// CHECK3-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]513// CHECK3:       omp.inner.for.body:514// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4515// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 1516// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]517// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I]], align 4518// CHECK3-NEXT:    invoke void @_Z3foov()519// CHECK3-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]520// CHECK3:       invoke.cont:521// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]522// CHECK3:       omp.body.continue:523// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]524// CHECK3:       omp.inner.for.inc:525// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4526// CHECK3-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 1527// CHECK3-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4528// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]529// CHECK3:       omp.inner.for.end:530// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]531// CHECK3:       omp.loop.exit:532// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])533// CHECK3-NEXT:    ret void534// CHECK3:       terminate.lpad:535// CHECK3-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }536// CHECK3-NEXT:            catch ptr null537// CHECK3-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 0538// CHECK3-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]539// CHECK3-NEXT:    unreachable540// CHECK3-LABEL: define {{[^@]+}}@_Z5tmainIcLi5EEiv541// CHECK3-SAME: () #[[ATTR6:[0-9]+]] comdat {542// CHECK3-NEXT:  entry:543// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4544// CHECK3-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8545// CHECK3-NEXT:    [[_TMP1:%.*]] = alloca i32, align 4546// CHECK3-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8547// CHECK3-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0548// CHECK3-NEXT:    store i32 3, ptr [[TMP0]], align 4549// CHECK3-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1550// CHECK3-NEXT:    store i32 0, ptr [[TMP1]], align 4551// CHECK3-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2552// CHECK3-NEXT:    store ptr null, ptr [[TMP2]], align 8553// CHECK3-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3554// CHECK3-NEXT:    store ptr null, ptr [[TMP3]], align 8555// CHECK3-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4556// CHECK3-NEXT:    store ptr null, ptr [[TMP4]], align 8557// CHECK3-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5558// CHECK3-NEXT:    store ptr null, ptr [[TMP5]], align 8559// CHECK3-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6560// CHECK3-NEXT:    store ptr null, ptr [[TMP6]], align 8561// CHECK3-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7562// CHECK3-NEXT:    store ptr null, ptr [[TMP7]], align 8563// CHECK3-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8564// CHECK3-NEXT:    store i64 100, ptr [[TMP8]], align 8565// CHECK3-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9566// CHECK3-NEXT:    store i64 0, ptr [[TMP9]], align 8567// CHECK3-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10568// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 4569// CHECK3-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11570// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 4571// CHECK3-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12572// CHECK3-NEXT:    store i32 0, ptr [[TMP12]], align 4573// CHECK3-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.region_id, ptr [[KERNEL_ARGS]])574// CHECK3-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 0575// CHECK3-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]576// CHECK3:       omp_offload.failed:577// CHECK3-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68() #[[ATTR3]]578// CHECK3-NEXT:    br label [[OMP_OFFLOAD_CONT]]579// CHECK3:       omp_offload.cont:580// CHECK3-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 0581// CHECK3-NEXT:    store i32 3, ptr [[TMP15]], align 4582// CHECK3-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 1583// CHECK3-NEXT:    store i32 0, ptr [[TMP16]], align 4584// CHECK3-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 2585// CHECK3-NEXT:    store ptr null, ptr [[TMP17]], align 8586// CHECK3-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 3587// CHECK3-NEXT:    store ptr null, ptr [[TMP18]], align 8588// CHECK3-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 4589// CHECK3-NEXT:    store ptr null, ptr [[TMP19]], align 8590// CHECK3-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 5591// CHECK3-NEXT:    store ptr null, ptr [[TMP20]], align 8592// CHECK3-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 6593// CHECK3-NEXT:    store ptr null, ptr [[TMP21]], align 8594// CHECK3-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 7595// CHECK3-NEXT:    store ptr null, ptr [[TMP22]], align 8596// CHECK3-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 8597// CHECK3-NEXT:    store i64 100, ptr [[TMP23]], align 8598// CHECK3-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 9599// CHECK3-NEXT:    store i64 0, ptr [[TMP24]], align 8600// CHECK3-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 10601// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 4602// CHECK3-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 11603// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 4604// CHECK3-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 12605// CHECK3-NEXT:    store i32 0, ptr [[TMP27]], align 4606// CHECK3-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.region_id, ptr [[KERNEL_ARGS2]])607// CHECK3-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0608// CHECK3-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]609// CHECK3:       omp_offload.failed3:610// CHECK3-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77() #[[ATTR3]]611// CHECK3-NEXT:    br label [[OMP_OFFLOAD_CONT4]]612// CHECK3:       omp_offload.cont4:613// CHECK3-NEXT:    ret i32 0614// CHECK3-LABEL: define {{[^@]+}}@_Z5tmainI1SLi1EEiv615// CHECK3-SAME: () #[[ATTR6]] comdat {616// CHECK3-NEXT:  entry:617// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4618// CHECK3-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8619// CHECK3-NEXT:    [[_TMP1:%.*]] = alloca i32, align 4620// CHECK3-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8621// CHECK3-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0622// CHECK3-NEXT:    store i32 3, ptr [[TMP0]], align 4623// CHECK3-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1624// CHECK3-NEXT:    store i32 0, ptr [[TMP1]], align 4625// CHECK3-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2626// CHECK3-NEXT:    store ptr null, ptr [[TMP2]], align 8627// CHECK3-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3628// CHECK3-NEXT:    store ptr null, ptr [[TMP3]], align 8629// CHECK3-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4630// CHECK3-NEXT:    store ptr null, ptr [[TMP4]], align 8631// CHECK3-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5632// CHECK3-NEXT:    store ptr null, ptr [[TMP5]], align 8633// CHECK3-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6634// CHECK3-NEXT:    store ptr null, ptr [[TMP6]], align 8635// CHECK3-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7636// CHECK3-NEXT:    store ptr null, ptr [[TMP7]], align 8637// CHECK3-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8638// CHECK3-NEXT:    store i64 100, ptr [[TMP8]], align 8639// CHECK3-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9640// CHECK3-NEXT:    store i64 0, ptr [[TMP9]], align 8641// CHECK3-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10642// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 4643// CHECK3-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11644// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 4645// CHECK3-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12646// CHECK3-NEXT:    store i32 0, ptr [[TMP12]], align 4647// CHECK3-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.region_id, ptr [[KERNEL_ARGS]])648// CHECK3-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 0649// CHECK3-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]650// CHECK3:       omp_offload.failed:651// CHECK3-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68() #[[ATTR3]]652// CHECK3-NEXT:    br label [[OMP_OFFLOAD_CONT]]653// CHECK3:       omp_offload.cont:654// CHECK3-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 0655// CHECK3-NEXT:    store i32 3, ptr [[TMP15]], align 4656// CHECK3-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 1657// CHECK3-NEXT:    store i32 0, ptr [[TMP16]], align 4658// CHECK3-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 2659// CHECK3-NEXT:    store ptr null, ptr [[TMP17]], align 8660// CHECK3-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 3661// CHECK3-NEXT:    store ptr null, ptr [[TMP18]], align 8662// CHECK3-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 4663// CHECK3-NEXT:    store ptr null, ptr [[TMP19]], align 8664// CHECK3-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 5665// CHECK3-NEXT:    store ptr null, ptr [[TMP20]], align 8666// CHECK3-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 6667// CHECK3-NEXT:    store ptr null, ptr [[TMP21]], align 8668// CHECK3-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 7669// CHECK3-NEXT:    store ptr null, ptr [[TMP22]], align 8670// CHECK3-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 8671// CHECK3-NEXT:    store i64 100, ptr [[TMP23]], align 8672// CHECK3-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 9673// CHECK3-NEXT:    store i64 0, ptr [[TMP24]], align 8674// CHECK3-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 10675// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 4676// CHECK3-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 11677// CHECK3-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 4678// CHECK3-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 12679// CHECK3-NEXT:    store i32 0, ptr [[TMP27]], align 4680// CHECK3-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.region_id, ptr [[KERNEL_ARGS2]])681// CHECK3-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0682// CHECK3-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]683// CHECK3:       omp_offload.failed3:684// CHECK3-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77() #[[ATTR3]]685// CHECK3-NEXT:    br label [[OMP_OFFLOAD_CONT4]]686// CHECK3:       omp_offload.cont4:687// CHECK3-NEXT:    ret i32 0688// CHECK3-LABEL: define {{[^@]+}}@_ZN1SD1Ev689// CHECK3-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat align 2 {690// CHECK3-NEXT:  entry:691// CHECK3-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8692// CHECK3-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8693// CHECK3-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8694// CHECK3-NEXT:    call void @_ZN1SD2Ev(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]]) #[[ATTR3]]695// CHECK3-NEXT:    ret void696// CHECK3-LABEL: define {{[^@]+}}@_ZN1SC2El697// CHECK3-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR6]] comdat align 2 {698// CHECK3-NEXT:  entry:699// CHECK3-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8700// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 8701// CHECK3-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8702// CHECK3-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 8703// CHECK3-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8704// CHECK3-NEXT:    [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 0705// CHECK3-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 8706// CHECK3-NEXT:    store i64 [[TMP0]], ptr [[A2]], align 8707// CHECK3-NEXT:    ret void708// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68709// CHECK3-SAME: () #[[ATTR2]] {710// CHECK3-NEXT:  entry:711// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.omp_outlined)712// CHECK3-NEXT:    ret void713// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.omp_outlined714// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {715// CHECK3-NEXT:  entry:716// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8717// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8718// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4719// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4720// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4721// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4722// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4723// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4724// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 4725// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8726// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8727// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 4728// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 4729// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4730// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4731// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8732// CHECK3-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4733// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)734// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4735// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 99736// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]737// CHECK3:       cond.true:738// CHECK3-NEXT:    br label [[COND_END:%.*]]739// CHECK3:       cond.false:740// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4741// CHECK3-NEXT:    br label [[COND_END]]742// CHECK3:       cond.end:743// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]744// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 4745// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4746// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4747// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]748// CHECK3:       omp.inner.for.cond:749// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4750// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4751// CHECK3-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]752// CHECK3-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]753// CHECK3:       omp.inner.for.body:754// CHECK3-NEXT:    call void @__kmpc_push_num_threads_strict(ptr @[[GLOB3]], i32 [[TMP1]], i32 5, i32 1, ptr @.str)755// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4756// CHECK3-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i64757// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4758// CHECK3-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i64759// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])760// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]761// CHECK3:       omp.inner.for.inc:762// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4763// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4764// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]765// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4766// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]767// CHECK3:       omp.inner.for.end:768// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]769// CHECK3:       omp.loop.exit:770// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])771// CHECK3-NEXT:    ret void772// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.omp_outlined.omp_outlined773// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {774// CHECK3-NEXT:  entry:775// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8776// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8777// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8778// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8779// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4780// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4781// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4782// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4783// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4784// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4785// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 4786// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8787// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8788// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 8789// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 8790// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4791// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 4792// CHECK3-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 8793// CHECK3-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i32794// CHECK3-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 8795// CHECK3-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i32796// CHECK3-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 4797// CHECK3-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 4798// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4799// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4800// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8801// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4802// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)803// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4804// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 99805// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]806// CHECK3:       cond.true:807// CHECK3-NEXT:    br label [[COND_END:%.*]]808// CHECK3:       cond.false:809// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4810// CHECK3-NEXT:    br label [[COND_END]]811// CHECK3:       cond.end:812// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]813// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4814// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4815// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 4816// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]817// CHECK3:       omp.inner.for.cond:818// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4819// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4820// CHECK3-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]821// CHECK3-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]822// CHECK3:       omp.inner.for.body:823// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4824// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 1825// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]826// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I]], align 4827// CHECK3-NEXT:    invoke void @_Z3foov()828// CHECK3-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]829// CHECK3:       invoke.cont:830// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]831// CHECK3:       omp.body.continue:832// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]833// CHECK3:       omp.inner.for.inc:834// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4835// CHECK3-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 1836// CHECK3-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4837// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]838// CHECK3:       omp.inner.for.end:839// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]840// CHECK3:       omp.loop.exit:841// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])842// CHECK3-NEXT:    ret void843// CHECK3:       terminate.lpad:844// CHECK3-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }845// CHECK3-NEXT:            catch ptr null846// CHECK3-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 0847// CHECK3-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]848// CHECK3-NEXT:    unreachable849// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77850// CHECK3-SAME: () #[[ATTR2]] {851// CHECK3-NEXT:  entry:852// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.omp_outlined)853// CHECK3-NEXT:    ret void854// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.omp_outlined855// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {856// CHECK3-NEXT:  entry:857// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8858// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8859// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4860// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4861// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4862// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4863// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4864// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4865// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 4866// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8867// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8868// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 4869// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 4870// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4871// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4872// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8873// CHECK3-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4874// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)875// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4876// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 99877// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]878// CHECK3:       cond.true:879// CHECK3-NEXT:    br label [[COND_END:%.*]]880// CHECK3:       cond.false:881// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4882// CHECK3-NEXT:    br label [[COND_END]]883// CHECK3:       cond.end:884// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]885// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 4886// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4887// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 4888// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]889// CHECK3:       omp.inner.for.cond:890// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4891// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4892// CHECK3-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]893// CHECK3-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]894// CHECK3:       omp.inner.for.body:895// CHECK3-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 23)896// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4897// CHECK3-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i64898// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4899// CHECK3-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i64900// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])901// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]902// CHECK3:       omp.inner.for.inc:903// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4904// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4905// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]906// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4907// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]908// CHECK3:       omp.inner.for.end:909// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]910// CHECK3:       omp.loop.exit:911// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])912// CHECK3-NEXT:    ret void913// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.omp_outlined.omp_outlined914// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {915// CHECK3-NEXT:  entry:916// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8917// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8918// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8919// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8920// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4921// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 4922// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4923// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4924// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4925// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4926// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 4927// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8928// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8929// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 8930// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 8931// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4932// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 4933// CHECK3-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 8934// CHECK3-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i32935// CHECK3-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 8936// CHECK3-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i32937// CHECK3-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 4938// CHECK3-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 4939// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4940// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4941// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8942// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 4943// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)944// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4945// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 99946// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]947// CHECK3:       cond.true:948// CHECK3-NEXT:    br label [[COND_END:%.*]]949// CHECK3:       cond.false:950// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4951// CHECK3-NEXT:    br label [[COND_END]]952// CHECK3:       cond.end:953// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]954// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4955// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4956// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 4957// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]958// CHECK3:       omp.inner.for.cond:959// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4960// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4961// CHECK3-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]962// CHECK3-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]963// CHECK3:       omp.inner.for.body:964// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4965// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 1966// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]967// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I]], align 4968// CHECK3-NEXT:    invoke void @_Z3foov()969// CHECK3-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]970// CHECK3:       invoke.cont:971// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]972// CHECK3:       omp.body.continue:973// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]974// CHECK3:       omp.inner.for.inc:975// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4976// CHECK3-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 1977// CHECK3-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 4978// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]979// CHECK3:       omp.inner.for.end:980// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]981// CHECK3:       omp.loop.exit:982// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])983// CHECK3-NEXT:    ret void984// CHECK3:       terminate.lpad:985// CHECK3-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }986// CHECK3-NEXT:            catch ptr null987// CHECK3-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 0988// CHECK3-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]989// CHECK3-NEXT:    unreachable990// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68991// CHECK3-SAME: () #[[ATTR2]] {992// CHECK3-NEXT:  entry:993// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.omp_outlined)994// CHECK3-NEXT:    ret void995// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.omp_outlined996// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {997// CHECK3-NEXT:  entry:998// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8999// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81000// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41001// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 41002// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41003// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41004// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41005// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41006// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 41007// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81008// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81009// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41010// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 41011// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41012// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41013// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81014// CHECK3-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 41015// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1016// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41017// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 991018// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1019// CHECK3:       cond.true:1020// CHECK3-NEXT:    br label [[COND_END:%.*]]1021// CHECK3:       cond.false:1022// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41023// CHECK3-NEXT:    br label [[COND_END]]1024// CHECK3:       cond.end:1025// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]1026// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41027// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41028// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 41029// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1030// CHECK3:       omp.inner.for.cond:1031// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41032// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41033// CHECK3-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]1034// CHECK3-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1035// CHECK3:       omp.inner.for.body:1036// CHECK3-NEXT:    call void @__kmpc_push_num_threads_strict(ptr @[[GLOB3]], i32 [[TMP1]], i32 1, i32 1, ptr @.str)1037// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41038// CHECK3-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i641039// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41040// CHECK3-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i641041// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])1042// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1043// CHECK3:       omp.inner.for.inc:1044// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41045// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41046// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]1047// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41048// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]1049// CHECK3:       omp.inner.for.end:1050// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1051// CHECK3:       omp.loop.exit:1052// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])1053// CHECK3-NEXT:    ret void1054// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.omp_outlined.omp_outlined1055// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {1056// CHECK3-NEXT:  entry:1057// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81058// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81059// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81060// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81061// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41062// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 41063// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41064// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41065// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41066// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41067// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 41068// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81069// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81070// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81071// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81072// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41073// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 41074// CHECK3-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81075// CHECK3-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i321076// CHECK3-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81077// CHECK3-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i321078// CHECK3-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41079// CHECK3-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 41080// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41081// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41082// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81083// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 41084// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1085// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41086// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 991087// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1088// CHECK3:       cond.true:1089// CHECK3-NEXT:    br label [[COND_END:%.*]]1090// CHECK3:       cond.false:1091// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41092// CHECK3-NEXT:    br label [[COND_END]]1093// CHECK3:       cond.end:1094// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]1095// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41096// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41097// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 41098// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1099// CHECK3:       omp.inner.for.cond:1100// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41101// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41102// CHECK3-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]1103// CHECK3-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1104// CHECK3:       omp.inner.for.body:1105// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41106// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 11107// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1108// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I]], align 41109// CHECK3-NEXT:    invoke void @_Z3foov()1110// CHECK3-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]1111// CHECK3:       invoke.cont:1112// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1113// CHECK3:       omp.body.continue:1114// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1115// CHECK3:       omp.inner.for.inc:1116// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41117// CHECK3-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 11118// CHECK3-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 41119// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]1120// CHECK3:       omp.inner.for.end:1121// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1122// CHECK3:       omp.loop.exit:1123// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])1124// CHECK3-NEXT:    ret void1125// CHECK3:       terminate.lpad:1126// CHECK3-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }1127// CHECK3-NEXT:            catch ptr null1128// CHECK3-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 01129// CHECK3-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]1130// CHECK3-NEXT:    unreachable1131// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l771132// CHECK3-SAME: () #[[ATTR2]] {1133// CHECK3-NEXT:  entry:1134// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.omp_outlined)1135// CHECK3-NEXT:    ret void1136// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.omp_outlined1137// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {1138// CHECK3-NEXT:  entry:1139// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81140// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81141// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41142// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 41143// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41144// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41145// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41146// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41147// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 41148// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 81149// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81150// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81151// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41152// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 41153// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41154// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41155// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81156// CHECK3-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 41157// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1158// CHECK3-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41159// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 991160// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1161// CHECK3:       cond.true:1162// CHECK3-NEXT:    br label [[COND_END:%.*]]1163// CHECK3:       cond.false:1164// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41165// CHECK3-NEXT:    br label [[COND_END]]1166// CHECK3:       cond.end:1167// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]1168// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41169// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41170// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 41171// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1172// CHECK3:       omp.inner.for.cond:1173// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41174// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41175// CHECK3-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]1176// CHECK3-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1177// CHECK3:       omp.inner.for.body:1178// CHECK3-NEXT:    invoke void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)1179// CHECK3-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]1180// CHECK3:       invoke.cont:1181// CHECK3-NEXT:    [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])1182// CHECK3-NEXT:            to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]1183// CHECK3:       invoke.cont2:1184// CHECK3-NEXT:    [[TMP7:%.*]] = sext i8 [[CALL]] to i321185// CHECK3-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])1186// CHECK3-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR3]]1187// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41188// CHECK3-NEXT:    [[TMP9:%.*]] = zext i32 [[TMP8]] to i641189// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41190// CHECK3-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i641191// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.omp_outlined.omp_outlined, i64 [[TMP9]], i64 [[TMP11]])1192// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1193// CHECK3:       omp.inner.for.inc:1194// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41195// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41196// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]1197// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41198// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]1199// CHECK3:       omp.inner.for.end:1200// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1201// CHECK3:       omp.loop.exit:1202// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])1203// CHECK3-NEXT:    ret void1204// CHECK3:       terminate.lpad:1205// CHECK3-NEXT:    [[TMP14:%.*]] = landingpad { ptr, i32 }1206// CHECK3-NEXT:            catch ptr null1207// CHECK3-NEXT:    [[TMP15:%.*]] = extractvalue { ptr, i32 } [[TMP14]], 01208// CHECK3-NEXT:    call void @__clang_call_terminate(ptr [[TMP15]]) #[[ATTR7]]1209// CHECK3-NEXT:    unreachable1210// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.omp_outlined.omp_outlined1211// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {1212// CHECK3-NEXT:  entry:1213// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81214// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81215// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81216// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81217// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41218// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 41219// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41220// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41221// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41222// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41223// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 41224// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81225// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81226// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81227// CHECK3-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81228// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41229// CHECK3-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 41230// CHECK3-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81231// CHECK3-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i321232// CHECK3-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81233// CHECK3-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i321234// CHECK3-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41235// CHECK3-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 41236// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41237// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41238// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81239// CHECK3-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 41240// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1241// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41242// CHECK3-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 991243// CHECK3-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1244// CHECK3:       cond.true:1245// CHECK3-NEXT:    br label [[COND_END:%.*]]1246// CHECK3:       cond.false:1247// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41248// CHECK3-NEXT:    br label [[COND_END]]1249// CHECK3:       cond.end:1250// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]1251// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41252// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41253// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 41254// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1255// CHECK3:       omp.inner.for.cond:1256// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41257// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41258// CHECK3-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]1259// CHECK3-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1260// CHECK3:       omp.inner.for.body:1261// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41262// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 11263// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1264// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I]], align 41265// CHECK3-NEXT:    invoke void @_Z3foov()1266// CHECK3-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]1267// CHECK3:       invoke.cont:1268// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1269// CHECK3:       omp.body.continue:1270// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1271// CHECK3:       omp.inner.for.inc:1272// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41273// CHECK3-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 11274// CHECK3-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 41275// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]1276// CHECK3:       omp.inner.for.end:1277// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1278// CHECK3:       omp.loop.exit:1279// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])1280// CHECK3-NEXT:    ret void1281// CHECK3:       terminate.lpad:1282// CHECK3-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }1283// CHECK3-NEXT:            catch ptr null1284// CHECK3-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 01285// CHECK3-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]1286// CHECK3-NEXT:    unreachable1287// CHECK3-LABEL: define {{[^@]+}}@_ZN1SD2Ev1288// CHECK3-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat align 2 {1289// CHECK3-NEXT:  entry:1290// CHECK3-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 81291// CHECK3-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 81292// CHECK3-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81293// CHECK3-NEXT:    ret void1294// CHECK11-LABEL: define {{[^@]+}}@main1295// CHECK11-SAME: () #[[ATTR0:[0-9]+]] personality ptr @__gxx_personality_v0 {1296// CHECK11-NEXT:  entry:1297// CHECK11-NEXT:    [[RETVAL:%.*]] = alloca i32, align 41298// CHECK11-NEXT:    [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 81299// CHECK11-NEXT:    [[A:%.*]] = alloca i8, align 11300// CHECK11-NEXT:    [[EXN_SLOT:%.*]] = alloca ptr, align 81301// CHECK11-NEXT:    [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 41302// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41303// CHECK11-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81304// CHECK11-NEXT:    [[A_CASTED:%.*]] = alloca i64, align 81305// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 81306// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 81307// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 81308// CHECK11-NEXT:    [[_TMP1:%.*]] = alloca i32, align 41309// CHECK11-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 81310// CHECK11-NEXT:    store i32 0, ptr [[RETVAL]], align 41311// CHECK11-NEXT:    call void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[S]], i64 noundef 0)1312// CHECK11-NEXT:    [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[S]])1313// CHECK11-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]1314// CHECK11:       invoke.cont:1315// CHECK11-NEXT:    store i8 [[CALL]], ptr [[A]], align 11316// CHECK11-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01317// CHECK11-NEXT:    store i32 3, ptr [[TMP0]], align 41318// CHECK11-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11319// CHECK11-NEXT:    store i32 0, ptr [[TMP1]], align 41320// CHECK11-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21321// CHECK11-NEXT:    store ptr null, ptr [[TMP2]], align 81322// CHECK11-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31323// CHECK11-NEXT:    store ptr null, ptr [[TMP3]], align 81324// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41325// CHECK11-NEXT:    store ptr null, ptr [[TMP4]], align 81326// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51327// CHECK11-NEXT:    store ptr null, ptr [[TMP5]], align 81328// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61329// CHECK11-NEXT:    store ptr null, ptr [[TMP6]], align 81330// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71331// CHECK11-NEXT:    store ptr null, ptr [[TMP7]], align 81332// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81333// CHECK11-NEXT:    store i64 100, ptr [[TMP8]], align 81334// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91335// CHECK11-NEXT:    store i64 0, ptr [[TMP9]], align 81336// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101337// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 41338// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111339// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 41340// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121341// CHECK11-NEXT:    store i32 0, ptr [[TMP12]], align 41342// CHECK11-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.region_id, ptr [[KERNEL_ARGS]])1343// CHECK11-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 01344// CHECK11-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1345// CHECK11:       omp_offload.failed:1346// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92() #[[ATTR3:[0-9]+]]1347// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT]]1348// CHECK11:       lpad:1349// CHECK11-NEXT:    [[TMP15:%.*]] = landingpad { ptr, i32 }1350// CHECK11-NEXT:            cleanup1351// CHECK11-NEXT:    [[TMP16:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 01352// CHECK11-NEXT:    store ptr [[TMP16]], ptr [[EXN_SLOT]], align 81353// CHECK11-NEXT:    [[TMP17:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 11354// CHECK11-NEXT:    store i32 [[TMP17]], ptr [[EHSELECTOR_SLOT]], align 41355// CHECK11-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]1356// CHECK11-NEXT:    br label [[EH_RESUME:%.*]]1357// CHECK11:       omp_offload.cont:1358// CHECK11-NEXT:    [[TMP18:%.*]] = load i8, ptr [[A]], align 11359// CHECK11-NEXT:    store i8 [[TMP18]], ptr [[A_CASTED]], align 11360// CHECK11-NEXT:    [[TMP19:%.*]] = load i64, ptr [[A_CASTED]], align 81361// CHECK11-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01362// CHECK11-NEXT:    store i64 [[TMP19]], ptr [[TMP20]], align 81363// CHECK11-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01364// CHECK11-NEXT:    store i64 [[TMP19]], ptr [[TMP21]], align 81365// CHECK11-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 01366// CHECK11-NEXT:    store ptr null, ptr [[TMP22]], align 81367// CHECK11-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 01368// CHECK11-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 01369// CHECK11-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 01370// CHECK11-NEXT:    store i32 3, ptr [[TMP25]], align 41371// CHECK11-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 11372// CHECK11-NEXT:    store i32 1, ptr [[TMP26]], align 41373// CHECK11-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 21374// CHECK11-NEXT:    store ptr [[TMP23]], ptr [[TMP27]], align 81375// CHECK11-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 31376// CHECK11-NEXT:    store ptr [[TMP24]], ptr [[TMP28]], align 81377// CHECK11-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 41378// CHECK11-NEXT:    store ptr @.offload_sizes, ptr [[TMP29]], align 81379// CHECK11-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 51380// CHECK11-NEXT:    store ptr @.offload_maptypes, ptr [[TMP30]], align 81381// CHECK11-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 61382// CHECK11-NEXT:    store ptr null, ptr [[TMP31]], align 81383// CHECK11-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 71384// CHECK11-NEXT:    store ptr null, ptr [[TMP32]], align 81385// CHECK11-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 81386// CHECK11-NEXT:    store i64 100, ptr [[TMP33]], align 81387// CHECK11-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 91388// CHECK11-NEXT:    store i64 0, ptr [[TMP34]], align 81389// CHECK11-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 101390// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP35]], align 41391// CHECK11-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 111392// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP36]], align 41393// CHECK11-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 121394// CHECK11-NEXT:    store i32 0, ptr [[TMP37]], align 41395// CHECK11-NEXT:    [[TMP38:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.region_id, ptr [[KERNEL_ARGS2]])1396// CHECK11-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 01397// CHECK11-NEXT:    br i1 [[TMP39]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]1398// CHECK11:       omp_offload.failed3:1399// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102(i64 [[TMP19]]) #[[ATTR3]]1400// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT4]]1401// CHECK11:       omp_offload.cont4:1402// CHECK11-NEXT:    [[TMP40:%.*]] = load i8, ptr [[A]], align 11403// CHECK11-NEXT:    [[CONV:%.*]] = sext i8 [[TMP40]] to i321404// CHECK11-NEXT:    [[CALL6:%.*]] = invoke noundef i32 @_Z5tmainIcLi5EEiv()1405// CHECK11-NEXT:            to label [[INVOKE_CONT5:%.*]] unwind label [[LPAD]]1406// CHECK11:       invoke.cont5:1407// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CALL6]]1408// CHECK11-NEXT:    [[CALL8:%.*]] = invoke noundef i32 @_Z5tmainI1SLi1EEiv()1409// CHECK11-NEXT:            to label [[INVOKE_CONT7:%.*]] unwind label [[LPAD]]1410// CHECK11:       invoke.cont7:1411// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[ADD]], [[CALL8]]1412// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[RETVAL]], align 41413// CHECK11-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]1414// CHECK11-NEXT:    [[TMP41:%.*]] = load i32, ptr [[RETVAL]], align 41415// CHECK11-NEXT:    ret i32 [[TMP41]]1416// CHECK11:       eh.resume:1417// CHECK11-NEXT:    [[EXN:%.*]] = load ptr, ptr [[EXN_SLOT]], align 81418// CHECK11-NEXT:    [[SEL:%.*]] = load i32, ptr [[EHSELECTOR_SLOT]], align 41419// CHECK11-NEXT:    [[LPAD_VAL:%.*]] = insertvalue { ptr, i32 } poison, ptr [[EXN]], 01420// CHECK11-NEXT:    [[LPAD_VAL10:%.*]] = insertvalue { ptr, i32 } [[LPAD_VAL]], i32 [[SEL]], 11421// CHECK11-NEXT:    resume { ptr, i32 } [[LPAD_VAL10]]1422// CHECK11-LABEL: define {{[^@]+}}@_ZN1SC1El1423// CHECK11-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat {1424// CHECK11-NEXT:  entry:1425// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 81426// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 81427// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 81428// CHECK11-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 81429// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81430// CHECK11-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 81431// CHECK11-NEXT:    call void @_ZN1SC2El(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]], i64 noundef [[TMP0]])1432// CHECK11-NEXT:    ret void1433// CHECK11-LABEL: define {{[^@]+}}@_ZN1ScvcEv1434// CHECK11-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) #[[ATTR1]] comdat {1435// CHECK11-NEXT:  entry:1436// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 81437// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 81438// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81439// CHECK11-NEXT:    call void @_Z8mayThrowv()1440// CHECK11-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 01441// CHECK11-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A]], align 81442// CHECK11-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i81443// CHECK11-NEXT:    ret i8 [[CONV]]1444// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l921445// CHECK11-SAME: () #[[ATTR2:[0-9]+]] {1446// CHECK11-NEXT:  entry:1447// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.omp_outlined)1448// CHECK11-NEXT:    ret void1449// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.omp_outlined1450// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {1451// CHECK11-NEXT:  entry:1452// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81453// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81454// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41455// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41456// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41457// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41458// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41459// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41460// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 41461// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81462// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81463// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41464// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 41465// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41466// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41467// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81468// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 41469// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1470// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41471// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 991472// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1473// CHECK11:       cond.true:1474// CHECK11-NEXT:    br label [[COND_END:%.*]]1475// CHECK11:       cond.false:1476// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41477// CHECK11-NEXT:    br label [[COND_END]]1478// CHECK11:       cond.end:1479// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]1480// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41481// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41482// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 41483// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1484// CHECK11:       omp.inner.for.cond:1485// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41486// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41487// CHECK11-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]1488// CHECK11-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1489// CHECK11:       omp.inner.for.body:1490// CHECK11-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 2)1491// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41492// CHECK11-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i641493// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41494// CHECK11-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i641495// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])1496// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1497// CHECK11:       omp.inner.for.inc:1498// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41499// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41500// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]1501// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41502// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]1503// CHECK11:       omp.inner.for.end:1504// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1505// CHECK11:       omp.loop.exit:1506// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])1507// CHECK11-NEXT:    ret void1508// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l92.omp_outlined.omp_outlined1509// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {1510// CHECK11-NEXT:  entry:1511// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81512// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81513// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81514// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81515// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41516// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41517// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41518// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41519// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41520// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41521// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 41522// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81523// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81524// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81525// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81526// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41527// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 41528// CHECK11-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81529// CHECK11-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i321530// CHECK11-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81531// CHECK11-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i321532// CHECK11-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41533// CHECK11-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 41534// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41535// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41536// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81537// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 41538// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1539// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41540// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 991541// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1542// CHECK11:       cond.true:1543// CHECK11-NEXT:    br label [[COND_END:%.*]]1544// CHECK11:       cond.false:1545// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41546// CHECK11-NEXT:    br label [[COND_END]]1547// CHECK11:       cond.end:1548// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]1549// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41550// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41551// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 41552// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1553// CHECK11:       omp.inner.for.cond:1554// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41555// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41556// CHECK11-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]1557// CHECK11-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1558// CHECK11:       omp.inner.for.body:1559// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41560// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 11561// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1562// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I]], align 41563// CHECK11-NEXT:    invoke void @_Z3foov()1564// CHECK11-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]1565// CHECK11:       invoke.cont:1566// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1567// CHECK11:       omp.body.continue:1568// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1569// CHECK11:       omp.inner.for.inc:1570// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41571// CHECK11-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 11572// CHECK11-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 41573// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]1574// CHECK11:       omp.inner.for.end:1575// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1576// CHECK11:       omp.loop.exit:1577// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])1578// CHECK11-NEXT:    ret void1579// CHECK11:       terminate.lpad:1580// CHECK11-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }1581// CHECK11-NEXT:            catch ptr null1582// CHECK11-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 01583// CHECK11-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7:[0-9]+]]1584// CHECK11-NEXT:    unreachable1585// CHECK11-LABEL: define {{[^@]+}}@__clang_call_terminate1586// CHECK11-SAME: (ptr noundef [[TMP0:%.*]]) #[[ATTR5:[0-9]+]] comdat {1587// CHECK11-NEXT:    [[TMP2:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP0]]) #[[ATTR3]]1588// CHECK11-NEXT:    call void @_ZSt9terminatev() #[[ATTR7]]1589// CHECK11-NEXT:    unreachable1590// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l1021591// CHECK11-SAME: (i64 noundef [[A:%.*]]) #[[ATTR2]] {1592// CHECK11-NEXT:  entry:1593// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 81594// CHECK11-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 81595// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.omp_outlined, ptr [[A_ADDR]])1596// CHECK11-NEXT:    ret void1597// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.omp_outlined1598// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 1 dereferenceable(1) [[A:%.*]]) #[[ATTR2]] {1599// CHECK11-NEXT:  entry:1600// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81601// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81602// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81603// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41604// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41605// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41606// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41607// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41608// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41609// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 41610// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81611// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81612// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81613// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8, !nonnull [[META17:![0-9]+]]1614// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41615// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 41616// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41617// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41618// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81619// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 41620// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1621// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41622// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 991623// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1624// CHECK11:       cond.true:1625// CHECK11-NEXT:    br label [[COND_END:%.*]]1626// CHECK11:       cond.false:1627// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41628// CHECK11-NEXT:    br label [[COND_END]]1629// CHECK11:       cond.end:1630// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]1631// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41632// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41633// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 41634// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1635// CHECK11:       omp.inner.for.cond:1636// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41637// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41638// CHECK11-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]1639// CHECK11-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1640// CHECK11:       omp.inner.for.body:1641// CHECK11-NEXT:    [[TMP8:%.*]] = load i8, ptr [[TMP0]], align 11642// CHECK11-NEXT:    [[TMP9:%.*]] = sext i8 [[TMP8]] to i321643// CHECK11-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP2]], i32 [[TMP9]])1644// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41645// CHECK11-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i641646// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41647// CHECK11-NEXT:    [[TMP13:%.*]] = zext i32 [[TMP12]] to i641648// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.omp_outlined.omp_outlined, i64 [[TMP11]], i64 [[TMP13]])1649// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1650// CHECK11:       omp.inner.for.inc:1651// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41652// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41653// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]1654// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41655// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]1656// CHECK11:       omp.inner.for.end:1657// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1658// CHECK11:       omp.loop.exit:1659// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])1660// CHECK11-NEXT:    ret void1661// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l102.omp_outlined.omp_outlined1662// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {1663// CHECK11-NEXT:  entry:1664// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81665// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81666// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81667// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81668// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41669// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41670// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41671// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41672// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41673// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41674// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 41675// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81676// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81677// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81678// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81679// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41680// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 41681// CHECK11-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81682// CHECK11-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i321683// CHECK11-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81684// CHECK11-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i321685// CHECK11-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41686// CHECK11-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 41687// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41688// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41689// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81690// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 41691// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1692// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41693// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 991694// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1695// CHECK11:       cond.true:1696// CHECK11-NEXT:    br label [[COND_END:%.*]]1697// CHECK11:       cond.false:1698// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41699// CHECK11-NEXT:    br label [[COND_END]]1700// CHECK11:       cond.end:1701// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]1702// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41703// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41704// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 41705// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1706// CHECK11:       omp.inner.for.cond:1707// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41708// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41709// CHECK11-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]1710// CHECK11-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1711// CHECK11:       omp.inner.for.body:1712// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41713// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 11714// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1715// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I]], align 41716// CHECK11-NEXT:    invoke void @_Z3foov()1717// CHECK11-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]1718// CHECK11:       invoke.cont:1719// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1720// CHECK11:       omp.body.continue:1721// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1722// CHECK11:       omp.inner.for.inc:1723// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41724// CHECK11-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 11725// CHECK11-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 41726// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]1727// CHECK11:       omp.inner.for.end:1728// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1729// CHECK11:       omp.loop.exit:1730// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])1731// CHECK11-NEXT:    ret void1732// CHECK11:       terminate.lpad:1733// CHECK11-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }1734// CHECK11-NEXT:            catch ptr null1735// CHECK11-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 01736// CHECK11-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]1737// CHECK11-NEXT:    unreachable1738// CHECK11-LABEL: define {{[^@]+}}@_Z5tmainIcLi5EEiv1739// CHECK11-SAME: () #[[ATTR6:[0-9]+]] comdat {1740// CHECK11-NEXT:  entry:1741// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41742// CHECK11-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81743// CHECK11-NEXT:    [[_TMP1:%.*]] = alloca i32, align 41744// CHECK11-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 81745// CHECK11-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01746// CHECK11-NEXT:    store i32 3, ptr [[TMP0]], align 41747// CHECK11-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11748// CHECK11-NEXT:    store i32 0, ptr [[TMP1]], align 41749// CHECK11-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21750// CHECK11-NEXT:    store ptr null, ptr [[TMP2]], align 81751// CHECK11-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31752// CHECK11-NEXT:    store ptr null, ptr [[TMP3]], align 81753// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41754// CHECK11-NEXT:    store ptr null, ptr [[TMP4]], align 81755// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51756// CHECK11-NEXT:    store ptr null, ptr [[TMP5]], align 81757// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61758// CHECK11-NEXT:    store ptr null, ptr [[TMP6]], align 81759// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71760// CHECK11-NEXT:    store ptr null, ptr [[TMP7]], align 81761// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81762// CHECK11-NEXT:    store i64 100, ptr [[TMP8]], align 81763// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91764// CHECK11-NEXT:    store i64 0, ptr [[TMP9]], align 81765// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101766// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 41767// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111768// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 41769// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121770// CHECK11-NEXT:    store i32 0, ptr [[TMP12]], align 41771// CHECK11-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.region_id, ptr [[KERNEL_ARGS]])1772// CHECK11-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 01773// CHECK11-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1774// CHECK11:       omp_offload.failed:1775// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68() #[[ATTR3]]1776// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT]]1777// CHECK11:       omp_offload.cont:1778// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 01779// CHECK11-NEXT:    store i32 3, ptr [[TMP15]], align 41780// CHECK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 11781// CHECK11-NEXT:    store i32 0, ptr [[TMP16]], align 41782// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 21783// CHECK11-NEXT:    store ptr null, ptr [[TMP17]], align 81784// CHECK11-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 31785// CHECK11-NEXT:    store ptr null, ptr [[TMP18]], align 81786// CHECK11-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 41787// CHECK11-NEXT:    store ptr null, ptr [[TMP19]], align 81788// CHECK11-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 51789// CHECK11-NEXT:    store ptr null, ptr [[TMP20]], align 81790// CHECK11-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 61791// CHECK11-NEXT:    store ptr null, ptr [[TMP21]], align 81792// CHECK11-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 71793// CHECK11-NEXT:    store ptr null, ptr [[TMP22]], align 81794// CHECK11-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 81795// CHECK11-NEXT:    store i64 100, ptr [[TMP23]], align 81796// CHECK11-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 91797// CHECK11-NEXT:    store i64 0, ptr [[TMP24]], align 81798// CHECK11-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 101799// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 41800// CHECK11-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 111801// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 41802// CHECK11-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 121803// CHECK11-NEXT:    store i32 0, ptr [[TMP27]], align 41804// CHECK11-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.region_id, ptr [[KERNEL_ARGS2]])1805// CHECK11-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 01806// CHECK11-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]1807// CHECK11:       omp_offload.failed3:1808// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77() #[[ATTR3]]1809// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT4]]1810// CHECK11:       omp_offload.cont4:1811// CHECK11-NEXT:    ret i32 01812// CHECK11-LABEL: define {{[^@]+}}@_Z5tmainI1SLi1EEiv1813// CHECK11-SAME: () #[[ATTR6]] comdat {1814// CHECK11-NEXT:  entry:1815// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41816// CHECK11-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 81817// CHECK11-NEXT:    [[_TMP1:%.*]] = alloca i32, align 41818// CHECK11-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 81819// CHECK11-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 01820// CHECK11-NEXT:    store i32 3, ptr [[TMP0]], align 41821// CHECK11-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11822// CHECK11-NEXT:    store i32 0, ptr [[TMP1]], align 41823// CHECK11-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 21824// CHECK11-NEXT:    store ptr null, ptr [[TMP2]], align 81825// CHECK11-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 31826// CHECK11-NEXT:    store ptr null, ptr [[TMP3]], align 81827// CHECK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 41828// CHECK11-NEXT:    store ptr null, ptr [[TMP4]], align 81829// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 51830// CHECK11-NEXT:    store ptr null, ptr [[TMP5]], align 81831// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 61832// CHECK11-NEXT:    store ptr null, ptr [[TMP6]], align 81833// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 71834// CHECK11-NEXT:    store ptr null, ptr [[TMP7]], align 81835// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 81836// CHECK11-NEXT:    store i64 100, ptr [[TMP8]], align 81837// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 91838// CHECK11-NEXT:    store i64 0, ptr [[TMP9]], align 81839// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 101840// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 41841// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111842// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 41843// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 121844// CHECK11-NEXT:    store i32 0, ptr [[TMP12]], align 41845// CHECK11-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.region_id, ptr [[KERNEL_ARGS]])1846// CHECK11-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 01847// CHECK11-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]1848// CHECK11:       omp_offload.failed:1849// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68() #[[ATTR3]]1850// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT]]1851// CHECK11:       omp_offload.cont:1852// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 01853// CHECK11-NEXT:    store i32 3, ptr [[TMP15]], align 41854// CHECK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 11855// CHECK11-NEXT:    store i32 0, ptr [[TMP16]], align 41856// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 21857// CHECK11-NEXT:    store ptr null, ptr [[TMP17]], align 81858// CHECK11-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 31859// CHECK11-NEXT:    store ptr null, ptr [[TMP18]], align 81860// CHECK11-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 41861// CHECK11-NEXT:    store ptr null, ptr [[TMP19]], align 81862// CHECK11-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 51863// CHECK11-NEXT:    store ptr null, ptr [[TMP20]], align 81864// CHECK11-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 61865// CHECK11-NEXT:    store ptr null, ptr [[TMP21]], align 81866// CHECK11-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 71867// CHECK11-NEXT:    store ptr null, ptr [[TMP22]], align 81868// CHECK11-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 81869// CHECK11-NEXT:    store i64 100, ptr [[TMP23]], align 81870// CHECK11-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 91871// CHECK11-NEXT:    store i64 0, ptr [[TMP24]], align 81872// CHECK11-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 101873// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 41874// CHECK11-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 111875// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 41876// CHECK11-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 121877// CHECK11-NEXT:    store i32 0, ptr [[TMP27]], align 41878// CHECK11-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.region_id, ptr [[KERNEL_ARGS2]])1879// CHECK11-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 01880// CHECK11-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]1881// CHECK11:       omp_offload.failed3:1882// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77() #[[ATTR3]]1883// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT4]]1884// CHECK11:       omp_offload.cont4:1885// CHECK11-NEXT:    ret i32 01886// CHECK11-LABEL: define {{[^@]+}}@_ZN1SD1Ev1887// CHECK11-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat {1888// CHECK11-NEXT:  entry:1889// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 81890// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 81891// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81892// CHECK11-NEXT:    call void @_ZN1SD2Ev(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]]) #[[ATTR3]]1893// CHECK11-NEXT:    ret void1894// CHECK11-LABEL: define {{[^@]+}}@_ZN1SC2El1895// CHECK11-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR6]] comdat {1896// CHECK11-NEXT:  entry:1897// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 81898// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 81899// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 81900// CHECK11-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 81901// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 81902// CHECK11-NEXT:    [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 01903// CHECK11-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 81904// CHECK11-NEXT:    store i64 [[TMP0]], ptr [[A2]], align 81905// CHECK11-NEXT:    ret void1906// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l681907// CHECK11-SAME: () #[[ATTR2]] {1908// CHECK11-NEXT:  entry:1909// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.omp_outlined)1910// CHECK11-NEXT:    ret void1911// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.omp_outlined1912// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {1913// CHECK11-NEXT:  entry:1914// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81915// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81916// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41917// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41918// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41919// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41920// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41921// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41922// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 41923// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81924// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81925// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41926// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 41927// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41928// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41929// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81930// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 41931// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1932// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41933// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 991934// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1935// CHECK11:       cond.true:1936// CHECK11-NEXT:    br label [[COND_END:%.*]]1937// CHECK11:       cond.false:1938// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41939// CHECK11-NEXT:    br label [[COND_END]]1940// CHECK11:       cond.end:1941// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]1942// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41943// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41944// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 41945// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1946// CHECK11:       omp.inner.for.cond:1947// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41948// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41949// CHECK11-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]1950// CHECK11-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1951// CHECK11:       omp.inner.for.body:1952// CHECK11-NEXT:    call void @__kmpc_push_num_threads_strict(ptr @[[GLOB3]], i32 [[TMP1]], i32 5, i32 1, ptr @.str)1953// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41954// CHECK11-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i641955// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41956// CHECK11-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i641957// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])1958// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1959// CHECK11:       omp.inner.for.inc:1960// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41961// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41962// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]1963// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41964// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]1965// CHECK11:       omp.inner.for.end:1966// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1967// CHECK11:       omp.loop.exit:1968// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])1969// CHECK11-NEXT:    ret void1970// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l68.omp_outlined.omp_outlined1971// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {1972// CHECK11-NEXT:  entry:1973// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81974// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81975// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81976// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81977// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41978// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 41979// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41980// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41981// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41982// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41983// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 41984// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81985// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81986// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81987// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81988// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41989// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 41990// CHECK11-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81991// CHECK11-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i321992// CHECK11-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81993// CHECK11-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i321994// CHECK11-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41995// CHECK11-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 41996// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41997// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41998// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81999// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 42000// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2001// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42002// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 992003// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2004// CHECK11:       cond.true:2005// CHECK11-NEXT:    br label [[COND_END:%.*]]2006// CHECK11:       cond.false:2007// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42008// CHECK11-NEXT:    br label [[COND_END]]2009// CHECK11:       cond.end:2010// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]2011// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42012// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42013// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 42014// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2015// CHECK11:       omp.inner.for.cond:2016// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42017// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42018// CHECK11-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]2019// CHECK11-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2020// CHECK11:       omp.inner.for.body:2021// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42022// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 12023// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2024// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I]], align 42025// CHECK11-NEXT:    invoke void @_Z3foov()2026// CHECK11-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]2027// CHECK11:       invoke.cont:2028// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2029// CHECK11:       omp.body.continue:2030// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2031// CHECK11:       omp.inner.for.inc:2032// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42033// CHECK11-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 12034// CHECK11-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 42035// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]2036// CHECK11:       omp.inner.for.end:2037// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2038// CHECK11:       omp.loop.exit:2039// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])2040// CHECK11-NEXT:    ret void2041// CHECK11:       terminate.lpad:2042// CHECK11-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }2043// CHECK11-NEXT:            catch ptr null2044// CHECK11-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 02045// CHECK11-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]2046// CHECK11-NEXT:    unreachable2047// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l772048// CHECK11-SAME: () #[[ATTR2]] {2049// CHECK11-NEXT:  entry:2050// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.omp_outlined)2051// CHECK11-NEXT:    ret void2052// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.omp_outlined2053// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {2054// CHECK11-NEXT:  entry:2055// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82056// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82057// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42058// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 42059// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42060// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42061// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42062// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42063// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 42064// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82065// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82066// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42067// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 42068// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42069// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42070// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82071// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 42072// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2073// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42074// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 992075// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2076// CHECK11:       cond.true:2077// CHECK11-NEXT:    br label [[COND_END:%.*]]2078// CHECK11:       cond.false:2079// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42080// CHECK11-NEXT:    br label [[COND_END]]2081// CHECK11:       cond.end:2082// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]2083// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42084// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42085// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 42086// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2087// CHECK11:       omp.inner.for.cond:2088// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42089// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42090// CHECK11-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]2091// CHECK11-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2092// CHECK11:       omp.inner.for.body:2093// CHECK11-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 23)2094// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42095// CHECK11-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i642096// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42097// CHECK11-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i642098// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])2099// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2100// CHECK11:       omp.inner.for.inc:2101// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42102// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42103// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]2104// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42105// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]2106// CHECK11:       omp.inner.for.end:2107// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2108// CHECK11:       omp.loop.exit:2109// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])2110// CHECK11-NEXT:    ret void2111// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l77.omp_outlined.omp_outlined2112// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {2113// CHECK11-NEXT:  entry:2114// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82115// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82116// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82117// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82118// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42119// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 42120// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42121// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42122// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42123// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42124// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 42125// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82126// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82127// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82128// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82129// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42130// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 42131// CHECK11-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82132// CHECK11-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i322133// CHECK11-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82134// CHECK11-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i322135// CHECK11-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42136// CHECK11-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 42137// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42138// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42139// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82140// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 42141// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2142// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42143// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 992144// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2145// CHECK11:       cond.true:2146// CHECK11-NEXT:    br label [[COND_END:%.*]]2147// CHECK11:       cond.false:2148// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42149// CHECK11-NEXT:    br label [[COND_END]]2150// CHECK11:       cond.end:2151// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]2152// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42153// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42154// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 42155// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2156// CHECK11:       omp.inner.for.cond:2157// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42158// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42159// CHECK11-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]2160// CHECK11-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2161// CHECK11:       omp.inner.for.body:2162// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42163// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 12164// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2165// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I]], align 42166// CHECK11-NEXT:    invoke void @_Z3foov()2167// CHECK11-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]2168// CHECK11:       invoke.cont:2169// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2170// CHECK11:       omp.body.continue:2171// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2172// CHECK11:       omp.inner.for.inc:2173// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42174// CHECK11-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 12175// CHECK11-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 42176// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]2177// CHECK11:       omp.inner.for.end:2178// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2179// CHECK11:       omp.loop.exit:2180// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])2181// CHECK11-NEXT:    ret void2182// CHECK11:       terminate.lpad:2183// CHECK11-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }2184// CHECK11-NEXT:            catch ptr null2185// CHECK11-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 02186// CHECK11-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]2187// CHECK11-NEXT:    unreachable2188// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l682189// CHECK11-SAME: () #[[ATTR2]] {2190// CHECK11-NEXT:  entry:2191// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.omp_outlined)2192// CHECK11-NEXT:    ret void2193// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.omp_outlined2194// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {2195// CHECK11-NEXT:  entry:2196// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82197// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82198// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42199// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 42200// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42201// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42202// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42203// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42204// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 42205// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82206// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82207// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42208// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 42209// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42210// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42211// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82212// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 42213// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2214// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42215// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 992216// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2217// CHECK11:       cond.true:2218// CHECK11-NEXT:    br label [[COND_END:%.*]]2219// CHECK11:       cond.false:2220// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42221// CHECK11-NEXT:    br label [[COND_END]]2222// CHECK11:       cond.end:2223// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]2224// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42225// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42226// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 42227// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2228// CHECK11:       omp.inner.for.cond:2229// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42230// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42231// CHECK11-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]2232// CHECK11-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2233// CHECK11:       omp.inner.for.body:2234// CHECK11-NEXT:    call void @__kmpc_push_num_threads_strict(ptr @[[GLOB3]], i32 [[TMP1]], i32 1, i32 1, ptr @.str)2235// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42236// CHECK11-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i642237// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42238// CHECK11-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i642239// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])2240// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2241// CHECK11:       omp.inner.for.inc:2242// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42243// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42244// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]2245// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42246// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]2247// CHECK11:       omp.inner.for.end:2248// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2249// CHECK11:       omp.loop.exit:2250// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])2251// CHECK11-NEXT:    ret void2252// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l68.omp_outlined.omp_outlined2253// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {2254// CHECK11-NEXT:  entry:2255// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82256// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82257// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82258// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82259// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42260// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 42261// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42262// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42263// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42264// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42265// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 42266// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82267// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82268// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82269// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82270// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42271// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 42272// CHECK11-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82273// CHECK11-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i322274// CHECK11-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82275// CHECK11-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i322276// CHECK11-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42277// CHECK11-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 42278// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42279// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42280// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82281// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 42282// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2283// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42284// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 992285// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2286// CHECK11:       cond.true:2287// CHECK11-NEXT:    br label [[COND_END:%.*]]2288// CHECK11:       cond.false:2289// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42290// CHECK11-NEXT:    br label [[COND_END]]2291// CHECK11:       cond.end:2292// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]2293// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42294// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42295// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 42296// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2297// CHECK11:       omp.inner.for.cond:2298// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42299// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42300// CHECK11-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]2301// CHECK11-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2302// CHECK11:       omp.inner.for.body:2303// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42304// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 12305// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2306// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I]], align 42307// CHECK11-NEXT:    invoke void @_Z3foov()2308// CHECK11-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]2309// CHECK11:       invoke.cont:2310// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2311// CHECK11:       omp.body.continue:2312// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2313// CHECK11:       omp.inner.for.inc:2314// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42315// CHECK11-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 12316// CHECK11-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 42317// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]2318// CHECK11:       omp.inner.for.end:2319// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2320// CHECK11:       omp.loop.exit:2321// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])2322// CHECK11-NEXT:    ret void2323// CHECK11:       terminate.lpad:2324// CHECK11-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }2325// CHECK11-NEXT:            catch ptr null2326// CHECK11-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 02327// CHECK11-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]2328// CHECK11-NEXT:    unreachable2329// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l772330// CHECK11-SAME: () #[[ATTR2]] {2331// CHECK11-NEXT:  entry:2332// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.omp_outlined)2333// CHECK11-NEXT:    ret void2334// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.omp_outlined2335// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {2336// CHECK11-NEXT:  entry:2337// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82338// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82339// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42340// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 42341// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42342// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42343// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42344// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42345// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 42346// CHECK11-NEXT:    [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 82347// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82348// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82349// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42350// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 42351// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42352// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42353// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82354// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 42355// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2356// CHECK11-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42357// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 992358// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2359// CHECK11:       cond.true:2360// CHECK11-NEXT:    br label [[COND_END:%.*]]2361// CHECK11:       cond.false:2362// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42363// CHECK11-NEXT:    br label [[COND_END]]2364// CHECK11:       cond.end:2365// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]2366// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42367// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42368// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 42369// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2370// CHECK11:       omp.inner.for.cond:2371// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42372// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42373// CHECK11-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]2374// CHECK11-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2375// CHECK11:       omp.inner.for.body:2376// CHECK11-NEXT:    invoke void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)2377// CHECK11-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]2378// CHECK11:       invoke.cont:2379// CHECK11-NEXT:    [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])2380// CHECK11-NEXT:            to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]2381// CHECK11:       invoke.cont2:2382// CHECK11-NEXT:    [[TMP7:%.*]] = sext i8 [[CALL]] to i322383// CHECK11-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])2384// CHECK11-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR3]]2385// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42386// CHECK11-NEXT:    [[TMP9:%.*]] = zext i32 [[TMP8]] to i642387// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42388// CHECK11-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i642389// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.omp_outlined.omp_outlined, i64 [[TMP9]], i64 [[TMP11]])2390// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2391// CHECK11:       omp.inner.for.inc:2392// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42393// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42394// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]2395// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42396// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]2397// CHECK11:       omp.inner.for.end:2398// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2399// CHECK11:       omp.loop.exit:2400// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])2401// CHECK11-NEXT:    ret void2402// CHECK11:       terminate.lpad:2403// CHECK11-NEXT:    [[TMP14:%.*]] = landingpad { ptr, i32 }2404// CHECK11-NEXT:            catch ptr null2405// CHECK11-NEXT:    [[TMP15:%.*]] = extractvalue { ptr, i32 } [[TMP14]], 02406// CHECK11-NEXT:    call void @__clang_call_terminate(ptr [[TMP15]]) #[[ATTR7]]2407// CHECK11-NEXT:    unreachable2408// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l77.omp_outlined.omp_outlined2409// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {2410// CHECK11-NEXT:  entry:2411// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82412// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82413// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82414// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82415// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42416// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 42417// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42418// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42419// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42420// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42421// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 42422// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82423// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82424// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82425// CHECK11-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82426// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42427// CHECK11-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 42428// CHECK11-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82429// CHECK11-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i322430// CHECK11-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82431// CHECK11-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i322432// CHECK11-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42433// CHECK11-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 42434// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42435// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42436// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82437// CHECK11-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 42438// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2439// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42440// CHECK11-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 992441// CHECK11-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2442// CHECK11:       cond.true:2443// CHECK11-NEXT:    br label [[COND_END:%.*]]2444// CHECK11:       cond.false:2445// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42446// CHECK11-NEXT:    br label [[COND_END]]2447// CHECK11:       cond.end:2448// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]2449// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42450// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42451// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 42452// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2453// CHECK11:       omp.inner.for.cond:2454// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42455// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42456// CHECK11-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]2457// CHECK11-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2458// CHECK11:       omp.inner.for.body:2459// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42460// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 12461// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2462// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I]], align 42463// CHECK11-NEXT:    invoke void @_Z3foov()2464// CHECK11-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]2465// CHECK11:       invoke.cont:2466// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2467// CHECK11:       omp.body.continue:2468// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2469// CHECK11:       omp.inner.for.inc:2470// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42471// CHECK11-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 12472// CHECK11-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 42473// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]2474// CHECK11:       omp.inner.for.end:2475// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2476// CHECK11:       omp.loop.exit:2477// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])2478// CHECK11-NEXT:    ret void2479// CHECK11:       terminate.lpad:2480// CHECK11-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }2481// CHECK11-NEXT:            catch ptr null2482// CHECK11-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 02483// CHECK11-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]2484// CHECK11-NEXT:    unreachable2485// CHECK11-LABEL: define {{[^@]+}}@_ZN1SD2Ev2486// CHECK11-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat {2487// CHECK11-NEXT:  entry:2488// CHECK11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82489// CHECK11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82490// CHECK11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82491// CHECK11-NEXT:    ret void2492// CHECK1-LABEL: define {{[^@]+}}@main2493// CHECK1-SAME: () #[[ATTR0:[0-9]+]] personality ptr @__gxx_personality_v0 {2494// CHECK1-NEXT:  entry:2495// CHECK1-NEXT:    [[RETVAL:%.*]] = alloca i32, align 42496// CHECK1-NEXT:    [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 82497// CHECK1-NEXT:    [[A:%.*]] = alloca i8, align 12498// CHECK1-NEXT:    [[EXN_SLOT:%.*]] = alloca ptr, align 82499// CHECK1-NEXT:    [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 42500// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42501// CHECK1-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 82502// CHECK1-NEXT:    [[A_CASTED:%.*]] = alloca i64, align 82503// CHECK1-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 82504// CHECK1-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 82505// CHECK1-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 82506// CHECK1-NEXT:    [[_TMP1:%.*]] = alloca i32, align 42507// CHECK1-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 82508// CHECK1-NEXT:    store i32 0, ptr [[RETVAL]], align 42509// CHECK1-NEXT:    call void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[S]], i64 noundef 0)2510// CHECK1-NEXT:    [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[S]])2511// CHECK1-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]2512// CHECK1:       invoke.cont:2513// CHECK1-NEXT:    store i8 [[CALL]], ptr [[A]], align 12514// CHECK1-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 02515// CHECK1-NEXT:    store i32 3, ptr [[TMP0]], align 42516// CHECK1-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12517// CHECK1-NEXT:    store i32 0, ptr [[TMP1]], align 42518// CHECK1-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 22519// CHECK1-NEXT:    store ptr null, ptr [[TMP2]], align 82520// CHECK1-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 32521// CHECK1-NEXT:    store ptr null, ptr [[TMP3]], align 82522// CHECK1-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 42523// CHECK1-NEXT:    store ptr null, ptr [[TMP4]], align 82524// CHECK1-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 52525// CHECK1-NEXT:    store ptr null, ptr [[TMP5]], align 82526// CHECK1-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 62527// CHECK1-NEXT:    store ptr null, ptr [[TMP6]], align 82528// CHECK1-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 72529// CHECK1-NEXT:    store ptr null, ptr [[TMP7]], align 82530// CHECK1-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 82531// CHECK1-NEXT:    store i64 100, ptr [[TMP8]], align 82532// CHECK1-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 92533// CHECK1-NEXT:    store i64 0, ptr [[TMP9]], align 82534// CHECK1-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 102535// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 42536// CHECK1-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 112537// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 42538// CHECK1-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 122539// CHECK1-NEXT:    store i32 0, ptr [[TMP12]], align 42540// CHECK1-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.region_id, ptr [[KERNEL_ARGS]])2541// CHECK1-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 02542// CHECK1-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]2543// CHECK1:       omp_offload.failed:2544// CHECK1-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68() #[[ATTR3:[0-9]+]]2545// CHECK1-NEXT:    br label [[OMP_OFFLOAD_CONT]]2546// CHECK1:       lpad:2547// CHECK1-NEXT:    [[TMP15:%.*]] = landingpad { ptr, i32 }2548// CHECK1-NEXT:            cleanup2549// CHECK1-NEXT:    [[TMP16:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 02550// CHECK1-NEXT:    store ptr [[TMP16]], ptr [[EXN_SLOT]], align 82551// CHECK1-NEXT:    [[TMP17:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 12552// CHECK1-NEXT:    store i32 [[TMP17]], ptr [[EHSELECTOR_SLOT]], align 42553// CHECK1-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]2554// CHECK1-NEXT:    br label [[EH_RESUME:%.*]]2555// CHECK1:       omp_offload.cont:2556// CHECK1-NEXT:    [[TMP18:%.*]] = load i8, ptr [[A]], align 12557// CHECK1-NEXT:    store i8 [[TMP18]], ptr [[A_CASTED]], align 12558// CHECK1-NEXT:    [[TMP19:%.*]] = load i64, ptr [[A_CASTED]], align 82559// CHECK1-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02560// CHECK1-NEXT:    store i64 [[TMP19]], ptr [[TMP20]], align 82561// CHECK1-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02562// CHECK1-NEXT:    store i64 [[TMP19]], ptr [[TMP21]], align 82563// CHECK1-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 02564// CHECK1-NEXT:    store ptr null, ptr [[TMP22]], align 82565// CHECK1-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 02566// CHECK1-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 02567// CHECK1-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 02568// CHECK1-NEXT:    store i32 3, ptr [[TMP25]], align 42569// CHECK1-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 12570// CHECK1-NEXT:    store i32 1, ptr [[TMP26]], align 42571// CHECK1-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 22572// CHECK1-NEXT:    store ptr [[TMP23]], ptr [[TMP27]], align 82573// CHECK1-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 32574// CHECK1-NEXT:    store ptr [[TMP24]], ptr [[TMP28]], align 82575// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 42576// CHECK1-NEXT:    store ptr @.offload_sizes, ptr [[TMP29]], align 82577// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 52578// CHECK1-NEXT:    store ptr @.offload_maptypes, ptr [[TMP30]], align 82579// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 62580// CHECK1-NEXT:    store ptr null, ptr [[TMP31]], align 82581// CHECK1-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 72582// CHECK1-NEXT:    store ptr null, ptr [[TMP32]], align 82583// CHECK1-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 82584// CHECK1-NEXT:    store i64 100, ptr [[TMP33]], align 82585// CHECK1-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 92586// CHECK1-NEXT:    store i64 0, ptr [[TMP34]], align 82587// CHECK1-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 102588// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP35]], align 42589// CHECK1-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 112590// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP36]], align 42591// CHECK1-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 122592// CHECK1-NEXT:    store i32 0, ptr [[TMP37]], align 42593// CHECK1-NEXT:    [[TMP38:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.region_id, ptr [[KERNEL_ARGS2]])2594// CHECK1-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 02595// CHECK1-NEXT:    br i1 [[TMP39]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]2596// CHECK1:       omp_offload.failed3:2597// CHECK1-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74(i64 [[TMP19]]) #[[ATTR3]]2598// CHECK1-NEXT:    br label [[OMP_OFFLOAD_CONT4]]2599// CHECK1:       omp_offload.cont4:2600// CHECK1-NEXT:    [[TMP40:%.*]] = load i8, ptr [[A]], align 12601// CHECK1-NEXT:    [[CONV:%.*]] = sext i8 [[TMP40]] to i322602// CHECK1-NEXT:    [[CALL6:%.*]] = invoke noundef i32 @_Z5tmainIcLi5EEiv()2603// CHECK1-NEXT:            to label [[INVOKE_CONT5:%.*]] unwind label [[LPAD]]2604// CHECK1:       invoke.cont5:2605// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CALL6]]2606// CHECK1-NEXT:    [[CALL8:%.*]] = invoke noundef i32 @_Z5tmainI1SLi1EEiv()2607// CHECK1-NEXT:            to label [[INVOKE_CONT7:%.*]] unwind label [[LPAD]]2608// CHECK1:       invoke.cont7:2609// CHECK1-NEXT:    [[ADD9:%.*]] = add nsw i32 [[ADD]], [[CALL8]]2610// CHECK1-NEXT:    store i32 [[ADD9]], ptr [[RETVAL]], align 42611// CHECK1-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]2612// CHECK1-NEXT:    [[TMP41:%.*]] = load i32, ptr [[RETVAL]], align 42613// CHECK1-NEXT:    ret i32 [[TMP41]]2614// CHECK1:       eh.resume:2615// CHECK1-NEXT:    [[EXN:%.*]] = load ptr, ptr [[EXN_SLOT]], align 82616// CHECK1-NEXT:    [[SEL:%.*]] = load i32, ptr [[EHSELECTOR_SLOT]], align 42617// CHECK1-NEXT:    [[LPAD_VAL:%.*]] = insertvalue { ptr, i32 } poison, ptr [[EXN]], 02618// CHECK1-NEXT:    [[LPAD_VAL10:%.*]] = insertvalue { ptr, i32 } [[LPAD_VAL]], i32 [[SEL]], 12619// CHECK1-NEXT:    resume { ptr, i32 } [[LPAD_VAL10]]2620//2621//2622// CHECK1-LABEL: define {{[^@]+}}@_ZN1SC1El2623// CHECK1-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {2624// CHECK1-NEXT:  entry:2625// CHECK1-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82626// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 82627// CHECK1-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82628// CHECK1-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 82629// CHECK1-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82630// CHECK1-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 82631// CHECK1-NEXT:    call void @_ZN1SC2El(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]], i64 noundef [[TMP0]])2632// CHECK1-NEXT:    ret void2633//2634//2635// CHECK1-LABEL: define {{[^@]+}}@_ZN1ScvcEv2636// CHECK1-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 {2637// CHECK1-NEXT:  entry:2638// CHECK1-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 82639// CHECK1-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 82640// CHECK1-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 82641// CHECK1-NEXT:    call void @_Z8mayThrowv()2642// CHECK1-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 02643// CHECK1-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A]], align 82644// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i82645// CHECK1-NEXT:    ret i8 [[CONV]]2646//2647//2648// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l682649// CHECK1-SAME: () #[[ATTR2:[0-9]+]] {2650// CHECK1-NEXT:  entry:2651// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined)2652// CHECK1-NEXT:    ret void2653//2654//2655// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined2656// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {2657// CHECK1-NEXT:  entry:2658// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82659// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82660// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42661// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42662// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42663// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42664// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42665// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42666// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42667// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82668// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82669// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42670// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 42671// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42672// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42673// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82674// CHECK1-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 42675// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2676// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42677// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 992678// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2679// CHECK1:       cond.true:2680// CHECK1-NEXT:    br label [[COND_END:%.*]]2681// CHECK1:       cond.false:2682// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42683// CHECK1-NEXT:    br label [[COND_END]]2684// CHECK1:       cond.end:2685// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]2686// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42687// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42688// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 42689// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2690// CHECK1:       omp.inner.for.cond:2691// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42692// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42693// CHECK1-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]2694// CHECK1-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2695// CHECK1:       omp.inner.for.body:2696// CHECK1-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 2)2697// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42698// CHECK1-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i642699// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42700// CHECK1-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i642701// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])2702// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2703// CHECK1:       omp.inner.for.inc:2704// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42705// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42706// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]2707// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42708// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]2709// CHECK1:       omp.inner.for.end:2710// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2711// CHECK1:       omp.loop.exit:2712// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])2713// CHECK1-NEXT:    ret void2714//2715//2716// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined.omp_outlined2717// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {2718// CHECK1-NEXT:  entry:2719// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82720// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82721// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82722// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82723// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42724// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42725// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42726// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42727// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42728// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42729// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42730// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82731// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82732// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82733// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82734// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42735// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 42736// CHECK1-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82737// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i322738// CHECK1-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82739// CHECK1-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i322740// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42741// CHECK1-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 42742// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42743// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42744// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82745// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 42746// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2747// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42748// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 992749// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2750// CHECK1:       cond.true:2751// CHECK1-NEXT:    br label [[COND_END:%.*]]2752// CHECK1:       cond.false:2753// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42754// CHECK1-NEXT:    br label [[COND_END]]2755// CHECK1:       cond.end:2756// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]2757// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42758// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42759// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 42760// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2761// CHECK1:       omp.inner.for.cond:2762// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42763// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42764// CHECK1-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]2765// CHECK1-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2766// CHECK1:       omp.inner.for.body:2767// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42768// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 12769// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2770// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I]], align 42771// CHECK1-NEXT:    invoke void @_Z3foov()2772// CHECK1-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]2773// CHECK1:       invoke.cont:2774// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2775// CHECK1:       omp.body.continue:2776// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2777// CHECK1:       omp.inner.for.inc:2778// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42779// CHECK1-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 12780// CHECK1-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 42781// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]2782// CHECK1:       omp.inner.for.end:2783// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2784// CHECK1:       omp.loop.exit:2785// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])2786// CHECK1-NEXT:    ret void2787// CHECK1:       terminate.lpad:2788// CHECK1-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }2789// CHECK1-NEXT:            catch ptr null2790// CHECK1-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 02791// CHECK1-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7:[0-9]+]]2792// CHECK1-NEXT:    unreachable2793//2794//2795// CHECK1-LABEL: define {{[^@]+}}@__clang_call_terminate2796// CHECK1-SAME: (ptr noundef [[TMP0:%.*]]) #[[ATTR5:[0-9]+]] comdat {2797// CHECK1-NEXT:    [[TMP2:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP0]]) #[[ATTR3]]2798// CHECK1-NEXT:    call void @_ZSt9terminatev() #[[ATTR7]]2799// CHECK1-NEXT:    unreachable2800//2801//2802// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l742803// CHECK1-SAME: (i64 noundef [[A:%.*]]) #[[ATTR2]] {2804// CHECK1-NEXT:  entry:2805// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 82806// CHECK1-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 82807// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined, ptr [[A_ADDR]])2808// CHECK1-NEXT:    ret void2809//2810//2811// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined2812// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 1 dereferenceable(1) [[A:%.*]]) #[[ATTR2]] {2813// CHECK1-NEXT:  entry:2814// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82815// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82816// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82817// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42818// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42819// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42820// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42821// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42822// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42823// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42824// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82825// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82826// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82827// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8, !nonnull [[META17:![0-9]+]]2828// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42829// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 42830// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42831// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42832// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82833// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 42834// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2835// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42836// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 992837// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2838// CHECK1:       cond.true:2839// CHECK1-NEXT:    br label [[COND_END:%.*]]2840// CHECK1:       cond.false:2841// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42842// CHECK1-NEXT:    br label [[COND_END]]2843// CHECK1:       cond.end:2844// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]2845// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42846// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42847// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 42848// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2849// CHECK1:       omp.inner.for.cond:2850// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42851// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42852// CHECK1-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]2853// CHECK1-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2854// CHECK1:       omp.inner.for.body:2855// CHECK1-NEXT:    [[TMP8:%.*]] = load i8, ptr [[TMP0]], align 12856// CHECK1-NEXT:    [[TMP9:%.*]] = sext i8 [[TMP8]] to i322857// CHECK1-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP2]], i32 [[TMP9]])2858// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42859// CHECK1-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i642860// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42861// CHECK1-NEXT:    [[TMP13:%.*]] = zext i32 [[TMP12]] to i642862// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined.omp_outlined, i64 [[TMP11]], i64 [[TMP13]])2863// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2864// CHECK1:       omp.inner.for.inc:2865// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42866// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42867// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]2868// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42869// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]2870// CHECK1:       omp.inner.for.end:2871// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2872// CHECK1:       omp.loop.exit:2873// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])2874// CHECK1-NEXT:    ret void2875//2876//2877// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined.omp_outlined2878// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {2879// CHECK1-NEXT:  entry:2880// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82881// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82882// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82883// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82884// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42885// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42886// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42887// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42888// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42889// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42890// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42891// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82892// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82893// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82894// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82895// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42896// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 42897// CHECK1-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82898// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i322899// CHECK1-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82900// CHECK1-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i322901// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42902// CHECK1-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 42903// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42904// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42905// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82906// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 42907// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2908// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42909// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 992910// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2911// CHECK1:       cond.true:2912// CHECK1-NEXT:    br label [[COND_END:%.*]]2913// CHECK1:       cond.false:2914// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42915// CHECK1-NEXT:    br label [[COND_END]]2916// CHECK1:       cond.end:2917// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]2918// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42919// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42920// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 42921// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2922// CHECK1:       omp.inner.for.cond:2923// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42924// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42925// CHECK1-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]2926// CHECK1-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2927// CHECK1:       omp.inner.for.body:2928// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42929// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 12930// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2931// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I]], align 42932// CHECK1-NEXT:    invoke void @_Z3foov()2933// CHECK1-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]2934// CHECK1:       invoke.cont:2935// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2936// CHECK1:       omp.body.continue:2937// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2938// CHECK1:       omp.inner.for.inc:2939// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42940// CHECK1-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 12941// CHECK1-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 42942// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]2943// CHECK1:       omp.inner.for.end:2944// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2945// CHECK1:       omp.loop.exit:2946// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])2947// CHECK1-NEXT:    ret void2948// CHECK1:       terminate.lpad:2949// CHECK1-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }2950// CHECK1-NEXT:            catch ptr null2951// CHECK1-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 02952// CHECK1-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]2953// CHECK1-NEXT:    unreachable2954//2955//2956// CHECK1-LABEL: define {{[^@]+}}@_Z5tmainIcLi5EEiv2957// CHECK1-SAME: () #[[ATTR6:[0-9]+]] comdat {2958// CHECK1-NEXT:  entry:2959// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42960// CHECK1-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 82961// CHECK1-NEXT:    [[_TMP1:%.*]] = alloca i32, align 42962// CHECK1-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 82963// CHECK1-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 02964// CHECK1-NEXT:    store i32 3, ptr [[TMP0]], align 42965// CHECK1-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12966// CHECK1-NEXT:    store i32 0, ptr [[TMP1]], align 42967// CHECK1-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 22968// CHECK1-NEXT:    store ptr null, ptr [[TMP2]], align 82969// CHECK1-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 32970// CHECK1-NEXT:    store ptr null, ptr [[TMP3]], align 82971// CHECK1-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 42972// CHECK1-NEXT:    store ptr null, ptr [[TMP4]], align 82973// CHECK1-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 52974// CHECK1-NEXT:    store ptr null, ptr [[TMP5]], align 82975// CHECK1-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 62976// CHECK1-NEXT:    store ptr null, ptr [[TMP6]], align 82977// CHECK1-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 72978// CHECK1-NEXT:    store ptr null, ptr [[TMP7]], align 82979// CHECK1-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 82980// CHECK1-NEXT:    store i64 100, ptr [[TMP8]], align 82981// CHECK1-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 92982// CHECK1-NEXT:    store i64 0, ptr [[TMP9]], align 82983// CHECK1-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 102984// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 42985// CHECK1-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 112986// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 42987// CHECK1-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 122988// CHECK1-NEXT:    store i32 0, ptr [[TMP12]], align 42989// CHECK1-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.region_id, ptr [[KERNEL_ARGS]])2990// CHECK1-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 02991// CHECK1-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]2992// CHECK1:       omp_offload.failed:2993// CHECK1-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52() #[[ATTR3]]2994// CHECK1-NEXT:    br label [[OMP_OFFLOAD_CONT]]2995// CHECK1:       omp_offload.cont:2996// CHECK1-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 02997// CHECK1-NEXT:    store i32 3, ptr [[TMP15]], align 42998// CHECK1-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 12999// CHECK1-NEXT:    store i32 0, ptr [[TMP16]], align 43000// CHECK1-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 23001// CHECK1-NEXT:    store ptr null, ptr [[TMP17]], align 83002// CHECK1-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 33003// CHECK1-NEXT:    store ptr null, ptr [[TMP18]], align 83004// CHECK1-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 43005// CHECK1-NEXT:    store ptr null, ptr [[TMP19]], align 83006// CHECK1-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 53007// CHECK1-NEXT:    store ptr null, ptr [[TMP20]], align 83008// CHECK1-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 63009// CHECK1-NEXT:    store ptr null, ptr [[TMP21]], align 83010// CHECK1-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 73011// CHECK1-NEXT:    store ptr null, ptr [[TMP22]], align 83012// CHECK1-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 83013// CHECK1-NEXT:    store i64 100, ptr [[TMP23]], align 83014// CHECK1-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 93015// CHECK1-NEXT:    store i64 0, ptr [[TMP24]], align 83016// CHECK1-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 103017// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 43018// CHECK1-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 113019// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 43020// CHECK1-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 123021// CHECK1-NEXT:    store i32 0, ptr [[TMP27]], align 43022// CHECK1-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.region_id, ptr [[KERNEL_ARGS2]])3023// CHECK1-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 03024// CHECK1-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]3025// CHECK1:       omp_offload.failed3:3026// CHECK1-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57() #[[ATTR3]]3027// CHECK1-NEXT:    br label [[OMP_OFFLOAD_CONT4]]3028// CHECK1:       omp_offload.cont4:3029// CHECK1-NEXT:    ret i32 03030//3031//3032// CHECK1-LABEL: define {{[^@]+}}@_Z5tmainI1SLi1EEiv3033// CHECK1-SAME: () #[[ATTR6]] comdat {3034// CHECK1-NEXT:  entry:3035// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 43036// CHECK1-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 83037// CHECK1-NEXT:    [[_TMP1:%.*]] = alloca i32, align 43038// CHECK1-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 83039// CHECK1-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 03040// CHECK1-NEXT:    store i32 3, ptr [[TMP0]], align 43041// CHECK1-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 13042// CHECK1-NEXT:    store i32 0, ptr [[TMP1]], align 43043// CHECK1-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 23044// CHECK1-NEXT:    store ptr null, ptr [[TMP2]], align 83045// CHECK1-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 33046// CHECK1-NEXT:    store ptr null, ptr [[TMP3]], align 83047// CHECK1-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 43048// CHECK1-NEXT:    store ptr null, ptr [[TMP4]], align 83049// CHECK1-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 53050// CHECK1-NEXT:    store ptr null, ptr [[TMP5]], align 83051// CHECK1-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 63052// CHECK1-NEXT:    store ptr null, ptr [[TMP6]], align 83053// CHECK1-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 73054// CHECK1-NEXT:    store ptr null, ptr [[TMP7]], align 83055// CHECK1-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 83056// CHECK1-NEXT:    store i64 100, ptr [[TMP8]], align 83057// CHECK1-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 93058// CHECK1-NEXT:    store i64 0, ptr [[TMP9]], align 83059// CHECK1-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 103060// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 43061// CHECK1-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 113062// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 43063// CHECK1-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 123064// CHECK1-NEXT:    store i32 0, ptr [[TMP12]], align 43065// CHECK1-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.region_id, ptr [[KERNEL_ARGS]])3066// CHECK1-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 03067// CHECK1-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]3068// CHECK1:       omp_offload.failed:3069// CHECK1-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52() #[[ATTR3]]3070// CHECK1-NEXT:    br label [[OMP_OFFLOAD_CONT]]3071// CHECK1:       omp_offload.cont:3072// CHECK1-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 03073// CHECK1-NEXT:    store i32 3, ptr [[TMP15]], align 43074// CHECK1-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 13075// CHECK1-NEXT:    store i32 0, ptr [[TMP16]], align 43076// CHECK1-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 23077// CHECK1-NEXT:    store ptr null, ptr [[TMP17]], align 83078// CHECK1-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 33079// CHECK1-NEXT:    store ptr null, ptr [[TMP18]], align 83080// CHECK1-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 43081// CHECK1-NEXT:    store ptr null, ptr [[TMP19]], align 83082// CHECK1-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 53083// CHECK1-NEXT:    store ptr null, ptr [[TMP20]], align 83084// CHECK1-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 63085// CHECK1-NEXT:    store ptr null, ptr [[TMP21]], align 83086// CHECK1-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 73087// CHECK1-NEXT:    store ptr null, ptr [[TMP22]], align 83088// CHECK1-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 83089// CHECK1-NEXT:    store i64 100, ptr [[TMP23]], align 83090// CHECK1-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 93091// CHECK1-NEXT:    store i64 0, ptr [[TMP24]], align 83092// CHECK1-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 103093// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 43094// CHECK1-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 113095// CHECK1-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 43096// CHECK1-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 123097// CHECK1-NEXT:    store i32 0, ptr [[TMP27]], align 43098// CHECK1-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.region_id, ptr [[KERNEL_ARGS2]])3099// CHECK1-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 03100// CHECK1-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]3101// CHECK1:       omp_offload.failed3:3102// CHECK1-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57() #[[ATTR3]]3103// CHECK1-NEXT:    br label [[OMP_OFFLOAD_CONT4]]3104// CHECK1:       omp_offload.cont4:3105// CHECK1-NEXT:    ret i32 03106//3107//3108// CHECK1-LABEL: define {{[^@]+}}@_ZN1SD1Ev3109// CHECK1-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat align 2 {3110// CHECK1-NEXT:  entry:3111// CHECK1-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 83112// CHECK1-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 83113// CHECK1-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83114// CHECK1-NEXT:    call void @_ZN1SD2Ev(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]]) #[[ATTR3]]3115// CHECK1-NEXT:    ret void3116//3117//3118// CHECK1-LABEL: define {{[^@]+}}@_ZN1SC2El3119// CHECK1-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR6]] comdat align 2 {3120// CHECK1-NEXT:  entry:3121// CHECK1-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 83122// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 83123// CHECK1-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 83124// CHECK1-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 83125// CHECK1-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83126// CHECK1-NEXT:    [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 03127// CHECK1-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 83128// CHECK1-NEXT:    store i64 [[TMP0]], ptr [[A2]], align 83129// CHECK1-NEXT:    ret void3130//3131//3132// CHECK1-LABEL: define {{[^@]+}}@_ZN1SD2Ev3133// CHECK1-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat align 2 {3134// CHECK1-NEXT:  entry:3135// CHECK1-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 83136// CHECK1-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 83137// CHECK1-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83138// CHECK1-NEXT:    ret void3139//3140//3141// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l523142// CHECK1-SAME: () #[[ATTR2]] {3143// CHECK1-NEXT:  entry:3144// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined)3145// CHECK1-NEXT:    ret void3146//3147//3148// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined3149// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {3150// CHECK1-NEXT:  entry:3151// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83152// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83153// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43154// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 43155// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43156// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43157// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43158// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43159// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 43160// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83161// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83162// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43163// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 43164// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43165// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43166// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83167// CHECK1-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 43168// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3169// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43170// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 993171// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3172// CHECK1:       cond.true:3173// CHECK1-NEXT:    br label [[COND_END:%.*]]3174// CHECK1:       cond.false:3175// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43176// CHECK1-NEXT:    br label [[COND_END]]3177// CHECK1:       cond.end:3178// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]3179// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43180// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43181// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 43182// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3183// CHECK1:       omp.inner.for.cond:3184// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43185// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43186// CHECK1-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]3187// CHECK1-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3188// CHECK1:       omp.inner.for.body:3189// CHECK1-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 5)3190// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43191// CHECK1-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i643192// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43193// CHECK1-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i643194// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])3195// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3196// CHECK1:       omp.inner.for.inc:3197// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43198// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43199// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]3200// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43201// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]3202// CHECK1:       omp.inner.for.end:3203// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3204// CHECK1:       omp.loop.exit:3205// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])3206// CHECK1-NEXT:    ret void3207//3208//3209// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined.omp_outlined3210// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {3211// CHECK1-NEXT:  entry:3212// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83213// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83214// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 83215// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 83216// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43217// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 43218// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43219// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43220// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43221// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43222// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 43223// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83224// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83225// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 83226// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 83227// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43228// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 43229// CHECK1-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 83230// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i323231// CHECK1-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 83232// CHECK1-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i323233// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 43234// CHECK1-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 43235// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43236// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43237// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83238// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 43239// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3240// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43241// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 993242// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3243// CHECK1:       cond.true:3244// CHECK1-NEXT:    br label [[COND_END:%.*]]3245// CHECK1:       cond.false:3246// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43247// CHECK1-NEXT:    br label [[COND_END]]3248// CHECK1:       cond.end:3249// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]3250// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43251// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43252// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 43253// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3254// CHECK1:       omp.inner.for.cond:3255// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43256// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43257// CHECK1-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]3258// CHECK1-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3259// CHECK1:       omp.inner.for.body:3260// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43261// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 13262// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3263// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I]], align 43264// CHECK1-NEXT:    invoke void @_Z3foov()3265// CHECK1-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]3266// CHECK1:       invoke.cont:3267// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3268// CHECK1:       omp.body.continue:3269// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3270// CHECK1:       omp.inner.for.inc:3271// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43272// CHECK1-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 13273// CHECK1-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 43274// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]3275// CHECK1:       omp.inner.for.end:3276// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3277// CHECK1:       omp.loop.exit:3278// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])3279// CHECK1-NEXT:    ret void3280// CHECK1:       terminate.lpad:3281// CHECK1-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }3282// CHECK1-NEXT:            catch ptr null3283// CHECK1-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 03284// CHECK1-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]3285// CHECK1-NEXT:    unreachable3286//3287//3288// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l573289// CHECK1-SAME: () #[[ATTR2]] {3290// CHECK1-NEXT:  entry:3291// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined)3292// CHECK1-NEXT:    ret void3293//3294//3295// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined3296// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {3297// CHECK1-NEXT:  entry:3298// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83299// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83300// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43301// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 43302// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43303// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43304// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43305// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43306// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 43307// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83308// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83309// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43310// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 43311// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43312// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43313// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83314// CHECK1-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 43315// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3316// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43317// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 993318// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3319// CHECK1:       cond.true:3320// CHECK1-NEXT:    br label [[COND_END:%.*]]3321// CHECK1:       cond.false:3322// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43323// CHECK1-NEXT:    br label [[COND_END]]3324// CHECK1:       cond.end:3325// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]3326// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43327// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43328// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 43329// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3330// CHECK1:       omp.inner.for.cond:3331// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43332// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43333// CHECK1-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]3334// CHECK1-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3335// CHECK1:       omp.inner.for.body:3336// CHECK1-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 23)3337// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43338// CHECK1-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i643339// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43340// CHECK1-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i643341// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])3342// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3343// CHECK1:       omp.inner.for.inc:3344// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43345// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43346// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]3347// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43348// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]3349// CHECK1:       omp.inner.for.end:3350// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3351// CHECK1:       omp.loop.exit:3352// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])3353// CHECK1-NEXT:    ret void3354//3355//3356// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined.omp_outlined3357// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {3358// CHECK1-NEXT:  entry:3359// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83360// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83361// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 83362// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 83363// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43364// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 43365// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43366// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43367// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43368// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43369// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 43370// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83371// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83372// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 83373// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 83374// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43375// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 43376// CHECK1-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 83377// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i323378// CHECK1-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 83379// CHECK1-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i323380// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 43381// CHECK1-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 43382// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43383// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43384// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83385// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 43386// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3387// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43388// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 993389// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3390// CHECK1:       cond.true:3391// CHECK1-NEXT:    br label [[COND_END:%.*]]3392// CHECK1:       cond.false:3393// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43394// CHECK1-NEXT:    br label [[COND_END]]3395// CHECK1:       cond.end:3396// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]3397// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43398// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43399// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 43400// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3401// CHECK1:       omp.inner.for.cond:3402// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43403// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43404// CHECK1-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]3405// CHECK1-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3406// CHECK1:       omp.inner.for.body:3407// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43408// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 13409// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3410// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I]], align 43411// CHECK1-NEXT:    invoke void @_Z3foov()3412// CHECK1-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]3413// CHECK1:       invoke.cont:3414// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3415// CHECK1:       omp.body.continue:3416// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3417// CHECK1:       omp.inner.for.inc:3418// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43419// CHECK1-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 13420// CHECK1-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 43421// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]3422// CHECK1:       omp.inner.for.end:3423// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3424// CHECK1:       omp.loop.exit:3425// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])3426// CHECK1-NEXT:    ret void3427// CHECK1:       terminate.lpad:3428// CHECK1-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }3429// CHECK1-NEXT:            catch ptr null3430// CHECK1-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 03431// CHECK1-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]3432// CHECK1-NEXT:    unreachable3433//3434//3435// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l523436// CHECK1-SAME: () #[[ATTR2]] {3437// CHECK1-NEXT:  entry:3438// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined)3439// CHECK1-NEXT:    ret void3440//3441//3442// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined3443// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {3444// CHECK1-NEXT:  entry:3445// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83446// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83447// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43448// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 43449// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43450// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43451// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43452// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43453// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 43454// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83455// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83456// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43457// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 43458// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43459// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43460// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83461// CHECK1-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 43462// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3463// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43464// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 993465// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3466// CHECK1:       cond.true:3467// CHECK1-NEXT:    br label [[COND_END:%.*]]3468// CHECK1:       cond.false:3469// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43470// CHECK1-NEXT:    br label [[COND_END]]3471// CHECK1:       cond.end:3472// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]3473// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43474// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43475// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 43476// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3477// CHECK1:       omp.inner.for.cond:3478// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43479// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43480// CHECK1-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]3481// CHECK1-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3482// CHECK1:       omp.inner.for.body:3483// CHECK1-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 1)3484// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43485// CHECK1-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i643486// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43487// CHECK1-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i643488// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])3489// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3490// CHECK1:       omp.inner.for.inc:3491// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43492// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43493// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]3494// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43495// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]3496// CHECK1:       omp.inner.for.end:3497// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3498// CHECK1:       omp.loop.exit:3499// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])3500// CHECK1-NEXT:    ret void3501//3502//3503// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined.omp_outlined3504// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {3505// CHECK1-NEXT:  entry:3506// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83507// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83508// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 83509// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 83510// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43511// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 43512// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43513// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43514// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43515// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43516// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 43517// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83518// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83519// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 83520// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 83521// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43522// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 43523// CHECK1-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 83524// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i323525// CHECK1-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 83526// CHECK1-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i323527// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 43528// CHECK1-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 43529// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43530// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43531// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83532// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 43533// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3534// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43535// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 993536// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3537// CHECK1:       cond.true:3538// CHECK1-NEXT:    br label [[COND_END:%.*]]3539// CHECK1:       cond.false:3540// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43541// CHECK1-NEXT:    br label [[COND_END]]3542// CHECK1:       cond.end:3543// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]3544// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43545// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43546// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 43547// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3548// CHECK1:       omp.inner.for.cond:3549// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43550// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43551// CHECK1-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]3552// CHECK1-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3553// CHECK1:       omp.inner.for.body:3554// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43555// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 13556// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3557// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I]], align 43558// CHECK1-NEXT:    invoke void @_Z3foov()3559// CHECK1-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]3560// CHECK1:       invoke.cont:3561// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3562// CHECK1:       omp.body.continue:3563// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3564// CHECK1:       omp.inner.for.inc:3565// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43566// CHECK1-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 13567// CHECK1-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 43568// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]3569// CHECK1:       omp.inner.for.end:3570// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3571// CHECK1:       omp.loop.exit:3572// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])3573// CHECK1-NEXT:    ret void3574// CHECK1:       terminate.lpad:3575// CHECK1-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }3576// CHECK1-NEXT:            catch ptr null3577// CHECK1-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 03578// CHECK1-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]3579// CHECK1-NEXT:    unreachable3580//3581//3582// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l573583// CHECK1-SAME: () #[[ATTR2]] {3584// CHECK1-NEXT:  entry:3585// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined)3586// CHECK1-NEXT:    ret void3587//3588//3589// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined3590// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {3591// CHECK1-NEXT:  entry:3592// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83593// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83594// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43595// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 43596// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43597// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43598// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43599// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43600// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 43601// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 83602// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83603// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83604// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43605// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 43606// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43607// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43608// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83609// CHECK1-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 43610// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3611// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43612// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 993613// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3614// CHECK1:       cond.true:3615// CHECK1-NEXT:    br label [[COND_END:%.*]]3616// CHECK1:       cond.false:3617// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43618// CHECK1-NEXT:    br label [[COND_END]]3619// CHECK1:       cond.end:3620// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]3621// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43622// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43623// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 43624// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3625// CHECK1:       omp.inner.for.cond:3626// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43627// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43628// CHECK1-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]3629// CHECK1-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3630// CHECK1:       omp.inner.for.body:3631// CHECK1-NEXT:    invoke void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)3632// CHECK1-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]3633// CHECK1:       invoke.cont:3634// CHECK1-NEXT:    [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])3635// CHECK1-NEXT:            to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]3636// CHECK1:       invoke.cont2:3637// CHECK1-NEXT:    [[TMP7:%.*]] = sext i8 [[CALL]] to i323638// CHECK1-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])3639// CHECK1-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR3]]3640// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43641// CHECK1-NEXT:    [[TMP9:%.*]] = zext i32 [[TMP8]] to i643642// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43643// CHECK1-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i643644// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined.omp_outlined, i64 [[TMP9]], i64 [[TMP11]])3645// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3646// CHECK1:       omp.inner.for.inc:3647// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43648// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43649// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]3650// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43651// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]3652// CHECK1:       omp.inner.for.end:3653// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3654// CHECK1:       omp.loop.exit:3655// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])3656// CHECK1-NEXT:    ret void3657// CHECK1:       terminate.lpad:3658// CHECK1-NEXT:    [[TMP14:%.*]] = landingpad { ptr, i32 }3659// CHECK1-NEXT:            catch ptr null3660// CHECK1-NEXT:    [[TMP15:%.*]] = extractvalue { ptr, i32 } [[TMP14]], 03661// CHECK1-NEXT:    call void @__clang_call_terminate(ptr [[TMP15]]) #[[ATTR7]]3662// CHECK1-NEXT:    unreachable3663//3664//3665// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined.omp_outlined3666// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {3667// CHECK1-NEXT:  entry:3668// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83669// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83670// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 83671// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 83672// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43673// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 43674// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43675// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43676// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43677// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43678// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 43679// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83680// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83681// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 83682// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 83683// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43684// CHECK1-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 43685// CHECK1-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 83686// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i323687// CHECK1-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 83688// CHECK1-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i323689// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 43690// CHECK1-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 43691// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43692// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43693// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83694// CHECK1-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 43695// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3696// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43697// CHECK1-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 993698// CHECK1-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3699// CHECK1:       cond.true:3700// CHECK1-NEXT:    br label [[COND_END:%.*]]3701// CHECK1:       cond.false:3702// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43703// CHECK1-NEXT:    br label [[COND_END]]3704// CHECK1:       cond.end:3705// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]3706// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43707// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43708// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 43709// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3710// CHECK1:       omp.inner.for.cond:3711// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43712// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43713// CHECK1-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]3714// CHECK1-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3715// CHECK1:       omp.inner.for.body:3716// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43717// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 13718// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3719// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I]], align 43720// CHECK1-NEXT:    invoke void @_Z3foov()3721// CHECK1-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]3722// CHECK1:       invoke.cont:3723// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3724// CHECK1:       omp.body.continue:3725// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3726// CHECK1:       omp.inner.for.inc:3727// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43728// CHECK1-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 13729// CHECK1-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 43730// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]3731// CHECK1:       omp.inner.for.end:3732// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3733// CHECK1:       omp.loop.exit:3734// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])3735// CHECK1-NEXT:    ret void3736// CHECK1:       terminate.lpad:3737// CHECK1-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }3738// CHECK1-NEXT:            catch ptr null3739// CHECK1-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 03740// CHECK1-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]3741// CHECK1-NEXT:    unreachable3742//3743//3744// CHECK5-LABEL: define {{[^@]+}}@main3745// CHECK5-SAME: () #[[ATTR0:[0-9]+]] personality ptr @__gxx_personality_v0 {3746// CHECK5-NEXT:  entry:3747// CHECK5-NEXT:    [[RETVAL:%.*]] = alloca i32, align 43748// CHECK5-NEXT:    [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 83749// CHECK5-NEXT:    [[A:%.*]] = alloca i8, align 13750// CHECK5-NEXT:    [[EXN_SLOT:%.*]] = alloca ptr, align 83751// CHECK5-NEXT:    [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 43752// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 43753// CHECK5-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 83754// CHECK5-NEXT:    [[A_CASTED:%.*]] = alloca i64, align 83755// CHECK5-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 83756// CHECK5-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 83757// CHECK5-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 83758// CHECK5-NEXT:    [[_TMP1:%.*]] = alloca i32, align 43759// CHECK5-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 83760// CHECK5-NEXT:    store i32 0, ptr [[RETVAL]], align 43761// CHECK5-NEXT:    call void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[S]], i64 noundef 0)3762// CHECK5-NEXT:    [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[S]])3763// CHECK5-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]3764// CHECK5:       invoke.cont:3765// CHECK5-NEXT:    store i8 [[CALL]], ptr [[A]], align 13766// CHECK5-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 03767// CHECK5-NEXT:    store i32 3, ptr [[TMP0]], align 43768// CHECK5-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 13769// CHECK5-NEXT:    store i32 0, ptr [[TMP1]], align 43770// CHECK5-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 23771// CHECK5-NEXT:    store ptr null, ptr [[TMP2]], align 83772// CHECK5-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 33773// CHECK5-NEXT:    store ptr null, ptr [[TMP3]], align 83774// CHECK5-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 43775// CHECK5-NEXT:    store ptr null, ptr [[TMP4]], align 83776// CHECK5-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 53777// CHECK5-NEXT:    store ptr null, ptr [[TMP5]], align 83778// CHECK5-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 63779// CHECK5-NEXT:    store ptr null, ptr [[TMP6]], align 83780// CHECK5-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 73781// CHECK5-NEXT:    store ptr null, ptr [[TMP7]], align 83782// CHECK5-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 83783// CHECK5-NEXT:    store i64 100, ptr [[TMP8]], align 83784// CHECK5-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 93785// CHECK5-NEXT:    store i64 0, ptr [[TMP9]], align 83786// CHECK5-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 103787// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 43788// CHECK5-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 113789// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 43790// CHECK5-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 123791// CHECK5-NEXT:    store i32 0, ptr [[TMP12]], align 43792// CHECK5-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.region_id, ptr [[KERNEL_ARGS]])3793// CHECK5-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 03794// CHECK5-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]3795// CHECK5:       omp_offload.failed:3796// CHECK5-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68() #[[ATTR3:[0-9]+]]3797// CHECK5-NEXT:    br label [[OMP_OFFLOAD_CONT]]3798// CHECK5:       lpad:3799// CHECK5-NEXT:    [[TMP15:%.*]] = landingpad { ptr, i32 }3800// CHECK5-NEXT:            cleanup3801// CHECK5-NEXT:    [[TMP16:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 03802// CHECK5-NEXT:    store ptr [[TMP16]], ptr [[EXN_SLOT]], align 83803// CHECK5-NEXT:    [[TMP17:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 13804// CHECK5-NEXT:    store i32 [[TMP17]], ptr [[EHSELECTOR_SLOT]], align 43805// CHECK5-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]3806// CHECK5-NEXT:    br label [[EH_RESUME:%.*]]3807// CHECK5:       omp_offload.cont:3808// CHECK5-NEXT:    [[TMP18:%.*]] = load i8, ptr [[A]], align 13809// CHECK5-NEXT:    store i8 [[TMP18]], ptr [[A_CASTED]], align 13810// CHECK5-NEXT:    [[TMP19:%.*]] = load i64, ptr [[A_CASTED]], align 83811// CHECK5-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 03812// CHECK5-NEXT:    store i64 [[TMP19]], ptr [[TMP20]], align 83813// CHECK5-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 03814// CHECK5-NEXT:    store i64 [[TMP19]], ptr [[TMP21]], align 83815// CHECK5-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 03816// CHECK5-NEXT:    store ptr null, ptr [[TMP22]], align 83817// CHECK5-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 03818// CHECK5-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 03819// CHECK5-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 03820// CHECK5-NEXT:    store i32 3, ptr [[TMP25]], align 43821// CHECK5-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 13822// CHECK5-NEXT:    store i32 1, ptr [[TMP26]], align 43823// CHECK5-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 23824// CHECK5-NEXT:    store ptr [[TMP23]], ptr [[TMP27]], align 83825// CHECK5-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 33826// CHECK5-NEXT:    store ptr [[TMP24]], ptr [[TMP28]], align 83827// CHECK5-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 43828// CHECK5-NEXT:    store ptr @.offload_sizes, ptr [[TMP29]], align 83829// CHECK5-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 53830// CHECK5-NEXT:    store ptr @.offload_maptypes, ptr [[TMP30]], align 83831// CHECK5-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 63832// CHECK5-NEXT:    store ptr null, ptr [[TMP31]], align 83833// CHECK5-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 73834// CHECK5-NEXT:    store ptr null, ptr [[TMP32]], align 83835// CHECK5-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 83836// CHECK5-NEXT:    store i64 100, ptr [[TMP33]], align 83837// CHECK5-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 93838// CHECK5-NEXT:    store i64 0, ptr [[TMP34]], align 83839// CHECK5-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 103840// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP35]], align 43841// CHECK5-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 113842// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP36]], align 43843// CHECK5-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 123844// CHECK5-NEXT:    store i32 0, ptr [[TMP37]], align 43845// CHECK5-NEXT:    [[TMP38:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.region_id, ptr [[KERNEL_ARGS2]])3846// CHECK5-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 03847// CHECK5-NEXT:    br i1 [[TMP39]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]3848// CHECK5:       omp_offload.failed3:3849// CHECK5-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74(i64 [[TMP19]]) #[[ATTR3]]3850// CHECK5-NEXT:    br label [[OMP_OFFLOAD_CONT4]]3851// CHECK5:       omp_offload.cont4:3852// CHECK5-NEXT:    [[TMP40:%.*]] = load i8, ptr [[A]], align 13853// CHECK5-NEXT:    [[CONV:%.*]] = sext i8 [[TMP40]] to i323854// CHECK5-NEXT:    [[CALL6:%.*]] = invoke noundef i32 @_Z5tmainIcLi5EEiv()3855// CHECK5-NEXT:            to label [[INVOKE_CONT5:%.*]] unwind label [[LPAD]]3856// CHECK5:       invoke.cont5:3857// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CALL6]]3858// CHECK5-NEXT:    [[CALL8:%.*]] = invoke noundef i32 @_Z5tmainI1SLi1EEiv()3859// CHECK5-NEXT:            to label [[INVOKE_CONT7:%.*]] unwind label [[LPAD]]3860// CHECK5:       invoke.cont7:3861// CHECK5-NEXT:    [[ADD9:%.*]] = add nsw i32 [[ADD]], [[CALL8]]3862// CHECK5-NEXT:    store i32 [[ADD9]], ptr [[RETVAL]], align 43863// CHECK5-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]3864// CHECK5-NEXT:    [[TMP41:%.*]] = load i32, ptr [[RETVAL]], align 43865// CHECK5-NEXT:    ret i32 [[TMP41]]3866// CHECK5:       eh.resume:3867// CHECK5-NEXT:    [[EXN:%.*]] = load ptr, ptr [[EXN_SLOT]], align 83868// CHECK5-NEXT:    [[SEL:%.*]] = load i32, ptr [[EHSELECTOR_SLOT]], align 43869// CHECK5-NEXT:    [[LPAD_VAL:%.*]] = insertvalue { ptr, i32 } poison, ptr [[EXN]], 03870// CHECK5-NEXT:    [[LPAD_VAL10:%.*]] = insertvalue { ptr, i32 } [[LPAD_VAL]], i32 [[SEL]], 13871// CHECK5-NEXT:    resume { ptr, i32 } [[LPAD_VAL10]]3872//3873//3874// CHECK5-LABEL: define {{[^@]+}}@_ZN1SC1El3875// CHECK5-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {3876// CHECK5-NEXT:  entry:3877// CHECK5-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 83878// CHECK5-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 83879// CHECK5-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 83880// CHECK5-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 83881// CHECK5-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83882// CHECK5-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 83883// CHECK5-NEXT:    call void @_ZN1SC2El(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]], i64 noundef [[TMP0]])3884// CHECK5-NEXT:    ret void3885//3886//3887// CHECK5-LABEL: define {{[^@]+}}@_ZN1ScvcEv3888// CHECK5-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) #[[ATTR1]] comdat align 2 {3889// CHECK5-NEXT:  entry:3890// CHECK5-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 83891// CHECK5-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 83892// CHECK5-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 83893// CHECK5-NEXT:    call void @_Z8mayThrowv()3894// CHECK5-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 03895// CHECK5-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A]], align 83896// CHECK5-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i83897// CHECK5-NEXT:    ret i8 [[CONV]]3898//3899//3900// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l683901// CHECK5-SAME: () #[[ATTR2:[0-9]+]] {3902// CHECK5-NEXT:  entry:3903// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined)3904// CHECK5-NEXT:    ret void3905//3906//3907// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined3908// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {3909// CHECK5-NEXT:  entry:3910// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83911// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83912// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43913// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 43914// CHECK5-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43915// CHECK5-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43916// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43917// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43918// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 43919// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83920// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83921// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43922// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 43923// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43924// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43925// CHECK5-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83926// CHECK5-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 43927// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3928// CHECK5-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43929// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 993930// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3931// CHECK5:       cond.true:3932// CHECK5-NEXT:    br label [[COND_END:%.*]]3933// CHECK5:       cond.false:3934// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43935// CHECK5-NEXT:    br label [[COND_END]]3936// CHECK5:       cond.end:3937// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]3938// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43939// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43940// CHECK5-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 43941// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3942// CHECK5:       omp.inner.for.cond:3943// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43944// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43945// CHECK5-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]3946// CHECK5-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3947// CHECK5:       omp.inner.for.body:3948// CHECK5-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 2)3949// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43950// CHECK5-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i643951// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43952// CHECK5-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i643953// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])3954// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3955// CHECK5:       omp.inner.for.inc:3956// CHECK5-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43957// CHECK5-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43958// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]3959// CHECK5-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43960// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]3961// CHECK5:       omp.inner.for.end:3962// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3963// CHECK5:       omp.loop.exit:3964// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])3965// CHECK5-NEXT:    ret void3966//3967//3968// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined.omp_outlined3969// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {3970// CHECK5-NEXT:  entry:3971// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 83972// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 83973// CHECK5-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 83974// CHECK5-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 83975// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43976// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 43977// CHECK5-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43978// CHECK5-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43979// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43980// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43981// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 43982// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 83983// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 83984// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 83985// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 83986// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43987// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 43988// CHECK5-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 83989// CHECK5-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i323990// CHECK5-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 83991// CHECK5-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i323992// CHECK5-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 43993// CHECK5-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 43994// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43995// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43996// CHECK5-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 83997// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 43998// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3999// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44000// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 994001// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4002// CHECK5:       cond.true:4003// CHECK5-NEXT:    br label [[COND_END:%.*]]4004// CHECK5:       cond.false:4005// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44006// CHECK5-NEXT:    br label [[COND_END]]4007// CHECK5:       cond.end:4008// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]4009// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 44010// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44011// CHECK5-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 44012// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4013// CHECK5:       omp.inner.for.cond:4014// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44015// CHECK5-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44016// CHECK5-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]4017// CHECK5-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4018// CHECK5:       omp.inner.for.body:4019// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44020// CHECK5-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 14021// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4022// CHECK5-NEXT:    store i32 [[ADD]], ptr [[I]], align 44023// CHECK5-NEXT:    invoke void @_Z3foov()4024// CHECK5-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]4025// CHECK5:       invoke.cont:4026// CHECK5-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4027// CHECK5:       omp.body.continue:4028// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4029// CHECK5:       omp.inner.for.inc:4030// CHECK5-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44031// CHECK5-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 14032// CHECK5-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 44033// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4034// CHECK5:       omp.inner.for.end:4035// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4036// CHECK5:       omp.loop.exit:4037// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])4038// CHECK5-NEXT:    ret void4039// CHECK5:       terminate.lpad:4040// CHECK5-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }4041// CHECK5-NEXT:            catch ptr null4042// CHECK5-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 04043// CHECK5-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7:[0-9]+]]4044// CHECK5-NEXT:    unreachable4045//4046//4047// CHECK5-LABEL: define {{[^@]+}}@__clang_call_terminate4048// CHECK5-SAME: (ptr noundef [[TMP0:%.*]]) #[[ATTR5:[0-9]+]] comdat {4049// CHECK5-NEXT:    [[TMP2:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP0]]) #[[ATTR3]]4050// CHECK5-NEXT:    call void @_ZSt9terminatev() #[[ATTR7]]4051// CHECK5-NEXT:    unreachable4052//4053//4054// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l744055// CHECK5-SAME: (i64 noundef [[A:%.*]]) #[[ATTR2]] {4056// CHECK5-NEXT:  entry:4057// CHECK5-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 84058// CHECK5-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 84059// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined, ptr [[A_ADDR]])4060// CHECK5-NEXT:    ret void4061//4062//4063// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined4064// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 1 dereferenceable(1) [[A:%.*]]) #[[ATTR2]] {4065// CHECK5-NEXT:  entry:4066// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84067// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84068// CHECK5-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 84069// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44070// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44071// CHECK5-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 44072// CHECK5-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 44073// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44074// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44075// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44076// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84077// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84078// CHECK5-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 84079// CHECK5-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8, !nonnull [[META17:![0-9]+]]4080// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 44081// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 44082// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44083// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44084// CHECK5-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84085// CHECK5-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 44086// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4087// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44088// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 994089// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4090// CHECK5:       cond.true:4091// CHECK5-NEXT:    br label [[COND_END:%.*]]4092// CHECK5:       cond.false:4093// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44094// CHECK5-NEXT:    br label [[COND_END]]4095// CHECK5:       cond.end:4096// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]4097// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 44098// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44099// CHECK5-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 44100// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4101// CHECK5:       omp.inner.for.cond:4102// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44103// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44104// CHECK5-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]4105// CHECK5-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4106// CHECK5:       omp.inner.for.body:4107// CHECK5-NEXT:    [[TMP8:%.*]] = load i8, ptr [[TMP0]], align 14108// CHECK5-NEXT:    [[TMP9:%.*]] = sext i8 [[TMP8]] to i324109// CHECK5-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP2]], i32 [[TMP9]])4110// CHECK5-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44111// CHECK5-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i644112// CHECK5-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44113// CHECK5-NEXT:    [[TMP13:%.*]] = zext i32 [[TMP12]] to i644114// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined.omp_outlined, i64 [[TMP11]], i64 [[TMP13]])4115// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4116// CHECK5:       omp.inner.for.inc:4117// CHECK5-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44118// CHECK5-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 44119// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]4120// CHECK5-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 44121// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4122// CHECK5:       omp.inner.for.end:4123// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4124// CHECK5:       omp.loop.exit:4125// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])4126// CHECK5-NEXT:    ret void4127//4128//4129// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined.omp_outlined4130// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {4131// CHECK5-NEXT:  entry:4132// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84133// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84134// CHECK5-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 84135// CHECK5-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 84136// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44137// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44138// CHECK5-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 44139// CHECK5-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 44140// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44141// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44142// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44143// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84144// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84145// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 84146// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 84147// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 44148// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 44149// CHECK5-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 84150// CHECK5-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i324151// CHECK5-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 84152// CHECK5-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i324153// CHECK5-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 44154// CHECK5-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 44155// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44156// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44157// CHECK5-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84158// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 44159// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4160// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44161// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 994162// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4163// CHECK5:       cond.true:4164// CHECK5-NEXT:    br label [[COND_END:%.*]]4165// CHECK5:       cond.false:4166// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44167// CHECK5-NEXT:    br label [[COND_END]]4168// CHECK5:       cond.end:4169// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]4170// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 44171// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44172// CHECK5-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 44173// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4174// CHECK5:       omp.inner.for.cond:4175// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44176// CHECK5-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44177// CHECK5-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]4178// CHECK5-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4179// CHECK5:       omp.inner.for.body:4180// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44181// CHECK5-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 14182// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4183// CHECK5-NEXT:    store i32 [[ADD]], ptr [[I]], align 44184// CHECK5-NEXT:    invoke void @_Z3foov()4185// CHECK5-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]4186// CHECK5:       invoke.cont:4187// CHECK5-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4188// CHECK5:       omp.body.continue:4189// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4190// CHECK5:       omp.inner.for.inc:4191// CHECK5-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44192// CHECK5-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 14193// CHECK5-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 44194// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4195// CHECK5:       omp.inner.for.end:4196// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4197// CHECK5:       omp.loop.exit:4198// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])4199// CHECK5-NEXT:    ret void4200// CHECK5:       terminate.lpad:4201// CHECK5-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }4202// CHECK5-NEXT:            catch ptr null4203// CHECK5-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 04204// CHECK5-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]4205// CHECK5-NEXT:    unreachable4206//4207//4208// CHECK5-LABEL: define {{[^@]+}}@_Z5tmainIcLi5EEiv4209// CHECK5-SAME: () #[[ATTR6:[0-9]+]] comdat {4210// CHECK5-NEXT:  entry:4211// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44212// CHECK5-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 84213// CHECK5-NEXT:    [[_TMP1:%.*]] = alloca i32, align 44214// CHECK5-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84215// CHECK5-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 04216// CHECK5-NEXT:    store i32 3, ptr [[TMP0]], align 44217// CHECK5-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 14218// CHECK5-NEXT:    store i32 0, ptr [[TMP1]], align 44219// CHECK5-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 24220// CHECK5-NEXT:    store ptr null, ptr [[TMP2]], align 84221// CHECK5-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 34222// CHECK5-NEXT:    store ptr null, ptr [[TMP3]], align 84223// CHECK5-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 44224// CHECK5-NEXT:    store ptr null, ptr [[TMP4]], align 84225// CHECK5-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 54226// CHECK5-NEXT:    store ptr null, ptr [[TMP5]], align 84227// CHECK5-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 64228// CHECK5-NEXT:    store ptr null, ptr [[TMP6]], align 84229// CHECK5-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 74230// CHECK5-NEXT:    store ptr null, ptr [[TMP7]], align 84231// CHECK5-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 84232// CHECK5-NEXT:    store i64 100, ptr [[TMP8]], align 84233// CHECK5-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 94234// CHECK5-NEXT:    store i64 0, ptr [[TMP9]], align 84235// CHECK5-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 104236// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 44237// CHECK5-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 114238// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 44239// CHECK5-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 124240// CHECK5-NEXT:    store i32 0, ptr [[TMP12]], align 44241// CHECK5-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.region_id, ptr [[KERNEL_ARGS]])4242// CHECK5-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 04243// CHECK5-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]4244// CHECK5:       omp_offload.failed:4245// CHECK5-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52() #[[ATTR3]]4246// CHECK5-NEXT:    br label [[OMP_OFFLOAD_CONT]]4247// CHECK5:       omp_offload.cont:4248// CHECK5-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 04249// CHECK5-NEXT:    store i32 3, ptr [[TMP15]], align 44250// CHECK5-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 14251// CHECK5-NEXT:    store i32 0, ptr [[TMP16]], align 44252// CHECK5-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 24253// CHECK5-NEXT:    store ptr null, ptr [[TMP17]], align 84254// CHECK5-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 34255// CHECK5-NEXT:    store ptr null, ptr [[TMP18]], align 84256// CHECK5-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 44257// CHECK5-NEXT:    store ptr null, ptr [[TMP19]], align 84258// CHECK5-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 54259// CHECK5-NEXT:    store ptr null, ptr [[TMP20]], align 84260// CHECK5-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 64261// CHECK5-NEXT:    store ptr null, ptr [[TMP21]], align 84262// CHECK5-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 74263// CHECK5-NEXT:    store ptr null, ptr [[TMP22]], align 84264// CHECK5-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 84265// CHECK5-NEXT:    store i64 100, ptr [[TMP23]], align 84266// CHECK5-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 94267// CHECK5-NEXT:    store i64 0, ptr [[TMP24]], align 84268// CHECK5-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 104269// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 44270// CHECK5-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 114271// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 44272// CHECK5-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 124273// CHECK5-NEXT:    store i32 0, ptr [[TMP27]], align 44274// CHECK5-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.region_id, ptr [[KERNEL_ARGS2]])4275// CHECK5-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 04276// CHECK5-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]4277// CHECK5:       omp_offload.failed3:4278// CHECK5-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57() #[[ATTR3]]4279// CHECK5-NEXT:    br label [[OMP_OFFLOAD_CONT4]]4280// CHECK5:       omp_offload.cont4:4281// CHECK5-NEXT:    ret i32 04282//4283//4284// CHECK5-LABEL: define {{[^@]+}}@_Z5tmainI1SLi1EEiv4285// CHECK5-SAME: () #[[ATTR6]] comdat {4286// CHECK5-NEXT:  entry:4287// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44288// CHECK5-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 84289// CHECK5-NEXT:    [[_TMP1:%.*]] = alloca i32, align 44290// CHECK5-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84291// CHECK5-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 04292// CHECK5-NEXT:    store i32 3, ptr [[TMP0]], align 44293// CHECK5-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 14294// CHECK5-NEXT:    store i32 0, ptr [[TMP1]], align 44295// CHECK5-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 24296// CHECK5-NEXT:    store ptr null, ptr [[TMP2]], align 84297// CHECK5-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 34298// CHECK5-NEXT:    store ptr null, ptr [[TMP3]], align 84299// CHECK5-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 44300// CHECK5-NEXT:    store ptr null, ptr [[TMP4]], align 84301// CHECK5-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 54302// CHECK5-NEXT:    store ptr null, ptr [[TMP5]], align 84303// CHECK5-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 64304// CHECK5-NEXT:    store ptr null, ptr [[TMP6]], align 84305// CHECK5-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 74306// CHECK5-NEXT:    store ptr null, ptr [[TMP7]], align 84307// CHECK5-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 84308// CHECK5-NEXT:    store i64 100, ptr [[TMP8]], align 84309// CHECK5-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 94310// CHECK5-NEXT:    store i64 0, ptr [[TMP9]], align 84311// CHECK5-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 104312// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 44313// CHECK5-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 114314// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 44315// CHECK5-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 124316// CHECK5-NEXT:    store i32 0, ptr [[TMP12]], align 44317// CHECK5-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.region_id, ptr [[KERNEL_ARGS]])4318// CHECK5-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 04319// CHECK5-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]4320// CHECK5:       omp_offload.failed:4321// CHECK5-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52() #[[ATTR3]]4322// CHECK5-NEXT:    br label [[OMP_OFFLOAD_CONT]]4323// CHECK5:       omp_offload.cont:4324// CHECK5-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 04325// CHECK5-NEXT:    store i32 3, ptr [[TMP15]], align 44326// CHECK5-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 14327// CHECK5-NEXT:    store i32 0, ptr [[TMP16]], align 44328// CHECK5-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 24329// CHECK5-NEXT:    store ptr null, ptr [[TMP17]], align 84330// CHECK5-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 34331// CHECK5-NEXT:    store ptr null, ptr [[TMP18]], align 84332// CHECK5-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 44333// CHECK5-NEXT:    store ptr null, ptr [[TMP19]], align 84334// CHECK5-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 54335// CHECK5-NEXT:    store ptr null, ptr [[TMP20]], align 84336// CHECK5-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 64337// CHECK5-NEXT:    store ptr null, ptr [[TMP21]], align 84338// CHECK5-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 74339// CHECK5-NEXT:    store ptr null, ptr [[TMP22]], align 84340// CHECK5-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 84341// CHECK5-NEXT:    store i64 100, ptr [[TMP23]], align 84342// CHECK5-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 94343// CHECK5-NEXT:    store i64 0, ptr [[TMP24]], align 84344// CHECK5-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 104345// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 44346// CHECK5-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 114347// CHECK5-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 44348// CHECK5-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 124349// CHECK5-NEXT:    store i32 0, ptr [[TMP27]], align 44350// CHECK5-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.region_id, ptr [[KERNEL_ARGS2]])4351// CHECK5-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 04352// CHECK5-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]4353// CHECK5:       omp_offload.failed3:4354// CHECK5-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57() #[[ATTR3]]4355// CHECK5-NEXT:    br label [[OMP_OFFLOAD_CONT4]]4356// CHECK5:       omp_offload.cont4:4357// CHECK5-NEXT:    ret i32 04358//4359//4360// CHECK5-LABEL: define {{[^@]+}}@_ZN1SD1Ev4361// CHECK5-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat align 2 {4362// CHECK5-NEXT:  entry:4363// CHECK5-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 84364// CHECK5-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 84365// CHECK5-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 84366// CHECK5-NEXT:    call void @_ZN1SD2Ev(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]]) #[[ATTR3]]4367// CHECK5-NEXT:    ret void4368//4369//4370// CHECK5-LABEL: define {{[^@]+}}@_ZN1SC2El4371// CHECK5-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR6]] comdat align 2 {4372// CHECK5-NEXT:  entry:4373// CHECK5-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 84374// CHECK5-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 84375// CHECK5-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 84376// CHECK5-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 84377// CHECK5-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 84378// CHECK5-NEXT:    [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 04379// CHECK5-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 84380// CHECK5-NEXT:    store i64 [[TMP0]], ptr [[A2]], align 84381// CHECK5-NEXT:    ret void4382//4383//4384// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l524385// CHECK5-SAME: () #[[ATTR2]] {4386// CHECK5-NEXT:  entry:4387// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined)4388// CHECK5-NEXT:    ret void4389//4390//4391// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined4392// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {4393// CHECK5-NEXT:  entry:4394// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84395// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84396// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44397// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44398// CHECK5-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 44399// CHECK5-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 44400// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44401// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44402// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44403// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84404// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84405// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 44406// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 44407// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44408// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44409// CHECK5-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84410// CHECK5-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 44411// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4412// CHECK5-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44413// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 994414// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4415// CHECK5:       cond.true:4416// CHECK5-NEXT:    br label [[COND_END:%.*]]4417// CHECK5:       cond.false:4418// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44419// CHECK5-NEXT:    br label [[COND_END]]4420// CHECK5:       cond.end:4421// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]4422// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 44423// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44424// CHECK5-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 44425// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4426// CHECK5:       omp.inner.for.cond:4427// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44428// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44429// CHECK5-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]4430// CHECK5-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4431// CHECK5:       omp.inner.for.body:4432// CHECK5-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 5)4433// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44434// CHECK5-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i644435// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44436// CHECK5-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i644437// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])4438// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4439// CHECK5:       omp.inner.for.inc:4440// CHECK5-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44441// CHECK5-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 44442// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]4443// CHECK5-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 44444// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4445// CHECK5:       omp.inner.for.end:4446// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4447// CHECK5:       omp.loop.exit:4448// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])4449// CHECK5-NEXT:    ret void4450//4451//4452// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined.omp_outlined4453// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {4454// CHECK5-NEXT:  entry:4455// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84456// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84457// CHECK5-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 84458// CHECK5-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 84459// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44460// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44461// CHECK5-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 44462// CHECK5-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 44463// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44464// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44465// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44466// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84467// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84468// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 84469// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 84470// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 44471// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 44472// CHECK5-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 84473// CHECK5-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i324474// CHECK5-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 84475// CHECK5-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i324476// CHECK5-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 44477// CHECK5-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 44478// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44479// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44480// CHECK5-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84481// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 44482// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4483// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44484// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 994485// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4486// CHECK5:       cond.true:4487// CHECK5-NEXT:    br label [[COND_END:%.*]]4488// CHECK5:       cond.false:4489// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44490// CHECK5-NEXT:    br label [[COND_END]]4491// CHECK5:       cond.end:4492// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]4493// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 44494// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44495// CHECK5-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 44496// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4497// CHECK5:       omp.inner.for.cond:4498// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44499// CHECK5-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44500// CHECK5-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]4501// CHECK5-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4502// CHECK5:       omp.inner.for.body:4503// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44504// CHECK5-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 14505// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4506// CHECK5-NEXT:    store i32 [[ADD]], ptr [[I]], align 44507// CHECK5-NEXT:    invoke void @_Z3foov()4508// CHECK5-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]4509// CHECK5:       invoke.cont:4510// CHECK5-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4511// CHECK5:       omp.body.continue:4512// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4513// CHECK5:       omp.inner.for.inc:4514// CHECK5-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44515// CHECK5-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 14516// CHECK5-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 44517// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4518// CHECK5:       omp.inner.for.end:4519// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4520// CHECK5:       omp.loop.exit:4521// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])4522// CHECK5-NEXT:    ret void4523// CHECK5:       terminate.lpad:4524// CHECK5-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }4525// CHECK5-NEXT:            catch ptr null4526// CHECK5-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 04527// CHECK5-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]4528// CHECK5-NEXT:    unreachable4529//4530//4531// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l574532// CHECK5-SAME: () #[[ATTR2]] {4533// CHECK5-NEXT:  entry:4534// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined)4535// CHECK5-NEXT:    ret void4536//4537//4538// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined4539// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {4540// CHECK5-NEXT:  entry:4541// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84542// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84543// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44544// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44545// CHECK5-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 44546// CHECK5-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 44547// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44548// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44549// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44550// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84551// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84552// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 44553// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 44554// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44555// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44556// CHECK5-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84557// CHECK5-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 44558// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4559// CHECK5-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44560// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 994561// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4562// CHECK5:       cond.true:4563// CHECK5-NEXT:    br label [[COND_END:%.*]]4564// CHECK5:       cond.false:4565// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44566// CHECK5-NEXT:    br label [[COND_END]]4567// CHECK5:       cond.end:4568// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]4569// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 44570// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44571// CHECK5-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 44572// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4573// CHECK5:       omp.inner.for.cond:4574// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44575// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44576// CHECK5-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]4577// CHECK5-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4578// CHECK5:       omp.inner.for.body:4579// CHECK5-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 23)4580// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44581// CHECK5-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i644582// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44583// CHECK5-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i644584// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])4585// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4586// CHECK5:       omp.inner.for.inc:4587// CHECK5-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44588// CHECK5-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 44589// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]4590// CHECK5-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 44591// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4592// CHECK5:       omp.inner.for.end:4593// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4594// CHECK5:       omp.loop.exit:4595// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])4596// CHECK5-NEXT:    ret void4597//4598//4599// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined.omp_outlined4600// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {4601// CHECK5-NEXT:  entry:4602// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84603// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84604// CHECK5-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 84605// CHECK5-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 84606// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44607// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44608// CHECK5-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 44609// CHECK5-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 44610// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44611// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44612// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44613// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84614// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84615// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 84616// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 84617// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 44618// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 44619// CHECK5-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 84620// CHECK5-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i324621// CHECK5-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 84622// CHECK5-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i324623// CHECK5-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 44624// CHECK5-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 44625// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44626// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44627// CHECK5-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84628// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 44629// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4630// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44631// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 994632// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4633// CHECK5:       cond.true:4634// CHECK5-NEXT:    br label [[COND_END:%.*]]4635// CHECK5:       cond.false:4636// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44637// CHECK5-NEXT:    br label [[COND_END]]4638// CHECK5:       cond.end:4639// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]4640// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 44641// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44642// CHECK5-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 44643// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4644// CHECK5:       omp.inner.for.cond:4645// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44646// CHECK5-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44647// CHECK5-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]4648// CHECK5-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4649// CHECK5:       omp.inner.for.body:4650// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44651// CHECK5-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 14652// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4653// CHECK5-NEXT:    store i32 [[ADD]], ptr [[I]], align 44654// CHECK5-NEXT:    invoke void @_Z3foov()4655// CHECK5-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]4656// CHECK5:       invoke.cont:4657// CHECK5-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4658// CHECK5:       omp.body.continue:4659// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4660// CHECK5:       omp.inner.for.inc:4661// CHECK5-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44662// CHECK5-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 14663// CHECK5-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 44664// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4665// CHECK5:       omp.inner.for.end:4666// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4667// CHECK5:       omp.loop.exit:4668// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])4669// CHECK5-NEXT:    ret void4670// CHECK5:       terminate.lpad:4671// CHECK5-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }4672// CHECK5-NEXT:            catch ptr null4673// CHECK5-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 04674// CHECK5-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]4675// CHECK5-NEXT:    unreachable4676//4677//4678// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l524679// CHECK5-SAME: () #[[ATTR2]] {4680// CHECK5-NEXT:  entry:4681// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined)4682// CHECK5-NEXT:    ret void4683//4684//4685// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined4686// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {4687// CHECK5-NEXT:  entry:4688// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84689// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84690// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44691// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44692// CHECK5-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 44693// CHECK5-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 44694// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44695// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44696// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44697// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84698// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84699// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 44700// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 44701// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44702// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44703// CHECK5-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84704// CHECK5-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 44705// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4706// CHECK5-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44707// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 994708// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4709// CHECK5:       cond.true:4710// CHECK5-NEXT:    br label [[COND_END:%.*]]4711// CHECK5:       cond.false:4712// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44713// CHECK5-NEXT:    br label [[COND_END]]4714// CHECK5:       cond.end:4715// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]4716// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 44717// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44718// CHECK5-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 44719// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4720// CHECK5:       omp.inner.for.cond:4721// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44722// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44723// CHECK5-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]4724// CHECK5-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4725// CHECK5:       omp.inner.for.body:4726// CHECK5-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 1)4727// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44728// CHECK5-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i644729// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44730// CHECK5-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i644731// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])4732// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4733// CHECK5:       omp.inner.for.inc:4734// CHECK5-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44735// CHECK5-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 44736// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]4737// CHECK5-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 44738// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4739// CHECK5:       omp.inner.for.end:4740// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4741// CHECK5:       omp.loop.exit:4742// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])4743// CHECK5-NEXT:    ret void4744//4745//4746// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined.omp_outlined4747// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {4748// CHECK5-NEXT:  entry:4749// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84750// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84751// CHECK5-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 84752// CHECK5-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 84753// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44754// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44755// CHECK5-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 44756// CHECK5-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 44757// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44758// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44759// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44760// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84761// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84762// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 84763// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 84764// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 44765// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 44766// CHECK5-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 84767// CHECK5-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i324768// CHECK5-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 84769// CHECK5-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i324770// CHECK5-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 44771// CHECK5-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 44772// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44773// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44774// CHECK5-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84775// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 44776// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4777// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44778// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 994779// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4780// CHECK5:       cond.true:4781// CHECK5-NEXT:    br label [[COND_END:%.*]]4782// CHECK5:       cond.false:4783// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44784// CHECK5-NEXT:    br label [[COND_END]]4785// CHECK5:       cond.end:4786// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]4787// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 44788// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44789// CHECK5-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 44790// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4791// CHECK5:       omp.inner.for.cond:4792// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44793// CHECK5-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44794// CHECK5-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]4795// CHECK5-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4796// CHECK5:       omp.inner.for.body:4797// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44798// CHECK5-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 14799// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4800// CHECK5-NEXT:    store i32 [[ADD]], ptr [[I]], align 44801// CHECK5-NEXT:    invoke void @_Z3foov()4802// CHECK5-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]4803// CHECK5:       invoke.cont:4804// CHECK5-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4805// CHECK5:       omp.body.continue:4806// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4807// CHECK5:       omp.inner.for.inc:4808// CHECK5-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44809// CHECK5-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 14810// CHECK5-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 44811// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4812// CHECK5:       omp.inner.for.end:4813// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4814// CHECK5:       omp.loop.exit:4815// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])4816// CHECK5-NEXT:    ret void4817// CHECK5:       terminate.lpad:4818// CHECK5-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }4819// CHECK5-NEXT:            catch ptr null4820// CHECK5-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 04821// CHECK5-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]4822// CHECK5-NEXT:    unreachable4823//4824//4825// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l574826// CHECK5-SAME: () #[[ATTR2]] {4827// CHECK5-NEXT:  entry:4828// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined)4829// CHECK5-NEXT:    ret void4830//4831//4832// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined4833// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {4834// CHECK5-NEXT:  entry:4835// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84836// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84837// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44838// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44839// CHECK5-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 44840// CHECK5-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 44841// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44842// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44843// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44844// CHECK5-NEXT:    [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 84845// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84846// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84847// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 44848// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 44849// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44850// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44851// CHECK5-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84852// CHECK5-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 44853// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4854// CHECK5-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44855// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 994856// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4857// CHECK5:       cond.true:4858// CHECK5-NEXT:    br label [[COND_END:%.*]]4859// CHECK5:       cond.false:4860// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44861// CHECK5-NEXT:    br label [[COND_END]]4862// CHECK5:       cond.end:4863// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]4864// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 44865// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44866// CHECK5-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 44867// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4868// CHECK5:       omp.inner.for.cond:4869// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44870// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44871// CHECK5-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]4872// CHECK5-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4873// CHECK5:       omp.inner.for.body:4874// CHECK5-NEXT:    invoke void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)4875// CHECK5-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]4876// CHECK5:       invoke.cont:4877// CHECK5-NEXT:    [[CALL:%.*]] = invoke noundef signext i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])4878// CHECK5-NEXT:            to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]4879// CHECK5:       invoke.cont2:4880// CHECK5-NEXT:    [[TMP7:%.*]] = sext i8 [[CALL]] to i324881// CHECK5-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])4882// CHECK5-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR3]]4883// CHECK5-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44884// CHECK5-NEXT:    [[TMP9:%.*]] = zext i32 [[TMP8]] to i644885// CHECK5-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44886// CHECK5-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i644887// CHECK5-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined.omp_outlined, i64 [[TMP9]], i64 [[TMP11]])4888// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4889// CHECK5:       omp.inner.for.inc:4890// CHECK5-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44891// CHECK5-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 44892// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]4893// CHECK5-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 44894// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4895// CHECK5:       omp.inner.for.end:4896// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4897// CHECK5:       omp.loop.exit:4898// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])4899// CHECK5-NEXT:    ret void4900// CHECK5:       terminate.lpad:4901// CHECK5-NEXT:    [[TMP14:%.*]] = landingpad { ptr, i32 }4902// CHECK5-NEXT:            catch ptr null4903// CHECK5-NEXT:    [[TMP15:%.*]] = extractvalue { ptr, i32 } [[TMP14]], 04904// CHECK5-NEXT:    call void @__clang_call_terminate(ptr [[TMP15]]) #[[ATTR7]]4905// CHECK5-NEXT:    unreachable4906//4907//4908// CHECK5-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined.omp_outlined4909// CHECK5-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {4910// CHECK5-NEXT:  entry:4911// CHECK5-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84912// CHECK5-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84913// CHECK5-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 84914// CHECK5-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 84915// CHECK5-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44916// CHECK5-NEXT:    [[TMP:%.*]] = alloca i32, align 44917// CHECK5-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 44918// CHECK5-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 44919// CHECK5-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44920// CHECK5-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44921// CHECK5-NEXT:    [[I:%.*]] = alloca i32, align 44922// CHECK5-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84923// CHECK5-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84924// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 84925// CHECK5-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 84926// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 44927// CHECK5-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 44928// CHECK5-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 84929// CHECK5-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i324930// CHECK5-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 84931// CHECK5-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i324932// CHECK5-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 44933// CHECK5-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 44934// CHECK5-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44935// CHECK5-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44936// CHECK5-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84937// CHECK5-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 44938// CHECK5-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4939// CHECK5-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44940// CHECK5-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 994941// CHECK5-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4942// CHECK5:       cond.true:4943// CHECK5-NEXT:    br label [[COND_END:%.*]]4944// CHECK5:       cond.false:4945// CHECK5-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44946// CHECK5-NEXT:    br label [[COND_END]]4947// CHECK5:       cond.end:4948// CHECK5-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]4949// CHECK5-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 44950// CHECK5-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44951// CHECK5-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 44952// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4953// CHECK5:       omp.inner.for.cond:4954// CHECK5-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44955// CHECK5-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44956// CHECK5-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]4957// CHECK5-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4958// CHECK5:       omp.inner.for.body:4959// CHECK5-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44960// CHECK5-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 14961// CHECK5-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4962// CHECK5-NEXT:    store i32 [[ADD]], ptr [[I]], align 44963// CHECK5-NEXT:    invoke void @_Z3foov()4964// CHECK5-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]4965// CHECK5:       invoke.cont:4966// CHECK5-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4967// CHECK5:       omp.body.continue:4968// CHECK5-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4969// CHECK5:       omp.inner.for.inc:4970// CHECK5-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44971// CHECK5-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 14972// CHECK5-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 44973// CHECK5-NEXT:    br label [[OMP_INNER_FOR_COND]]4974// CHECK5:       omp.inner.for.end:4975// CHECK5-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4976// CHECK5:       omp.loop.exit:4977// CHECK5-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])4978// CHECK5-NEXT:    ret void4979// CHECK5:       terminate.lpad:4980// CHECK5-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }4981// CHECK5-NEXT:            catch ptr null4982// CHECK5-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 04983// CHECK5-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]4984// CHECK5-NEXT:    unreachable4985//4986//4987// CHECK5-LABEL: define {{[^@]+}}@_ZN1SD2Ev4988// CHECK5-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat align 2 {4989// CHECK5-NEXT:  entry:4990// CHECK5-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 84991// CHECK5-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 84992// CHECK5-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 84993// CHECK5-NEXT:    ret void4994//4995//4996// CHECK9-LABEL: define {{[^@]+}}@main4997// CHECK9-SAME: () #[[ATTR0:[0-9]+]] personality ptr @__gxx_personality_v0 {4998// CHECK9-NEXT:  entry:4999// CHECK9-NEXT:    [[RETVAL:%.*]] = alloca i32, align 45000// CHECK9-NEXT:    [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 85001// CHECK9-NEXT:    [[A:%.*]] = alloca i8, align 15002// CHECK9-NEXT:    [[EXN_SLOT:%.*]] = alloca ptr, align 85003// CHECK9-NEXT:    [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 45004// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45005// CHECK9-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 85006// CHECK9-NEXT:    [[A_CASTED:%.*]] = alloca i64, align 85007// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 85008// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 85009// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 85010// CHECK9-NEXT:    [[_TMP1:%.*]] = alloca i32, align 45011// CHECK9-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 85012// CHECK9-NEXT:    store i32 0, ptr [[RETVAL]], align 45013// CHECK9-NEXT:    call void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[S]], i64 noundef 0)5014// CHECK9-NEXT:    [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[S]])5015// CHECK9-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]5016// CHECK9:       invoke.cont:5017// CHECK9-NEXT:    store i8 [[CALL]], ptr [[A]], align 15018// CHECK9-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 05019// CHECK9-NEXT:    store i32 3, ptr [[TMP0]], align 45020// CHECK9-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 15021// CHECK9-NEXT:    store i32 0, ptr [[TMP1]], align 45022// CHECK9-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 25023// CHECK9-NEXT:    store ptr null, ptr [[TMP2]], align 85024// CHECK9-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 35025// CHECK9-NEXT:    store ptr null, ptr [[TMP3]], align 85026// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 45027// CHECK9-NEXT:    store ptr null, ptr [[TMP4]], align 85028// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 55029// CHECK9-NEXT:    store ptr null, ptr [[TMP5]], align 85030// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 65031// CHECK9-NEXT:    store ptr null, ptr [[TMP6]], align 85032// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 75033// CHECK9-NEXT:    store ptr null, ptr [[TMP7]], align 85034// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 85035// CHECK9-NEXT:    store i64 100, ptr [[TMP8]], align 85036// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 95037// CHECK9-NEXT:    store i64 0, ptr [[TMP9]], align 85038// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 105039// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 45040// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 115041// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 45042// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 125043// CHECK9-NEXT:    store i32 0, ptr [[TMP12]], align 45044// CHECK9-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.region_id, ptr [[KERNEL_ARGS]])5045// CHECK9-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 05046// CHECK9-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]5047// CHECK9:       omp_offload.failed:5048// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68() #[[ATTR3:[0-9]+]]5049// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT]]5050// CHECK9:       lpad:5051// CHECK9-NEXT:    [[TMP15:%.*]] = landingpad { ptr, i32 }5052// CHECK9-NEXT:            cleanup5053// CHECK9-NEXT:    [[TMP16:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 05054// CHECK9-NEXT:    store ptr [[TMP16]], ptr [[EXN_SLOT]], align 85055// CHECK9-NEXT:    [[TMP17:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 15056// CHECK9-NEXT:    store i32 [[TMP17]], ptr [[EHSELECTOR_SLOT]], align 45057// CHECK9-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]5058// CHECK9-NEXT:    br label [[EH_RESUME:%.*]]5059// CHECK9:       omp_offload.cont:5060// CHECK9-NEXT:    [[TMP18:%.*]] = load i8, ptr [[A]], align 15061// CHECK9-NEXT:    store i8 [[TMP18]], ptr [[A_CASTED]], align 15062// CHECK9-NEXT:    [[TMP19:%.*]] = load i64, ptr [[A_CASTED]], align 85063// CHECK9-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 05064// CHECK9-NEXT:    store i64 [[TMP19]], ptr [[TMP20]], align 85065// CHECK9-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 05066// CHECK9-NEXT:    store i64 [[TMP19]], ptr [[TMP21]], align 85067// CHECK9-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 05068// CHECK9-NEXT:    store ptr null, ptr [[TMP22]], align 85069// CHECK9-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 05070// CHECK9-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 05071// CHECK9-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 05072// CHECK9-NEXT:    store i32 3, ptr [[TMP25]], align 45073// CHECK9-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 15074// CHECK9-NEXT:    store i32 1, ptr [[TMP26]], align 45075// CHECK9-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 25076// CHECK9-NEXT:    store ptr [[TMP23]], ptr [[TMP27]], align 85077// CHECK9-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 35078// CHECK9-NEXT:    store ptr [[TMP24]], ptr [[TMP28]], align 85079// CHECK9-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 45080// CHECK9-NEXT:    store ptr @.offload_sizes, ptr [[TMP29]], align 85081// CHECK9-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 55082// CHECK9-NEXT:    store ptr @.offload_maptypes, ptr [[TMP30]], align 85083// CHECK9-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 65084// CHECK9-NEXT:    store ptr null, ptr [[TMP31]], align 85085// CHECK9-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 75086// CHECK9-NEXT:    store ptr null, ptr [[TMP32]], align 85087// CHECK9-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 85088// CHECK9-NEXT:    store i64 100, ptr [[TMP33]], align 85089// CHECK9-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 95090// CHECK9-NEXT:    store i64 0, ptr [[TMP34]], align 85091// CHECK9-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 105092// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP35]], align 45093// CHECK9-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 115094// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP36]], align 45095// CHECK9-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 125096// CHECK9-NEXT:    store i32 0, ptr [[TMP37]], align 45097// CHECK9-NEXT:    [[TMP38:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.region_id, ptr [[KERNEL_ARGS2]])5098// CHECK9-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 05099// CHECK9-NEXT:    br i1 [[TMP39]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]5100// CHECK9:       omp_offload.failed3:5101// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74(i64 [[TMP19]]) #[[ATTR3]]5102// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT4]]5103// CHECK9:       omp_offload.cont4:5104// CHECK9-NEXT:    [[TMP40:%.*]] = load i8, ptr [[A]], align 15105// CHECK9-NEXT:    [[CONV:%.*]] = sext i8 [[TMP40]] to i325106// CHECK9-NEXT:    [[CALL6:%.*]] = invoke noundef i32 @_Z5tmainIcLi5EEiv()5107// CHECK9-NEXT:            to label [[INVOKE_CONT5:%.*]] unwind label [[LPAD]]5108// CHECK9:       invoke.cont5:5109// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CALL6]]5110// CHECK9-NEXT:    [[CALL8:%.*]] = invoke noundef i32 @_Z5tmainI1SLi1EEiv()5111// CHECK9-NEXT:            to label [[INVOKE_CONT7:%.*]] unwind label [[LPAD]]5112// CHECK9:       invoke.cont7:5113// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[ADD]], [[CALL8]]5114// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[RETVAL]], align 45115// CHECK9-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]5116// CHECK9-NEXT:    [[TMP41:%.*]] = load i32, ptr [[RETVAL]], align 45117// CHECK9-NEXT:    ret i32 [[TMP41]]5118// CHECK9:       eh.resume:5119// CHECK9-NEXT:    [[EXN:%.*]] = load ptr, ptr [[EXN_SLOT]], align 85120// CHECK9-NEXT:    [[SEL:%.*]] = load i32, ptr [[EHSELECTOR_SLOT]], align 45121// CHECK9-NEXT:    [[LPAD_VAL:%.*]] = insertvalue { ptr, i32 } poison, ptr [[EXN]], 05122// CHECK9-NEXT:    [[LPAD_VAL10:%.*]] = insertvalue { ptr, i32 } [[LPAD_VAL]], i32 [[SEL]], 15123// CHECK9-NEXT:    resume { ptr, i32 } [[LPAD_VAL10]]5124//5125//5126// CHECK9-LABEL: define {{[^@]+}}@_ZN1SC1El5127// CHECK9-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat {5128// CHECK9-NEXT:  entry:5129// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 85130// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 85131// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 85132// CHECK9-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 85133// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85134// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 85135// CHECK9-NEXT:    call void @_ZN1SC2El(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]], i64 noundef [[TMP0]])5136// CHECK9-NEXT:    ret void5137//5138//5139// CHECK9-LABEL: define {{[^@]+}}@_ZN1ScvcEv5140// CHECK9-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) #[[ATTR1]] comdat {5141// CHECK9-NEXT:  entry:5142// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 85143// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 85144// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85145// CHECK9-NEXT:    call void @_Z8mayThrowv()5146// CHECK9-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 05147// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A]], align 85148// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i85149// CHECK9-NEXT:    ret i8 [[CONV]]5150//5151//5152// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l685153// CHECK9-SAME: () #[[ATTR2:[0-9]+]] {5154// CHECK9-NEXT:  entry:5155// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined)5156// CHECK9-NEXT:    ret void5157//5158//5159// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined5160// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {5161// CHECK9-NEXT:  entry:5162// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85163// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85164// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45165// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45166// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45167// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45168// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45169// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45170// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45171// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85172// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85173// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45174// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 45175// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45176// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45177// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85178// CHECK9-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 45179// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5180// CHECK9-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45181// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 995182// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5183// CHECK9:       cond.true:5184// CHECK9-NEXT:    br label [[COND_END:%.*]]5185// CHECK9:       cond.false:5186// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45187// CHECK9-NEXT:    br label [[COND_END]]5188// CHECK9:       cond.end:5189// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]5190// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45191// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45192// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 45193// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5194// CHECK9:       omp.inner.for.cond:5195// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45196// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45197// CHECK9-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]5198// CHECK9-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5199// CHECK9:       omp.inner.for.body:5200// CHECK9-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 2)5201// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45202// CHECK9-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i645203// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45204// CHECK9-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i645205// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])5206// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5207// CHECK9:       omp.inner.for.inc:5208// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45209// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45210// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]5211// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 45212// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5213// CHECK9:       omp.inner.for.end:5214// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5215// CHECK9:       omp.loop.exit:5216// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])5217// CHECK9-NEXT:    ret void5218//5219//5220// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined.omp_outlined5221// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {5222// CHECK9-NEXT:  entry:5223// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85224// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85225// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85226// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85227// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45228// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45229// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45230// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45231// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45232// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45233// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45234// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85235// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85236// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85237// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85238// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45239// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 45240// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85241// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i325242// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85243// CHECK9-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i325244// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45245// CHECK9-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 45246// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45247// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45248// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85249// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 45250// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5251// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45252// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 995253// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5254// CHECK9:       cond.true:5255// CHECK9-NEXT:    br label [[COND_END:%.*]]5256// CHECK9:       cond.false:5257// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45258// CHECK9-NEXT:    br label [[COND_END]]5259// CHECK9:       cond.end:5260// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]5261// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45262// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45263// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 45264// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5265// CHECK9:       omp.inner.for.cond:5266// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45267// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45268// CHECK9-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]5269// CHECK9-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5270// CHECK9:       omp.inner.for.body:5271// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45272// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 15273// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5274// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I]], align 45275// CHECK9-NEXT:    invoke void @_Z3foov()5276// CHECK9-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]5277// CHECK9:       invoke.cont:5278// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5279// CHECK9:       omp.body.continue:5280// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5281// CHECK9:       omp.inner.for.inc:5282// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45283// CHECK9-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 15284// CHECK9-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 45285// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5286// CHECK9:       omp.inner.for.end:5287// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5288// CHECK9:       omp.loop.exit:5289// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])5290// CHECK9-NEXT:    ret void5291// CHECK9:       terminate.lpad:5292// CHECK9-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }5293// CHECK9-NEXT:            catch ptr null5294// CHECK9-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 05295// CHECK9-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7:[0-9]+]]5296// CHECK9-NEXT:    unreachable5297//5298//5299// CHECK9-LABEL: define {{[^@]+}}@__clang_call_terminate5300// CHECK9-SAME: (ptr noundef [[TMP0:%.*]]) #[[ATTR5:[0-9]+]] comdat {5301// CHECK9-NEXT:    [[TMP2:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP0]]) #[[ATTR3]]5302// CHECK9-NEXT:    call void @_ZSt9terminatev() #[[ATTR7]]5303// CHECK9-NEXT:    unreachable5304//5305//5306// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l745307// CHECK9-SAME: (i64 noundef [[A:%.*]]) #[[ATTR2]] {5308// CHECK9-NEXT:  entry:5309// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 85310// CHECK9-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 85311// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined, ptr [[A_ADDR]])5312// CHECK9-NEXT:    ret void5313//5314//5315// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined5316// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 1 dereferenceable(1) [[A:%.*]]) #[[ATTR2]] {5317// CHECK9-NEXT:  entry:5318// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85319// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85320// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85321// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45322// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45323// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45324// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45325// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45326// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45327// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45328// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85329// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85330// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85331// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8, !nonnull [[META17:![0-9]+]]5332// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45333// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 45334// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45335// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45336// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85337// CHECK9-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 45338// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5339// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45340// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 995341// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5342// CHECK9:       cond.true:5343// CHECK9-NEXT:    br label [[COND_END:%.*]]5344// CHECK9:       cond.false:5345// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45346// CHECK9-NEXT:    br label [[COND_END]]5347// CHECK9:       cond.end:5348// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]5349// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45350// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45351// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 45352// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5353// CHECK9:       omp.inner.for.cond:5354// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45355// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45356// CHECK9-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]5357// CHECK9-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5358// CHECK9:       omp.inner.for.body:5359// CHECK9-NEXT:    [[TMP8:%.*]] = load i8, ptr [[TMP0]], align 15360// CHECK9-NEXT:    [[TMP9:%.*]] = sext i8 [[TMP8]] to i325361// CHECK9-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP2]], i32 [[TMP9]])5362// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45363// CHECK9-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i645364// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45365// CHECK9-NEXT:    [[TMP13:%.*]] = zext i32 [[TMP12]] to i645366// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined.omp_outlined, i64 [[TMP11]], i64 [[TMP13]])5367// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5368// CHECK9:       omp.inner.for.inc:5369// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45370// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45371// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]5372// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 45373// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5374// CHECK9:       omp.inner.for.end:5375// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5376// CHECK9:       omp.loop.exit:5377// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])5378// CHECK9-NEXT:    ret void5379//5380//5381// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined.omp_outlined5382// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {5383// CHECK9-NEXT:  entry:5384// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85385// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85386// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85387// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85388// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45389// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45390// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45391// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45392// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45393// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45394// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45395// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85396// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85397// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85398// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85399// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45400// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 45401// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85402// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i325403// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85404// CHECK9-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i325405// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45406// CHECK9-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 45407// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45408// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45409// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85410// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 45411// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5412// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45413// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 995414// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5415// CHECK9:       cond.true:5416// CHECK9-NEXT:    br label [[COND_END:%.*]]5417// CHECK9:       cond.false:5418// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45419// CHECK9-NEXT:    br label [[COND_END]]5420// CHECK9:       cond.end:5421// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]5422// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45423// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45424// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 45425// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5426// CHECK9:       omp.inner.for.cond:5427// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45428// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45429// CHECK9-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]5430// CHECK9-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5431// CHECK9:       omp.inner.for.body:5432// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45433// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 15434// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5435// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I]], align 45436// CHECK9-NEXT:    invoke void @_Z3foov()5437// CHECK9-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]5438// CHECK9:       invoke.cont:5439// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5440// CHECK9:       omp.body.continue:5441// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5442// CHECK9:       omp.inner.for.inc:5443// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45444// CHECK9-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 15445// CHECK9-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 45446// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5447// CHECK9:       omp.inner.for.end:5448// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5449// CHECK9:       omp.loop.exit:5450// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])5451// CHECK9-NEXT:    ret void5452// CHECK9:       terminate.lpad:5453// CHECK9-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }5454// CHECK9-NEXT:            catch ptr null5455// CHECK9-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 05456// CHECK9-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]5457// CHECK9-NEXT:    unreachable5458//5459//5460// CHECK9-LABEL: define {{[^@]+}}@_Z5tmainIcLi5EEiv5461// CHECK9-SAME: () #[[ATTR6:[0-9]+]] comdat {5462// CHECK9-NEXT:  entry:5463// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45464// CHECK9-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 85465// CHECK9-NEXT:    [[_TMP1:%.*]] = alloca i32, align 45466// CHECK9-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 85467// CHECK9-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 05468// CHECK9-NEXT:    store i32 3, ptr [[TMP0]], align 45469// CHECK9-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 15470// CHECK9-NEXT:    store i32 0, ptr [[TMP1]], align 45471// CHECK9-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 25472// CHECK9-NEXT:    store ptr null, ptr [[TMP2]], align 85473// CHECK9-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 35474// CHECK9-NEXT:    store ptr null, ptr [[TMP3]], align 85475// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 45476// CHECK9-NEXT:    store ptr null, ptr [[TMP4]], align 85477// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 55478// CHECK9-NEXT:    store ptr null, ptr [[TMP5]], align 85479// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 65480// CHECK9-NEXT:    store ptr null, ptr [[TMP6]], align 85481// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 75482// CHECK9-NEXT:    store ptr null, ptr [[TMP7]], align 85483// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 85484// CHECK9-NEXT:    store i64 100, ptr [[TMP8]], align 85485// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 95486// CHECK9-NEXT:    store i64 0, ptr [[TMP9]], align 85487// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 105488// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 45489// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 115490// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 45491// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 125492// CHECK9-NEXT:    store i32 0, ptr [[TMP12]], align 45493// CHECK9-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.region_id, ptr [[KERNEL_ARGS]])5494// CHECK9-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 05495// CHECK9-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]5496// CHECK9:       omp_offload.failed:5497// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52() #[[ATTR3]]5498// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT]]5499// CHECK9:       omp_offload.cont:5500// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 05501// CHECK9-NEXT:    store i32 3, ptr [[TMP15]], align 45502// CHECK9-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 15503// CHECK9-NEXT:    store i32 0, ptr [[TMP16]], align 45504// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 25505// CHECK9-NEXT:    store ptr null, ptr [[TMP17]], align 85506// CHECK9-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 35507// CHECK9-NEXT:    store ptr null, ptr [[TMP18]], align 85508// CHECK9-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 45509// CHECK9-NEXT:    store ptr null, ptr [[TMP19]], align 85510// CHECK9-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 55511// CHECK9-NEXT:    store ptr null, ptr [[TMP20]], align 85512// CHECK9-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 65513// CHECK9-NEXT:    store ptr null, ptr [[TMP21]], align 85514// CHECK9-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 75515// CHECK9-NEXT:    store ptr null, ptr [[TMP22]], align 85516// CHECK9-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 85517// CHECK9-NEXT:    store i64 100, ptr [[TMP23]], align 85518// CHECK9-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 95519// CHECK9-NEXT:    store i64 0, ptr [[TMP24]], align 85520// CHECK9-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 105521// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 45522// CHECK9-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 115523// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 45524// CHECK9-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 125525// CHECK9-NEXT:    store i32 0, ptr [[TMP27]], align 45526// CHECK9-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.region_id, ptr [[KERNEL_ARGS2]])5527// CHECK9-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 05528// CHECK9-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]5529// CHECK9:       omp_offload.failed3:5530// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57() #[[ATTR3]]5531// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT4]]5532// CHECK9:       omp_offload.cont4:5533// CHECK9-NEXT:    ret i32 05534//5535//5536// CHECK9-LABEL: define {{[^@]+}}@_Z5tmainI1SLi1EEiv5537// CHECK9-SAME: () #[[ATTR6]] comdat {5538// CHECK9-NEXT:  entry:5539// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45540// CHECK9-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 85541// CHECK9-NEXT:    [[_TMP1:%.*]] = alloca i32, align 45542// CHECK9-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 85543// CHECK9-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 05544// CHECK9-NEXT:    store i32 3, ptr [[TMP0]], align 45545// CHECK9-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 15546// CHECK9-NEXT:    store i32 0, ptr [[TMP1]], align 45547// CHECK9-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 25548// CHECK9-NEXT:    store ptr null, ptr [[TMP2]], align 85549// CHECK9-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 35550// CHECK9-NEXT:    store ptr null, ptr [[TMP3]], align 85551// CHECK9-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 45552// CHECK9-NEXT:    store ptr null, ptr [[TMP4]], align 85553// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 55554// CHECK9-NEXT:    store ptr null, ptr [[TMP5]], align 85555// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 65556// CHECK9-NEXT:    store ptr null, ptr [[TMP6]], align 85557// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 75558// CHECK9-NEXT:    store ptr null, ptr [[TMP7]], align 85559// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 85560// CHECK9-NEXT:    store i64 100, ptr [[TMP8]], align 85561// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 95562// CHECK9-NEXT:    store i64 0, ptr [[TMP9]], align 85563// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 105564// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 45565// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 115566// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 45567// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 125568// CHECK9-NEXT:    store i32 0, ptr [[TMP12]], align 45569// CHECK9-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.region_id, ptr [[KERNEL_ARGS]])5570// CHECK9-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 05571// CHECK9-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]5572// CHECK9:       omp_offload.failed:5573// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52() #[[ATTR3]]5574// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT]]5575// CHECK9:       omp_offload.cont:5576// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 05577// CHECK9-NEXT:    store i32 3, ptr [[TMP15]], align 45578// CHECK9-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 15579// CHECK9-NEXT:    store i32 0, ptr [[TMP16]], align 45580// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 25581// CHECK9-NEXT:    store ptr null, ptr [[TMP17]], align 85582// CHECK9-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 35583// CHECK9-NEXT:    store ptr null, ptr [[TMP18]], align 85584// CHECK9-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 45585// CHECK9-NEXT:    store ptr null, ptr [[TMP19]], align 85586// CHECK9-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 55587// CHECK9-NEXT:    store ptr null, ptr [[TMP20]], align 85588// CHECK9-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 65589// CHECK9-NEXT:    store ptr null, ptr [[TMP21]], align 85590// CHECK9-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 75591// CHECK9-NEXT:    store ptr null, ptr [[TMP22]], align 85592// CHECK9-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 85593// CHECK9-NEXT:    store i64 100, ptr [[TMP23]], align 85594// CHECK9-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 95595// CHECK9-NEXT:    store i64 0, ptr [[TMP24]], align 85596// CHECK9-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 105597// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 45598// CHECK9-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 115599// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 45600// CHECK9-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 125601// CHECK9-NEXT:    store i32 0, ptr [[TMP27]], align 45602// CHECK9-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.region_id, ptr [[KERNEL_ARGS2]])5603// CHECK9-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 05604// CHECK9-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]5605// CHECK9:       omp_offload.failed3:5606// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57() #[[ATTR3]]5607// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT4]]5608// CHECK9:       omp_offload.cont4:5609// CHECK9-NEXT:    ret i32 05610//5611//5612// CHECK9-LABEL: define {{[^@]+}}@_ZN1SD1Ev5613// CHECK9-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat {5614// CHECK9-NEXT:  entry:5615// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 85616// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 85617// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85618// CHECK9-NEXT:    call void @_ZN1SD2Ev(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]]) #[[ATTR3]]5619// CHECK9-NEXT:    ret void5620//5621//5622// CHECK9-LABEL: define {{[^@]+}}@_ZN1SC2El5623// CHECK9-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR6]] comdat {5624// CHECK9-NEXT:  entry:5625// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 85626// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 85627// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 85628// CHECK9-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 85629// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85630// CHECK9-NEXT:    [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 05631// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 85632// CHECK9-NEXT:    store i64 [[TMP0]], ptr [[A2]], align 85633// CHECK9-NEXT:    ret void5634//5635//5636// CHECK9-LABEL: define {{[^@]+}}@_ZN1SD2Ev5637// CHECK9-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat {5638// CHECK9-NEXT:  entry:5639// CHECK9-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 85640// CHECK9-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 85641// CHECK9-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 85642// CHECK9-NEXT:    ret void5643//5644//5645// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l525646// CHECK9-SAME: () #[[ATTR2]] {5647// CHECK9-NEXT:  entry:5648// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined)5649// CHECK9-NEXT:    ret void5650//5651//5652// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined5653// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {5654// CHECK9-NEXT:  entry:5655// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85656// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85657// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45658// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45659// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45660// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45661// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45662// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45663// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45664// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85665// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85666// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45667// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 45668// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45669// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45670// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85671// CHECK9-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 45672// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5673// CHECK9-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45674// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 995675// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5676// CHECK9:       cond.true:5677// CHECK9-NEXT:    br label [[COND_END:%.*]]5678// CHECK9:       cond.false:5679// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45680// CHECK9-NEXT:    br label [[COND_END]]5681// CHECK9:       cond.end:5682// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]5683// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45684// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45685// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 45686// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5687// CHECK9:       omp.inner.for.cond:5688// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45689// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45690// CHECK9-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]5691// CHECK9-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5692// CHECK9:       omp.inner.for.body:5693// CHECK9-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 5)5694// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45695// CHECK9-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i645696// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45697// CHECK9-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i645698// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])5699// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5700// CHECK9:       omp.inner.for.inc:5701// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45702// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45703// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]5704// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 45705// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5706// CHECK9:       omp.inner.for.end:5707// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5708// CHECK9:       omp.loop.exit:5709// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])5710// CHECK9-NEXT:    ret void5711//5712//5713// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined.omp_outlined5714// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {5715// CHECK9-NEXT:  entry:5716// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85717// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85718// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85719// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85720// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45721// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45722// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45723// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45724// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45725// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45726// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45727// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85728// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85729// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85730// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85731// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45732// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 45733// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85734// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i325735// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85736// CHECK9-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i325737// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45738// CHECK9-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 45739// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45740// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45741// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85742// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 45743// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5744// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45745// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 995746// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5747// CHECK9:       cond.true:5748// CHECK9-NEXT:    br label [[COND_END:%.*]]5749// CHECK9:       cond.false:5750// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45751// CHECK9-NEXT:    br label [[COND_END]]5752// CHECK9:       cond.end:5753// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]5754// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45755// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45756// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 45757// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5758// CHECK9:       omp.inner.for.cond:5759// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45760// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45761// CHECK9-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]5762// CHECK9-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5763// CHECK9:       omp.inner.for.body:5764// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45765// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 15766// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5767// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I]], align 45768// CHECK9-NEXT:    invoke void @_Z3foov()5769// CHECK9-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]5770// CHECK9:       invoke.cont:5771// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5772// CHECK9:       omp.body.continue:5773// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5774// CHECK9:       omp.inner.for.inc:5775// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45776// CHECK9-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 15777// CHECK9-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 45778// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5779// CHECK9:       omp.inner.for.end:5780// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5781// CHECK9:       omp.loop.exit:5782// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])5783// CHECK9-NEXT:    ret void5784// CHECK9:       terminate.lpad:5785// CHECK9-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }5786// CHECK9-NEXT:            catch ptr null5787// CHECK9-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 05788// CHECK9-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]5789// CHECK9-NEXT:    unreachable5790//5791//5792// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l575793// CHECK9-SAME: () #[[ATTR2]] {5794// CHECK9-NEXT:  entry:5795// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined)5796// CHECK9-NEXT:    ret void5797//5798//5799// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined5800// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {5801// CHECK9-NEXT:  entry:5802// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85803// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85804// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45805// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45806// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45807// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45808// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45809// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45810// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45811// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85812// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85813// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45814// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 45815// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45816// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45817// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85818// CHECK9-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 45819// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5820// CHECK9-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45821// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 995822// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5823// CHECK9:       cond.true:5824// CHECK9-NEXT:    br label [[COND_END:%.*]]5825// CHECK9:       cond.false:5826// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45827// CHECK9-NEXT:    br label [[COND_END]]5828// CHECK9:       cond.end:5829// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]5830// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45831// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45832// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 45833// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5834// CHECK9:       omp.inner.for.cond:5835// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45836// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45837// CHECK9-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]5838// CHECK9-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5839// CHECK9:       omp.inner.for.body:5840// CHECK9-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 23)5841// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45842// CHECK9-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i645843// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45844// CHECK9-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i645845// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])5846// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5847// CHECK9:       omp.inner.for.inc:5848// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45849// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45850// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]5851// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 45852// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5853// CHECK9:       omp.inner.for.end:5854// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5855// CHECK9:       omp.loop.exit:5856// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])5857// CHECK9-NEXT:    ret void5858//5859//5860// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined.omp_outlined5861// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {5862// CHECK9-NEXT:  entry:5863// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85864// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85865// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85866// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85867// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45868// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45869// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45870// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45871// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45872// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45873// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45874// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85875// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85876// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85877// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85878// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45879// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 45880// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85881// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i325882// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85883// CHECK9-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i325884// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45885// CHECK9-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 45886// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45887// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45888// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85889// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 45890// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5891// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45892// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 995893// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5894// CHECK9:       cond.true:5895// CHECK9-NEXT:    br label [[COND_END:%.*]]5896// CHECK9:       cond.false:5897// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45898// CHECK9-NEXT:    br label [[COND_END]]5899// CHECK9:       cond.end:5900// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]5901// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45902// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45903// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 45904// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5905// CHECK9:       omp.inner.for.cond:5906// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45907// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45908// CHECK9-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]5909// CHECK9-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5910// CHECK9:       omp.inner.for.body:5911// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45912// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 15913// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5914// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I]], align 45915// CHECK9-NEXT:    invoke void @_Z3foov()5916// CHECK9-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]5917// CHECK9:       invoke.cont:5918// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5919// CHECK9:       omp.body.continue:5920// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5921// CHECK9:       omp.inner.for.inc:5922// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45923// CHECK9-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 15924// CHECK9-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 45925// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5926// CHECK9:       omp.inner.for.end:5927// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5928// CHECK9:       omp.loop.exit:5929// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])5930// CHECK9-NEXT:    ret void5931// CHECK9:       terminate.lpad:5932// CHECK9-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }5933// CHECK9-NEXT:            catch ptr null5934// CHECK9-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 05935// CHECK9-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]5936// CHECK9-NEXT:    unreachable5937//5938//5939// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l525940// CHECK9-SAME: () #[[ATTR2]] {5941// CHECK9-NEXT:  entry:5942// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined)5943// CHECK9-NEXT:    ret void5944//5945//5946// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined5947// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {5948// CHECK9-NEXT:  entry:5949// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85950// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85951// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45952// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45953// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45954// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45955// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45956// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45957// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45958// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85959// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85960// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45961// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 45962// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45963// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45964// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85965// CHECK9-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 45966// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5967// CHECK9-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45968// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 995969// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5970// CHECK9:       cond.true:5971// CHECK9-NEXT:    br label [[COND_END:%.*]]5972// CHECK9:       cond.false:5973// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45974// CHECK9-NEXT:    br label [[COND_END]]5975// CHECK9:       cond.end:5976// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]5977// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45978// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45979// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 45980// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5981// CHECK9:       omp.inner.for.cond:5982// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45983// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45984// CHECK9-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]5985// CHECK9-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5986// CHECK9:       omp.inner.for.body:5987// CHECK9-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 1)5988// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45989// CHECK9-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i645990// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45991// CHECK9-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i645992// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])5993// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5994// CHECK9:       omp.inner.for.inc:5995// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45996// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45997// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]5998// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 45999// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]6000// CHECK9:       omp.inner.for.end:6001// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6002// CHECK9:       omp.loop.exit:6003// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])6004// CHECK9-NEXT:    ret void6005//6006//6007// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined.omp_outlined6008// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {6009// CHECK9-NEXT:  entry:6010// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86011// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86012// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86013// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86014// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46015// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46016// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46017// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46018// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46019// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46020// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46021// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86022// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86023// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86024// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86025// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46026// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 46027// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86028// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i326029// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86030// CHECK9-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i326031// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46032// CHECK9-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 46033// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46034// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46035// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86036// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 46037// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6038// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46039// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 996040// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6041// CHECK9:       cond.true:6042// CHECK9-NEXT:    br label [[COND_END:%.*]]6043// CHECK9:       cond.false:6044// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46045// CHECK9-NEXT:    br label [[COND_END]]6046// CHECK9:       cond.end:6047// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]6048// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 46049// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46050// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 46051// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6052// CHECK9:       omp.inner.for.cond:6053// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46054// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46055// CHECK9-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]6056// CHECK9-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6057// CHECK9:       omp.inner.for.body:6058// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46059// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 16060// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6061// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I]], align 46062// CHECK9-NEXT:    invoke void @_Z3foov()6063// CHECK9-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]6064// CHECK9:       invoke.cont:6065// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6066// CHECK9:       omp.body.continue:6067// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6068// CHECK9:       omp.inner.for.inc:6069// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46070// CHECK9-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 16071// CHECK9-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 46072// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]6073// CHECK9:       omp.inner.for.end:6074// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6075// CHECK9:       omp.loop.exit:6076// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])6077// CHECK9-NEXT:    ret void6078// CHECK9:       terminate.lpad:6079// CHECK9-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }6080// CHECK9-NEXT:            catch ptr null6081// CHECK9-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 06082// CHECK9-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]6083// CHECK9-NEXT:    unreachable6084//6085//6086// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l576087// CHECK9-SAME: () #[[ATTR2]] {6088// CHECK9-NEXT:  entry:6089// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined)6090// CHECK9-NEXT:    ret void6091//6092//6093// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined6094// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {6095// CHECK9-NEXT:  entry:6096// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86097// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86098// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46099// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46100// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46101// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46102// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46103// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46104// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46105// CHECK9-NEXT:    [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 86106// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86107// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86108// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46109// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 46110// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46111// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46112// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86113// CHECK9-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 46114// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6115// CHECK9-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46116// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 996117// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6118// CHECK9:       cond.true:6119// CHECK9-NEXT:    br label [[COND_END:%.*]]6120// CHECK9:       cond.false:6121// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46122// CHECK9-NEXT:    br label [[COND_END]]6123// CHECK9:       cond.end:6124// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]6125// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46126// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46127// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 46128// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6129// CHECK9:       omp.inner.for.cond:6130// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46131// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46132// CHECK9-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]6133// CHECK9-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6134// CHECK9:       omp.inner.for.body:6135// CHECK9-NEXT:    invoke void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)6136// CHECK9-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]6137// CHECK9:       invoke.cont:6138// CHECK9-NEXT:    [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])6139// CHECK9-NEXT:            to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]6140// CHECK9:       invoke.cont2:6141// CHECK9-NEXT:    [[TMP7:%.*]] = sext i8 [[CALL]] to i326142// CHECK9-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])6143// CHECK9-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR3]]6144// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46145// CHECK9-NEXT:    [[TMP9:%.*]] = zext i32 [[TMP8]] to i646146// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46147// CHECK9-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i646148// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined.omp_outlined, i64 [[TMP9]], i64 [[TMP11]])6149// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6150// CHECK9:       omp.inner.for.inc:6151// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46152// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46153// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]6154// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 46155// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]6156// CHECK9:       omp.inner.for.end:6157// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6158// CHECK9:       omp.loop.exit:6159// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])6160// CHECK9-NEXT:    ret void6161// CHECK9:       terminate.lpad:6162// CHECK9-NEXT:    [[TMP14:%.*]] = landingpad { ptr, i32 }6163// CHECK9-NEXT:            catch ptr null6164// CHECK9-NEXT:    [[TMP15:%.*]] = extractvalue { ptr, i32 } [[TMP14]], 06165// CHECK9-NEXT:    call void @__clang_call_terminate(ptr [[TMP15]]) #[[ATTR7]]6166// CHECK9-NEXT:    unreachable6167//6168//6169// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined.omp_outlined6170// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {6171// CHECK9-NEXT:  entry:6172// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86173// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86174// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86175// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86176// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46177// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46178// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46179// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46180// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46181// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46182// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46183// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86184// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86185// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86186// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86187// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46188// CHECK9-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 46189// CHECK9-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86190// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i326191// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86192// CHECK9-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i326193// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46194// CHECK9-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 46195// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46196// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46197// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86198// CHECK9-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 46199// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6200// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46201// CHECK9-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 996202// CHECK9-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6203// CHECK9:       cond.true:6204// CHECK9-NEXT:    br label [[COND_END:%.*]]6205// CHECK9:       cond.false:6206// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46207// CHECK9-NEXT:    br label [[COND_END]]6208// CHECK9:       cond.end:6209// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]6210// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 46211// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46212// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 46213// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6214// CHECK9:       omp.inner.for.cond:6215// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46216// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46217// CHECK9-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]6218// CHECK9-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6219// CHECK9:       omp.inner.for.body:6220// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46221// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 16222// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6223// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I]], align 46224// CHECK9-NEXT:    invoke void @_Z3foov()6225// CHECK9-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]6226// CHECK9:       invoke.cont:6227// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6228// CHECK9:       omp.body.continue:6229// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6230// CHECK9:       omp.inner.for.inc:6231// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46232// CHECK9-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 16233// CHECK9-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 46234// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]6235// CHECK9:       omp.inner.for.end:6236// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6237// CHECK9:       omp.loop.exit:6238// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])6239// CHECK9-NEXT:    ret void6240// CHECK9:       terminate.lpad:6241// CHECK9-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }6242// CHECK9-NEXT:            catch ptr null6243// CHECK9-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 06244// CHECK9-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]6245// CHECK9-NEXT:    unreachable6246//6247//6248// CHECK13-LABEL: define {{[^@]+}}@main6249// CHECK13-SAME: () #[[ATTR0:[0-9]+]] personality ptr @__gxx_personality_v0 {6250// CHECK13-NEXT:  entry:6251// CHECK13-NEXT:    [[RETVAL:%.*]] = alloca i32, align 46252// CHECK13-NEXT:    [[S:%.*]] = alloca [[STRUCT_S:%.*]], align 86253// CHECK13-NEXT:    [[A:%.*]] = alloca i8, align 16254// CHECK13-NEXT:    [[EXN_SLOT:%.*]] = alloca ptr, align 86255// CHECK13-NEXT:    [[EHSELECTOR_SLOT:%.*]] = alloca i32, align 46256// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 46257// CHECK13-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 86258// CHECK13-NEXT:    [[A_CASTED:%.*]] = alloca i64, align 86259// CHECK13-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 86260// CHECK13-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 86261// CHECK13-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 86262// CHECK13-NEXT:    [[_TMP1:%.*]] = alloca i32, align 46263// CHECK13-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 86264// CHECK13-NEXT:    store i32 0, ptr [[RETVAL]], align 46265// CHECK13-NEXT:    call void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[S]], i64 noundef 0)6266// CHECK13-NEXT:    [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[S]])6267// CHECK13-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]6268// CHECK13:       invoke.cont:6269// CHECK13-NEXT:    store i8 [[CALL]], ptr [[A]], align 16270// CHECK13-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 06271// CHECK13-NEXT:    store i32 3, ptr [[TMP0]], align 46272// CHECK13-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 16273// CHECK13-NEXT:    store i32 0, ptr [[TMP1]], align 46274// CHECK13-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 26275// CHECK13-NEXT:    store ptr null, ptr [[TMP2]], align 86276// CHECK13-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 36277// CHECK13-NEXT:    store ptr null, ptr [[TMP3]], align 86278// CHECK13-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 46279// CHECK13-NEXT:    store ptr null, ptr [[TMP4]], align 86280// CHECK13-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 56281// CHECK13-NEXT:    store ptr null, ptr [[TMP5]], align 86282// CHECK13-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 66283// CHECK13-NEXT:    store ptr null, ptr [[TMP6]], align 86284// CHECK13-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 76285// CHECK13-NEXT:    store ptr null, ptr [[TMP7]], align 86286// CHECK13-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 86287// CHECK13-NEXT:    store i64 100, ptr [[TMP8]], align 86288// CHECK13-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 96289// CHECK13-NEXT:    store i64 0, ptr [[TMP9]], align 86290// CHECK13-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 106291// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 46292// CHECK13-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 116293// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 46294// CHECK13-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 126295// CHECK13-NEXT:    store i32 0, ptr [[TMP12]], align 46296// CHECK13-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.region_id, ptr [[KERNEL_ARGS]])6297// CHECK13-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 06298// CHECK13-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]6299// CHECK13:       omp_offload.failed:6300// CHECK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68() #[[ATTR3:[0-9]+]]6301// CHECK13-NEXT:    br label [[OMP_OFFLOAD_CONT]]6302// CHECK13:       lpad:6303// CHECK13-NEXT:    [[TMP15:%.*]] = landingpad { ptr, i32 }6304// CHECK13-NEXT:            cleanup6305// CHECK13-NEXT:    [[TMP16:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 06306// CHECK13-NEXT:    store ptr [[TMP16]], ptr [[EXN_SLOT]], align 86307// CHECK13-NEXT:    [[TMP17:%.*]] = extractvalue { ptr, i32 } [[TMP15]], 16308// CHECK13-NEXT:    store i32 [[TMP17]], ptr [[EHSELECTOR_SLOT]], align 46309// CHECK13-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]6310// CHECK13-NEXT:    br label [[EH_RESUME:%.*]]6311// CHECK13:       omp_offload.cont:6312// CHECK13-NEXT:    [[TMP18:%.*]] = load i8, ptr [[A]], align 16313// CHECK13-NEXT:    store i8 [[TMP18]], ptr [[A_CASTED]], align 16314// CHECK13-NEXT:    [[TMP19:%.*]] = load i64, ptr [[A_CASTED]], align 86315// CHECK13-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 06316// CHECK13-NEXT:    store i64 [[TMP19]], ptr [[TMP20]], align 86317// CHECK13-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 06318// CHECK13-NEXT:    store i64 [[TMP19]], ptr [[TMP21]], align 86319// CHECK13-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 06320// CHECK13-NEXT:    store ptr null, ptr [[TMP22]], align 86321// CHECK13-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 06322// CHECK13-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 06323// CHECK13-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 06324// CHECK13-NEXT:    store i32 3, ptr [[TMP25]], align 46325// CHECK13-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 16326// CHECK13-NEXT:    store i32 1, ptr [[TMP26]], align 46327// CHECK13-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 26328// CHECK13-NEXT:    store ptr [[TMP23]], ptr [[TMP27]], align 86329// CHECK13-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 36330// CHECK13-NEXT:    store ptr [[TMP24]], ptr [[TMP28]], align 86331// CHECK13-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 46332// CHECK13-NEXT:    store ptr @.offload_sizes, ptr [[TMP29]], align 86333// CHECK13-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 56334// CHECK13-NEXT:    store ptr @.offload_maptypes, ptr [[TMP30]], align 86335// CHECK13-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 66336// CHECK13-NEXT:    store ptr null, ptr [[TMP31]], align 86337// CHECK13-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 76338// CHECK13-NEXT:    store ptr null, ptr [[TMP32]], align 86339// CHECK13-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 86340// CHECK13-NEXT:    store i64 100, ptr [[TMP33]], align 86341// CHECK13-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 96342// CHECK13-NEXT:    store i64 0, ptr [[TMP34]], align 86343// CHECK13-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 106344// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP35]], align 46345// CHECK13-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 116346// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP36]], align 46347// CHECK13-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 126348// CHECK13-NEXT:    store i32 0, ptr [[TMP37]], align 46349// CHECK13-NEXT:    [[TMP38:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.region_id, ptr [[KERNEL_ARGS2]])6350// CHECK13-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 06351// CHECK13-NEXT:    br i1 [[TMP39]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]6352// CHECK13:       omp_offload.failed3:6353// CHECK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74(i64 [[TMP19]]) #[[ATTR3]]6354// CHECK13-NEXT:    br label [[OMP_OFFLOAD_CONT4]]6355// CHECK13:       omp_offload.cont4:6356// CHECK13-NEXT:    [[TMP40:%.*]] = load i8, ptr [[A]], align 16357// CHECK13-NEXT:    [[CONV:%.*]] = sext i8 [[TMP40]] to i326358// CHECK13-NEXT:    [[CALL6:%.*]] = invoke noundef i32 @_Z5tmainIcLi5EEiv()6359// CHECK13-NEXT:            to label [[INVOKE_CONT5:%.*]] unwind label [[LPAD]]6360// CHECK13:       invoke.cont5:6361// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CALL6]]6362// CHECK13-NEXT:    [[CALL8:%.*]] = invoke noundef i32 @_Z5tmainI1SLi1EEiv()6363// CHECK13-NEXT:            to label [[INVOKE_CONT7:%.*]] unwind label [[LPAD]]6364// CHECK13:       invoke.cont7:6365// CHECK13-NEXT:    [[ADD9:%.*]] = add nsw i32 [[ADD]], [[CALL8]]6366// CHECK13-NEXT:    store i32 [[ADD9]], ptr [[RETVAL]], align 46367// CHECK13-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[S]]) #[[ATTR3]]6368// CHECK13-NEXT:    [[TMP41:%.*]] = load i32, ptr [[RETVAL]], align 46369// CHECK13-NEXT:    ret i32 [[TMP41]]6370// CHECK13:       eh.resume:6371// CHECK13-NEXT:    [[EXN:%.*]] = load ptr, ptr [[EXN_SLOT]], align 86372// CHECK13-NEXT:    [[SEL:%.*]] = load i32, ptr [[EHSELECTOR_SLOT]], align 46373// CHECK13-NEXT:    [[LPAD_VAL:%.*]] = insertvalue { ptr, i32 } poison, ptr [[EXN]], 06374// CHECK13-NEXT:    [[LPAD_VAL10:%.*]] = insertvalue { ptr, i32 } [[LPAD_VAL]], i32 [[SEL]], 16375// CHECK13-NEXT:    resume { ptr, i32 } [[LPAD_VAL10]]6376//6377//6378// CHECK13-LABEL: define {{[^@]+}}@_ZN1SC1El6379// CHECK13-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat {6380// CHECK13-NEXT:  entry:6381// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 86382// CHECK13-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 86383// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 86384// CHECK13-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 86385// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86386// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 86387// CHECK13-NEXT:    call void @_ZN1SC2El(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]], i64 noundef [[TMP0]])6388// CHECK13-NEXT:    ret void6389//6390//6391// CHECK13-LABEL: define {{[^@]+}}@_ZN1ScvcEv6392// CHECK13-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) #[[ATTR1]] comdat {6393// CHECK13-NEXT:  entry:6394// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 86395// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 86396// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86397// CHECK13-NEXT:    call void @_Z8mayThrowv()6398// CHECK13-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 06399// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A]], align 86400// CHECK13-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i86401// CHECK13-NEXT:    ret i8 [[CONV]]6402//6403//6404// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l686405// CHECK13-SAME: () #[[ATTR2:[0-9]+]] {6406// CHECK13-NEXT:  entry:6407// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined)6408// CHECK13-NEXT:    ret void6409//6410//6411// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined6412// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {6413// CHECK13-NEXT:  entry:6414// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86415// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86416// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46417// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 46418// CHECK13-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46419// CHECK13-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46420// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46421// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46422// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 46423// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86424// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86425// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46426// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 46427// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46428// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46429// CHECK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86430// CHECK13-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 46431// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6432// CHECK13-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46433// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 996434// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6435// CHECK13:       cond.true:6436// CHECK13-NEXT:    br label [[COND_END:%.*]]6437// CHECK13:       cond.false:6438// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46439// CHECK13-NEXT:    br label [[COND_END]]6440// CHECK13:       cond.end:6441// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]6442// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46443// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46444// CHECK13-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 46445// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6446// CHECK13:       omp.inner.for.cond:6447// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46448// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46449// CHECK13-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]6450// CHECK13-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6451// CHECK13:       omp.inner.for.body:6452// CHECK13-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 2)6453// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46454// CHECK13-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i646455// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46456// CHECK13-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i646457// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])6458// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6459// CHECK13:       omp.inner.for.inc:6460// CHECK13-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46461// CHECK13-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46462// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]6463// CHECK13-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 46464// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]6465// CHECK13:       omp.inner.for.end:6466// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6467// CHECK13:       omp.loop.exit:6468// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])6469// CHECK13-NEXT:    ret void6470//6471//6472// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l68.omp_outlined.omp_outlined6473// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {6474// CHECK13-NEXT:  entry:6475// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86476// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86477// CHECK13-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86478// CHECK13-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86479// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46480// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 46481// CHECK13-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46482// CHECK13-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46483// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46484// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46485// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 46486// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86487// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86488// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86489// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86490// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46491// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 46492// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86493// CHECK13-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i326494// CHECK13-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86495// CHECK13-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i326496// CHECK13-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46497// CHECK13-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 46498// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46499// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46500// CHECK13-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86501// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 46502// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6503// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46504// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 996505// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6506// CHECK13:       cond.true:6507// CHECK13-NEXT:    br label [[COND_END:%.*]]6508// CHECK13:       cond.false:6509// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46510// CHECK13-NEXT:    br label [[COND_END]]6511// CHECK13:       cond.end:6512// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]6513// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 46514// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46515// CHECK13-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 46516// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6517// CHECK13:       omp.inner.for.cond:6518// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46519// CHECK13-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46520// CHECK13-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]6521// CHECK13-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6522// CHECK13:       omp.inner.for.body:6523// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46524// CHECK13-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 16525// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6526// CHECK13-NEXT:    store i32 [[ADD]], ptr [[I]], align 46527// CHECK13-NEXT:    invoke void @_Z3foov()6528// CHECK13-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]6529// CHECK13:       invoke.cont:6530// CHECK13-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6531// CHECK13:       omp.body.continue:6532// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6533// CHECK13:       omp.inner.for.inc:6534// CHECK13-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46535// CHECK13-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 16536// CHECK13-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 46537// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]6538// CHECK13:       omp.inner.for.end:6539// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6540// CHECK13:       omp.loop.exit:6541// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])6542// CHECK13-NEXT:    ret void6543// CHECK13:       terminate.lpad:6544// CHECK13-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }6545// CHECK13-NEXT:            catch ptr null6546// CHECK13-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 06547// CHECK13-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7:[0-9]+]]6548// CHECK13-NEXT:    unreachable6549//6550//6551// CHECK13-LABEL: define {{[^@]+}}@__clang_call_terminate6552// CHECK13-SAME: (ptr noundef [[TMP0:%.*]]) #[[ATTR5:[0-9]+]] comdat {6553// CHECK13-NEXT:    [[TMP2:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP0]]) #[[ATTR3]]6554// CHECK13-NEXT:    call void @_ZSt9terminatev() #[[ATTR7]]6555// CHECK13-NEXT:    unreachable6556//6557//6558// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l746559// CHECK13-SAME: (i64 noundef [[A:%.*]]) #[[ATTR2]] {6560// CHECK13-NEXT:  entry:6561// CHECK13-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 86562// CHECK13-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 86563// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 1, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined, ptr [[A_ADDR]])6564// CHECK13-NEXT:    ret void6565//6566//6567// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined6568// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 1 dereferenceable(1) [[A:%.*]]) #[[ATTR2]] {6569// CHECK13-NEXT:  entry:6570// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86571// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86572// CHECK13-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86573// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46574// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 46575// CHECK13-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46576// CHECK13-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46577// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46578// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46579// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 46580// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86581// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86582// CHECK13-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86583// CHECK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8, !nonnull [[META17:![0-9]+]]6584// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46585// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 46586// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46587// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46588// CHECK13-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86589// CHECK13-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 46590// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP2]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6591// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46592// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP3]], 996593// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6594// CHECK13:       cond.true:6595// CHECK13-NEXT:    br label [[COND_END:%.*]]6596// CHECK13:       cond.false:6597// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46598// CHECK13-NEXT:    br label [[COND_END]]6599// CHECK13:       cond.end:6600// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP4]], [[COND_FALSE]] ]6601// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46602// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46603// CHECK13-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_IV]], align 46604// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6605// CHECK13:       omp.inner.for.cond:6606// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46607// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46608// CHECK13-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]6609// CHECK13-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6610// CHECK13:       omp.inner.for.body:6611// CHECK13-NEXT:    [[TMP8:%.*]] = load i8, ptr [[TMP0]], align 16612// CHECK13-NEXT:    [[TMP9:%.*]] = sext i8 [[TMP8]] to i326613// CHECK13-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP2]], i32 [[TMP9]])6614// CHECK13-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46615// CHECK13-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i646616// CHECK13-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46617// CHECK13-NEXT:    [[TMP13:%.*]] = zext i32 [[TMP12]] to i646618// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined.omp_outlined, i64 [[TMP11]], i64 [[TMP13]])6619// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6620// CHECK13:       omp.inner.for.inc:6621// CHECK13-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46622// CHECK13-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46623// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP14]], [[TMP15]]6624// CHECK13-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 46625// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]6626// CHECK13:       omp.inner.for.end:6627// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6628// CHECK13:       omp.loop.exit:6629// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP2]])6630// CHECK13-NEXT:    ret void6631//6632//6633// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l74.omp_outlined.omp_outlined6634// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {6635// CHECK13-NEXT:  entry:6636// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86637// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86638// CHECK13-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86639// CHECK13-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86640// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46641// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 46642// CHECK13-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46643// CHECK13-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46644// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46645// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46646// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 46647// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86648// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86649// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86650// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86651// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46652// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 46653// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86654// CHECK13-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i326655// CHECK13-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86656// CHECK13-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i326657// CHECK13-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46658// CHECK13-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 46659// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46660// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46661// CHECK13-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86662// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 46663// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6664// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46665// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 996666// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6667// CHECK13:       cond.true:6668// CHECK13-NEXT:    br label [[COND_END:%.*]]6669// CHECK13:       cond.false:6670// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46671// CHECK13-NEXT:    br label [[COND_END]]6672// CHECK13:       cond.end:6673// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]6674// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 46675// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46676// CHECK13-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 46677// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6678// CHECK13:       omp.inner.for.cond:6679// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46680// CHECK13-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46681// CHECK13-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]6682// CHECK13-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6683// CHECK13:       omp.inner.for.body:6684// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46685// CHECK13-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 16686// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6687// CHECK13-NEXT:    store i32 [[ADD]], ptr [[I]], align 46688// CHECK13-NEXT:    invoke void @_Z3foov()6689// CHECK13-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]6690// CHECK13:       invoke.cont:6691// CHECK13-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6692// CHECK13:       omp.body.continue:6693// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6694// CHECK13:       omp.inner.for.inc:6695// CHECK13-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46696// CHECK13-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 16697// CHECK13-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 46698// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]6699// CHECK13:       omp.inner.for.end:6700// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6701// CHECK13:       omp.loop.exit:6702// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])6703// CHECK13-NEXT:    ret void6704// CHECK13:       terminate.lpad:6705// CHECK13-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }6706// CHECK13-NEXT:            catch ptr null6707// CHECK13-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 06708// CHECK13-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]6709// CHECK13-NEXT:    unreachable6710//6711//6712// CHECK13-LABEL: define {{[^@]+}}@_Z5tmainIcLi5EEiv6713// CHECK13-SAME: () #[[ATTR6:[0-9]+]] comdat {6714// CHECK13-NEXT:  entry:6715// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 46716// CHECK13-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 86717// CHECK13-NEXT:    [[_TMP1:%.*]] = alloca i32, align 46718// CHECK13-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 86719// CHECK13-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 06720// CHECK13-NEXT:    store i32 3, ptr [[TMP0]], align 46721// CHECK13-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 16722// CHECK13-NEXT:    store i32 0, ptr [[TMP1]], align 46723// CHECK13-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 26724// CHECK13-NEXT:    store ptr null, ptr [[TMP2]], align 86725// CHECK13-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 36726// CHECK13-NEXT:    store ptr null, ptr [[TMP3]], align 86727// CHECK13-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 46728// CHECK13-NEXT:    store ptr null, ptr [[TMP4]], align 86729// CHECK13-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 56730// CHECK13-NEXT:    store ptr null, ptr [[TMP5]], align 86731// CHECK13-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 66732// CHECK13-NEXT:    store ptr null, ptr [[TMP6]], align 86733// CHECK13-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 76734// CHECK13-NEXT:    store ptr null, ptr [[TMP7]], align 86735// CHECK13-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 86736// CHECK13-NEXT:    store i64 100, ptr [[TMP8]], align 86737// CHECK13-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 96738// CHECK13-NEXT:    store i64 0, ptr [[TMP9]], align 86739// CHECK13-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 106740// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 46741// CHECK13-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 116742// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 46743// CHECK13-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 126744// CHECK13-NEXT:    store i32 0, ptr [[TMP12]], align 46745// CHECK13-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.region_id, ptr [[KERNEL_ARGS]])6746// CHECK13-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 06747// CHECK13-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]6748// CHECK13:       omp_offload.failed:6749// CHECK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52() #[[ATTR3]]6750// CHECK13-NEXT:    br label [[OMP_OFFLOAD_CONT]]6751// CHECK13:       omp_offload.cont:6752// CHECK13-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 06753// CHECK13-NEXT:    store i32 3, ptr [[TMP15]], align 46754// CHECK13-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 16755// CHECK13-NEXT:    store i32 0, ptr [[TMP16]], align 46756// CHECK13-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 26757// CHECK13-NEXT:    store ptr null, ptr [[TMP17]], align 86758// CHECK13-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 36759// CHECK13-NEXT:    store ptr null, ptr [[TMP18]], align 86760// CHECK13-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 46761// CHECK13-NEXT:    store ptr null, ptr [[TMP19]], align 86762// CHECK13-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 56763// CHECK13-NEXT:    store ptr null, ptr [[TMP20]], align 86764// CHECK13-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 66765// CHECK13-NEXT:    store ptr null, ptr [[TMP21]], align 86766// CHECK13-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 76767// CHECK13-NEXT:    store ptr null, ptr [[TMP22]], align 86768// CHECK13-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 86769// CHECK13-NEXT:    store i64 100, ptr [[TMP23]], align 86770// CHECK13-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 96771// CHECK13-NEXT:    store i64 0, ptr [[TMP24]], align 86772// CHECK13-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 106773// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 46774// CHECK13-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 116775// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 46776// CHECK13-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 126777// CHECK13-NEXT:    store i32 0, ptr [[TMP27]], align 46778// CHECK13-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.region_id, ptr [[KERNEL_ARGS2]])6779// CHECK13-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 06780// CHECK13-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]6781// CHECK13:       omp_offload.failed3:6782// CHECK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57() #[[ATTR3]]6783// CHECK13-NEXT:    br label [[OMP_OFFLOAD_CONT4]]6784// CHECK13:       omp_offload.cont4:6785// CHECK13-NEXT:    ret i32 06786//6787//6788// CHECK13-LABEL: define {{[^@]+}}@_Z5tmainI1SLi1EEiv6789// CHECK13-SAME: () #[[ATTR6]] comdat {6790// CHECK13-NEXT:  entry:6791// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 46792// CHECK13-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 86793// CHECK13-NEXT:    [[_TMP1:%.*]] = alloca i32, align 46794// CHECK13-NEXT:    [[KERNEL_ARGS2:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 86795// CHECK13-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 06796// CHECK13-NEXT:    store i32 3, ptr [[TMP0]], align 46797// CHECK13-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 16798// CHECK13-NEXT:    store i32 0, ptr [[TMP1]], align 46799// CHECK13-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 26800// CHECK13-NEXT:    store ptr null, ptr [[TMP2]], align 86801// CHECK13-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 36802// CHECK13-NEXT:    store ptr null, ptr [[TMP3]], align 86803// CHECK13-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 46804// CHECK13-NEXT:    store ptr null, ptr [[TMP4]], align 86805// CHECK13-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 56806// CHECK13-NEXT:    store ptr null, ptr [[TMP5]], align 86807// CHECK13-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 66808// CHECK13-NEXT:    store ptr null, ptr [[TMP6]], align 86809// CHECK13-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 76810// CHECK13-NEXT:    store ptr null, ptr [[TMP7]], align 86811// CHECK13-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 86812// CHECK13-NEXT:    store i64 100, ptr [[TMP8]], align 86813// CHECK13-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 96814// CHECK13-NEXT:    store i64 0, ptr [[TMP9]], align 86815// CHECK13-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 106816// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP10]], align 46817// CHECK13-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 116818// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP11]], align 46819// CHECK13-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 126820// CHECK13-NEXT:    store i32 0, ptr [[TMP12]], align 46821// CHECK13-NEXT:    [[TMP13:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.region_id, ptr [[KERNEL_ARGS]])6822// CHECK13-NEXT:    [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 06823// CHECK13-NEXT:    br i1 [[TMP14]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]6824// CHECK13:       omp_offload.failed:6825// CHECK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52() #[[ATTR3]]6826// CHECK13-NEXT:    br label [[OMP_OFFLOAD_CONT]]6827// CHECK13:       omp_offload.cont:6828// CHECK13-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 06829// CHECK13-NEXT:    store i32 3, ptr [[TMP15]], align 46830// CHECK13-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 16831// CHECK13-NEXT:    store i32 0, ptr [[TMP16]], align 46832// CHECK13-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 26833// CHECK13-NEXT:    store ptr null, ptr [[TMP17]], align 86834// CHECK13-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 36835// CHECK13-NEXT:    store ptr null, ptr [[TMP18]], align 86836// CHECK13-NEXT:    [[TMP19:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 46837// CHECK13-NEXT:    store ptr null, ptr [[TMP19]], align 86838// CHECK13-NEXT:    [[TMP20:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 56839// CHECK13-NEXT:    store ptr null, ptr [[TMP20]], align 86840// CHECK13-NEXT:    [[TMP21:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 66841// CHECK13-NEXT:    store ptr null, ptr [[TMP21]], align 86842// CHECK13-NEXT:    [[TMP22:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 76843// CHECK13-NEXT:    store ptr null, ptr [[TMP22]], align 86844// CHECK13-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 86845// CHECK13-NEXT:    store i64 100, ptr [[TMP23]], align 86846// CHECK13-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 96847// CHECK13-NEXT:    store i64 0, ptr [[TMP24]], align 86848// CHECK13-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 106849// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP25]], align 46850// CHECK13-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 116851// CHECK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP26]], align 46852// CHECK13-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS2]], i32 0, i32 126853// CHECK13-NEXT:    store i32 0, ptr [[TMP27]], align 46854// CHECK13-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.region_id, ptr [[KERNEL_ARGS2]])6855// CHECK13-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 06856// CHECK13-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED3:%.*]], label [[OMP_OFFLOAD_CONT4:%.*]]6857// CHECK13:       omp_offload.failed3:6858// CHECK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57() #[[ATTR3]]6859// CHECK13-NEXT:    br label [[OMP_OFFLOAD_CONT4]]6860// CHECK13:       omp_offload.cont4:6861// CHECK13-NEXT:    ret i32 06862//6863//6864// CHECK13-LABEL: define {{[^@]+}}@_ZN1SD1Ev6865// CHECK13-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat {6866// CHECK13-NEXT:  entry:6867// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 86868// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 86869// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86870// CHECK13-NEXT:    call void @_ZN1SD2Ev(ptr noundef nonnull align 8 dereferenceable(24) [[THIS1]]) #[[ATTR3]]6871// CHECK13-NEXT:    ret void6872//6873//6874// CHECK13-LABEL: define {{[^@]+}}@_ZN1SC2El6875// CHECK13-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]], i64 noundef [[A:%.*]]) unnamed_addr #[[ATTR6]] comdat {6876// CHECK13-NEXT:  entry:6877// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 86878// CHECK13-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 86879// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 86880// CHECK13-NEXT:    store i64 [[A]], ptr [[A_ADDR]], align 86881// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 86882// CHECK13-NEXT:    [[A2:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[THIS1]], i32 0, i32 06883// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 86884// CHECK13-NEXT:    store i64 [[TMP0]], ptr [[A2]], align 86885// CHECK13-NEXT:    ret void6886//6887//6888// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l526889// CHECK13-SAME: () #[[ATTR2]] {6890// CHECK13-NEXT:  entry:6891// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined)6892// CHECK13-NEXT:    ret void6893//6894//6895// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined6896// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {6897// CHECK13-NEXT:  entry:6898// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86899// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86900// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46901// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 46902// CHECK13-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46903// CHECK13-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46904// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46905// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46906// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 46907// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86908// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86909// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46910// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 46911// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46912// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46913// CHECK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86914// CHECK13-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 46915// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6916// CHECK13-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46917// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 996918// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6919// CHECK13:       cond.true:6920// CHECK13-NEXT:    br label [[COND_END:%.*]]6921// CHECK13:       cond.false:6922// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46923// CHECK13-NEXT:    br label [[COND_END]]6924// CHECK13:       cond.end:6925// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]6926// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46927// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46928// CHECK13-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 46929// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6930// CHECK13:       omp.inner.for.cond:6931// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46932// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46933// CHECK13-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]6934// CHECK13-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6935// CHECK13:       omp.inner.for.body:6936// CHECK13-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 5)6937// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46938// CHECK13-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i646939// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46940// CHECK13-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i646941// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])6942// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6943// CHECK13:       omp.inner.for.inc:6944// CHECK13-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46945// CHECK13-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46946// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]6947// CHECK13-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 46948// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]6949// CHECK13:       omp.inner.for.end:6950// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6951// CHECK13:       omp.loop.exit:6952// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])6953// CHECK13-NEXT:    ret void6954//6955//6956// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l52.omp_outlined.omp_outlined6957// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {6958// CHECK13-NEXT:  entry:6959// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86960// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86961// CHECK13-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86962// CHECK13-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86963// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46964// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 46965// CHECK13-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46966// CHECK13-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46967// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46968// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46969// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 46970// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86971// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86972// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86973// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86974// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46975// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 46976// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86977// CHECK13-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i326978// CHECK13-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86979// CHECK13-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i326980// CHECK13-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46981// CHECK13-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 46982// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46983// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46984// CHECK13-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86985// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 46986// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6987// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46988// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 996989// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6990// CHECK13:       cond.true:6991// CHECK13-NEXT:    br label [[COND_END:%.*]]6992// CHECK13:       cond.false:6993// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46994// CHECK13-NEXT:    br label [[COND_END]]6995// CHECK13:       cond.end:6996// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]6997// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 46998// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46999// CHECK13-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 47000// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7001// CHECK13:       omp.inner.for.cond:7002// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47003// CHECK13-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47004// CHECK13-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]7005// CHECK13-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7006// CHECK13:       omp.inner.for.body:7007// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47008// CHECK13-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 17009// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]7010// CHECK13-NEXT:    store i32 [[ADD]], ptr [[I]], align 47011// CHECK13-NEXT:    invoke void @_Z3foov()7012// CHECK13-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]7013// CHECK13:       invoke.cont:7014// CHECK13-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]7015// CHECK13:       omp.body.continue:7016// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7017// CHECK13:       omp.inner.for.inc:7018// CHECK13-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47019// CHECK13-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 17020// CHECK13-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 47021// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]7022// CHECK13:       omp.inner.for.end:7023// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7024// CHECK13:       omp.loop.exit:7025// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])7026// CHECK13-NEXT:    ret void7027// CHECK13:       terminate.lpad:7028// CHECK13-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }7029// CHECK13-NEXT:            catch ptr null7030// CHECK13-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 07031// CHECK13-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]7032// CHECK13-NEXT:    unreachable7033//7034//7035// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l577036// CHECK13-SAME: () #[[ATTR2]] {7037// CHECK13-NEXT:  entry:7038// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined)7039// CHECK13-NEXT:    ret void7040//7041//7042// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined7043// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {7044// CHECK13-NEXT:  entry:7045// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87046// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87047// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47048// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 47049// CHECK13-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 47050// CHECK13-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 47051// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47052// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47053// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 47054// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87055// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87056// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 47057// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 47058// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47059// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47060// CHECK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87061// CHECK13-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 47062// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7063// CHECK13-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47064// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 997065// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7066// CHECK13:       cond.true:7067// CHECK13-NEXT:    br label [[COND_END:%.*]]7068// CHECK13:       cond.false:7069// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47070// CHECK13-NEXT:    br label [[COND_END]]7071// CHECK13:       cond.end:7072// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]7073// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 47074// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47075// CHECK13-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 47076// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7077// CHECK13:       omp.inner.for.cond:7078// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47079// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47080// CHECK13-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]7081// CHECK13-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7082// CHECK13:       omp.inner.for.body:7083// CHECK13-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 23)7084// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47085// CHECK13-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i647086// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47087// CHECK13-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i647088// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])7089// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7090// CHECK13:       omp.inner.for.inc:7091// CHECK13-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47092// CHECK13-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 47093// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]7094// CHECK13-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 47095// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]7096// CHECK13:       omp.inner.for.end:7097// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7098// CHECK13:       omp.loop.exit:7099// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])7100// CHECK13-NEXT:    ret void7101//7102//7103// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIcLi5EEiv_l57.omp_outlined.omp_outlined7104// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {7105// CHECK13-NEXT:  entry:7106// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87107// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87108// CHECK13-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 87109// CHECK13-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 87110// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47111// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 47112// CHECK13-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 47113// CHECK13-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 47114// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47115// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47116// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 47117// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87118// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87119// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 87120// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 87121// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 47122// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 47123// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 87124// CHECK13-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i327125// CHECK13-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 87126// CHECK13-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i327127// CHECK13-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 47128// CHECK13-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 47129// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47130// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47131// CHECK13-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87132// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 47133// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7134// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47135// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 997136// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7137// CHECK13:       cond.true:7138// CHECK13-NEXT:    br label [[COND_END:%.*]]7139// CHECK13:       cond.false:7140// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47141// CHECK13-NEXT:    br label [[COND_END]]7142// CHECK13:       cond.end:7143// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]7144// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 47145// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 47146// CHECK13-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 47147// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7148// CHECK13:       omp.inner.for.cond:7149// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47150// CHECK13-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47151// CHECK13-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]7152// CHECK13-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7153// CHECK13:       omp.inner.for.body:7154// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47155// CHECK13-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 17156// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]7157// CHECK13-NEXT:    store i32 [[ADD]], ptr [[I]], align 47158// CHECK13-NEXT:    invoke void @_Z3foov()7159// CHECK13-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]7160// CHECK13:       invoke.cont:7161// CHECK13-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]7162// CHECK13:       omp.body.continue:7163// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7164// CHECK13:       omp.inner.for.inc:7165// CHECK13-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47166// CHECK13-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 17167// CHECK13-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 47168// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]7169// CHECK13:       omp.inner.for.end:7170// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7171// CHECK13:       omp.loop.exit:7172// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])7173// CHECK13-NEXT:    ret void7174// CHECK13:       terminate.lpad:7175// CHECK13-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }7176// CHECK13-NEXT:            catch ptr null7177// CHECK13-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 07178// CHECK13-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]7179// CHECK13-NEXT:    unreachable7180//7181//7182// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l527183// CHECK13-SAME: () #[[ATTR2]] {7184// CHECK13-NEXT:  entry:7185// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined)7186// CHECK13-NEXT:    ret void7187//7188//7189// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined7190// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] {7191// CHECK13-NEXT:  entry:7192// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87193// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87194// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47195// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 47196// CHECK13-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 47197// CHECK13-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 47198// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47199// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47200// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 47201// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87202// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87203// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 47204// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 47205// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47206// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47207// CHECK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87208// CHECK13-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 47209// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7210// CHECK13-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47211// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 997212// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7213// CHECK13:       cond.true:7214// CHECK13-NEXT:    br label [[COND_END:%.*]]7215// CHECK13:       cond.false:7216// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47217// CHECK13-NEXT:    br label [[COND_END]]7218// CHECK13:       cond.end:7219// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]7220// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 47221// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47222// CHECK13-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 47223// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7224// CHECK13:       omp.inner.for.cond:7225// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47226// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47227// CHECK13-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]7228// CHECK13-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7229// CHECK13:       omp.inner.for.body:7230// CHECK13-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 1)7231// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47232// CHECK13-NEXT:    [[TMP8:%.*]] = zext i32 [[TMP7]] to i647233// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47234// CHECK13-NEXT:    [[TMP10:%.*]] = zext i32 [[TMP9]] to i647235// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined.omp_outlined, i64 [[TMP8]], i64 [[TMP10]])7236// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7237// CHECK13:       omp.inner.for.inc:7238// CHECK13-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47239// CHECK13-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 47240// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP11]], [[TMP12]]7241// CHECK13-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 47242// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]7243// CHECK13:       omp.inner.for.end:7244// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7245// CHECK13:       omp.loop.exit:7246// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])7247// CHECK13-NEXT:    ret void7248//7249//7250// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l52.omp_outlined.omp_outlined7251// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {7252// CHECK13-NEXT:  entry:7253// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87254// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87255// CHECK13-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 87256// CHECK13-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 87257// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47258// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 47259// CHECK13-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 47260// CHECK13-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 47261// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47262// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47263// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 47264// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87265// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87266// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 87267// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 87268// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 47269// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 47270// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 87271// CHECK13-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i327272// CHECK13-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 87273// CHECK13-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i327274// CHECK13-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 47275// CHECK13-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 47276// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47277// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47278// CHECK13-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87279// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 47280// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7281// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47282// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 997283// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7284// CHECK13:       cond.true:7285// CHECK13-NEXT:    br label [[COND_END:%.*]]7286// CHECK13:       cond.false:7287// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47288// CHECK13-NEXT:    br label [[COND_END]]7289// CHECK13:       cond.end:7290// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]7291// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 47292// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 47293// CHECK13-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 47294// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7295// CHECK13:       omp.inner.for.cond:7296// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47297// CHECK13-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47298// CHECK13-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]7299// CHECK13-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7300// CHECK13:       omp.inner.for.body:7301// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47302// CHECK13-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 17303// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]7304// CHECK13-NEXT:    store i32 [[ADD]], ptr [[I]], align 47305// CHECK13-NEXT:    invoke void @_Z3foov()7306// CHECK13-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]7307// CHECK13:       invoke.cont:7308// CHECK13-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]7309// CHECK13:       omp.body.continue:7310// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7311// CHECK13:       omp.inner.for.inc:7312// CHECK13-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47313// CHECK13-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 17314// CHECK13-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 47315// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]7316// CHECK13:       omp.inner.for.end:7317// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7318// CHECK13:       omp.loop.exit:7319// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])7320// CHECK13-NEXT:    ret void7321// CHECK13:       terminate.lpad:7322// CHECK13-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }7323// CHECK13-NEXT:            catch ptr null7324// CHECK13-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 07325// CHECK13-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]7326// CHECK13-NEXT:    unreachable7327//7328//7329// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l577330// CHECK13-SAME: () #[[ATTR2]] {7331// CHECK13-NEXT:  entry:7332// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 0, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined)7333// CHECK13-NEXT:    ret void7334//7335//7336// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined7337// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {7338// CHECK13-NEXT:  entry:7339// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87340// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87341// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47342// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 47343// CHECK13-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 47344// CHECK13-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 47345// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47346// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47347// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 47348// CHECK13-NEXT:    [[REF_TMP:%.*]] = alloca [[STRUCT_S:%.*]], align 87349// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87350// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87351// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 47352// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_COMB_UB]], align 47353// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47354// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47355// CHECK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87356// CHECK13-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 47357// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7358// CHECK13-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47359// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 997360// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7361// CHECK13:       cond.true:7362// CHECK13-NEXT:    br label [[COND_END:%.*]]7363// CHECK13:       cond.false:7364// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47365// CHECK13-NEXT:    br label [[COND_END]]7366// CHECK13:       cond.end:7367// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ]7368// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 47369// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47370// CHECK13-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_IV]], align 47371// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7372// CHECK13:       omp.inner.for.cond:7373// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47374// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47375// CHECK13-NEXT:    [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]]7376// CHECK13-NEXT:    br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7377// CHECK13:       omp.inner.for.body:7378// CHECK13-NEXT:    invoke void @_ZN1SC1El(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]], i64 noundef 23)7379// CHECK13-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]7380// CHECK13:       invoke.cont:7381// CHECK13-NEXT:    [[CALL:%.*]] = invoke noundef i8 @_ZN1ScvcEv(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]])7382// CHECK13-NEXT:            to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]7383// CHECK13:       invoke.cont2:7384// CHECK13-NEXT:    [[TMP7:%.*]] = sext i8 [[CALL]] to i327385// CHECK13-NEXT:    call void @__kmpc_push_num_threads(ptr @[[GLOB3]], i32 [[TMP1]], i32 [[TMP7]])7386// CHECK13-NEXT:    call void @_ZN1SD1Ev(ptr noundef nonnull align 8 dereferenceable(24) [[REF_TMP]]) #[[ATTR3]]7387// CHECK13-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47388// CHECK13-NEXT:    [[TMP9:%.*]] = zext i32 [[TMP8]] to i647389// CHECK13-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47390// CHECK13-NEXT:    [[TMP11:%.*]] = zext i32 [[TMP10]] to i647391// CHECK13-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 2, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined.omp_outlined, i64 [[TMP9]], i64 [[TMP11]])7392// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7393// CHECK13:       omp.inner.for.inc:7394// CHECK13-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47395// CHECK13-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 47396// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP12]], [[TMP13]]7397// CHECK13-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 47398// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]7399// CHECK13:       omp.inner.for.end:7400// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7401// CHECK13:       omp.loop.exit:7402// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])7403// CHECK13-NEXT:    ret void7404// CHECK13:       terminate.lpad:7405// CHECK13-NEXT:    [[TMP14:%.*]] = landingpad { ptr, i32 }7406// CHECK13-NEXT:            catch ptr null7407// CHECK13-NEXT:    [[TMP15:%.*]] = extractvalue { ptr, i32 } [[TMP14]], 07408// CHECK13-NEXT:    call void @__clang_call_terminate(ptr [[TMP15]]) #[[ATTR7]]7409// CHECK13-NEXT:    unreachable7410//7411//7412// CHECK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainI1SLi1EEiv_l57.omp_outlined.omp_outlined7413// CHECK13-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]]) #[[ATTR2]] personality ptr @__gxx_personality_v0 {7414// CHECK13-NEXT:  entry:7415// CHECK13-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87416// CHECK13-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87417// CHECK13-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 87418// CHECK13-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 87419// CHECK13-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47420// CHECK13-NEXT:    [[TMP:%.*]] = alloca i32, align 47421// CHECK13-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 47422// CHECK13-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 47423// CHECK13-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47424// CHECK13-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47425// CHECK13-NEXT:    [[I:%.*]] = alloca i32, align 47426// CHECK13-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87427// CHECK13-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87428// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 87429// CHECK13-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 87430// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 47431// CHECK13-NEXT:    store i32 99, ptr [[DOTOMP_UB]], align 47432// CHECK13-NEXT:    [[TMP0:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 87433// CHECK13-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP0]] to i327434// CHECK13-NEXT:    [[TMP1:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 87435// CHECK13-NEXT:    [[CONV1:%.*]] = trunc i64 [[TMP1]] to i327436// CHECK13-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 47437// CHECK13-NEXT:    store i32 [[CONV1]], ptr [[DOTOMP_UB]], align 47438// CHECK13-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47439// CHECK13-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47440// CHECK13-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87441// CHECK13-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP2]], align 47442// CHECK13-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP3]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7443// CHECK13-NEXT:    [[TMP4:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47444// CHECK13-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[TMP4]], 997445// CHECK13-NEXT:    br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7446// CHECK13:       cond.true:7447// CHECK13-NEXT:    br label [[COND_END:%.*]]7448// CHECK13:       cond.false:7449// CHECK13-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47450// CHECK13-NEXT:    br label [[COND_END]]7451// CHECK13:       cond.end:7452// CHECK13-NEXT:    [[COND:%.*]] = phi i32 [ 99, [[COND_TRUE]] ], [ [[TMP5]], [[COND_FALSE]] ]7453// CHECK13-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 47454// CHECK13-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_LB]], align 47455// CHECK13-NEXT:    store i32 [[TMP6]], ptr [[DOTOMP_IV]], align 47456// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7457// CHECK13:       omp.inner.for.cond:7458// CHECK13-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47459// CHECK13-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47460// CHECK13-NEXT:    [[CMP2:%.*]] = icmp sle i32 [[TMP7]], [[TMP8]]7461// CHECK13-NEXT:    br i1 [[CMP2]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7462// CHECK13:       omp.inner.for.body:7463// CHECK13-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47464// CHECK13-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP9]], 17465// CHECK13-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]7466// CHECK13-NEXT:    store i32 [[ADD]], ptr [[I]], align 47467// CHECK13-NEXT:    invoke void @_Z3foov()7468// CHECK13-NEXT:            to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]7469// CHECK13:       invoke.cont:7470// CHECK13-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]7471// CHECK13:       omp.body.continue:7472// CHECK13-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7473// CHECK13:       omp.inner.for.inc:7474// CHECK13-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47475// CHECK13-NEXT:    [[ADD3:%.*]] = add nsw i32 [[TMP10]], 17476// CHECK13-NEXT:    store i32 [[ADD3]], ptr [[DOTOMP_IV]], align 47477// CHECK13-NEXT:    br label [[OMP_INNER_FOR_COND]]7478// CHECK13:       omp.inner.for.end:7479// CHECK13-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7480// CHECK13:       omp.loop.exit:7481// CHECK13-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP3]])7482// CHECK13-NEXT:    ret void7483// CHECK13:       terminate.lpad:7484// CHECK13-NEXT:    [[TMP11:%.*]] = landingpad { ptr, i32 }7485// CHECK13-NEXT:            catch ptr null7486// CHECK13-NEXT:    [[TMP12:%.*]] = extractvalue { ptr, i32 } [[TMP11]], 07487// CHECK13-NEXT:    call void @__clang_call_terminate(ptr [[TMP12]]) #[[ATTR7]]7488// CHECK13-NEXT:    unreachable7489//7490//7491// CHECK13-LABEL: define {{[^@]+}}@_ZN1SD2Ev7492// CHECK13-SAME: (ptr noundef nonnull align 8 dereferenceable(24) [[THIS:%.*]]) unnamed_addr #[[ATTR6]] comdat {7493// CHECK13-NEXT:  entry:7494// CHECK13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 87495// CHECK13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 87496// CHECK13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 87497// CHECK13-NEXT:    ret void7498//7499