brintos

brintos / llvm-project-archived public Read only

0
0
Text · 915.1 KiB · e9d524f Raw
13422 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _2// Test host code gen3// RUN: %clang_cc1 -DLAMBDA -verify -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK14// RUN: %clang_cc1 -DLAMBDA -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s5// RUN: %clang_cc1 -DLAMBDA -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK16// RUN: %clang_cc1 -DLAMBDA -verify -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK37// RUN: %clang_cc1 -DLAMBDA -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s8// RUN: %clang_cc1 -DLAMBDA -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK39 10// RUN: %clang_cc1 -DLAMBDA -verify -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"11// RUN: %clang_cc1 -DLAMBDA -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s12// RUN: %clang_cc1 -DLAMBDA -fopenmp-simd -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"13// RUN: %clang_cc1 -DLAMBDA -verify -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"14// RUN: %clang_cc1 -DLAMBDA -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s15// RUN: %clang_cc1 -DLAMBDA -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"16 17// RUN: %clang_cc1  -verify -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK918// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s19// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK920// RUN: %clang_cc1  -verify -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK1121// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s22// RUN: %clang_cc1  -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK1123 24// RUN: %clang_cc1  -verify -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"25// RUN: %clang_cc1  -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s26// RUN: %clang_cc1  -fopenmp-simd -fopenmp-version=45 -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"27// RUN: %clang_cc1  -verify -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"28// RUN: %clang_cc1  -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s29// RUN: %clang_cc1  -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"30// expected-no-diagnostics31#ifndef HEADER32#define HEADER33 34 35template <typename T>36T tmain() {37  T *a, *b, *c;38  int n = 10000;39  int ch = 100;40 41  // no schedule clauses42  #pragma omp target43  #pragma omp teams44  #pragma omp distribute parallel for45  for (int i = 0; i < n; ++i) {46    #pragma omp cancel for47    a[i] = b[i] + c[i];48  }49 50  // dist_schedule: static no chunk51  #pragma omp target52  #pragma omp teams53  #pragma omp distribute parallel for dist_schedule(static)54  for (int i = 0; i < n; ++i) {55    a[i] = b[i] + c[i];56  }57 58  // dist_schedule: static chunk59  #pragma omp target60  #pragma omp teams61  #pragma omp distribute parallel for dist_schedule(static, ch)62  for (int i = 0; i < n; ++i) {63    a[i] = b[i] + c[i];64  }65 66  // schedule: static no chunk67  #pragma omp target68  #pragma omp teams69  #pragma omp distribute parallel for schedule(static)70  for (int i = 0; i < n; ++i) {71    a[i] = b[i] + c[i];72  }73 74  // schedule: static chunk75  #pragma omp target76  #pragma omp teams77  #pragma omp distribute parallel for schedule(static, ch)78  for (int i = 0; i < n; ++i) {79    a[i] = b[i] + c[i];80  }81 82  // schedule: dynamic no chunk83  #pragma omp target84  #pragma omp teams85  #pragma omp distribute parallel for schedule(dynamic)86  for (int i = 0; i < n; ++i) {87    a[i] = b[i] + c[i];88  }89 90  // schedule: dynamic chunk91  #pragma omp target92  #pragma omp teams93  #pragma omp distribute parallel for schedule(dynamic, ch)94  for (int i = 0; i < n; ++i) {95    a[i] = b[i] + c[i];96  }97 98  return T();99}100 101int main() {102  double *a, *b, *c;103  int n = 10000;104  int ch = 100;105 106#ifdef LAMBDA107  [&]() {108 109 110 111 112 113 114 115 116    // no schedule clauses117    #pragma omp target118    #pragma omp teams119 120    #pragma omp distribute parallel for121    for (int i = 0; i < n; ++i) {122      a[i] = b[i] + c[i];123 124 125      // check EUB for distribute126 127      // initialize omp.iv128 129      // check exit condition130 131      // check that PrevLB and PrevUB are passed to the 'for'132      // check that distlb and distub are properly passed to fork_call133 134      // increment by stride (distInc - 'parallel for' executes the whole chunk) and latch135 136 137      // implementation of 'parallel for'138 139 140      // initialize lb and ub to PrevLB and PrevUB141 142      // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used143      // In this case we use EUB144 145      // initialize omp.iv146 147      // check exit condition148 149      // check that PrevLB and PrevUB are passed to the 'for'150 151      // check stride 1 for 'for' in 'distribute parallel for'152 153 154      [&]() {155	a[i] = b[i] + c[i];156      }();157    }158 159    // dist_schedule: static no chunk (same sa default - no dist_schedule)160    #pragma omp target161    #pragma omp teams162 163    #pragma omp distribute parallel for dist_schedule(static)164    for (int i = 0; i < n; ++i) {165      a[i] = b[i] + c[i];166 167 168      // check EUB for distribute169 170      // initialize omp.iv171 172      // check exit condition173 174      // check that PrevLB and PrevUB are passed to the 'for'175      // check that distlb and distub are properly passed to fork_call176 177      // increment by stride (distInc - 'parallel for' executes the whole chunk) and latch178 179 180      // implementation of 'parallel for'181 182 183      // initialize lb and ub to PrevLB and PrevUB184 185      // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used186      // In this case we use EUB187 188      // initialize omp.iv189 190      // check exit condition191 192      // check that PrevLB and PrevUB are passed to the 'for'193 194      // check stride 1 for 'for' in 'distribute parallel for'195 196      [&]() {197	a[i] = b[i] + c[i];198      }();199    }200 201    // dist_schedule: static chunk202    #pragma omp target203    #pragma omp teams204 205    #pragma omp distribute parallel for dist_schedule(static, ch)206    for (int i = 0; i < n; ++i) {207      a[i] = b[i] + c[i];208 209 210      // check EUB for distribute211 212      // initialize omp.iv213 214      // check exit condition215 216      // check that PrevLB and PrevUB are passed to the 'for'217      // check that distlb and distub are properly passed to fork_call218 219      // check DistInc220 221      // Update UB222 223      // Store LB in IV224 225 226      // loop exit227 228      // skip implementation of 'parallel for': using default scheduling and was tested above229      [&]() {230	a[i] = b[i] + c[i];231      }();232    }233 234    // schedule: static no chunk235    #pragma omp target236    #pragma omp teams237 238    #pragma omp distribute parallel for schedule(static)239    for (int i = 0; i < n; ++i) {240      a[i] = b[i] + c[i];241 242      // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case243 244      // 'parallel for' implementation is the same as the case without schedule clase (static no chunk is the default)245 246 247      // initialize lb and ub to PrevLB and PrevUB248 249      // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used250      // In this case we use EUB251 252      // initialize omp.iv253 254      // check exit condition255 256      // check that PrevLB and PrevUB are passed to the 'for'257 258      // check stride 1 for 'for' in 'distribute parallel for'259 260 261      [&]() {262	a[i] = b[i] + c[i];263      }();264    }265 266    // schedule: static chunk267    #pragma omp target268    #pragma omp teams269 270    #pragma omp distribute parallel for schedule(static, ch)271    for (int i = 0; i < n; ++i) {272      a[i] = b[i] + c[i];273      // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case274 275      // 'parallel for' implementation using outer and inner loops and PrevEUB276 277      // initialize lb and ub to PrevLB and PrevUB278 279      // check PrevEUB (using PrevUB instead of NumIt as upper bound)280 281      // initialize omp.iv (IV = LB)282 283      // outer loop: while (IV < UB) {284 285 286 287      // skip body branch288 289      // IV = IV + 1 and inner loop latch290 291      // check NextLB and NextUB292 293 294      [&]() {295	a[i] = b[i] + c[i];296      }();297    }298 299    // schedule: dynamic no chunk300    #pragma omp target301    #pragma omp teams302 303    #pragma omp distribute parallel for schedule(dynamic)304    for (int i = 0; i < n; ++i) {305      a[i] = b[i] + c[i];306      // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case307 308      // 'parallel for' implementation using outer and inner loops and PrevEUB309 310      // initialize lb and ub to PrevLB and PrevUB311 312 313      // initialize omp.iv (IV = LB)314 315 316      // skip body branch317 318      // IV = IV + 1 and inner loop latch319 320      // check NextLB and NextUB321 322 323      [&]() {324	a[i] = b[i] + c[i];325      }();326    }327 328    // schedule: dynamic chunk329    #pragma omp target330    #pragma omp teams331 332    #pragma omp distribute parallel for schedule(dynamic, ch)333    for (int i = 0; i < n; ++i) {334      a[i] = b[i] + c[i];335      // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case336 337      // 'parallel for' implementation using outer and inner loops and PrevEUB338 339      // initialize lb and ub to PrevLB and PrevUB340 341 342      // initialize omp.iv (IV = LB)343 344 345      // skip body branch346 347      // IV = IV + 1 and inner loop latch348 349      // check NextLB and NextUB350 351 352      [&]() {353	a[i] = b[i] + c[i];354      }();355    }356  }();357  return 0;358#else359 360 361 362 363 364 365 366 367 368  // no schedule clauses369  #pragma omp target370  #pragma omp teams371 372  #pragma omp distribute parallel for373  for (int i = 0; i < n; ++i) {374    a[i] = b[i] + c[i];375 376 377    // check EUB for distribute378 379    // initialize omp.iv380 381    // check exit condition382 383    // check that PrevLB and PrevUB are passed to the 'for'384    // check that distlb and distub are properly passed to fork_call385 386    // increment by stride (distInc - 'parallel for' executes the whole chunk) and latch387 388 389    // implementation of 'parallel for'390 391 392    // initialize lb and ub to PrevLB and PrevUB393 394    // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used395    // In this case we use EUB396 397    // initialize omp.iv398 399    // check exit condition400 401    // check that PrevLB and PrevUB are passed to the 'for'402 403    // check stride 1 for 'for' in 'distribute parallel for'404 405  }406 407  // dist_schedule: static no chunk408  #pragma omp target409  #pragma omp teams410 411  #pragma omp distribute parallel for dist_schedule(static)412  for (int i = 0; i < n; ++i) {413    a[i] = b[i] + c[i];414 415 416    // check EUB for distribute417 418    // initialize omp.iv419 420    // check exit condition421 422    // check that PrevLB and PrevUB are passed to the 'for'423    // check that distlb and distub are properly passed to fork_call424 425    // increment by stride (distInc - 'parallel for' executes the whole chunk) and latch426 427 428    // implementation of 'parallel for'429 430 431    // initialize lb and ub to PrevLB and PrevUB432 433    // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used434    // In this case we use EUB435 436    // initialize omp.iv437 438    // check exit condition439 440    // check that PrevLB and PrevUB are passed to the 'for'441 442    // check stride 1 for 'for' in 'distribute parallel for'443 444  }445 446  // dist_schedule: static chunk447  #pragma omp target448  #pragma omp teams449 450  #pragma omp distribute parallel for dist_schedule(static, ch)451  for (int i = 0; i < n; ++i) {452    a[i] = b[i] + c[i];453 454    // unlike the previous tests, in this one we have a outer and inner loop for 'distribute'455 456    // check EUB for distribute457 458    // initialize omp.iv459 460    // check exit condition461 462    // check that PrevLB and PrevUB are passed to the 'for'463    // check that distlb and distub are properly passed to fork_call464 465    // check DistInc466 467    // Update UB468 469    // Store LB in IV470 471 472    // loop exit473 474    // skip implementation of 'parallel for': using default scheduling and was tested above475  }476 477  // schedule: static no chunk478  #pragma omp target479  #pragma omp teams480 481  #pragma omp distribute parallel for schedule(static)482  for (int i = 0; i < n; ++i) {483    a[i] = b[i] + c[i];484 485    // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case486 487    // 'parallel for' implementation is the same as the case without schedule clase (static no chunk is the default)488 489 490    // initialize lb and ub to PrevLB and PrevUB491 492    // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used493    // In this case we use EUB494 495    // initialize omp.iv496 497    // check exit condition498 499    // check that PrevLB and PrevUB are passed to the 'for'500 501    // check stride 1 for 'for' in 'distribute parallel for'502 503  }504 505  // schedule: static chunk506  #pragma omp target507  #pragma omp teams508 509  #pragma omp distribute parallel for schedule(static, ch)510  for (int i = 0; i < n; ++i) {511    a[i] = b[i] + c[i];512    // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case513 514    // 'parallel for' implementation using outer and inner loops and PrevEUB515 516    // initialize lb and ub to PrevLB and PrevUB517 518    // check PrevEUB (using PrevUB instead of NumIt as upper bound)519 520    // initialize omp.iv (IV = LB)521 522    // outer loop: while (IV < UB) {523 524 525 526    // skip body branch527 528    // IV = IV + 1 and inner loop latch529 530    // check NextLB and NextUB531 532 533  }534 535  // schedule: dynamic no chunk536  #pragma omp target537  #pragma omp teams538 539  #pragma omp distribute parallel for schedule(dynamic)540  for (int i = 0; i < n; ++i) {541    a[i] = b[i] + c[i];542    // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case543 544    // 'parallel for' implementation using outer and inner loops and PrevEUB545 546    // initialize lb and ub to PrevLB and PrevUB547 548 549    // initialize omp.iv (IV = LB)550 551 552    // skip body branch553 554    // IV = IV + 1 and inner loop latch555 556    // check NextLB and NextUB557 558 559  }560 561  // schedule: dynamic chunk562  #pragma omp target563  #pragma omp teams564 565  #pragma omp distribute parallel for schedule(dynamic, ch)566  for (int i = 0; i < n; ++i) {567    a[i] = b[i] + c[i];568    // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case569 570    // 'parallel for' implementation using outer and inner loops and PrevEUB571 572    // initialize lb and ub to PrevLB and PrevUB573 574 575    // initialize omp.iv (IV = LB)576 577 578    // skip body branch579 580    // IV = IV + 1 and inner loop latch581 582    // check NextLB and NextUB583 584 585  }586 587  return tmain<int>();588#endif589}590 591// check code592 593 594 595 596 597 598 599 600 601 602 603// check EUB for distribute604 605// initialize omp.iv606 607// check exit condition608 609// check that PrevLB and PrevUB are passed to the 'for'610// check that distlb and distub are properly passed to fork_call611 612// increment by stride (distInc - 'parallel for' executes the whole chunk) and latch613 614 615// implementation of 'parallel for'616 617 618// initialize lb and ub to PrevLB and PrevUB619 620// PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used621// In this case we use EUB622 623// initialize omp.iv624 625// check exit condition626 627// check that PrevLB and PrevUB are passed to the 'for'628 629// check stride 1 for 'for' in 'distribute parallel for'630 631 632 633 634 635// check EUB for distribute636 637// initialize omp.iv638 639// check exit condition640 641// check that PrevLB and PrevUB are passed to the 'for'642// check that distlb and distub are properly passed to fork_call643 644// increment by stride (distInc - 'parallel for' executes the whole chunk) and latch645 646 647// implementation of 'parallel for'648 649 650// initialize lb and ub to PrevLB and PrevUB651 652// PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used653// In this case we use EUB654 655// initialize omp.iv656 657// check exit condition658 659// check that PrevLB and PrevUB are passed to the 'for'660 661// check stride 1 for 'for' in 'distribute parallel for'662 663 664 665 666// unlike the previous tests, in this one we have a outer and inner loop for 'distribute'667 668// check EUB for distribute669 670// initialize omp.iv671 672// check exit condition673 674// check that PrevLB and PrevUB are passed to the 'for'675// check that distlb and distub are properly passed to fork_call676 677// check DistInc678 679// Update UB680 681// Store LB in IV682 683 684// loop exit685 686// skip implementation of 'parallel for': using default scheduling and was tested above687 688 689 690// skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case691 692// 'parallel for' implementation is the same as the case without schedule clase (static no chunk is the default)693 694 695// initialize lb and ub to PrevLB and PrevUB696 697// PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used698// In this case we use EUB699 700// initialize omp.iv701 702// check exit condition703 704// check that PrevLB and PrevUB are passed to the 'for'705 706// check stride 1 for 'for' in 'distribute parallel for'707 708 709 710// skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case711 712// 'parallel for' implementation using outer and inner loops and PrevEUB713 714// initialize lb and ub to PrevLB and PrevUB715 716// check PrevEUB (using PrevUB instead of NumIt as upper bound)717 718// initialize omp.iv (IV = LB)719 720// outer loop: while (IV < UB) {721 722 723 724// skip body branch725 726// IV = IV + 1 and inner loop latch727 728// check NextLB and NextUB729 730 731 732 733// skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case734 735// 'parallel for' implementation using outer and inner loops and PrevEUB736 737// initialize lb and ub to PrevLB and PrevUB738 739 740// initialize omp.iv (IV = LB)741 742 743// skip body branch744 745// IV = IV + 1 and inner loop latch746 747// check NextLB and NextUB748 749 750 751 752// skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case753 754// 'parallel for' implementation using outer and inner loops and PrevEUB755 756// initialize lb and ub to PrevLB and PrevUB757 758 759// initialize omp.iv (IV = LB)760 761 762// skip body branch763 764// IV = IV + 1 and inner loop latch765 766// check NextLB and NextUB767 768 769#endif770// CHECK1-LABEL: define {{[^@]+}}@main771// CHECK1-SAME: () #[[ATTR0:[0-9]+]] {772// CHECK1-NEXT:  entry:773// CHECK1-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4774// CHECK1-NEXT:    [[A:%.*]] = alloca ptr, align 8775// CHECK1-NEXT:    [[B:%.*]] = alloca ptr, align 8776// CHECK1-NEXT:    [[C:%.*]] = alloca ptr, align 8777// CHECK1-NEXT:    [[N:%.*]] = alloca i32, align 4778// CHECK1-NEXT:    [[CH:%.*]] = alloca i32, align 4779// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 8780// CHECK1-NEXT:    store i32 0, ptr [[RETVAL]], align 4781// CHECK1-NEXT:    store i32 10000, ptr [[N]], align 4782// CHECK1-NEXT:    store i32 100, ptr [[CH]], align 4783// CHECK1-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 0784// CHECK1-NEXT:    store ptr [[N]], ptr [[TMP0]], align 8785// CHECK1-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 1786// CHECK1-NEXT:    store ptr [[A]], ptr [[TMP1]], align 8787// CHECK1-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 2788// CHECK1-NEXT:    store ptr [[B]], ptr [[TMP2]], align 8789// CHECK1-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 3790// CHECK1-NEXT:    store ptr [[C]], ptr [[TMP3]], align 8791// CHECK1-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 4792// CHECK1-NEXT:    store ptr [[CH]], ptr [[TMP4]], align 8793// CHECK1-NEXT:    call void @"_ZZ4mainENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(40) [[REF_TMP]])794// CHECK1-NEXT:    ret i32 0795//796//797// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l117798// CHECK1-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2:[0-9]+]] {799// CHECK1-NEXT:  entry:800// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 8801// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8802// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8803// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 8804// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 8805// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8806// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8807// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 8808// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3:[0-9]+]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l117.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])809// CHECK1-NEXT:    ret void810//811//812// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l117.omp_outlined813// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {814// CHECK1-NEXT:  entry:815// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8816// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8817// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 8818// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8819// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8820// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 8821// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4822// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 4823// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4824// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4825// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 4826// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 4827// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 4828// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4829// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4830// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 4831// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8832// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8833// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 8834// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8835// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8836// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 8837// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 8838// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 8839// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 8840// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 8841// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 4842// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 4843// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4844// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 0845// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 1846// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1847// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 4848// CHECK1-NEXT:    store i32 0, ptr [[I]], align 4849// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4850// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]851// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]852// CHECK1:       omp.precond.then:853// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 4854// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4855// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 4856// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4857// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4858// CHECK1-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8859// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 4860// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)861// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4862// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4863// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]864// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]865// CHECK1:       cond.true:866// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4867// CHECK1-NEXT:    br label [[COND_END:%.*]]868// CHECK1:       cond.false:869// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4870// CHECK1-NEXT:    br label [[COND_END]]871// CHECK1:       cond.end:872// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]873// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 4874// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4875// CHECK1-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 4876// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]877// CHECK1:       omp.inner.for.cond:878// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4879// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4880// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]881// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]882// CHECK1:       omp.inner.for.body:883// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4884// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i64885// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4886// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i64887// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l117.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])888// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]889// CHECK1:       omp.inner.for.inc:890// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4891// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4892// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]893// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4894// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]895// CHECK1:       omp.inner.for.end:896// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]897// CHECK1:       omp.loop.exit:898// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8899// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 4900// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])901// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]902// CHECK1:       omp.precond.end:903// CHECK1-NEXT:    ret void904//905//906// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l117.omp_outlined.omp_outlined907// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {908// CHECK1-NEXT:  entry:909// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8910// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8911// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8912// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8913// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 8914// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8915// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8916// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 8917// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4918// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 4919// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4920// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4921// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 4922// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4923// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4924// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4925// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4926// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 4927// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_0:%.*]], align 8928// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8929// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8930// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 8931// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 8932// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 8933// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8934// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8935// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 8936// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 8937// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 8938// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 8939// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 8940// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 4941// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 4942// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4943// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 0944// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 1945// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1946// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 4947// CHECK1-NEXT:    store i32 0, ptr [[I]], align 4948// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4949// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]950// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]951// CHECK1:       omp.precond.then:952// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4953// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4954// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 4955// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 8956// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i32957// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 8958// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i32959// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 4960// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 4961// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4962// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4963// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8964// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 4965// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)966// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4967// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4968// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]969// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]970// CHECK1:       cond.true:971// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4972// CHECK1-NEXT:    br label [[COND_END:%.*]]973// CHECK1:       cond.false:974// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4975// CHECK1-NEXT:    br label [[COND_END]]976// CHECK1:       cond.end:977// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]978// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4979// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4980// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 4981// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]982// CHECK1:       omp.inner.for.cond:983// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4984// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4985// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]986// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]987// CHECK1:       omp.inner.for.body:988// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4989// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 1990// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]991// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4992// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8993// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4994// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i64995// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]996// CHECK1-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 8997// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8998// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4999// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i641000// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]1001// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 81002// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]1003// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 81004// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 41005// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i641006// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]1007// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 81008// CHECK1-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 01009// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 81010// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 11011// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP29]], align 81012// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 21013// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 81014// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 31015// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 81016// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]])1017// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1018// CHECK1:       omp.body.continue:1019// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1020// CHECK1:       omp.inner.for.inc:1021// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41022// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], 11023// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 41024// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]1025// CHECK1:       omp.inner.for.end:1026// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1027// CHECK1:       omp.loop.exit:1028// CHECK1-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81029// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 41030// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])1031// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1032// CHECK1:       omp.precond.end:1033// CHECK1-NEXT:    ret void1034//1035//1036// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l1601037// CHECK1-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {1038// CHECK1-NEXT:  entry:1039// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 81040// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81041// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81042// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81043// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 81044// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81045// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81046// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81047// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l160.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])1048// CHECK1-NEXT:    ret void1049//1050//1051// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l160.omp_outlined1052// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {1053// CHECK1-NEXT:  entry:1054// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81055// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81056// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81057// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81058// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81059// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81060// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41061// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41062// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41063// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41064// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41065// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41066// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41067// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41068// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41069// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 41070// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81071// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81072// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81073// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81074// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81075// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81076// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81077// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81078// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81079// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81080// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41081// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41082// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41083// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01084// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11085// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11086// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41087// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41088// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41089// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1090// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1091// CHECK1:       omp.precond.then:1092// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41093// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41094// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 41095// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41096// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41097// CHECK1-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81098// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 41099// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1100// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41101// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41102// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]1103// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1104// CHECK1:       cond.true:1105// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41106// CHECK1-NEXT:    br label [[COND_END:%.*]]1107// CHECK1:       cond.false:1108// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41109// CHECK1-NEXT:    br label [[COND_END]]1110// CHECK1:       cond.end:1111// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]1112// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41113// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41114// CHECK1-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 41115// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1116// CHECK1:       omp.inner.for.cond:1117// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41118// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41119// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]1120// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1121// CHECK1:       omp.inner.for.body:1122// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41123// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i641124// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41125// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i641126// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l160.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])1127// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1128// CHECK1:       omp.inner.for.inc:1129// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41130// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41131// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]1132// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41133// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]1134// CHECK1:       omp.inner.for.end:1135// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1136// CHECK1:       omp.loop.exit:1137// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81138// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 41139// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])1140// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1141// CHECK1:       omp.precond.end:1142// CHECK1-NEXT:    ret void1143//1144//1145// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l160.omp_outlined.omp_outlined1146// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {1147// CHECK1-NEXT:  entry:1148// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81149// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81150// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81151// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81152// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81153// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81154// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81155// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81156// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41157// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41158// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41159// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41160// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41161// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41162// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41163// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41164// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41165// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 41166// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_1:%.*]], align 81167// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81168// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81169// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81170// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81171// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81172// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81173// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81174// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81175// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81176// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81177// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81178// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81179// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41180// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41181// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41182// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01183// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11184// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11185// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41186// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41187// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41188// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1189// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1190// CHECK1:       omp.precond.then:1191// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41192// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41193// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 41194// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81195// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i321196// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81197// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i321198// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41199// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 41200// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41201// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41202// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81203// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41204// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1205// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41206// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41207// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1208// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1209// CHECK1:       cond.true:1210// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41211// CHECK1-NEXT:    br label [[COND_END:%.*]]1212// CHECK1:       cond.false:1213// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41214// CHECK1-NEXT:    br label [[COND_END]]1215// CHECK1:       cond.end:1216// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1217// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41218// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41219// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41220// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1221// CHECK1:       omp.inner.for.cond:1222// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41223// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41224// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]1225// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1226// CHECK1:       omp.inner.for.body:1227// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41228// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 11229// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1230// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 41231// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 81232// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 41233// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i641234// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]1235// CHECK1-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 81236// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 81237// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 41238// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i641239// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]1240// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 81241// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]1242// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 81243// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 41244// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i641245// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]1246// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 81247// CHECK1-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 01248// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 81249// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 11250// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP29]], align 81251// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 21252// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 81253// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 31254// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 81255// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE0_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]])1256// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1257// CHECK1:       omp.body.continue:1258// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1259// CHECK1:       omp.inner.for.inc:1260// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41261// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], 11262// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 41263// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]1264// CHECK1:       omp.inner.for.end:1265// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1266// CHECK1:       omp.loop.exit:1267// CHECK1-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81268// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 41269// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])1270// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1271// CHECK1:       omp.precond.end:1272// CHECK1-NEXT:    ret void1273//1274//1275// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2021276// CHECK1-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {1277// CHECK1-NEXT:  entry:1278// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 81279// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 81280// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81281// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81282// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81283// CHECK1-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 81284// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 81285// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81286// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81287// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81288// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l202.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])1289// CHECK1-NEXT:    ret void1290//1291//1292// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l202.omp_outlined1293// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {1294// CHECK1-NEXT:  entry:1295// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81296// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81297// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 81298// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81299// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81300// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81301// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81302// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41303// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41304// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41305// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41306// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41307// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41308// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41309// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41310// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41311// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 41312// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81313// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81314// CHECK1-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 81315// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81316// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81317// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81318// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81319// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 81320// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 81321// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 81322// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 81323// CHECK1-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 81324// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 41325// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 41326// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41327// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 01328// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11329// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11330// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41331// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41332// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41333// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]1334// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1335// CHECK1:       omp.precond.then:1336// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41337// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41338// CHECK1-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 41339// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41340// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41341// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 41342// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81343// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41344// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 91, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP9]])1345// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41346// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41347// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1348// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1349// CHECK1:       cond.true:1350// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41351// CHECK1-NEXT:    br label [[COND_END:%.*]]1352// CHECK1:       cond.false:1353// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41354// CHECK1-NEXT:    br label [[COND_END]]1355// CHECK1:       cond.end:1356// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1357// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41358// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41359// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41360// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1361// CHECK1:       omp.inner.for.cond:1362// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41363// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41364// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 11365// CHECK1-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]1366// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1367// CHECK1:       omp.inner.for.body:1368// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41369// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i641370// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41371// CHECK1-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i641372// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l202.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]])1373// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1374// CHECK1:       omp.inner.for.inc:1375// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41376// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41377// CHECK1-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]1378// CHECK1-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 41379// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41380// CHECK1-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41381// CHECK1-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]1382// CHECK1-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 41383// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41384// CHECK1-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41385// CHECK1-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP27]], [[TMP28]]1386// CHECK1-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 41387// CHECK1-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41388// CHECK1-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41389// CHECK1-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP29]], [[TMP30]]1390// CHECK1-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]1391// CHECK1:       cond.true10:1392// CHECK1-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41393// CHECK1-NEXT:    br label [[COND_END12:%.*]]1394// CHECK1:       cond.false11:1395// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41396// CHECK1-NEXT:    br label [[COND_END12]]1397// CHECK1:       cond.end12:1398// CHECK1-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP31]], [[COND_TRUE10]] ], [ [[TMP32]], [[COND_FALSE11]] ]1399// CHECK1-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 41400// CHECK1-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41401// CHECK1-NEXT:    store i32 [[TMP33]], ptr [[DOTOMP_IV]], align 41402// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]1403// CHECK1:       omp.inner.for.end:1404// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1405// CHECK1:       omp.loop.exit:1406// CHECK1-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81407// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 41408// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP35]])1409// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1410// CHECK1:       omp.precond.end:1411// CHECK1-NEXT:    ret void1412//1413//1414// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l202.omp_outlined.omp_outlined1415// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {1416// CHECK1-NEXT:  entry:1417// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81418// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81419// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81420// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81421// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81422// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81423// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81424// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81425// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41426// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41427// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41428// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41429// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41430// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41431// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41432// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41433// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41434// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 41435// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_2:%.*]], align 81436// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81437// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81438// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81439// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81440// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81441// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81442// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81443// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81444// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81445// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81446// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81447// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81448// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41449// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41450// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41451// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01452// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11453// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11454// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41455// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41456// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41457// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1458// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1459// CHECK1:       omp.precond.then:1460// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41461// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41462// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 41463// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81464// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i321465// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81466// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i321467// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41468// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 41469// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41470// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41471// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81472// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41473// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1474// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41475// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41476// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1477// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1478// CHECK1:       cond.true:1479// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41480// CHECK1-NEXT:    br label [[COND_END:%.*]]1481// CHECK1:       cond.false:1482// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41483// CHECK1-NEXT:    br label [[COND_END]]1484// CHECK1:       cond.end:1485// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1486// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41487// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41488// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41489// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1490// CHECK1:       omp.inner.for.cond:1491// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41492// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41493// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]1494// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1495// CHECK1:       omp.inner.for.body:1496// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41497// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 11498// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1499// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 41500// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 81501// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 41502// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i641503// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]1504// CHECK1-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 81505// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 81506// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 41507// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i641508// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]1509// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 81510// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]1511// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 81512// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 41513// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i641514// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]1515// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 81516// CHECK1-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 01517// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 81518// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 11519// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP29]], align 81520// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 21521// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 81522// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 31523// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 81524// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE1_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]])1525// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1526// CHECK1:       omp.body.continue:1527// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1528// CHECK1:       omp.inner.for.inc:1529// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41530// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], 11531// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 41532// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]1533// CHECK1:       omp.inner.for.end:1534// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1535// CHECK1:       omp.loop.exit:1536// CHECK1-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81537// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 41538// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])1539// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1540// CHECK1:       omp.precond.end:1541// CHECK1-NEXT:    ret void1542//1543//1544// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2351545// CHECK1-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {1546// CHECK1-NEXT:  entry:1547// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 81548// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81549// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81550// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81551// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 81552// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81553// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81554// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81555// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l235.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])1556// CHECK1-NEXT:    ret void1557//1558//1559// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l235.omp_outlined1560// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {1561// CHECK1-NEXT:  entry:1562// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81563// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81564// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81565// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81566// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81567// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81568// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41569// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41570// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41571// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41572// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41573// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41574// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41575// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41576// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41577// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 41578// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81579// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81580// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81581// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81582// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81583// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81584// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81585// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81586// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81587// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81588// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41589// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41590// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41591// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01592// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11593// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11594// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41595// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41596// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41597// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1598// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1599// CHECK1:       omp.precond.then:1600// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41601// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41602// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 41603// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41604// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41605// CHECK1-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81606// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 41607// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1608// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41609// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41610// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]1611// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1612// CHECK1:       cond.true:1613// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41614// CHECK1-NEXT:    br label [[COND_END:%.*]]1615// CHECK1:       cond.false:1616// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41617// CHECK1-NEXT:    br label [[COND_END]]1618// CHECK1:       cond.end:1619// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]1620// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41621// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41622// CHECK1-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 41623// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1624// CHECK1:       omp.inner.for.cond:1625// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41626// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41627// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]1628// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1629// CHECK1:       omp.inner.for.body:1630// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41631// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i641632// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41633// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i641634// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l235.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])1635// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1636// CHECK1:       omp.inner.for.inc:1637// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41638// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41639// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]1640// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41641// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]1642// CHECK1:       omp.inner.for.end:1643// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1644// CHECK1:       omp.loop.exit:1645// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81646// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 41647// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])1648// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1649// CHECK1:       omp.precond.end:1650// CHECK1-NEXT:    ret void1651//1652//1653// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l235.omp_outlined.omp_outlined1654// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {1655// CHECK1-NEXT:  entry:1656// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81657// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81658// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81659// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81660// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81661// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81662// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81663// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81664// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41665// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41666// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41667// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41668// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41669// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41670// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41671// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41672// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41673// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 41674// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_3:%.*]], align 81675// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81676// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81677// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81678// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81679// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81680// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81681// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81682// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81683// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81684// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81685// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81686// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81687// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41688// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41689// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41690// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01691// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11692// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11693// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41694// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41695// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41696// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1697// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1698// CHECK1:       omp.precond.then:1699// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41700// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41701// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 41702// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81703// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i321704// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81705// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i321706// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41707// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 41708// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41709// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41710// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81711// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41712// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1713// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41714// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41715// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1716// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1717// CHECK1:       cond.true:1718// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41719// CHECK1-NEXT:    br label [[COND_END:%.*]]1720// CHECK1:       cond.false:1721// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41722// CHECK1-NEXT:    br label [[COND_END]]1723// CHECK1:       cond.end:1724// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1725// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41726// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41727// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41728// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1729// CHECK1:       omp.inner.for.cond:1730// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41731// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41732// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]1733// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1734// CHECK1:       omp.inner.for.body:1735// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41736// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 11737// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1738// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 41739// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 81740// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 41741// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i641742// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]1743// CHECK1-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 81744// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 81745// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 41746// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i641747// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]1748// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 81749// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]1750// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 81751// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 41752// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i641753// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]1754// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 81755// CHECK1-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 01756// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 81757// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 11758// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP29]], align 81759// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 21760// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 81761// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 31762// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 81763// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE2_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]])1764// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1765// CHECK1:       omp.body.continue:1766// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1767// CHECK1:       omp.inner.for.inc:1768// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41769// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], 11770// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 41771// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]1772// CHECK1:       omp.inner.for.end:1773// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1774// CHECK1:       omp.loop.exit:1775// CHECK1-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81776// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 41777// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])1778// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1779// CHECK1:       omp.precond.end:1780// CHECK1-NEXT:    ret void1781//1782//1783// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2671784// CHECK1-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {1785// CHECK1-NEXT:  entry:1786// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 81787// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 81788// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81789// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81790// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81791// CHECK1-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 81792// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 81793// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81794// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81795// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81796// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l267.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])1797// CHECK1-NEXT:    ret void1798//1799//1800// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l267.omp_outlined1801// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {1802// CHECK1-NEXT:  entry:1803// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81804// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81805// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 81806// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81807// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81808// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81809// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81810// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41811// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41812// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41813// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41814// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 41815// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41816// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41817// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41818// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41819// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41820// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 41821// CHECK1-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 81822// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81823// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81824// CHECK1-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 81825// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81826// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81827// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81828// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81829// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 81830// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 81831// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 81832// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 81833// CHECK1-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 81834// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 41835// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 41836// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 41837// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 41838// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41839// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 01840// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11841// CHECK1-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 11842// CHECK1-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 41843// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41844// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41845// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]1846// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1847// CHECK1:       omp.precond.then:1848// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41849// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 41850// CHECK1-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 41851// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41852// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41853// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81854// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41855// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)1856// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41857// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 41858// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1859// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1860// CHECK1:       cond.true:1861// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 41862// CHECK1-NEXT:    br label [[COND_END:%.*]]1863// CHECK1:       cond.false:1864// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41865// CHECK1-NEXT:    br label [[COND_END]]1866// CHECK1:       cond.end:1867// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1868// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41869// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41870// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41871// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1872// CHECK1:       omp.inner.for.cond:1873// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41874// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41875// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]1876// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1877// CHECK1:       omp.inner.for.body:1878// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41879// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i641880// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41881// CHECK1-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i641882// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41883// CHECK1-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 41884// CHECK1-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 81885// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l267.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]])1886// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1887// CHECK1:       omp.inner.for.inc:1888// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41889// CHECK1-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 41890// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]1891// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 41892// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]1893// CHECK1:       omp.inner.for.end:1894// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1895// CHECK1:       omp.loop.exit:1896// CHECK1-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81897// CHECK1-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 41898// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])1899// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1900// CHECK1:       omp.precond.end:1901// CHECK1-NEXT:    ret void1902//1903//1904// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l267.omp_outlined.omp_outlined1905// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]], i64 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR2]] {1906// CHECK1-NEXT:  entry:1907// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81908// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81909// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81910// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81911// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81912// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81913// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81914// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81915// CHECK1-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 81916// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41917// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41918// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41919// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 41920// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41921// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41922// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41923// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41924// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41925// CHECK1-NEXT:    [[I5:%.*]] = alloca i32, align 41926// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_4:%.*]], align 81927// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81928// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81929// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81930// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81931// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81932// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81933// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81934// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81935// CHECK1-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 81936// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81937// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81938// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81939// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81940// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41941// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 41942// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41943// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01944// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11945// CHECK1-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 11946// CHECK1-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 41947// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41948// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41949// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1950// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1951// CHECK1:       omp.precond.then:1952// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41953// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 41954// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 41955// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81956// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i321957// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81958// CHECK1-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i321959// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41960// CHECK1-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 41961// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41962// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41963// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 41964// CHECK1-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81965// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 41966// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP12]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP10]])1967// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]1968// CHECK1:       omp.dispatch.cond:1969// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41970// CHECK1-NEXT:    [[TMP14:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81971// CHECK1-NEXT:    [[CONV6:%.*]] = trunc i64 [[TMP14]] to i321972// CHECK1-NEXT:    [[CMP7:%.*]] = icmp sgt i32 [[TMP13]], [[CONV6]]1973// CHECK1-NEXT:    br i1 [[CMP7]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1974// CHECK1:       cond.true:1975// CHECK1-NEXT:    [[TMP15:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81976// CHECK1-NEXT:    [[CONV8:%.*]] = trunc i64 [[TMP15]] to i321977// CHECK1-NEXT:    br label [[COND_END:%.*]]1978// CHECK1:       cond.false:1979// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41980// CHECK1-NEXT:    br label [[COND_END]]1981// CHECK1:       cond.end:1982// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[CONV8]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]1983// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41984// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41985// CHECK1-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 41986// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41987// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41988// CHECK1-NEXT:    [[CMP9:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]1989// CHECK1-NEXT:    br i1 [[CMP9]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]1990// CHECK1:       omp.dispatch.body:1991// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1992// CHECK1:       omp.inner.for.cond:1993// CHECK1-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41994// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41995// CHECK1-NEXT:    [[CMP10:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]1996// CHECK1-NEXT:    br i1 [[CMP10]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1997// CHECK1:       omp.inner.for.body:1998// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 41999// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 12000// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2001// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I5]], align 42002// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 82003// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I5]], align 42004// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP24]] to i642005// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM]]2006// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX]], align 82007// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 82008// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I5]], align 42009// CHECK1-NEXT:    [[IDXPROM11:%.*]] = sext i32 [[TMP27]] to i642010// CHECK1-NEXT:    [[ARRAYIDX12:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM11]]2011// CHECK1-NEXT:    [[TMP28:%.*]] = load double, ptr [[ARRAYIDX12]], align 82012// CHECK1-NEXT:    [[ADD13:%.*]] = fadd double [[TMP25]], [[TMP28]]2013// CHECK1-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 82014// CHECK1-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I5]], align 42015// CHECK1-NEXT:    [[IDXPROM14:%.*]] = sext i32 [[TMP30]] to i642016// CHECK1-NEXT:    [[ARRAYIDX15:%.*]] = getelementptr inbounds double, ptr [[TMP29]], i64 [[IDXPROM14]]2017// CHECK1-NEXT:    store double [[ADD13]], ptr [[ARRAYIDX15]], align 82018// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 02019// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP31]], align 82020// CHECK1-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 12021// CHECK1-NEXT:    store ptr [[I5]], ptr [[TMP32]], align 82022// CHECK1-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 22023// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP33]], align 82024// CHECK1-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 32025// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP34]], align 82026// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE3_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]])2027// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2028// CHECK1:       omp.body.continue:2029// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2030// CHECK1:       omp.inner.for.inc:2031// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42032// CHECK1-NEXT:    [[ADD16:%.*]] = add nsw i32 [[TMP35]], 12033// CHECK1-NEXT:    store i32 [[ADD16]], ptr [[DOTOMP_IV]], align 42034// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]2035// CHECK1:       omp.inner.for.end:2036// CHECK1-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]2037// CHECK1:       omp.dispatch.inc:2038// CHECK1-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42039// CHECK1-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42040// CHECK1-NEXT:    [[ADD17:%.*]] = add nsw i32 [[TMP36]], [[TMP37]]2041// CHECK1-NEXT:    store i32 [[ADD17]], ptr [[DOTOMP_LB]], align 42042// CHECK1-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42043// CHECK1-NEXT:    [[TMP39:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42044// CHECK1-NEXT:    [[ADD18:%.*]] = add nsw i32 [[TMP38]], [[TMP39]]2045// CHECK1-NEXT:    store i32 [[ADD18]], ptr [[DOTOMP_UB]], align 42046// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND]]2047// CHECK1:       omp.dispatch.end:2048// CHECK1-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82049// CHECK1-NEXT:    [[TMP41:%.*]] = load i32, ptr [[TMP40]], align 42050// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP41]])2051// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2052// CHECK1:       omp.precond.end:2053// CHECK1-NEXT:    ret void2054//2055//2056// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l3002057// CHECK1-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {2058// CHECK1-NEXT:  entry:2059// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 82060// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82061// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82062// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82063// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 82064// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82065// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82066// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82067// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l300.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])2068// CHECK1-NEXT:    ret void2069//2070//2071// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l300.omp_outlined2072// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {2073// CHECK1-NEXT:  entry:2074// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82075// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82076// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82077// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82078// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82079// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82080// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42081// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42082// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42083// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42084// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42085// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42086// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42087// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42088// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42089// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 42090// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82091// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82092// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82093// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82094// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82095// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82096// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 82097// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 82098// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 82099// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 82100// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42101// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42102// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42103// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02104// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12105// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12106// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42107// CHECK1-NEXT:    store i32 0, ptr [[I]], align 42108// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42109// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2110// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2111// CHECK1:       omp.precond.then:2112// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42113// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42114// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 42115// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42116// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42117// CHECK1-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82118// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 42119// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2120// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42121// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42122// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]2123// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2124// CHECK1:       cond.true:2125// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42126// CHECK1-NEXT:    br label [[COND_END:%.*]]2127// CHECK1:       cond.false:2128// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42129// CHECK1-NEXT:    br label [[COND_END]]2130// CHECK1:       cond.end:2131// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]2132// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42133// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42134// CHECK1-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 42135// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2136// CHECK1:       omp.inner.for.cond:2137// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42138// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42139// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]2140// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2141// CHECK1:       omp.inner.for.body:2142// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42143// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i642144// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42145// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i642146// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l300.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])2147// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2148// CHECK1:       omp.inner.for.inc:2149// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42150// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42151// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]2152// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42153// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]2154// CHECK1:       omp.inner.for.end:2155// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2156// CHECK1:       omp.loop.exit:2157// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82158// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 42159// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])2160// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2161// CHECK1:       omp.precond.end:2162// CHECK1-NEXT:    ret void2163//2164//2165// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l300.omp_outlined.omp_outlined2166// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {2167// CHECK1-NEXT:  entry:2168// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82169// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82170// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82171// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82172// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82173// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82174// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82175// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82176// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42177// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42178// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42179// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42180// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42181// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42182// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42183// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42184// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42185// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 42186// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_5:%.*]], align 82187// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82188// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82189// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82190// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82191// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82192// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82193// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82194// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82195// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 82196// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 82197// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 82198// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 82199// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42200// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42201// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42202// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02203// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12204// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12205// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42206// CHECK1-NEXT:    store i32 0, ptr [[I]], align 42207// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42208// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2209// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2210// CHECK1:       omp.precond.then:2211// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42212// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42213// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 42214// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82215// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i322216// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82217// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i322218// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42219// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 42220// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42221// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42222// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42223// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42224// CHECK1-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82225// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 42226// CHECK1-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)2227// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]2228// CHECK1:       omp.dispatch.cond:2229// CHECK1-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82230// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 42231// CHECK1-NEXT:    [[TMP16:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP15]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])2232// CHECK1-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 02233// CHECK1-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]2234// CHECK1:       omp.dispatch.body:2235// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42236// CHECK1-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 42237// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2238// CHECK1:       omp.inner.for.cond:2239// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP12:![0-9]+]]2240// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP12]]2241// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]2242// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2243// CHECK1:       omp.inner.for.body:2244// CHECK1-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP12]]2245// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 12246// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2247// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP12]]2248// CHECK1-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP12]]2249// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP12]]2250// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP22]] to i642251// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP21]], i64 [[IDXPROM]]2252// CHECK1-NEXT:    [[TMP23:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP12]]2253// CHECK1-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP12]]2254// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP12]]2255// CHECK1-NEXT:    [[IDXPROM6:%.*]] = sext i32 [[TMP25]] to i642256// CHECK1-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds double, ptr [[TMP24]], i64 [[IDXPROM6]]2257// CHECK1-NEXT:    [[TMP26:%.*]] = load double, ptr [[ARRAYIDX7]], align 8, !llvm.access.group [[ACC_GRP12]]2258// CHECK1-NEXT:    [[ADD8:%.*]] = fadd double [[TMP23]], [[TMP26]]2259// CHECK1-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP12]]2260// CHECK1-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP12]]2261// CHECK1-NEXT:    [[IDXPROM9:%.*]] = sext i32 [[TMP28]] to i642262// CHECK1-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds double, ptr [[TMP27]], i64 [[IDXPROM9]]2263// CHECK1-NEXT:    store double [[ADD8]], ptr [[ARRAYIDX10]], align 8, !llvm.access.group [[ACC_GRP12]]2264// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 02265// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP29]], align 8, !llvm.access.group [[ACC_GRP12]]2266// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 12267// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP30]], align 8, !llvm.access.group [[ACC_GRP12]]2268// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 22269// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP31]], align 8, !llvm.access.group [[ACC_GRP12]]2270// CHECK1-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 32271// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP32]], align 8, !llvm.access.group [[ACC_GRP12]]2272// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE4_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]]), !llvm.access.group [[ACC_GRP12]]2273// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2274// CHECK1:       omp.body.continue:2275// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2276// CHECK1:       omp.inner.for.inc:2277// CHECK1-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP12]]2278// CHECK1-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP33]], 12279// CHECK1-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP12]]2280// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP13:![0-9]+]]2281// CHECK1:       omp.inner.for.end:2282// CHECK1-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]2283// CHECK1:       omp.dispatch.inc:2284// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND]]2285// CHECK1:       omp.dispatch.end:2286// CHECK1-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82287// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 42288// CHECK1-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP35]])2289// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2290// CHECK1:       omp.precond.end:2291// CHECK1-NEXT:    ret void2292//2293//2294// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l3292295// CHECK1-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {2296// CHECK1-NEXT:  entry:2297// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 82298// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 82299// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82300// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82301// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82302// CHECK1-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 82303// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 82304// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82305// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82306// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82307// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l329.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])2308// CHECK1-NEXT:    ret void2309//2310//2311// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l329.omp_outlined2312// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR2]] {2313// CHECK1-NEXT:  entry:2314// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82315// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82316// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 82317// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82318// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82319// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82320// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82321// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42322// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42323// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42324// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42325// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 42326// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42327// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42328// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42329// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42330// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42331// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 42332// CHECK1-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 82333// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82334// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82335// CHECK1-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 82336// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82337// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82338// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82339// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82340// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 82341// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 82342// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 82343// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 82344// CHECK1-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 82345// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 42346// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 42347// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 42348// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 42349// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42350// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 02351// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12352// CHECK1-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 12353// CHECK1-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 42354// CHECK1-NEXT:    store i32 0, ptr [[I]], align 42355// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42356// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]2357// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2358// CHECK1:       omp.precond.then:2359// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42360// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42361// CHECK1-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 42362// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42363// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42364// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82365// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 42366// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2367// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42368// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42369// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]2370// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2371// CHECK1:       cond.true:2372// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42373// CHECK1-NEXT:    br label [[COND_END:%.*]]2374// CHECK1:       cond.false:2375// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42376// CHECK1-NEXT:    br label [[COND_END]]2377// CHECK1:       cond.end:2378// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]2379// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42380// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42381// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 42382// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2383// CHECK1:       omp.inner.for.cond:2384// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42385// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42386// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]2387// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2388// CHECK1:       omp.inner.for.body:2389// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42390// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i642391// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42392// CHECK1-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i642393// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42394// CHECK1-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 42395// CHECK1-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 82396// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l329.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]])2397// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2398// CHECK1:       omp.inner.for.inc:2399// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42400// CHECK1-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42401// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]2402// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42403// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]2404// CHECK1:       omp.inner.for.end:2405// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2406// CHECK1:       omp.loop.exit:2407// CHECK1-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82408// CHECK1-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 42409// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])2410// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2411// CHECK1:       omp.precond.end:2412// CHECK1-NEXT:    ret void2413//2414//2415// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l329.omp_outlined.omp_outlined2416// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]], i64 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR2]] {2417// CHECK1-NEXT:  entry:2418// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82419// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82420// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82421// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82422// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82423// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82424// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82425// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82426// CHECK1-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 82427// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42428// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42429// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42430// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 42431// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42432// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42433// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42434// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42435// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42436// CHECK1-NEXT:    [[I5:%.*]] = alloca i32, align 42437// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_6:%.*]], align 82438// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82439// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82440// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82441// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82442// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82443// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82444// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82445// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82446// CHECK1-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 82447// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 82448// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 82449// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 82450// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 82451// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42452// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 42453// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42454// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02455// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12456// CHECK1-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 12457// CHECK1-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 42458// CHECK1-NEXT:    store i32 0, ptr [[I]], align 42459// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42460// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2461// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2462// CHECK1:       omp.precond.then:2463// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42464// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42465// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 42466// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82467// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i322468// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82469// CHECK1-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i322470// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42471// CHECK1-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 42472// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42473// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42474// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 42475// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42476// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42477// CHECK1-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82478// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 42479// CHECK1-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])2480// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]2481// CHECK1:       omp.dispatch.cond:2482// CHECK1-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82483// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 42484// CHECK1-NEXT:    [[TMP17:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP16]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])2485// CHECK1-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 02486// CHECK1-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]2487// CHECK1:       omp.dispatch.body:2488// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42489// CHECK1-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 42490// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2491// CHECK1:       omp.inner.for.cond:2492// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP15:![0-9]+]]2493// CHECK1-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP15]]2494// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]2495// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2496// CHECK1:       omp.inner.for.body:2497// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP15]]2498// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 12499// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2500// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP15]]2501// CHECK1-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP15]]2502// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP15]]2503// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP23]] to i642504// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP22]], i64 [[IDXPROM]]2505// CHECK1-NEXT:    [[TMP24:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP15]]2506// CHECK1-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP15]]2507// CHECK1-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP15]]2508// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP26]] to i642509// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP25]], i64 [[IDXPROM7]]2510// CHECK1-NEXT:    [[TMP27:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP15]]2511// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP24]], [[TMP27]]2512// CHECK1-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP15]]2513// CHECK1-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP15]]2514// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP29]] to i642515// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP28]], i64 [[IDXPROM10]]2516// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP15]]2517// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 02518// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP30]], align 8, !llvm.access.group [[ACC_GRP15]]2519// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 12520// CHECK1-NEXT:    store ptr [[I5]], ptr [[TMP31]], align 8, !llvm.access.group [[ACC_GRP15]]2521// CHECK1-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 22522// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP32]], align 8, !llvm.access.group [[ACC_GRP15]]2523// CHECK1-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 32524// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP33]], align 8, !llvm.access.group [[ACC_GRP15]]2525// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE5_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]]), !llvm.access.group [[ACC_GRP15]]2526// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2527// CHECK1:       omp.body.continue:2528// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2529// CHECK1:       omp.inner.for.inc:2530// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP15]]2531// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP34]], 12532// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP15]]2533// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP16:![0-9]+]]2534// CHECK1:       omp.inner.for.end:2535// CHECK1-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]2536// CHECK1:       omp.dispatch.inc:2537// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND]]2538// CHECK1:       omp.dispatch.end:2539// CHECK1-NEXT:    [[TMP35:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82540// CHECK1-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 42541// CHECK1-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP36]])2542// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2543// CHECK1:       omp.precond.end:2544// CHECK1-NEXT:    ret void2545//2546//2547// CHECK3-LABEL: define {{[^@]+}}@main2548// CHECK3-SAME: () #[[ATTR0:[0-9]+]] {2549// CHECK3-NEXT:  entry:2550// CHECK3-NEXT:    [[RETVAL:%.*]] = alloca i32, align 42551// CHECK3-NEXT:    [[A:%.*]] = alloca ptr, align 42552// CHECK3-NEXT:    [[B:%.*]] = alloca ptr, align 42553// CHECK3-NEXT:    [[C:%.*]] = alloca ptr, align 42554// CHECK3-NEXT:    [[N:%.*]] = alloca i32, align 42555// CHECK3-NEXT:    [[CH:%.*]] = alloca i32, align 42556// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 42557// CHECK3-NEXT:    store i32 0, ptr [[RETVAL]], align 42558// CHECK3-NEXT:    store i32 10000, ptr [[N]], align 42559// CHECK3-NEXT:    store i32 100, ptr [[CH]], align 42560// CHECK3-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 02561// CHECK3-NEXT:    store ptr [[N]], ptr [[TMP0]], align 42562// CHECK3-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 12563// CHECK3-NEXT:    store ptr [[A]], ptr [[TMP1]], align 42564// CHECK3-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 22565// CHECK3-NEXT:    store ptr [[B]], ptr [[TMP2]], align 42566// CHECK3-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 32567// CHECK3-NEXT:    store ptr [[C]], ptr [[TMP3]], align 42568// CHECK3-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 42569// CHECK3-NEXT:    store ptr [[CH]], ptr [[TMP4]], align 42570// CHECK3-NEXT:    call void @"_ZZ4mainENK3$_0clEv"(ptr noundef nonnull align 4 dereferenceable(20) [[REF_TMP]])2571// CHECK3-NEXT:    ret i32 02572//2573//2574// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l1172575// CHECK3-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2:[0-9]+]] {2576// CHECK3-NEXT:  entry:2577// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 42578// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 42579// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 42580// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 42581// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 42582// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 42583// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 42584// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 42585// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3:[0-9]+]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l117.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])2586// CHECK3-NEXT:    ret void2587//2588//2589// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l117.omp_outlined2590// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {2591// CHECK3-NEXT:  entry:2592// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42593// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42594// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 42595// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 42596// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 42597// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 42598// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42599// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 42600// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42601// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42602// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 42603// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42604// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42605// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42606// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42607// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 42608// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42609// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42610// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 42611// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 42612// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 42613// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 42614// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 42615// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 42616// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 42617// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 42618// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42619// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42620// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42621// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02622// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12623// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12624// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42625// CHECK3-NEXT:    store i32 0, ptr [[I]], align 42626// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42627// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2628// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2629// CHECK3:       omp.precond.then:2630// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42631// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42632// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 42633// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42634// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42635// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42636// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 42637// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2638// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42639// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42640// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]2641// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2642// CHECK3:       cond.true:2643// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42644// CHECK3-NEXT:    br label [[COND_END:%.*]]2645// CHECK3:       cond.false:2646// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42647// CHECK3-NEXT:    br label [[COND_END]]2648// CHECK3:       cond.end:2649// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]2650// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42651// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42652// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 42653// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2654// CHECK3:       omp.inner.for.cond:2655// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42656// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42657// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]2658// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2659// CHECK3:       omp.inner.for.body:2660// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42661// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42662// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l117.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])2663// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2664// CHECK3:       omp.inner.for.inc:2665// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42666// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42667// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]2668// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42669// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]2670// CHECK3:       omp.inner.for.end:2671// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2672// CHECK3:       omp.loop.exit:2673// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42674// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 42675// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])2676// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]2677// CHECK3:       omp.precond.end:2678// CHECK3-NEXT:    ret void2679//2680//2681// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l117.omp_outlined.omp_outlined2682// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {2683// CHECK3-NEXT:  entry:2684// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42685// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42686// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 42687// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 42688// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 42689// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 42690// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 42691// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 42692// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42693// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 42694// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42695// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42696// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 42697// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42698// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42699// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42700// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42701// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 42702// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_0:%.*]], align 42703// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42704// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42705// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 42706// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 42707// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 42708// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 42709// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 42710// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 42711// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 42712// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 42713// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 42714// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 42715// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42716// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42717// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42718// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02719// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12720// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12721// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42722// CHECK3-NEXT:    store i32 0, ptr [[I]], align 42723// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42724// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2725// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2726// CHECK3:       omp.precond.then:2727// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42728// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42729// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 42730// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 42731// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 42732// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 42733// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 42734// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42735// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42736// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42737// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 42738// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2739// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42740// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42741// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]2742// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2743// CHECK3:       cond.true:2744// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42745// CHECK3-NEXT:    br label [[COND_END:%.*]]2746// CHECK3:       cond.false:2747// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42748// CHECK3-NEXT:    br label [[COND_END]]2749// CHECK3:       cond.end:2750// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]2751// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42752// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42753// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 42754// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2755// CHECK3:       omp.inner.for.cond:2756// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42757// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42758// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]2759// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2760// CHECK3:       omp.inner.for.body:2761// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42762// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 12763// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2764// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 42765// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 42766// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 42767// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]2768// CHECK3-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 42769// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 42770// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 42771// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]2772// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 42773// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]2774// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 42775// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 42776// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]2777// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 42778// CHECK3-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 02779// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 42780// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 12781// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP29]], align 42782// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 22783// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 42784// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 32785// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 42786// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]])2787// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2788// CHECK3:       omp.body.continue:2789// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2790// CHECK3:       omp.inner.for.inc:2791// CHECK3-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42792// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP32]], 12793// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 42794// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]2795// CHECK3:       omp.inner.for.end:2796// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2797// CHECK3:       omp.loop.exit:2798// CHECK3-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42799// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 42800// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])2801// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]2802// CHECK3:       omp.precond.end:2803// CHECK3-NEXT:    ret void2804//2805//2806// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l1602807// CHECK3-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {2808// CHECK3-NEXT:  entry:2809// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 42810// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 42811// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 42812// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 42813// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 42814// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 42815// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 42816// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 42817// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l160.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])2818// CHECK3-NEXT:    ret void2819//2820//2821// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l160.omp_outlined2822// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {2823// CHECK3-NEXT:  entry:2824// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42825// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42826// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 42827// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 42828// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 42829// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 42830// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42831// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 42832// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42833// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42834// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 42835// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42836// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42837// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42838// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42839// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 42840// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42841// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42842// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 42843// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 42844// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 42845// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 42846// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 42847// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 42848// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 42849// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 42850// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42851// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42852// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42853// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02854// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12855// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12856// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42857// CHECK3-NEXT:    store i32 0, ptr [[I]], align 42858// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42859// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2860// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2861// CHECK3:       omp.precond.then:2862// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42863// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42864// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 42865// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42866// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42867// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42868// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 42869// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2870// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42871// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42872// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]2873// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2874// CHECK3:       cond.true:2875// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42876// CHECK3-NEXT:    br label [[COND_END:%.*]]2877// CHECK3:       cond.false:2878// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42879// CHECK3-NEXT:    br label [[COND_END]]2880// CHECK3:       cond.end:2881// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]2882// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42883// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42884// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 42885// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2886// CHECK3:       omp.inner.for.cond:2887// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42888// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42889// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]2890// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2891// CHECK3:       omp.inner.for.body:2892// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42893// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42894// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l160.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])2895// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2896// CHECK3:       omp.inner.for.inc:2897// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42898// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42899// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]2900// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 42901// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]2902// CHECK3:       omp.inner.for.end:2903// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2904// CHECK3:       omp.loop.exit:2905// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42906// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 42907// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])2908// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]2909// CHECK3:       omp.precond.end:2910// CHECK3-NEXT:    ret void2911//2912//2913// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l160.omp_outlined.omp_outlined2914// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {2915// CHECK3-NEXT:  entry:2916// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42917// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42918// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 42919// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 42920// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 42921// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 42922// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 42923// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 42924// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42925// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 42926// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42927// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42928// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 42929// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42930// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42931// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42932// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42933// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 42934// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_1:%.*]], align 42935// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42936// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42937// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 42938// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 42939// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 42940// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 42941// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 42942// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 42943// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 42944// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 42945// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 42946// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 42947// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42948// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42949// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42950// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02951// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12952// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12953// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42954// CHECK3-NEXT:    store i32 0, ptr [[I]], align 42955// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42956// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2957// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2958// CHECK3:       omp.precond.then:2959// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42960// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42961// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 42962// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 42963// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 42964// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 42965// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 42966// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42967// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42968// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42969// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 42970// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)2971// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42972// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42973// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]2974// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2975// CHECK3:       cond.true:2976// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42977// CHECK3-NEXT:    br label [[COND_END:%.*]]2978// CHECK3:       cond.false:2979// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42980// CHECK3-NEXT:    br label [[COND_END]]2981// CHECK3:       cond.end:2982// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]2983// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42984// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42985// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 42986// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2987// CHECK3:       omp.inner.for.cond:2988// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42989// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42990// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]2991// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2992// CHECK3:       omp.inner.for.body:2993// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42994// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 12995// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2996// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 42997// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 42998// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 42999// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]3000// CHECK3-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 43001// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 43002// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 43003// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]3004// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 43005// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]3006// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 43007// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 43008// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]3009// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 43010// CHECK3-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 03011// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 43012// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 13013// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP29]], align 43014// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 23015// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 43016// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 33017// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 43018// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE0_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]])3019// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3020// CHECK3:       omp.body.continue:3021// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3022// CHECK3:       omp.inner.for.inc:3023// CHECK3-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43024// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP32]], 13025// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 43026// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]3027// CHECK3:       omp.inner.for.end:3028// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3029// CHECK3:       omp.loop.exit:3030// CHECK3-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43031// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 43032// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])3033// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3034// CHECK3:       omp.precond.end:3035// CHECK3-NEXT:    ret void3036//3037//3038// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2023039// CHECK3-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {3040// CHECK3-NEXT:  entry:3041// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 43042// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 43043// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43044// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43045// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43046// CHECK3-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 43047// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 43048// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43049// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43050// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43051// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l202.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])3052// CHECK3-NEXT:    ret void3053//3054//3055// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l202.omp_outlined3056// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {3057// CHECK3-NEXT:  entry:3058// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43059// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43060// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 43061// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43062// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43063// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43064// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43065// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43066// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43067// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43068// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43069// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43070// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43071// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43072// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43073// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43074// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43075// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43076// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43077// CHECK3-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 43078// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43079// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43080// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43081// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43082// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 43083// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 43084// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 43085// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 43086// CHECK3-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 43087// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 43088// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 43089// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43090// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 03091// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13092// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13093// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43094// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43095// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43096// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]3097// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3098// CHECK3:       omp.precond.then:3099// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43100// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43101// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 43102// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43103// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43104// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 43105// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43106// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 43107// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 91, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP9]])3108// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43109// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43110// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]3111// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3112// CHECK3:       cond.true:3113// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43114// CHECK3-NEXT:    br label [[COND_END:%.*]]3115// CHECK3:       cond.false:3116// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43117// CHECK3-NEXT:    br label [[COND_END]]3118// CHECK3:       cond.end:3119// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]3120// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43121// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43122// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 43123// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3124// CHECK3:       omp.inner.for.cond:3125// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43126// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43127// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 13128// CHECK3-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]3129// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3130// CHECK3:       omp.inner.for.body:3131// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43132// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43133// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l202.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]])3134// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3135// CHECK3:       omp.inner.for.inc:3136// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43137// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43138// CHECK3-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]3139// CHECK3-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 43140// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43141// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43142// CHECK3-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]3143// CHECK3-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 43144// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43145// CHECK3-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43146// CHECK3-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]3147// CHECK3-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 43148// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43149// CHECK3-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43150// CHECK3-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP27]], [[TMP28]]3151// CHECK3-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]3152// CHECK3:       cond.true10:3153// CHECK3-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43154// CHECK3-NEXT:    br label [[COND_END12:%.*]]3155// CHECK3:       cond.false11:3156// CHECK3-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43157// CHECK3-NEXT:    br label [[COND_END12]]3158// CHECK3:       cond.end12:3159// CHECK3-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP29]], [[COND_TRUE10]] ], [ [[TMP30]], [[COND_FALSE11]] ]3160// CHECK3-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 43161// CHECK3-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43162// CHECK3-NEXT:    store i32 [[TMP31]], ptr [[DOTOMP_IV]], align 43163// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]3164// CHECK3:       omp.inner.for.end:3165// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3166// CHECK3:       omp.loop.exit:3167// CHECK3-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43168// CHECK3-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 43169// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP33]])3170// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3171// CHECK3:       omp.precond.end:3172// CHECK3-NEXT:    ret void3173//3174//3175// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l202.omp_outlined.omp_outlined3176// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {3177// CHECK3-NEXT:  entry:3178// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43179// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43180// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43181// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43182// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43183// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43184// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43185// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43186// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43187// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43188// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43189// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43190// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43191// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43192// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43193// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43194// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43195// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43196// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_2:%.*]], align 43197// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43198// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43199// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43200// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43201// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43202// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43203// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43204// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43205// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43206// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43207// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43208// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43209// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43210// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43211// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43212// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03213// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13214// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13215// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43216// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43217// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43218// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3219// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3220// CHECK3:       omp.precond.then:3221// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43222// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43223// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 43224// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43225// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43226// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 43227// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 43228// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43229// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43230// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43231// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 43232// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3233// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43234// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43235// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]3236// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3237// CHECK3:       cond.true:3238// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43239// CHECK3-NEXT:    br label [[COND_END:%.*]]3240// CHECK3:       cond.false:3241// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43242// CHECK3-NEXT:    br label [[COND_END]]3243// CHECK3:       cond.end:3244// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]3245// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43246// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43247// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 43248// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3249// CHECK3:       omp.inner.for.cond:3250// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43251// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43252// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]3253// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3254// CHECK3:       omp.inner.for.body:3255// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43256// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 13257// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3258// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 43259// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 43260// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 43261// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]3262// CHECK3-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 43263// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 43264// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 43265// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]3266// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 43267// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]3268// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 43269// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 43270// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]3271// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 43272// CHECK3-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 03273// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 43274// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 13275// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP29]], align 43276// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 23277// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 43278// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 33279// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 43280// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE1_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]])3281// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3282// CHECK3:       omp.body.continue:3283// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3284// CHECK3:       omp.inner.for.inc:3285// CHECK3-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43286// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP32]], 13287// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 43288// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]3289// CHECK3:       omp.inner.for.end:3290// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3291// CHECK3:       omp.loop.exit:3292// CHECK3-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43293// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 43294// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])3295// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3296// CHECK3:       omp.precond.end:3297// CHECK3-NEXT:    ret void3298//3299//3300// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2353301// CHECK3-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {3302// CHECK3-NEXT:  entry:3303// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 43304// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43305// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43306// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43307// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 43308// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43309// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43310// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43311// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l235.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])3312// CHECK3-NEXT:    ret void3313//3314//3315// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l235.omp_outlined3316// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {3317// CHECK3-NEXT:  entry:3318// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43319// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43320// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43321// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43322// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43323// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43324// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43325// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43326// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43327// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43328// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43329// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43330// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43331// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43332// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43333// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43334// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43335// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43336// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43337// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43338// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43339// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43340// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43341// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43342// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43343// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43344// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43345// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43346// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43347// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03348// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13349// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13350// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43351// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43352// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43353// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3354// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3355// CHECK3:       omp.precond.then:3356// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43357// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43358// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 43359// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43360// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43361// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43362// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 43363// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3364// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43365// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43366// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]3367// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3368// CHECK3:       cond.true:3369// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43370// CHECK3-NEXT:    br label [[COND_END:%.*]]3371// CHECK3:       cond.false:3372// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43373// CHECK3-NEXT:    br label [[COND_END]]3374// CHECK3:       cond.end:3375// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]3376// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43377// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43378// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 43379// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3380// CHECK3:       omp.inner.for.cond:3381// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43382// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43383// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]3384// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3385// CHECK3:       omp.inner.for.body:3386// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43387// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43388// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l235.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])3389// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3390// CHECK3:       omp.inner.for.inc:3391// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43392// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43393// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]3394// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43395// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]3396// CHECK3:       omp.inner.for.end:3397// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3398// CHECK3:       omp.loop.exit:3399// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43400// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 43401// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])3402// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3403// CHECK3:       omp.precond.end:3404// CHECK3-NEXT:    ret void3405//3406//3407// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l235.omp_outlined.omp_outlined3408// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {3409// CHECK3-NEXT:  entry:3410// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43411// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43412// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43413// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43414// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43415// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43416// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43417// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43418// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43419// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43420// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43421// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43422// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43423// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43424// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43425// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43426// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43427// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43428// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_3:%.*]], align 43429// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43430// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43431// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43432// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43433// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43434// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43435// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43436// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43437// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43438// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43439// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43440// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43441// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43442// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43443// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43444// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03445// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13446// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13447// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43448// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43449// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43450// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3451// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3452// CHECK3:       omp.precond.then:3453// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43454// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43455// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 43456// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43457// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43458// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 43459// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 43460// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43461// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43462// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43463// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 43464// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3465// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43466// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43467// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]3468// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3469// CHECK3:       cond.true:3470// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43471// CHECK3-NEXT:    br label [[COND_END:%.*]]3472// CHECK3:       cond.false:3473// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43474// CHECK3-NEXT:    br label [[COND_END]]3475// CHECK3:       cond.end:3476// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]3477// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43478// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43479// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 43480// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3481// CHECK3:       omp.inner.for.cond:3482// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43483// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43484// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]3485// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3486// CHECK3:       omp.inner.for.body:3487// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43488// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 13489// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3490// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 43491// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 43492// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 43493// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]3494// CHECK3-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 43495// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 43496// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 43497// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]3498// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 43499// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]3500// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 43501// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 43502// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]3503// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 43504// CHECK3-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 03505// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 43506// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 13507// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP29]], align 43508// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 23509// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 43510// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 33511// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 43512// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE2_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]])3513// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3514// CHECK3:       omp.body.continue:3515// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3516// CHECK3:       omp.inner.for.inc:3517// CHECK3-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43518// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP32]], 13519// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 43520// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]3521// CHECK3:       omp.inner.for.end:3522// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3523// CHECK3:       omp.loop.exit:3524// CHECK3-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43525// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 43526// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])3527// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3528// CHECK3:       omp.precond.end:3529// CHECK3-NEXT:    ret void3530//3531//3532// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2673533// CHECK3-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {3534// CHECK3-NEXT:  entry:3535// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 43536// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 43537// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43538// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43539// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43540// CHECK3-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 43541// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 43542// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43543// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43544// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43545// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l267.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])3546// CHECK3-NEXT:    ret void3547//3548//3549// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l267.omp_outlined3550// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {3551// CHECK3-NEXT:  entry:3552// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43553// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43554// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 43555// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43556// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43557// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43558// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43559// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43560// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43561// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43562// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43563// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 43564// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43565// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43566// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43567// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43568// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43569// CHECK3-NEXT:    [[I4:%.*]] = alloca i32, align 43570// CHECK3-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 43571// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43572// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43573// CHECK3-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 43574// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43575// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43576// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43577// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43578// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 43579// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 43580// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 43581// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 43582// CHECK3-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 43583// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 43584// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 43585// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 43586// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 43587// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43588// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 03589// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13590// CHECK3-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 13591// CHECK3-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 43592// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43593// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43594// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]3595// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3596// CHECK3:       omp.precond.then:3597// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43598// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 43599// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 43600// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43601// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43602// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43603// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 43604// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3605// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43606// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 43607// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]3608// CHECK3-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3609// CHECK3:       cond.true:3610// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 43611// CHECK3-NEXT:    br label [[COND_END:%.*]]3612// CHECK3:       cond.false:3613// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43614// CHECK3-NEXT:    br label [[COND_END]]3615// CHECK3:       cond.end:3616// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]3617// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43618// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43619// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 43620// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3621// CHECK3:       omp.inner.for.cond:3622// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43623// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43624// CHECK3-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]3625// CHECK3-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3626// CHECK3:       omp.inner.for.body:3627// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43628// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43629// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43630// CHECK3-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 43631// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 43632// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l267.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]])3633// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3634// CHECK3:       omp.inner.for.inc:3635// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43636// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43637// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]3638// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43639// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]3640// CHECK3:       omp.inner.for.end:3641// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3642// CHECK3:       omp.loop.exit:3643// CHECK3-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43644// CHECK3-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 43645// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])3646// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3647// CHECK3:       omp.precond.end:3648// CHECK3-NEXT:    ret void3649//3650//3651// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l267.omp_outlined.omp_outlined3652// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]], i32 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR2]] {3653// CHECK3-NEXT:  entry:3654// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43655// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43656// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43657// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43658// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43659// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43660// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43661// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43662// CHECK3-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 43663// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43664// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43665// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43666// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 43667// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43668// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43669// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43670// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43671// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43672// CHECK3-NEXT:    [[I4:%.*]] = alloca i32, align 43673// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_4:%.*]], align 43674// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43675// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43676// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43677// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43678// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43679// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43680// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43681// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43682// CHECK3-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 43683// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43684// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43685// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43686// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43687// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43688// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 43689// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43690// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03691// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13692// CHECK3-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 13693// CHECK3-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 43694// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43695// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43696// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3697// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3698// CHECK3:       omp.precond.then:3699// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43700// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 43701// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 43702// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43703// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43704// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 43705// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 43706// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43707// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43708// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 43709// CHECK3-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43710// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 43711// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP12]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP10]])3712// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]3713// CHECK3:       omp.dispatch.cond:3714// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43715// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43716// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP13]], [[TMP14]]3717// CHECK3-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3718// CHECK3:       cond.true:3719// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43720// CHECK3-NEXT:    br label [[COND_END:%.*]]3721// CHECK3:       cond.false:3722// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43723// CHECK3-NEXT:    br label [[COND_END]]3724// CHECK3:       cond.end:3725// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP15]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]3726// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43727// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43728// CHECK3-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 43729// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43730// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43731// CHECK3-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]3732// CHECK3-NEXT:    br i1 [[CMP6]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]3733// CHECK3:       omp.dispatch.body:3734// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3735// CHECK3:       omp.inner.for.cond:3736// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43737// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43738// CHECK3-NEXT:    [[CMP7:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]3739// CHECK3-NEXT:    br i1 [[CMP7]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3740// CHECK3:       omp.inner.for.body:3741// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43742// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 13743// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3744// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I4]], align 43745// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 43746// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 43747// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]3748// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX]], align 43749// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 43750// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 43751// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]3752// CHECK3-NEXT:    [[TMP28:%.*]] = load double, ptr [[ARRAYIDX8]], align 43753// CHECK3-NEXT:    [[ADD9:%.*]] = fadd double [[TMP25]], [[TMP28]]3754// CHECK3-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 43755// CHECK3-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I4]], align 43756// CHECK3-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds double, ptr [[TMP29]], i32 [[TMP30]]3757// CHECK3-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX10]], align 43758// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 03759// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP31]], align 43760// CHECK3-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 13761// CHECK3-NEXT:    store ptr [[I4]], ptr [[TMP32]], align 43762// CHECK3-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 23763// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP33]], align 43764// CHECK3-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 33765// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP34]], align 43766// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE3_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]])3767// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3768// CHECK3:       omp.body.continue:3769// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3770// CHECK3:       omp.inner.for.inc:3771// CHECK3-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43772// CHECK3-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP35]], 13773// CHECK3-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 43774// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]3775// CHECK3:       omp.inner.for.end:3776// CHECK3-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]3777// CHECK3:       omp.dispatch.inc:3778// CHECK3-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43779// CHECK3-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43780// CHECK3-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP36]], [[TMP37]]3781// CHECK3-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_LB]], align 43782// CHECK3-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43783// CHECK3-NEXT:    [[TMP39:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43784// CHECK3-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP38]], [[TMP39]]3785// CHECK3-NEXT:    store i32 [[ADD13]], ptr [[DOTOMP_UB]], align 43786// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND]]3787// CHECK3:       omp.dispatch.end:3788// CHECK3-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43789// CHECK3-NEXT:    [[TMP41:%.*]] = load i32, ptr [[TMP40]], align 43790// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP41]])3791// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3792// CHECK3:       omp.precond.end:3793// CHECK3-NEXT:    ret void3794//3795//3796// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l3003797// CHECK3-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {3798// CHECK3-NEXT:  entry:3799// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 43800// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43801// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43802// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43803// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 43804// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43805// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43806// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43807// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l300.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])3808// CHECK3-NEXT:    ret void3809//3810//3811// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l300.omp_outlined3812// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {3813// CHECK3-NEXT:  entry:3814// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43815// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43816// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43817// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43818// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43819// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43820// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43821// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43822// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43823// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43824// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43825// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43826// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43827// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43828// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43829// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43830// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43831// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43832// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43833// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43834// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43835// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43836// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43837// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43838// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43839// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43840// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43841// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43842// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43843// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03844// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13845// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13846// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43847// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43848// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43849// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3850// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3851// CHECK3:       omp.precond.then:3852// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43853// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43854// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 43855// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43856// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43857// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43858// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 43859// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)3860// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43861// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43862// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]3863// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3864// CHECK3:       cond.true:3865// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43866// CHECK3-NEXT:    br label [[COND_END:%.*]]3867// CHECK3:       cond.false:3868// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43869// CHECK3-NEXT:    br label [[COND_END]]3870// CHECK3:       cond.end:3871// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]3872// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43873// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43874// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 43875// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3876// CHECK3:       omp.inner.for.cond:3877// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43878// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43879// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]3880// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3881// CHECK3:       omp.inner.for.body:3882// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43883// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43884// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l300.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])3885// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3886// CHECK3:       omp.inner.for.inc:3887// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 43888// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 43889// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]3890// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 43891// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]3892// CHECK3:       omp.inner.for.end:3893// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3894// CHECK3:       omp.loop.exit:3895// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43896// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 43897// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])3898// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3899// CHECK3:       omp.precond.end:3900// CHECK3-NEXT:    ret void3901//3902//3903// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l300.omp_outlined.omp_outlined3904// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {3905// CHECK3-NEXT:  entry:3906// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43907// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43908// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43909// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43910// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43911// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43912// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43913// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43914// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43915// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43916// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43917// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43918// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43919// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43920// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43921// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43922// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43923// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43924// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_5:%.*]], align 43925// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43926// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43927// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43928// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43929// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43930// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43931// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43932// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43933// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43934// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43935// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43936// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43937// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43938// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43939// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43940// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03941// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13942// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13943// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43944// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43945// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43946// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3947// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3948// CHECK3:       omp.precond.then:3949// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43950// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43951// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 43952// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43953// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43954// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 43955// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 43956// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43957// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43958// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43959// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43960// CHECK3-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43961// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 43962// CHECK3-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)3963// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]3964// CHECK3:       omp.dispatch.cond:3965// CHECK3-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43966// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 43967// CHECK3-NEXT:    [[TMP16:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP15]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])3968// CHECK3-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 03969// CHECK3-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]3970// CHECK3:       omp.dispatch.body:3971// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43972// CHECK3-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 43973// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3974// CHECK3:       omp.inner.for.cond:3975// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP13:![0-9]+]]3976// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP13]]3977// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]3978// CHECK3-NEXT:    br i1 [[CMP4]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3979// CHECK3:       omp.inner.for.body:3980// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP13]]3981// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 13982// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3983// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP13]]3984// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP13]]3985// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP13]]3986// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP21]], i32 [[TMP22]]3987// CHECK3-NEXT:    [[TMP23:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP13]]3988// CHECK3-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP13]]3989// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP13]]3990// CHECK3-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds double, ptr [[TMP24]], i32 [[TMP25]]3991// CHECK3-NEXT:    [[TMP26:%.*]] = load double, ptr [[ARRAYIDX5]], align 4, !llvm.access.group [[ACC_GRP13]]3992// CHECK3-NEXT:    [[ADD6:%.*]] = fadd double [[TMP23]], [[TMP26]]3993// CHECK3-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP13]]3994// CHECK3-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP13]]3995// CHECK3-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds double, ptr [[TMP27]], i32 [[TMP28]]3996// CHECK3-NEXT:    store double [[ADD6]], ptr [[ARRAYIDX7]], align 4, !llvm.access.group [[ACC_GRP13]]3997// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 03998// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP29]], align 4, !llvm.access.group [[ACC_GRP13]]3999// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 14000// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP30]], align 4, !llvm.access.group [[ACC_GRP13]]4001// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 24002// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP31]], align 4, !llvm.access.group [[ACC_GRP13]]4003// CHECK3-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 34004// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP32]], align 4, !llvm.access.group [[ACC_GRP13]]4005// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE4_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]]), !llvm.access.group [[ACC_GRP13]]4006// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4007// CHECK3:       omp.body.continue:4008// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4009// CHECK3:       omp.inner.for.inc:4010// CHECK3-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP13]]4011// CHECK3-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP33]], 14012// CHECK3-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP13]]4013// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP14:![0-9]+]]4014// CHECK3:       omp.inner.for.end:4015// CHECK3-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]4016// CHECK3:       omp.dispatch.inc:4017// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND]]4018// CHECK3:       omp.dispatch.end:4019// CHECK3-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44020// CHECK3-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 44021// CHECK3-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP35]])4022// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]4023// CHECK3:       omp.precond.end:4024// CHECK3-NEXT:    ret void4025//4026//4027// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l3294028// CHECK3-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {4029// CHECK3-NEXT:  entry:4030// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 44031// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 44032// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 44033// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 44034// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 44035// CHECK3-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 44036// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 44037// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 44038// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 44039// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 44040// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l329.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])4041// CHECK3-NEXT:    ret void4042//4043//4044// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l329.omp_outlined4045// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR2]] {4046// CHECK3-NEXT:  entry:4047// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 44048// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 44049// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 44050// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 44051// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 44052// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 44053// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 44054// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 44055// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44056// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 44057// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 44058// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 44059// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 44060// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 44061// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 44062// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44063// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44064// CHECK3-NEXT:    [[I4:%.*]] = alloca i32, align 44065// CHECK3-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 44066// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 44067// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 44068// CHECK3-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 44069// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 44070// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 44071// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 44072// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 44073// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 44074// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 44075// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 44076// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 44077// CHECK3-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 44078// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 44079// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 44080// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 44081// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 44082// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44083// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 04084// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 14085// CHECK3-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 14086// CHECK3-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 44087// CHECK3-NEXT:    store i32 0, ptr [[I]], align 44088// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44089// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]4090// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]4091// CHECK3:       omp.precond.then:4092// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 44093// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 44094// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 44095// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44096// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44097// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44098// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 44099// CHECK3-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4100// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44101// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 44102// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]4103// CHECK3-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4104// CHECK3:       cond.true:4105// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 44106// CHECK3-NEXT:    br label [[COND_END:%.*]]4107// CHECK3:       cond.false:4108// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44109// CHECK3-NEXT:    br label [[COND_END]]4110// CHECK3:       cond.end:4111// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]4112// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 44113// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44114// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 44115// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4116// CHECK3:       omp.inner.for.cond:4117// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44118// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44119// CHECK3-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]4120// CHECK3-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4121// CHECK3:       omp.inner.for.body:4122// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44123// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44124// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44125// CHECK3-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 44126// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 44127// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l329.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]])4128// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4129// CHECK3:       omp.inner.for.inc:4130// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44131// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 44132// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]4133// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 44134// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]]4135// CHECK3:       omp.inner.for.end:4136// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4137// CHECK3:       omp.loop.exit:4138// CHECK3-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44139// CHECK3-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 44140// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])4141// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]4142// CHECK3:       omp.precond.end:4143// CHECK3-NEXT:    ret void4144//4145//4146// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l329.omp_outlined.omp_outlined4147// CHECK3-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]], i32 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR2]] {4148// CHECK3-NEXT:  entry:4149// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 44150// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 44151// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 44152// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 44153// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 44154// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 44155// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 44156// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 44157// CHECK3-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 44158// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44159// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 44160// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 44161// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 44162// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 44163// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 44164// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 44165// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44166// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44167// CHECK3-NEXT:    [[I4:%.*]] = alloca i32, align 44168// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_6:%.*]], align 44169// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 44170// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 44171// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 44172// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 44173// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 44174// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 44175// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 44176// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 44177// CHECK3-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 44178// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 44179// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 44180// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 44181// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 44182// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 44183// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 44184// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44185// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 04186// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 14187// CHECK3-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 14188// CHECK3-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 44189// CHECK3-NEXT:    store i32 0, ptr [[I]], align 44190// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44191// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]4192// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]4193// CHECK3:       omp.precond.then:4194// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 44195// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 44196// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 44197// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 44198// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 44199// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 44200// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 44201// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44202// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44203// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 44204// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44205// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44206// CHECK3-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44207// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 44208// CHECK3-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])4209// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]4210// CHECK3:       omp.dispatch.cond:4211// CHECK3-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44212// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 44213// CHECK3-NEXT:    [[TMP17:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP16]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])4214// CHECK3-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 04215// CHECK3-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]4216// CHECK3:       omp.dispatch.body:4217// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44218// CHECK3-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 44219// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4220// CHECK3:       omp.inner.for.cond:4221// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP16:![0-9]+]]4222// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP16]]4223// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]4224// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4225// CHECK3:       omp.inner.for.body:4226// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP16]]4227// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 14228// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4229// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP16]]4230// CHECK3-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP16]]4231// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP16]]4232// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP22]], i32 [[TMP23]]4233// CHECK3-NEXT:    [[TMP24:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP16]]4234// CHECK3-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP16]]4235// CHECK3-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP16]]4236// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP25]], i32 [[TMP26]]4237// CHECK3-NEXT:    [[TMP27:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP16]]4238// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP24]], [[TMP27]]4239// CHECK3-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP16]]4240// CHECK3-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP16]]4241// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP28]], i32 [[TMP29]]4242// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP16]]4243// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 04244// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP30]], align 4, !llvm.access.group [[ACC_GRP16]]4245// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 14246// CHECK3-NEXT:    store ptr [[I4]], ptr [[TMP31]], align 4, !llvm.access.group [[ACC_GRP16]]4247// CHECK3-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 24248// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP32]], align 4, !llvm.access.group [[ACC_GRP16]]4249// CHECK3-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 34250// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP33]], align 4, !llvm.access.group [[ACC_GRP16]]4251// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE5_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]]), !llvm.access.group [[ACC_GRP16]]4252// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4253// CHECK3:       omp.body.continue:4254// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4255// CHECK3:       omp.inner.for.inc:4256// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP16]]4257// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP34]], 14258// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP16]]4259// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP17:![0-9]+]]4260// CHECK3:       omp.inner.for.end:4261// CHECK3-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]4262// CHECK3:       omp.dispatch.inc:4263// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND]]4264// CHECK3:       omp.dispatch.end:4265// CHECK3-NEXT:    [[TMP35:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44266// CHECK3-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 44267// CHECK3-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP36]])4268// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]4269// CHECK3:       omp.precond.end:4270// CHECK3-NEXT:    ret void4271//4272//4273// CHECK9-LABEL: define {{[^@]+}}@main4274// CHECK9-SAME: () #[[ATTR0:[0-9]+]] {4275// CHECK9-NEXT:  entry:4276// CHECK9-NEXT:    [[RETVAL:%.*]] = alloca i32, align 44277// CHECK9-NEXT:    [[A:%.*]] = alloca ptr, align 84278// CHECK9-NEXT:    [[B:%.*]] = alloca ptr, align 84279// CHECK9-NEXT:    [[C:%.*]] = alloca ptr, align 84280// CHECK9-NEXT:    [[N:%.*]] = alloca i32, align 44281// CHECK9-NEXT:    [[CH:%.*]] = alloca i32, align 44282// CHECK9-NEXT:    [[N_CASTED:%.*]] = alloca i64, align 84283// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 84284// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 84285// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 84286// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 44287// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 44288// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 44289// CHECK9-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 84290// CHECK9-NEXT:    [[N_CASTED3:%.*]] = alloca i64, align 84291// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS4:%.*]] = alloca [4 x ptr], align 84292// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS5:%.*]] = alloca [4 x ptr], align 84293// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS6:%.*]] = alloca [4 x ptr], align 84294// CHECK9-NEXT:    [[_TMP7:%.*]] = alloca i32, align 44295// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_8:%.*]] = alloca i32, align 44296// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 44297// CHECK9-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84298// CHECK9-NEXT:    [[CH_CASTED:%.*]] = alloca i64, align 84299// CHECK9-NEXT:    [[N_CASTED17:%.*]] = alloca i64, align 84300// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS18:%.*]] = alloca [5 x ptr], align 84301// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS19:%.*]] = alloca [5 x ptr], align 84302// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS20:%.*]] = alloca [5 x ptr], align 84303// CHECK9-NEXT:    [[_TMP21:%.*]] = alloca i32, align 44304// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 44305// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_23:%.*]] = alloca i32, align 44306// CHECK9-NEXT:    [[KERNEL_ARGS28:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84307// CHECK9-NEXT:    [[N_CASTED31:%.*]] = alloca i64, align 84308// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS32:%.*]] = alloca [4 x ptr], align 84309// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS33:%.*]] = alloca [4 x ptr], align 84310// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS34:%.*]] = alloca [4 x ptr], align 84311// CHECK9-NEXT:    [[_TMP35:%.*]] = alloca i32, align 44312// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_36:%.*]] = alloca i32, align 44313// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_37:%.*]] = alloca i32, align 44314// CHECK9-NEXT:    [[KERNEL_ARGS42:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84315// CHECK9-NEXT:    [[CH_CASTED45:%.*]] = alloca i64, align 84316// CHECK9-NEXT:    [[N_CASTED46:%.*]] = alloca i64, align 84317// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS47:%.*]] = alloca [5 x ptr], align 84318// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS48:%.*]] = alloca [5 x ptr], align 84319// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS49:%.*]] = alloca [5 x ptr], align 84320// CHECK9-NEXT:    [[_TMP50:%.*]] = alloca i32, align 44321// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_51:%.*]] = alloca i32, align 44322// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_52:%.*]] = alloca i32, align 44323// CHECK9-NEXT:    [[KERNEL_ARGS57:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84324// CHECK9-NEXT:    [[N_CASTED60:%.*]] = alloca i64, align 84325// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS61:%.*]] = alloca [4 x ptr], align 84326// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS62:%.*]] = alloca [4 x ptr], align 84327// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS63:%.*]] = alloca [4 x ptr], align 84328// CHECK9-NEXT:    [[_TMP64:%.*]] = alloca i32, align 44329// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_65:%.*]] = alloca i32, align 44330// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_66:%.*]] = alloca i32, align 44331// CHECK9-NEXT:    [[KERNEL_ARGS71:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84332// CHECK9-NEXT:    [[CH_CASTED74:%.*]] = alloca i64, align 84333// CHECK9-NEXT:    [[N_CASTED75:%.*]] = alloca i64, align 84334// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS76:%.*]] = alloca [5 x ptr], align 84335// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS77:%.*]] = alloca [5 x ptr], align 84336// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS78:%.*]] = alloca [5 x ptr], align 84337// CHECK9-NEXT:    [[_TMP79:%.*]] = alloca i32, align 44338// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_80:%.*]] = alloca i32, align 44339// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_81:%.*]] = alloca i32, align 44340// CHECK9-NEXT:    [[KERNEL_ARGS86:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84341// CHECK9-NEXT:    store i32 0, ptr [[RETVAL]], align 44342// CHECK9-NEXT:    store i32 10000, ptr [[N]], align 44343// CHECK9-NEXT:    store i32 100, ptr [[CH]], align 44344// CHECK9-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 44345// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[N_CASTED]], align 44346// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[N_CASTED]], align 84347// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A]], align 84348// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B]], align 84349// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C]], align 84350// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 04351// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP5]], align 84352// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 04353// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP6]], align 84354// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 04355// CHECK9-NEXT:    store ptr null, ptr [[TMP7]], align 84356// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 14357// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[TMP8]], align 84358// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 14359// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[TMP9]], align 84360// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 14361// CHECK9-NEXT:    store ptr null, ptr [[TMP10]], align 84362// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 24363// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[TMP11]], align 84364// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 24365// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[TMP12]], align 84366// CHECK9-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 24367// CHECK9-NEXT:    store ptr null, ptr [[TMP13]], align 84368// CHECK9-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 34369// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[TMP14]], align 84370// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 34371// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[TMP15]], align 84372// CHECK9-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 34373// CHECK9-NEXT:    store ptr null, ptr [[TMP16]], align 84374// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 04375// CHECK9-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 04376// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 44377// CHECK9-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 44378// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44379// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 04380// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 14381// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 14382// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 44383// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44384// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 14385// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i644386// CHECK9-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 04387// CHECK9-NEXT:    store i32 3, ptr [[TMP23]], align 44388// CHECK9-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 14389// CHECK9-NEXT:    store i32 4, ptr [[TMP24]], align 44390// CHECK9-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 24391// CHECK9-NEXT:    store ptr [[TMP17]], ptr [[TMP25]], align 84392// CHECK9-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 34393// CHECK9-NEXT:    store ptr [[TMP18]], ptr [[TMP26]], align 84394// CHECK9-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 44395// CHECK9-NEXT:    store ptr @.offload_sizes, ptr [[TMP27]], align 84396// CHECK9-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 54397// CHECK9-NEXT:    store ptr @.offload_maptypes, ptr [[TMP28]], align 84398// CHECK9-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 64399// CHECK9-NEXT:    store ptr null, ptr [[TMP29]], align 84400// CHECK9-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 74401// CHECK9-NEXT:    store ptr null, ptr [[TMP30]], align 84402// CHECK9-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 84403// CHECK9-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 84404// CHECK9-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 94405// CHECK9-NEXT:    store i64 0, ptr [[TMP32]], align 84406// CHECK9-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 104407// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 44408// CHECK9-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 114409// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 44410// CHECK9-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 124411// CHECK9-NEXT:    store i32 0, ptr [[TMP35]], align 44412// CHECK9-NEXT:    [[TMP36:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.region_id, ptr [[KERNEL_ARGS]])4413// CHECK9-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 04414// CHECK9-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]4415// CHECK9:       omp_offload.failed:4416// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369(i64 [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]) #[[ATTR2:[0-9]+]]4417// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT]]4418// CHECK9:       omp_offload.cont:4419// CHECK9-NEXT:    [[TMP38:%.*]] = load i32, ptr [[N]], align 44420// CHECK9-NEXT:    store i32 [[TMP38]], ptr [[N_CASTED3]], align 44421// CHECK9-NEXT:    [[TMP39:%.*]] = load i64, ptr [[N_CASTED3]], align 84422// CHECK9-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[A]], align 84423// CHECK9-NEXT:    [[TMP41:%.*]] = load ptr, ptr [[B]], align 84424// CHECK9-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[C]], align 84425// CHECK9-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 04426// CHECK9-NEXT:    store i64 [[TMP39]], ptr [[TMP43]], align 84427// CHECK9-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 04428// CHECK9-NEXT:    store i64 [[TMP39]], ptr [[TMP44]], align 84429// CHECK9-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 04430// CHECK9-NEXT:    store ptr null, ptr [[TMP45]], align 84431// CHECK9-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 14432// CHECK9-NEXT:    store ptr [[TMP40]], ptr [[TMP46]], align 84433// CHECK9-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 14434// CHECK9-NEXT:    store ptr [[TMP40]], ptr [[TMP47]], align 84435// CHECK9-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 14436// CHECK9-NEXT:    store ptr null, ptr [[TMP48]], align 84437// CHECK9-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 24438// CHECK9-NEXT:    store ptr [[TMP41]], ptr [[TMP49]], align 84439// CHECK9-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 24440// CHECK9-NEXT:    store ptr [[TMP41]], ptr [[TMP50]], align 84441// CHECK9-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 24442// CHECK9-NEXT:    store ptr null, ptr [[TMP51]], align 84443// CHECK9-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 34444// CHECK9-NEXT:    store ptr [[TMP42]], ptr [[TMP52]], align 84445// CHECK9-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 34446// CHECK9-NEXT:    store ptr [[TMP42]], ptr [[TMP53]], align 84447// CHECK9-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 34448// CHECK9-NEXT:    store ptr null, ptr [[TMP54]], align 84449// CHECK9-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 04450// CHECK9-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 04451// CHECK9-NEXT:    [[TMP57:%.*]] = load i32, ptr [[N]], align 44452// CHECK9-NEXT:    store i32 [[TMP57]], ptr [[DOTCAPTURE_EXPR_8]], align 44453// CHECK9-NEXT:    [[TMP58:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_8]], align 44454// CHECK9-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP58]], 04455// CHECK9-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 14456// CHECK9-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[DIV11]], 14457// CHECK9-NEXT:    store i32 [[SUB12]], ptr [[DOTCAPTURE_EXPR_9]], align 44458// CHECK9-NEXT:    [[TMP59:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 44459// CHECK9-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP59]], 14460// CHECK9-NEXT:    [[TMP60:%.*]] = zext i32 [[ADD13]] to i644461// CHECK9-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 04462// CHECK9-NEXT:    store i32 3, ptr [[TMP61]], align 44463// CHECK9-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 14464// CHECK9-NEXT:    store i32 4, ptr [[TMP62]], align 44465// CHECK9-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 24466// CHECK9-NEXT:    store ptr [[TMP55]], ptr [[TMP63]], align 84467// CHECK9-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 34468// CHECK9-NEXT:    store ptr [[TMP56]], ptr [[TMP64]], align 84469// CHECK9-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 44470// CHECK9-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP65]], align 84471// CHECK9-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 54472// CHECK9-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP66]], align 84473// CHECK9-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 64474// CHECK9-NEXT:    store ptr null, ptr [[TMP67]], align 84475// CHECK9-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 74476// CHECK9-NEXT:    store ptr null, ptr [[TMP68]], align 84477// CHECK9-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 84478// CHECK9-NEXT:    store i64 [[TMP60]], ptr [[TMP69]], align 84479// CHECK9-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 94480// CHECK9-NEXT:    store i64 0, ptr [[TMP70]], align 84481// CHECK9-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 104482// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP71]], align 44483// CHECK9-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 114484// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP72]], align 44485// CHECK9-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 124486// CHECK9-NEXT:    store i32 0, ptr [[TMP73]], align 44487// CHECK9-NEXT:    [[TMP74:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.region_id, ptr [[KERNEL_ARGS14]])4488// CHECK9-NEXT:    [[TMP75:%.*]] = icmp ne i32 [[TMP74]], 04489// CHECK9-NEXT:    br i1 [[TMP75]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]4490// CHECK9:       omp_offload.failed15:4491// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408(i64 [[TMP39]], ptr [[TMP40]], ptr [[TMP41]], ptr [[TMP42]]) #[[ATTR2]]4492// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT16]]4493// CHECK9:       omp_offload.cont16:4494// CHECK9-NEXT:    [[TMP76:%.*]] = load i32, ptr [[CH]], align 44495// CHECK9-NEXT:    store i32 [[TMP76]], ptr [[CH_CASTED]], align 44496// CHECK9-NEXT:    [[TMP77:%.*]] = load i64, ptr [[CH_CASTED]], align 84497// CHECK9-NEXT:    [[TMP78:%.*]] = load i32, ptr [[N]], align 44498// CHECK9-NEXT:    store i32 [[TMP78]], ptr [[N_CASTED17]], align 44499// CHECK9-NEXT:    [[TMP79:%.*]] = load i64, ptr [[N_CASTED17]], align 84500// CHECK9-NEXT:    [[TMP80:%.*]] = load ptr, ptr [[A]], align 84501// CHECK9-NEXT:    [[TMP81:%.*]] = load ptr, ptr [[B]], align 84502// CHECK9-NEXT:    [[TMP82:%.*]] = load ptr, ptr [[C]], align 84503// CHECK9-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 04504// CHECK9-NEXT:    store i64 [[TMP77]], ptr [[TMP83]], align 84505// CHECK9-NEXT:    [[TMP84:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 04506// CHECK9-NEXT:    store i64 [[TMP77]], ptr [[TMP84]], align 84507// CHECK9-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 04508// CHECK9-NEXT:    store ptr null, ptr [[TMP85]], align 84509// CHECK9-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 14510// CHECK9-NEXT:    store i64 [[TMP79]], ptr [[TMP86]], align 84511// CHECK9-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 14512// CHECK9-NEXT:    store i64 [[TMP79]], ptr [[TMP87]], align 84513// CHECK9-NEXT:    [[TMP88:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 14514// CHECK9-NEXT:    store ptr null, ptr [[TMP88]], align 84515// CHECK9-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 24516// CHECK9-NEXT:    store ptr [[TMP80]], ptr [[TMP89]], align 84517// CHECK9-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 24518// CHECK9-NEXT:    store ptr [[TMP80]], ptr [[TMP90]], align 84519// CHECK9-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 24520// CHECK9-NEXT:    store ptr null, ptr [[TMP91]], align 84521// CHECK9-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 34522// CHECK9-NEXT:    store ptr [[TMP81]], ptr [[TMP92]], align 84523// CHECK9-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 34524// CHECK9-NEXT:    store ptr [[TMP81]], ptr [[TMP93]], align 84525// CHECK9-NEXT:    [[TMP94:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 34526// CHECK9-NEXT:    store ptr null, ptr [[TMP94]], align 84527// CHECK9-NEXT:    [[TMP95:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 44528// CHECK9-NEXT:    store ptr [[TMP82]], ptr [[TMP95]], align 84529// CHECK9-NEXT:    [[TMP96:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 44530// CHECK9-NEXT:    store ptr [[TMP82]], ptr [[TMP96]], align 84531// CHECK9-NEXT:    [[TMP97:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 44532// CHECK9-NEXT:    store ptr null, ptr [[TMP97]], align 84533// CHECK9-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 04534// CHECK9-NEXT:    [[TMP99:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 04535// CHECK9-NEXT:    [[TMP100:%.*]] = load i32, ptr [[N]], align 44536// CHECK9-NEXT:    store i32 [[TMP100]], ptr [[DOTCAPTURE_EXPR_22]], align 44537// CHECK9-NEXT:    [[TMP101:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 44538// CHECK9-NEXT:    [[SUB24:%.*]] = sub nsw i32 [[TMP101]], 04539// CHECK9-NEXT:    [[DIV25:%.*]] = sdiv i32 [[SUB24]], 14540// CHECK9-NEXT:    [[SUB26:%.*]] = sub nsw i32 [[DIV25]], 14541// CHECK9-NEXT:    store i32 [[SUB26]], ptr [[DOTCAPTURE_EXPR_23]], align 44542// CHECK9-NEXT:    [[TMP102:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_23]], align 44543// CHECK9-NEXT:    [[ADD27:%.*]] = add nsw i32 [[TMP102]], 14544// CHECK9-NEXT:    [[TMP103:%.*]] = zext i32 [[ADD27]] to i644545// CHECK9-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 04546// CHECK9-NEXT:    store i32 3, ptr [[TMP104]], align 44547// CHECK9-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 14548// CHECK9-NEXT:    store i32 5, ptr [[TMP105]], align 44549// CHECK9-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 24550// CHECK9-NEXT:    store ptr [[TMP98]], ptr [[TMP106]], align 84551// CHECK9-NEXT:    [[TMP107:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 34552// CHECK9-NEXT:    store ptr [[TMP99]], ptr [[TMP107]], align 84553// CHECK9-NEXT:    [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 44554// CHECK9-NEXT:    store ptr @.offload_sizes.3, ptr [[TMP108]], align 84555// CHECK9-NEXT:    [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 54556// CHECK9-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP109]], align 84557// CHECK9-NEXT:    [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 64558// CHECK9-NEXT:    store ptr null, ptr [[TMP110]], align 84559// CHECK9-NEXT:    [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 74560// CHECK9-NEXT:    store ptr null, ptr [[TMP111]], align 84561// CHECK9-NEXT:    [[TMP112:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 84562// CHECK9-NEXT:    store i64 [[TMP103]], ptr [[TMP112]], align 84563// CHECK9-NEXT:    [[TMP113:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 94564// CHECK9-NEXT:    store i64 0, ptr [[TMP113]], align 84565// CHECK9-NEXT:    [[TMP114:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 104566// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP114]], align 44567// CHECK9-NEXT:    [[TMP115:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 114568// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP115]], align 44569// CHECK9-NEXT:    [[TMP116:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 124570// CHECK9-NEXT:    store i32 0, ptr [[TMP116]], align 44571// CHECK9-NEXT:    [[TMP117:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.region_id, ptr [[KERNEL_ARGS28]])4572// CHECK9-NEXT:    [[TMP118:%.*]] = icmp ne i32 [[TMP117]], 04573// CHECK9-NEXT:    br i1 [[TMP118]], label [[OMP_OFFLOAD_FAILED29:%.*]], label [[OMP_OFFLOAD_CONT30:%.*]]4574// CHECK9:       omp_offload.failed29:4575// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447(i64 [[TMP77]], i64 [[TMP79]], ptr [[TMP80]], ptr [[TMP81]], ptr [[TMP82]]) #[[ATTR2]]4576// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT30]]4577// CHECK9:       omp_offload.cont30:4578// CHECK9-NEXT:    [[TMP119:%.*]] = load i32, ptr [[N]], align 44579// CHECK9-NEXT:    store i32 [[TMP119]], ptr [[N_CASTED31]], align 44580// CHECK9-NEXT:    [[TMP120:%.*]] = load i64, ptr [[N_CASTED31]], align 84581// CHECK9-NEXT:    [[TMP121:%.*]] = load ptr, ptr [[A]], align 84582// CHECK9-NEXT:    [[TMP122:%.*]] = load ptr, ptr [[B]], align 84583// CHECK9-NEXT:    [[TMP123:%.*]] = load ptr, ptr [[C]], align 84584// CHECK9-NEXT:    [[TMP124:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 04585// CHECK9-NEXT:    store i64 [[TMP120]], ptr [[TMP124]], align 84586// CHECK9-NEXT:    [[TMP125:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 04587// CHECK9-NEXT:    store i64 [[TMP120]], ptr [[TMP125]], align 84588// CHECK9-NEXT:    [[TMP126:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 04589// CHECK9-NEXT:    store ptr null, ptr [[TMP126]], align 84590// CHECK9-NEXT:    [[TMP127:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 14591// CHECK9-NEXT:    store ptr [[TMP121]], ptr [[TMP127]], align 84592// CHECK9-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 14593// CHECK9-NEXT:    store ptr [[TMP121]], ptr [[TMP128]], align 84594// CHECK9-NEXT:    [[TMP129:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 14595// CHECK9-NEXT:    store ptr null, ptr [[TMP129]], align 84596// CHECK9-NEXT:    [[TMP130:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 24597// CHECK9-NEXT:    store ptr [[TMP122]], ptr [[TMP130]], align 84598// CHECK9-NEXT:    [[TMP131:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 24599// CHECK9-NEXT:    store ptr [[TMP122]], ptr [[TMP131]], align 84600// CHECK9-NEXT:    [[TMP132:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 24601// CHECK9-NEXT:    store ptr null, ptr [[TMP132]], align 84602// CHECK9-NEXT:    [[TMP133:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 34603// CHECK9-NEXT:    store ptr [[TMP123]], ptr [[TMP133]], align 84604// CHECK9-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 34605// CHECK9-NEXT:    store ptr [[TMP123]], ptr [[TMP134]], align 84606// CHECK9-NEXT:    [[TMP135:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 34607// CHECK9-NEXT:    store ptr null, ptr [[TMP135]], align 84608// CHECK9-NEXT:    [[TMP136:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 04609// CHECK9-NEXT:    [[TMP137:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 04610// CHECK9-NEXT:    [[TMP138:%.*]] = load i32, ptr [[N]], align 44611// CHECK9-NEXT:    store i32 [[TMP138]], ptr [[DOTCAPTURE_EXPR_36]], align 44612// CHECK9-NEXT:    [[TMP139:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_36]], align 44613// CHECK9-NEXT:    [[SUB38:%.*]] = sub nsw i32 [[TMP139]], 04614// CHECK9-NEXT:    [[DIV39:%.*]] = sdiv i32 [[SUB38]], 14615// CHECK9-NEXT:    [[SUB40:%.*]] = sub nsw i32 [[DIV39]], 14616// CHECK9-NEXT:    store i32 [[SUB40]], ptr [[DOTCAPTURE_EXPR_37]], align 44617// CHECK9-NEXT:    [[TMP140:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_37]], align 44618// CHECK9-NEXT:    [[ADD41:%.*]] = add nsw i32 [[TMP140]], 14619// CHECK9-NEXT:    [[TMP141:%.*]] = zext i32 [[ADD41]] to i644620// CHECK9-NEXT:    [[TMP142:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 04621// CHECK9-NEXT:    store i32 3, ptr [[TMP142]], align 44622// CHECK9-NEXT:    [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 14623// CHECK9-NEXT:    store i32 4, ptr [[TMP143]], align 44624// CHECK9-NEXT:    [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 24625// CHECK9-NEXT:    store ptr [[TMP136]], ptr [[TMP144]], align 84626// CHECK9-NEXT:    [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 34627// CHECK9-NEXT:    store ptr [[TMP137]], ptr [[TMP145]], align 84628// CHECK9-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 44629// CHECK9-NEXT:    store ptr @.offload_sizes.5, ptr [[TMP146]], align 84630// CHECK9-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 54631// CHECK9-NEXT:    store ptr @.offload_maptypes.6, ptr [[TMP147]], align 84632// CHECK9-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 64633// CHECK9-NEXT:    store ptr null, ptr [[TMP148]], align 84634// CHECK9-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 74635// CHECK9-NEXT:    store ptr null, ptr [[TMP149]], align 84636// CHECK9-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 84637// CHECK9-NEXT:    store i64 [[TMP141]], ptr [[TMP150]], align 84638// CHECK9-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 94639// CHECK9-NEXT:    store i64 0, ptr [[TMP151]], align 84640// CHECK9-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 104641// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP152]], align 44642// CHECK9-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 114643// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP153]], align 44644// CHECK9-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 124645// CHECK9-NEXT:    store i32 0, ptr [[TMP154]], align 44646// CHECK9-NEXT:    [[TMP155:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.region_id, ptr [[KERNEL_ARGS42]])4647// CHECK9-NEXT:    [[TMP156:%.*]] = icmp ne i32 [[TMP155]], 04648// CHECK9-NEXT:    br i1 [[TMP156]], label [[OMP_OFFLOAD_FAILED43:%.*]], label [[OMP_OFFLOAD_CONT44:%.*]]4649// CHECK9:       omp_offload.failed43:4650// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478(i64 [[TMP120]], ptr [[TMP121]], ptr [[TMP122]], ptr [[TMP123]]) #[[ATTR2]]4651// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT44]]4652// CHECK9:       omp_offload.cont44:4653// CHECK9-NEXT:    [[TMP157:%.*]] = load i32, ptr [[CH]], align 44654// CHECK9-NEXT:    store i32 [[TMP157]], ptr [[CH_CASTED45]], align 44655// CHECK9-NEXT:    [[TMP158:%.*]] = load i64, ptr [[CH_CASTED45]], align 84656// CHECK9-NEXT:    [[TMP159:%.*]] = load i32, ptr [[N]], align 44657// CHECK9-NEXT:    store i32 [[TMP159]], ptr [[N_CASTED46]], align 44658// CHECK9-NEXT:    [[TMP160:%.*]] = load i64, ptr [[N_CASTED46]], align 84659// CHECK9-NEXT:    [[TMP161:%.*]] = load ptr, ptr [[A]], align 84660// CHECK9-NEXT:    [[TMP162:%.*]] = load ptr, ptr [[B]], align 84661// CHECK9-NEXT:    [[TMP163:%.*]] = load ptr, ptr [[C]], align 84662// CHECK9-NEXT:    [[TMP164:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 04663// CHECK9-NEXT:    store i64 [[TMP158]], ptr [[TMP164]], align 84664// CHECK9-NEXT:    [[TMP165:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 04665// CHECK9-NEXT:    store i64 [[TMP158]], ptr [[TMP165]], align 84666// CHECK9-NEXT:    [[TMP166:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 04667// CHECK9-NEXT:    store ptr null, ptr [[TMP166]], align 84668// CHECK9-NEXT:    [[TMP167:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 14669// CHECK9-NEXT:    store i64 [[TMP160]], ptr [[TMP167]], align 84670// CHECK9-NEXT:    [[TMP168:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 14671// CHECK9-NEXT:    store i64 [[TMP160]], ptr [[TMP168]], align 84672// CHECK9-NEXT:    [[TMP169:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 14673// CHECK9-NEXT:    store ptr null, ptr [[TMP169]], align 84674// CHECK9-NEXT:    [[TMP170:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 24675// CHECK9-NEXT:    store ptr [[TMP161]], ptr [[TMP170]], align 84676// CHECK9-NEXT:    [[TMP171:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 24677// CHECK9-NEXT:    store ptr [[TMP161]], ptr [[TMP171]], align 84678// CHECK9-NEXT:    [[TMP172:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 24679// CHECK9-NEXT:    store ptr null, ptr [[TMP172]], align 84680// CHECK9-NEXT:    [[TMP173:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 34681// CHECK9-NEXT:    store ptr [[TMP162]], ptr [[TMP173]], align 84682// CHECK9-NEXT:    [[TMP174:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 34683// CHECK9-NEXT:    store ptr [[TMP162]], ptr [[TMP174]], align 84684// CHECK9-NEXT:    [[TMP175:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 34685// CHECK9-NEXT:    store ptr null, ptr [[TMP175]], align 84686// CHECK9-NEXT:    [[TMP176:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 44687// CHECK9-NEXT:    store ptr [[TMP163]], ptr [[TMP176]], align 84688// CHECK9-NEXT:    [[TMP177:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 44689// CHECK9-NEXT:    store ptr [[TMP163]], ptr [[TMP177]], align 84690// CHECK9-NEXT:    [[TMP178:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 44691// CHECK9-NEXT:    store ptr null, ptr [[TMP178]], align 84692// CHECK9-NEXT:    [[TMP179:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 04693// CHECK9-NEXT:    [[TMP180:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 04694// CHECK9-NEXT:    [[TMP181:%.*]] = load i32, ptr [[N]], align 44695// CHECK9-NEXT:    store i32 [[TMP181]], ptr [[DOTCAPTURE_EXPR_51]], align 44696// CHECK9-NEXT:    [[TMP182:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_51]], align 44697// CHECK9-NEXT:    [[SUB53:%.*]] = sub nsw i32 [[TMP182]], 04698// CHECK9-NEXT:    [[DIV54:%.*]] = sdiv i32 [[SUB53]], 14699// CHECK9-NEXT:    [[SUB55:%.*]] = sub nsw i32 [[DIV54]], 14700// CHECK9-NEXT:    store i32 [[SUB55]], ptr [[DOTCAPTURE_EXPR_52]], align 44701// CHECK9-NEXT:    [[TMP183:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_52]], align 44702// CHECK9-NEXT:    [[ADD56:%.*]] = add nsw i32 [[TMP183]], 14703// CHECK9-NEXT:    [[TMP184:%.*]] = zext i32 [[ADD56]] to i644704// CHECK9-NEXT:    [[TMP185:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 04705// CHECK9-NEXT:    store i32 3, ptr [[TMP185]], align 44706// CHECK9-NEXT:    [[TMP186:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 14707// CHECK9-NEXT:    store i32 5, ptr [[TMP186]], align 44708// CHECK9-NEXT:    [[TMP187:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 24709// CHECK9-NEXT:    store ptr [[TMP179]], ptr [[TMP187]], align 84710// CHECK9-NEXT:    [[TMP188:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 34711// CHECK9-NEXT:    store ptr [[TMP180]], ptr [[TMP188]], align 84712// CHECK9-NEXT:    [[TMP189:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 44713// CHECK9-NEXT:    store ptr @.offload_sizes.7, ptr [[TMP189]], align 84714// CHECK9-NEXT:    [[TMP190:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 54715// CHECK9-NEXT:    store ptr @.offload_maptypes.8, ptr [[TMP190]], align 84716// CHECK9-NEXT:    [[TMP191:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 64717// CHECK9-NEXT:    store ptr null, ptr [[TMP191]], align 84718// CHECK9-NEXT:    [[TMP192:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 74719// CHECK9-NEXT:    store ptr null, ptr [[TMP192]], align 84720// CHECK9-NEXT:    [[TMP193:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 84721// CHECK9-NEXT:    store i64 [[TMP184]], ptr [[TMP193]], align 84722// CHECK9-NEXT:    [[TMP194:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 94723// CHECK9-NEXT:    store i64 0, ptr [[TMP194]], align 84724// CHECK9-NEXT:    [[TMP195:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 104725// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP195]], align 44726// CHECK9-NEXT:    [[TMP196:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 114727// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP196]], align 44728// CHECK9-NEXT:    [[TMP197:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 124729// CHECK9-NEXT:    store i32 0, ptr [[TMP197]], align 44730// CHECK9-NEXT:    [[TMP198:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.region_id, ptr [[KERNEL_ARGS57]])4731// CHECK9-NEXT:    [[TMP199:%.*]] = icmp ne i32 [[TMP198]], 04732// CHECK9-NEXT:    br i1 [[TMP199]], label [[OMP_OFFLOAD_FAILED58:%.*]], label [[OMP_OFFLOAD_CONT59:%.*]]4733// CHECK9:       omp_offload.failed58:4734// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506(i64 [[TMP158]], i64 [[TMP160]], ptr [[TMP161]], ptr [[TMP162]], ptr [[TMP163]]) #[[ATTR2]]4735// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT59]]4736// CHECK9:       omp_offload.cont59:4737// CHECK9-NEXT:    [[TMP200:%.*]] = load i32, ptr [[N]], align 44738// CHECK9-NEXT:    store i32 [[TMP200]], ptr [[N_CASTED60]], align 44739// CHECK9-NEXT:    [[TMP201:%.*]] = load i64, ptr [[N_CASTED60]], align 84740// CHECK9-NEXT:    [[TMP202:%.*]] = load ptr, ptr [[A]], align 84741// CHECK9-NEXT:    [[TMP203:%.*]] = load ptr, ptr [[B]], align 84742// CHECK9-NEXT:    [[TMP204:%.*]] = load ptr, ptr [[C]], align 84743// CHECK9-NEXT:    [[TMP205:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 04744// CHECK9-NEXT:    store i64 [[TMP201]], ptr [[TMP205]], align 84745// CHECK9-NEXT:    [[TMP206:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 04746// CHECK9-NEXT:    store i64 [[TMP201]], ptr [[TMP206]], align 84747// CHECK9-NEXT:    [[TMP207:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 04748// CHECK9-NEXT:    store ptr null, ptr [[TMP207]], align 84749// CHECK9-NEXT:    [[TMP208:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 14750// CHECK9-NEXT:    store ptr [[TMP202]], ptr [[TMP208]], align 84751// CHECK9-NEXT:    [[TMP209:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 14752// CHECK9-NEXT:    store ptr [[TMP202]], ptr [[TMP209]], align 84753// CHECK9-NEXT:    [[TMP210:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 14754// CHECK9-NEXT:    store ptr null, ptr [[TMP210]], align 84755// CHECK9-NEXT:    [[TMP211:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 24756// CHECK9-NEXT:    store ptr [[TMP203]], ptr [[TMP211]], align 84757// CHECK9-NEXT:    [[TMP212:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 24758// CHECK9-NEXT:    store ptr [[TMP203]], ptr [[TMP212]], align 84759// CHECK9-NEXT:    [[TMP213:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 24760// CHECK9-NEXT:    store ptr null, ptr [[TMP213]], align 84761// CHECK9-NEXT:    [[TMP214:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 34762// CHECK9-NEXT:    store ptr [[TMP204]], ptr [[TMP214]], align 84763// CHECK9-NEXT:    [[TMP215:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 34764// CHECK9-NEXT:    store ptr [[TMP204]], ptr [[TMP215]], align 84765// CHECK9-NEXT:    [[TMP216:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 34766// CHECK9-NEXT:    store ptr null, ptr [[TMP216]], align 84767// CHECK9-NEXT:    [[TMP217:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 04768// CHECK9-NEXT:    [[TMP218:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 04769// CHECK9-NEXT:    [[TMP219:%.*]] = load i32, ptr [[N]], align 44770// CHECK9-NEXT:    store i32 [[TMP219]], ptr [[DOTCAPTURE_EXPR_65]], align 44771// CHECK9-NEXT:    [[TMP220:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_65]], align 44772// CHECK9-NEXT:    [[SUB67:%.*]] = sub nsw i32 [[TMP220]], 04773// CHECK9-NEXT:    [[DIV68:%.*]] = sdiv i32 [[SUB67]], 14774// CHECK9-NEXT:    [[SUB69:%.*]] = sub nsw i32 [[DIV68]], 14775// CHECK9-NEXT:    store i32 [[SUB69]], ptr [[DOTCAPTURE_EXPR_66]], align 44776// CHECK9-NEXT:    [[TMP221:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_66]], align 44777// CHECK9-NEXT:    [[ADD70:%.*]] = add nsw i32 [[TMP221]], 14778// CHECK9-NEXT:    [[TMP222:%.*]] = zext i32 [[ADD70]] to i644779// CHECK9-NEXT:    [[TMP223:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 04780// CHECK9-NEXT:    store i32 3, ptr [[TMP223]], align 44781// CHECK9-NEXT:    [[TMP224:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 14782// CHECK9-NEXT:    store i32 4, ptr [[TMP224]], align 44783// CHECK9-NEXT:    [[TMP225:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 24784// CHECK9-NEXT:    store ptr [[TMP217]], ptr [[TMP225]], align 84785// CHECK9-NEXT:    [[TMP226:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 34786// CHECK9-NEXT:    store ptr [[TMP218]], ptr [[TMP226]], align 84787// CHECK9-NEXT:    [[TMP227:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 44788// CHECK9-NEXT:    store ptr @.offload_sizes.9, ptr [[TMP227]], align 84789// CHECK9-NEXT:    [[TMP228:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 54790// CHECK9-NEXT:    store ptr @.offload_maptypes.10, ptr [[TMP228]], align 84791// CHECK9-NEXT:    [[TMP229:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 64792// CHECK9-NEXT:    store ptr null, ptr [[TMP229]], align 84793// CHECK9-NEXT:    [[TMP230:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 74794// CHECK9-NEXT:    store ptr null, ptr [[TMP230]], align 84795// CHECK9-NEXT:    [[TMP231:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 84796// CHECK9-NEXT:    store i64 [[TMP222]], ptr [[TMP231]], align 84797// CHECK9-NEXT:    [[TMP232:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 94798// CHECK9-NEXT:    store i64 0, ptr [[TMP232]], align 84799// CHECK9-NEXT:    [[TMP233:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 104800// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP233]], align 44801// CHECK9-NEXT:    [[TMP234:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 114802// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP234]], align 44803// CHECK9-NEXT:    [[TMP235:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 124804// CHECK9-NEXT:    store i32 0, ptr [[TMP235]], align 44805// CHECK9-NEXT:    [[TMP236:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.region_id, ptr [[KERNEL_ARGS71]])4806// CHECK9-NEXT:    [[TMP237:%.*]] = icmp ne i32 [[TMP236]], 04807// CHECK9-NEXT:    br i1 [[TMP237]], label [[OMP_OFFLOAD_FAILED72:%.*]], label [[OMP_OFFLOAD_CONT73:%.*]]4808// CHECK9:       omp_offload.failed72:4809// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536(i64 [[TMP201]], ptr [[TMP202]], ptr [[TMP203]], ptr [[TMP204]]) #[[ATTR2]]4810// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT73]]4811// CHECK9:       omp_offload.cont73:4812// CHECK9-NEXT:    [[TMP238:%.*]] = load i32, ptr [[CH]], align 44813// CHECK9-NEXT:    store i32 [[TMP238]], ptr [[CH_CASTED74]], align 44814// CHECK9-NEXT:    [[TMP239:%.*]] = load i64, ptr [[CH_CASTED74]], align 84815// CHECK9-NEXT:    [[TMP240:%.*]] = load i32, ptr [[N]], align 44816// CHECK9-NEXT:    store i32 [[TMP240]], ptr [[N_CASTED75]], align 44817// CHECK9-NEXT:    [[TMP241:%.*]] = load i64, ptr [[N_CASTED75]], align 84818// CHECK9-NEXT:    [[TMP242:%.*]] = load ptr, ptr [[A]], align 84819// CHECK9-NEXT:    [[TMP243:%.*]] = load ptr, ptr [[B]], align 84820// CHECK9-NEXT:    [[TMP244:%.*]] = load ptr, ptr [[C]], align 84821// CHECK9-NEXT:    [[TMP245:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 04822// CHECK9-NEXT:    store i64 [[TMP239]], ptr [[TMP245]], align 84823// CHECK9-NEXT:    [[TMP246:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 04824// CHECK9-NEXT:    store i64 [[TMP239]], ptr [[TMP246]], align 84825// CHECK9-NEXT:    [[TMP247:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 04826// CHECK9-NEXT:    store ptr null, ptr [[TMP247]], align 84827// CHECK9-NEXT:    [[TMP248:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 14828// CHECK9-NEXT:    store i64 [[TMP241]], ptr [[TMP248]], align 84829// CHECK9-NEXT:    [[TMP249:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 14830// CHECK9-NEXT:    store i64 [[TMP241]], ptr [[TMP249]], align 84831// CHECK9-NEXT:    [[TMP250:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 14832// CHECK9-NEXT:    store ptr null, ptr [[TMP250]], align 84833// CHECK9-NEXT:    [[TMP251:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 24834// CHECK9-NEXT:    store ptr [[TMP242]], ptr [[TMP251]], align 84835// CHECK9-NEXT:    [[TMP252:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 24836// CHECK9-NEXT:    store ptr [[TMP242]], ptr [[TMP252]], align 84837// CHECK9-NEXT:    [[TMP253:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 24838// CHECK9-NEXT:    store ptr null, ptr [[TMP253]], align 84839// CHECK9-NEXT:    [[TMP254:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 34840// CHECK9-NEXT:    store ptr [[TMP243]], ptr [[TMP254]], align 84841// CHECK9-NEXT:    [[TMP255:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 34842// CHECK9-NEXT:    store ptr [[TMP243]], ptr [[TMP255]], align 84843// CHECK9-NEXT:    [[TMP256:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 34844// CHECK9-NEXT:    store ptr null, ptr [[TMP256]], align 84845// CHECK9-NEXT:    [[TMP257:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 44846// CHECK9-NEXT:    store ptr [[TMP244]], ptr [[TMP257]], align 84847// CHECK9-NEXT:    [[TMP258:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 44848// CHECK9-NEXT:    store ptr [[TMP244]], ptr [[TMP258]], align 84849// CHECK9-NEXT:    [[TMP259:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 44850// CHECK9-NEXT:    store ptr null, ptr [[TMP259]], align 84851// CHECK9-NEXT:    [[TMP260:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 04852// CHECK9-NEXT:    [[TMP261:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 04853// CHECK9-NEXT:    [[TMP262:%.*]] = load i32, ptr [[N]], align 44854// CHECK9-NEXT:    store i32 [[TMP262]], ptr [[DOTCAPTURE_EXPR_80]], align 44855// CHECK9-NEXT:    [[TMP263:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_80]], align 44856// CHECK9-NEXT:    [[SUB82:%.*]] = sub nsw i32 [[TMP263]], 04857// CHECK9-NEXT:    [[DIV83:%.*]] = sdiv i32 [[SUB82]], 14858// CHECK9-NEXT:    [[SUB84:%.*]] = sub nsw i32 [[DIV83]], 14859// CHECK9-NEXT:    store i32 [[SUB84]], ptr [[DOTCAPTURE_EXPR_81]], align 44860// CHECK9-NEXT:    [[TMP264:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_81]], align 44861// CHECK9-NEXT:    [[ADD85:%.*]] = add nsw i32 [[TMP264]], 14862// CHECK9-NEXT:    [[TMP265:%.*]] = zext i32 [[ADD85]] to i644863// CHECK9-NEXT:    [[TMP266:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 04864// CHECK9-NEXT:    store i32 3, ptr [[TMP266]], align 44865// CHECK9-NEXT:    [[TMP267:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 14866// CHECK9-NEXT:    store i32 5, ptr [[TMP267]], align 44867// CHECK9-NEXT:    [[TMP268:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 24868// CHECK9-NEXT:    store ptr [[TMP260]], ptr [[TMP268]], align 84869// CHECK9-NEXT:    [[TMP269:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 34870// CHECK9-NEXT:    store ptr [[TMP261]], ptr [[TMP269]], align 84871// CHECK9-NEXT:    [[TMP270:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 44872// CHECK9-NEXT:    store ptr @.offload_sizes.11, ptr [[TMP270]], align 84873// CHECK9-NEXT:    [[TMP271:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 54874// CHECK9-NEXT:    store ptr @.offload_maptypes.12, ptr [[TMP271]], align 84875// CHECK9-NEXT:    [[TMP272:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 64876// CHECK9-NEXT:    store ptr null, ptr [[TMP272]], align 84877// CHECK9-NEXT:    [[TMP273:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 74878// CHECK9-NEXT:    store ptr null, ptr [[TMP273]], align 84879// CHECK9-NEXT:    [[TMP274:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 84880// CHECK9-NEXT:    store i64 [[TMP265]], ptr [[TMP274]], align 84881// CHECK9-NEXT:    [[TMP275:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 94882// CHECK9-NEXT:    store i64 0, ptr [[TMP275]], align 84883// CHECK9-NEXT:    [[TMP276:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 104884// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP276]], align 44885// CHECK9-NEXT:    [[TMP277:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 114886// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP277]], align 44887// CHECK9-NEXT:    [[TMP278:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 124888// CHECK9-NEXT:    store i32 0, ptr [[TMP278]], align 44889// CHECK9-NEXT:    [[TMP279:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.region_id, ptr [[KERNEL_ARGS86]])4890// CHECK9-NEXT:    [[TMP280:%.*]] = icmp ne i32 [[TMP279]], 04891// CHECK9-NEXT:    br i1 [[TMP280]], label [[OMP_OFFLOAD_FAILED87:%.*]], label [[OMP_OFFLOAD_CONT88:%.*]]4892// CHECK9:       omp_offload.failed87:4893// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562(i64 [[TMP239]], i64 [[TMP241]], ptr [[TMP242]], ptr [[TMP243]], ptr [[TMP244]]) #[[ATTR2]]4894// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT88]]4895// CHECK9:       omp_offload.cont88:4896// CHECK9-NEXT:    [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiET_v()4897// CHECK9-NEXT:    ret i32 [[CALL]]4898//4899//4900// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l3694901// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1:[0-9]+]] {4902// CHECK9-NEXT:  entry:4903// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 84904// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 84905// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 84906// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 84907// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 84908// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 84909// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 84910// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 84911// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])4912// CHECK9-NEXT:    ret void4913//4914//4915// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.omp_outlined4916// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {4917// CHECK9-NEXT:  entry:4918// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 84919// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 84920// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 84921// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 84922// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 84923// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 84924// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44925// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 44926// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 44927// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 44928// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 44929// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 44930// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 44931// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44932// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44933// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 44934// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 84935// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 84936// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 84937// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 84938// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 84939// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 84940// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 84941// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 84942// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 84943// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 84944// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 44945// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 44946// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44947// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 04948// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 14949// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 14950// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 44951// CHECK9-NEXT:    store i32 0, ptr [[I]], align 44952// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44953// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]4954// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]4955// CHECK9:       omp.precond.then:4956// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 44957// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44958// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 44959// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44960// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44961// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 84962// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 44963// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)4964// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44965// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44966// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]4967// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4968// CHECK9:       cond.true:4969// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44970// CHECK9-NEXT:    br label [[COND_END:%.*]]4971// CHECK9:       cond.false:4972// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44973// CHECK9-NEXT:    br label [[COND_END]]4974// CHECK9:       cond.end:4975// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]4976// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 44977// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44978// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 44979// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4980// CHECK9:       omp.inner.for.cond:4981// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44982// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44983// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]4984// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4985// CHECK9:       omp.inner.for.body:4986// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44987// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i644988// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44989// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i644990// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])4991// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4992// CHECK9:       omp.inner.for.inc:4993// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44994// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 44995// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]4996// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 44997// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]4998// CHECK9:       omp.inner.for.end:4999// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5000// CHECK9:       omp.loop.exit:5001// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85002// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 45003// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])5004// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5005// CHECK9:       omp.precond.end:5006// CHECK9-NEXT:    ret void5007//5008//5009// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.omp_outlined.omp_outlined5010// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {5011// CHECK9-NEXT:  entry:5012// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85013// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85014// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85015// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85016// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85017// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85018// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85019// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85020// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45021// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45022// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45023// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45024// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45025// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45026// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45027// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45028// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45029// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 45030// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85031// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85032// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85033// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85034// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85035// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85036// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85037// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85038// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85039// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85040// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85041// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85042// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45043// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45044// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45045// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05046// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15047// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15048// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45049// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45050// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45051// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5052// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5053// CHECK9:       omp.precond.then:5054// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45055// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45056// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 45057// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85058// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i325059// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85060// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i325061// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45062// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 45063// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45064// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45065// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85066// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 45067// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5068// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45069// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45070// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]5071// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5072// CHECK9:       cond.true:5073// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45074// CHECK9-NEXT:    br label [[COND_END:%.*]]5075// CHECK9:       cond.false:5076// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45077// CHECK9-NEXT:    br label [[COND_END]]5078// CHECK9:       cond.end:5079// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]5080// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45081// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45082// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 45083// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5084// CHECK9:       omp.inner.for.cond:5085// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45086// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45087// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]5088// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5089// CHECK9:       omp.inner.for.body:5090// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45091// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 15092// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5093// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 45094// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 85095// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 45096// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i645097// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]5098// CHECK9-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 85099// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 85100// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 45101// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i645102// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]5103// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 85104// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]5105// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 85106// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 45107// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i645108// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]5109// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 85110// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5111// CHECK9:       omp.body.continue:5112// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5113// CHECK9:       omp.inner.for.inc:5114// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45115// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 15116// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 45117// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5118// CHECK9:       omp.inner.for.end:5119// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5120// CHECK9:       omp.loop.exit:5121// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85122// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 45123// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])5124// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5125// CHECK9:       omp.precond.end:5126// CHECK9-NEXT:    ret void5127//5128//5129// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l4085130// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {5131// CHECK9-NEXT:  entry:5132// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 85133// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85134// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85135// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85136// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 85137// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85138// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85139// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85140// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])5141// CHECK9-NEXT:    ret void5142//5143//5144// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.omp_outlined5145// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {5146// CHECK9-NEXT:  entry:5147// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85148// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85149// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85150// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85151// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85152// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85153// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45154// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45155// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45156// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45157// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45158// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45159// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45160// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45161// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45162// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 45163// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85164// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85165// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85166// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85167// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85168// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85169// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85170// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85171// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85172// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85173// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45174// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45175// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45176// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05177// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15178// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15179// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45180// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45181// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45182// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5183// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5184// CHECK9:       omp.precond.then:5185// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45186// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45187// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 45188// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45189// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45190// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85191// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 45192// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5193// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45194// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45195// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]5196// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5197// CHECK9:       cond.true:5198// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45199// CHECK9-NEXT:    br label [[COND_END:%.*]]5200// CHECK9:       cond.false:5201// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45202// CHECK9-NEXT:    br label [[COND_END]]5203// CHECK9:       cond.end:5204// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]5205// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45206// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45207// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 45208// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5209// CHECK9:       omp.inner.for.cond:5210// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45211// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45212// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]5213// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5214// CHECK9:       omp.inner.for.body:5215// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45216// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i645217// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45218// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i645219// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])5220// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5221// CHECK9:       omp.inner.for.inc:5222// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45223// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45224// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]5225// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 45226// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5227// CHECK9:       omp.inner.for.end:5228// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5229// CHECK9:       omp.loop.exit:5230// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85231// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 45232// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])5233// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5234// CHECK9:       omp.precond.end:5235// CHECK9-NEXT:    ret void5236//5237//5238// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.omp_outlined.omp_outlined5239// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {5240// CHECK9-NEXT:  entry:5241// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85242// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85243// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85244// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85245// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85246// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85247// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85248// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85249// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45250// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45251// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45252// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45253// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45254// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45255// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45256// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45257// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45258// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 45259// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85260// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85261// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85262// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85263// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85264// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85265// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85266// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85267// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85268// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85269// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85270// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85271// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45272// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45273// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45274// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05275// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15276// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15277// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45278// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45279// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45280// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5281// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5282// CHECK9:       omp.precond.then:5283// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45284// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45285// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 45286// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85287// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i325288// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85289// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i325290// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45291// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 45292// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45293// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45294// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85295// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 45296// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5297// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45298// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45299// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]5300// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5301// CHECK9:       cond.true:5302// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45303// CHECK9-NEXT:    br label [[COND_END:%.*]]5304// CHECK9:       cond.false:5305// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45306// CHECK9-NEXT:    br label [[COND_END]]5307// CHECK9:       cond.end:5308// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]5309// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45310// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45311// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 45312// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5313// CHECK9:       omp.inner.for.cond:5314// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45315// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45316// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]5317// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5318// CHECK9:       omp.inner.for.body:5319// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45320// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 15321// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5322// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 45323// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 85324// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 45325// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i645326// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]5327// CHECK9-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 85328// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 85329// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 45330// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i645331// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]5332// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 85333// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]5334// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 85335// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 45336// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i645337// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]5338// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 85339// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5340// CHECK9:       omp.body.continue:5341// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5342// CHECK9:       omp.inner.for.inc:5343// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45344// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 15345// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 45346// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5347// CHECK9:       omp.inner.for.end:5348// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5349// CHECK9:       omp.loop.exit:5350// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85351// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 45352// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])5353// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5354// CHECK9:       omp.precond.end:5355// CHECK9-NEXT:    ret void5356//5357//5358// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l4475359// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {5360// CHECK9-NEXT:  entry:5361// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 85362// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 85363// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85364// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85365// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85366// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 85367// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 85368// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85369// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85370// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85371// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])5372// CHECK9-NEXT:    ret void5373//5374//5375// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.omp_outlined5376// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {5377// CHECK9-NEXT:  entry:5378// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85379// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85380// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 85381// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85382// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85383// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85384// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85385// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45386// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45387// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45388// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45389// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45390// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45391// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45392// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45393// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45394// CHECK9-NEXT:    [[I3:%.*]] = 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 ptr [[CH]], ptr [[CH_ADDR]], align 85398// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85399// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85400// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85401// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85402// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 85403// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 85404// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 85405// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 85406// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 85407// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 45408// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 45409// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45410// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 05411// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15412// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15413// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45414// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45415// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45416// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]5417// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5418// CHECK9:       omp.precond.then:5419// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45420// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45421// CHECK9-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 45422// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45423// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45424// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 45425// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85426// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 45427// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 91, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP9]])5428// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45429// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45430// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]5431// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5432// CHECK9:       cond.true:5433// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45434// CHECK9-NEXT:    br label [[COND_END:%.*]]5435// CHECK9:       cond.false:5436// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45437// CHECK9-NEXT:    br label [[COND_END]]5438// CHECK9:       cond.end:5439// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]5440// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45441// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45442// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 45443// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5444// CHECK9:       omp.inner.for.cond:5445// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45446// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45447// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 15448// CHECK9-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]5449// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5450// CHECK9:       omp.inner.for.body:5451// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45452// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i645453// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45454// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i645455// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]])5456// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5457// CHECK9:       omp.inner.for.inc:5458// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45459// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45460// CHECK9-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]5461// CHECK9-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 45462// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45463// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45464// CHECK9-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]5465// CHECK9-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 45466// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45467// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45468// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP27]], [[TMP28]]5469// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 45470// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45471// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45472// CHECK9-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP29]], [[TMP30]]5473// CHECK9-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]5474// CHECK9:       cond.true10:5475// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45476// CHECK9-NEXT:    br label [[COND_END12:%.*]]5477// CHECK9:       cond.false11:5478// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45479// CHECK9-NEXT:    br label [[COND_END12]]5480// CHECK9:       cond.end12:5481// CHECK9-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP31]], [[COND_TRUE10]] ], [ [[TMP32]], [[COND_FALSE11]] ]5482// CHECK9-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 45483// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45484// CHECK9-NEXT:    store i32 [[TMP33]], ptr [[DOTOMP_IV]], align 45485// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5486// CHECK9:       omp.inner.for.end:5487// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5488// CHECK9:       omp.loop.exit:5489// CHECK9-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85490// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 45491// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP35]])5492// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5493// CHECK9:       omp.precond.end:5494// CHECK9-NEXT:    ret void5495//5496//5497// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.omp_outlined.omp_outlined5498// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {5499// CHECK9-NEXT:  entry:5500// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85501// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85502// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85503// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85504// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85505// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85506// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85507// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85508// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45509// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45510// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45511// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45512// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45513// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45514// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45515// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45516// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45517// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 45518// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85519// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85520// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85521// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85522// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85523// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85524// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85525// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85526// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85527// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85528// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85529// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85530// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45531// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45532// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45533// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05534// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15535// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15536// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45537// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45538// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45539// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5540// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5541// CHECK9:       omp.precond.then:5542// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45543// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45544// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 45545// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85546// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i325547// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85548// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i325549// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45550// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 45551// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45552// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45553// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85554// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 45555// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5556// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45557// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45558// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]5559// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5560// CHECK9:       cond.true:5561// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45562// CHECK9-NEXT:    br label [[COND_END:%.*]]5563// CHECK9:       cond.false:5564// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45565// CHECK9-NEXT:    br label [[COND_END]]5566// CHECK9:       cond.end:5567// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]5568// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45569// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45570// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 45571// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5572// CHECK9:       omp.inner.for.cond:5573// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45574// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45575// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]5576// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5577// CHECK9:       omp.inner.for.body:5578// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45579// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 15580// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5581// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 45582// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 85583// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 45584// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i645585// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]5586// CHECK9-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 85587// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 85588// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 45589// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i645590// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]5591// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 85592// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]5593// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 85594// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 45595// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i645596// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]5597// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 85598// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5599// CHECK9:       omp.body.continue:5600// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5601// CHECK9:       omp.inner.for.inc:5602// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45603// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 15604// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 45605// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5606// CHECK9:       omp.inner.for.end:5607// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5608// CHECK9:       omp.loop.exit:5609// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85610// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 45611// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])5612// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5613// CHECK9:       omp.precond.end:5614// CHECK9-NEXT:    ret void5615//5616//5617// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l4785618// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {5619// CHECK9-NEXT:  entry:5620// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 85621// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85622// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85623// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85624// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 85625// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85626// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85627// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85628// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])5629// CHECK9-NEXT:    ret void5630//5631//5632// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.omp_outlined5633// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {5634// CHECK9-NEXT:  entry:5635// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85636// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85637// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85638// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85639// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85640// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85641// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45642// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45643// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45644// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45645// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45646// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45647// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45648// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45649// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45650// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 45651// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85652// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85653// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85654// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85655// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85656// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85657// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85658// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85659// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85660// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85661// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45662// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45663// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45664// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05665// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15666// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15667// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45668// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45669// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45670// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5671// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5672// CHECK9:       omp.precond.then:5673// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45674// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45675// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 45676// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45677// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45678// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85679// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 45680// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5681// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45682// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45683// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]5684// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5685// CHECK9:       cond.true:5686// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45687// CHECK9-NEXT:    br label [[COND_END:%.*]]5688// CHECK9:       cond.false:5689// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45690// CHECK9-NEXT:    br label [[COND_END]]5691// CHECK9:       cond.end:5692// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]5693// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45694// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45695// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 45696// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5697// CHECK9:       omp.inner.for.cond:5698// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45699// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45700// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]5701// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5702// CHECK9:       omp.inner.for.body:5703// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45704// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i645705// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45706// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i645707// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])5708// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5709// CHECK9:       omp.inner.for.inc:5710// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45711// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45712// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]5713// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 45714// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5715// CHECK9:       omp.inner.for.end:5716// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5717// CHECK9:       omp.loop.exit:5718// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85719// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 45720// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])5721// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5722// CHECK9:       omp.precond.end:5723// CHECK9-NEXT:    ret void5724//5725//5726// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.omp_outlined.omp_outlined5727// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {5728// CHECK9-NEXT:  entry:5729// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85730// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85731// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85732// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85733// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85734// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85735// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85736// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85737// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45738// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45739// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45740// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45741// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45742// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45743// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45744// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45745// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45746// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 45747// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85748// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85749// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85750// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85751// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85752// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85753// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85754// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85755// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85756// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85757// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85758// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85759// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45760// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45761// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45762// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05763// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15764// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15765// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45766// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45767// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45768// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5769// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5770// CHECK9:       omp.precond.then:5771// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45772// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45773// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 45774// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85775// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i325776// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85777// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i325778// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45779// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 45780// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45781// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45782// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85783// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 45784// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5785// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45786// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45787// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]5788// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5789// CHECK9:       cond.true:5790// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45791// CHECK9-NEXT:    br label [[COND_END:%.*]]5792// CHECK9:       cond.false:5793// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45794// CHECK9-NEXT:    br label [[COND_END]]5795// CHECK9:       cond.end:5796// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]5797// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45798// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45799// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 45800// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5801// CHECK9:       omp.inner.for.cond:5802// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45803// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45804// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]5805// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5806// CHECK9:       omp.inner.for.body:5807// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45808// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 15809// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5810// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 45811// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 85812// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 45813// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i645814// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]5815// CHECK9-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 85816// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 85817// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 45818// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i645819// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]5820// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 85821// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]5822// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 85823// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 45824// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i645825// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]5826// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 85827// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5828// CHECK9:       omp.body.continue:5829// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5830// CHECK9:       omp.inner.for.inc:5831// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45832// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 15833// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 45834// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5835// CHECK9:       omp.inner.for.end:5836// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5837// CHECK9:       omp.loop.exit:5838// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85839// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 45840// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])5841// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5842// CHECK9:       omp.precond.end:5843// CHECK9-NEXT:    ret void5844//5845//5846// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l5065847// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {5848// CHECK9-NEXT:  entry:5849// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 85850// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 85851// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85852// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85853// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85854// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 85855// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 85856// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85857// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85858// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85859// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])5860// CHECK9-NEXT:    ret void5861//5862//5863// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.omp_outlined5864// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {5865// CHECK9-NEXT:  entry:5866// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85867// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85868// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 85869// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85870// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85871// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85872// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85873// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45874// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45875// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45876// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45877// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 45878// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45879// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45880// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45881// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45882// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45883// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 45884// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 85885// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85886// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85887// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 85888// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85889// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85890// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85891// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85892// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 85893// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 85894// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 85895// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 85896// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 85897// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 45898// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 45899// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 45900// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 45901// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45902// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 05903// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15904// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 15905// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 45906// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45907// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45908// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]5909// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5910// CHECK9:       omp.precond.then:5911// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45912// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 45913// CHECK9-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 45914// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45915// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45916// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85917// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 45918// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)5919// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45920// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 45921// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]5922// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5923// CHECK9:       cond.true:5924// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 45925// CHECK9-NEXT:    br label [[COND_END:%.*]]5926// CHECK9:       cond.false:5927// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45928// CHECK9-NEXT:    br label [[COND_END]]5929// CHECK9:       cond.end:5930// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]5931// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45932// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45933// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 45934// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5935// CHECK9:       omp.inner.for.cond:5936// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45937// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45938// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]5939// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5940// CHECK9:       omp.inner.for.body:5941// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45942// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i645943// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45944// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i645945// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45946// CHECK9-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 45947// CHECK9-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 85948// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]])5949// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5950// CHECK9:       omp.inner.for.inc:5951// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 45952// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 45953// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]5954// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 45955// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]5956// CHECK9:       omp.inner.for.end:5957// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5958// CHECK9:       omp.loop.exit:5959// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85960// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 45961// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])5962// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5963// CHECK9:       omp.precond.end:5964// CHECK9-NEXT:    ret void5965//5966//5967// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.omp_outlined.omp_outlined5968// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]], i64 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] {5969// CHECK9-NEXT:  entry:5970// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85971// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85972// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85973// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85974// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85975// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85976// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85977// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85978// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 85979// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45980// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45981// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45982// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 45983// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45984// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45985// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45986// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45987// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45988// CHECK9-NEXT:    [[I5:%.*]] = alloca i32, align 45989// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85990// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85991// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85992// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85993// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85994// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85995// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85996// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85997// CHECK9-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 85998// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85999// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 86000// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 86001// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 86002// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 46003// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 46004// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46005// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 06006// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16007// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 16008// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 46009// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46010// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46011// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]6012// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6013// CHECK9:       omp.precond.then:6014// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46015// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46016// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 46017// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86018// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i326019// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86020// CHECK9-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i326021// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46022// CHECK9-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 46023// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46024// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46025// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 46026// CHECK9-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86027// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 46028// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP12]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP10]])6029// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]6030// CHECK9:       omp.dispatch.cond:6031// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46032// CHECK9-NEXT:    [[TMP14:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86033// CHECK9-NEXT:    [[CONV6:%.*]] = trunc i64 [[TMP14]] to i326034// CHECK9-NEXT:    [[CMP7:%.*]] = icmp sgt i32 [[TMP13]], [[CONV6]]6035// CHECK9-NEXT:    br i1 [[CMP7]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6036// CHECK9:       cond.true:6037// CHECK9-NEXT:    [[TMP15:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86038// CHECK9-NEXT:    [[CONV8:%.*]] = trunc i64 [[TMP15]] to i326039// CHECK9-NEXT:    br label [[COND_END:%.*]]6040// CHECK9:       cond.false:6041// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46042// CHECK9-NEXT:    br label [[COND_END]]6043// CHECK9:       cond.end:6044// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[CONV8]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]6045// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 46046// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46047// CHECK9-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 46048// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46049// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46050// CHECK9-NEXT:    [[CMP9:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]6051// CHECK9-NEXT:    br i1 [[CMP9]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]6052// CHECK9:       omp.dispatch.body:6053// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6054// CHECK9:       omp.inner.for.cond:6055// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46056// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46057// CHECK9-NEXT:    [[CMP10:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]6058// CHECK9-NEXT:    br i1 [[CMP10]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6059// CHECK9:       omp.inner.for.body:6060// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46061// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 16062// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6063// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I5]], align 46064// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 86065// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I5]], align 46066// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP24]] to i646067// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM]]6068// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX]], align 86069// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 86070// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I5]], align 46071// CHECK9-NEXT:    [[IDXPROM11:%.*]] = sext i32 [[TMP27]] to i646072// CHECK9-NEXT:    [[ARRAYIDX12:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM11]]6073// CHECK9-NEXT:    [[TMP28:%.*]] = load double, ptr [[ARRAYIDX12]], align 86074// CHECK9-NEXT:    [[ADD13:%.*]] = fadd double [[TMP25]], [[TMP28]]6075// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 86076// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I5]], align 46077// CHECK9-NEXT:    [[IDXPROM14:%.*]] = sext i32 [[TMP30]] to i646078// CHECK9-NEXT:    [[ARRAYIDX15:%.*]] = getelementptr inbounds double, ptr [[TMP29]], i64 [[IDXPROM14]]6079// CHECK9-NEXT:    store double [[ADD13]], ptr [[ARRAYIDX15]], align 86080// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6081// CHECK9:       omp.body.continue:6082// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6083// CHECK9:       omp.inner.for.inc:6084// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46085// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 [[TMP31]], 16086// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[DOTOMP_IV]], align 46087// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]6088// CHECK9:       omp.inner.for.end:6089// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]6090// CHECK9:       omp.dispatch.inc:6091// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46092// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46093// CHECK9-NEXT:    [[ADD17:%.*]] = add nsw i32 [[TMP32]], [[TMP33]]6094// CHECK9-NEXT:    store i32 [[ADD17]], ptr [[DOTOMP_LB]], align 46095// CHECK9-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46096// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46097// CHECK9-NEXT:    [[ADD18:%.*]] = add nsw i32 [[TMP34]], [[TMP35]]6098// CHECK9-NEXT:    store i32 [[ADD18]], ptr [[DOTOMP_UB]], align 46099// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]6100// CHECK9:       omp.dispatch.end:6101// CHECK9-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86102// CHECK9-NEXT:    [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 46103// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP37]])6104// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6105// CHECK9:       omp.precond.end:6106// CHECK9-NEXT:    ret void6107//6108//6109// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l5366110// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {6111// CHECK9-NEXT:  entry:6112// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 86113// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86114// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86115// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86116// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 86117// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86118// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86119// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86120// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])6121// CHECK9-NEXT:    ret void6122//6123//6124// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.omp_outlined6125// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {6126// CHECK9-NEXT:  entry:6127// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86128// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86129// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86130// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86131// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86132// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86133// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46134// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46135// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46136// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46137// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46138// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46139// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46140// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46141// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46142// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 46143// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86144// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86145// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86146// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86147// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86148// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86149// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 86150// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 86151// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 86152// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 86153// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 46154// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 46155// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46156// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 06157// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16158// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 16159// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 46160// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46161// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46162// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]6163// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6164// CHECK9:       omp.precond.then:6165// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46166// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46167// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 46168// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46169// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46170// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86171// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 46172// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6173// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46174// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46175// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]6176// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6177// CHECK9:       cond.true:6178// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46179// CHECK9-NEXT:    br label [[COND_END:%.*]]6180// CHECK9:       cond.false:6181// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46182// CHECK9-NEXT:    br label [[COND_END]]6183// CHECK9:       cond.end:6184// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]6185// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46186// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46187// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 46188// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6189// CHECK9:       omp.inner.for.cond:6190// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46191// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46192// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]6193// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6194// CHECK9:       omp.inner.for.body:6195// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46196// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i646197// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46198// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i646199// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])6200// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6201// CHECK9:       omp.inner.for.inc:6202// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46203// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46204// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]6205// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 46206// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]6207// CHECK9:       omp.inner.for.end:6208// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6209// CHECK9:       omp.loop.exit:6210// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86211// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 46212// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])6213// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6214// CHECK9:       omp.precond.end:6215// CHECK9-NEXT:    ret void6216//6217//6218// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.omp_outlined.omp_outlined6219// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {6220// CHECK9-NEXT:  entry:6221// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86222// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86223// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86224// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86225// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86226// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86227// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86228// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86229// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46230// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46231// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46232// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46233// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46234// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46235// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46236// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46237// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46238// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 46239// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86240// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86241// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86242// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86243// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86244// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86245// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86246// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86247// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 86248// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 86249// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 86250// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 86251// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 46252// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 46253// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46254// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 06255// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16256// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 16257// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 46258// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46259// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46260// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]6261// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6262// CHECK9:       omp.precond.then:6263// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46264// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46265// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 46266// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86267// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i326268// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86269// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i326270// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46271// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 46272// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46273// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46274// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46275// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46276// CHECK9-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86277// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 46278// CHECK9-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)6279// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]6280// CHECK9:       omp.dispatch.cond:6281// CHECK9-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86282// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 46283// CHECK9-NEXT:    [[TMP16:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP15]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])6284// CHECK9-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 06285// CHECK9-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]6286// CHECK9:       omp.dispatch.body:6287// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46288// CHECK9-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 46289// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6290// CHECK9:       omp.inner.for.cond:6291// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP19:![0-9]+]]6292// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP19]]6293// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]6294// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6295// CHECK9:       omp.inner.for.body:6296// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP19]]6297// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 16298// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6299// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP19]]6300// CHECK9-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP19]]6301// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP19]]6302// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP22]] to i646303// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP21]], i64 [[IDXPROM]]6304// CHECK9-NEXT:    [[TMP23:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP19]]6305// CHECK9-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP19]]6306// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP19]]6307// CHECK9-NEXT:    [[IDXPROM6:%.*]] = sext i32 [[TMP25]] to i646308// CHECK9-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds double, ptr [[TMP24]], i64 [[IDXPROM6]]6309// CHECK9-NEXT:    [[TMP26:%.*]] = load double, ptr [[ARRAYIDX7]], align 8, !llvm.access.group [[ACC_GRP19]]6310// CHECK9-NEXT:    [[ADD8:%.*]] = fadd double [[TMP23]], [[TMP26]]6311// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP19]]6312// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP19]]6313// CHECK9-NEXT:    [[IDXPROM9:%.*]] = sext i32 [[TMP28]] to i646314// CHECK9-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds double, ptr [[TMP27]], i64 [[IDXPROM9]]6315// CHECK9-NEXT:    store double [[ADD8]], ptr [[ARRAYIDX10]], align 8, !llvm.access.group [[ACC_GRP19]]6316// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6317// CHECK9:       omp.body.continue:6318// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6319// CHECK9:       omp.inner.for.inc:6320// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP19]]6321// CHECK9-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP29]], 16322// CHECK9-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP19]]6323// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP20:![0-9]+]]6324// CHECK9:       omp.inner.for.end:6325// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]6326// CHECK9:       omp.dispatch.inc:6327// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]6328// CHECK9:       omp.dispatch.end:6329// CHECK9-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86330// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[TMP30]], align 46331// CHECK9-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP31]])6332// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6333// CHECK9:       omp.precond.end:6334// CHECK9-NEXT:    ret void6335//6336//6337// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l5626338// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {6339// CHECK9-NEXT:  entry:6340// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 86341// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 86342// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86343// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86344// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86345// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 86346// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 86347// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86348// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86349// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86350// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])6351// CHECK9-NEXT:    ret void6352//6353//6354// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.omp_outlined6355// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {6356// CHECK9-NEXT:  entry:6357// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86358// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86359// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 86360// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86361// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86362// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86363// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86364// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46365// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46366// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46367// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46368// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 46369// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46370// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46371// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46372// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46373// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46374// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 46375// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 86376// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86377// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86378// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 86379// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86380// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86381// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86382// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86383// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 86384// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 86385// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 86386// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 86387// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 86388// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 46389// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 46390// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 46391// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 46392// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46393// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 06394// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16395// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 16396// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 46397// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46398// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46399// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]6400// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6401// CHECK9:       omp.precond.then:6402// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46403// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46404// CHECK9-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 46405// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46406// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46407// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86408// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 46409// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)6410// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46411// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46412// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]6413// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6414// CHECK9:       cond.true:6415// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46416// CHECK9-NEXT:    br label [[COND_END:%.*]]6417// CHECK9:       cond.false:6418// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46419// CHECK9-NEXT:    br label [[COND_END]]6420// CHECK9:       cond.end:6421// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]6422// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46423// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46424// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 46425// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6426// CHECK9:       omp.inner.for.cond:6427// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46428// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46429// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]6430// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6431// CHECK9:       omp.inner.for.body:6432// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46433// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i646434// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46435// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i646436// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46437// CHECK9-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 46438// CHECK9-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 86439// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]])6440// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6441// CHECK9:       omp.inner.for.inc:6442// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46443// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46444// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]6445// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 46446// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]6447// CHECK9:       omp.inner.for.end:6448// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6449// CHECK9:       omp.loop.exit:6450// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86451// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 46452// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])6453// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6454// CHECK9:       omp.precond.end:6455// CHECK9-NEXT:    ret void6456//6457//6458// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.omp_outlined.omp_outlined6459// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]], i64 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] {6460// CHECK9-NEXT:  entry:6461// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86462// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86463// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86464// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86465// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86466// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86467// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86468// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86469// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 86470// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46471// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46472// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46473// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 46474// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46475// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46476// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46477// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46478// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46479// CHECK9-NEXT:    [[I5:%.*]] = alloca i32, align 46480// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86481// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86482// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86483// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86484// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86485// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86486// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86487// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86488// CHECK9-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 86489// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 86490// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 86491// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 86492// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 86493// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 46494// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 46495// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46496// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 06497// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16498// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 16499// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 46500// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46501// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46502// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]6503// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6504// CHECK9:       omp.precond.then:6505// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46506// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46507// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 46508// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86509// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i326510// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86511// CHECK9-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i326512// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46513// CHECK9-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 46514// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46515// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46516// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 46517// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46518// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46519// CHECK9-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86520// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 46521// CHECK9-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])6522// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]6523// CHECK9:       omp.dispatch.cond:6524// CHECK9-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86525// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 46526// CHECK9-NEXT:    [[TMP17:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP16]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])6527// CHECK9-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 06528// CHECK9-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]6529// CHECK9:       omp.dispatch.body:6530// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46531// CHECK9-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 46532// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6533// CHECK9:       omp.inner.for.cond:6534// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22:![0-9]+]]6535// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP22]]6536// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]6537// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6538// CHECK9:       omp.inner.for.body:6539// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22]]6540// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 16541// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6542// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP22]]6543// CHECK9-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP22]]6544// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP22]]6545// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP23]] to i646546// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP22]], i64 [[IDXPROM]]6547// CHECK9-NEXT:    [[TMP24:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP22]]6548// CHECK9-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP22]]6549// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP22]]6550// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP26]] to i646551// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP25]], i64 [[IDXPROM7]]6552// CHECK9-NEXT:    [[TMP27:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP22]]6553// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP24]], [[TMP27]]6554// CHECK9-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP22]]6555// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP22]]6556// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP29]] to i646557// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP28]], i64 [[IDXPROM10]]6558// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP22]]6559// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6560// CHECK9:       omp.body.continue:6561// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6562// CHECK9:       omp.inner.for.inc:6563// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22]]6564// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP30]], 16565// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22]]6566// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP23:![0-9]+]]6567// CHECK9:       omp.inner.for.end:6568// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]6569// CHECK9:       omp.dispatch.inc:6570// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]6571// CHECK9:       omp.dispatch.end:6572// CHECK9-NEXT:    [[TMP31:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86573// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[TMP31]], align 46574// CHECK9-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP32]])6575// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6576// CHECK9:       omp.precond.end:6577// CHECK9-NEXT:    ret void6578//6579//6580// CHECK9-LABEL: define {{[^@]+}}@_Z5tmainIiET_v6581// CHECK9-SAME: () #[[ATTR3:[0-9]+]] comdat {6582// CHECK9-NEXT:  entry:6583// CHECK9-NEXT:    [[A:%.*]] = alloca ptr, align 86584// CHECK9-NEXT:    [[B:%.*]] = alloca ptr, align 86585// CHECK9-NEXT:    [[C:%.*]] = alloca ptr, align 86586// CHECK9-NEXT:    [[N:%.*]] = alloca i32, align 46587// CHECK9-NEXT:    [[CH:%.*]] = alloca i32, align 46588// CHECK9-NEXT:    [[N_CASTED:%.*]] = alloca i64, align 86589// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 86590// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 86591// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 86592// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46593// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46594// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46595// CHECK9-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 86596// CHECK9-NEXT:    [[N_CASTED3:%.*]] = alloca i64, align 86597// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS4:%.*]] = alloca [4 x ptr], align 86598// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS5:%.*]] = alloca [4 x ptr], align 86599// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS6:%.*]] = alloca [4 x ptr], align 86600// CHECK9-NEXT:    [[_TMP7:%.*]] = alloca i32, align 46601// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_8:%.*]] = alloca i32, align 46602// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 46603// CHECK9-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 86604// CHECK9-NEXT:    [[CH_CASTED:%.*]] = alloca i64, align 86605// CHECK9-NEXT:    [[N_CASTED17:%.*]] = alloca i64, align 86606// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS18:%.*]] = alloca [5 x ptr], align 86607// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS19:%.*]] = alloca [5 x ptr], align 86608// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS20:%.*]] = alloca [5 x ptr], align 86609// CHECK9-NEXT:    [[_TMP21:%.*]] = alloca i32, align 46610// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 46611// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_23:%.*]] = alloca i32, align 46612// CHECK9-NEXT:    [[KERNEL_ARGS28:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 86613// CHECK9-NEXT:    [[N_CASTED31:%.*]] = alloca i64, align 86614// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS32:%.*]] = alloca [4 x ptr], align 86615// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS33:%.*]] = alloca [4 x ptr], align 86616// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS34:%.*]] = alloca [4 x ptr], align 86617// CHECK9-NEXT:    [[_TMP35:%.*]] = alloca i32, align 46618// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_36:%.*]] = alloca i32, align 46619// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_37:%.*]] = alloca i32, align 46620// CHECK9-NEXT:    [[KERNEL_ARGS42:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 86621// CHECK9-NEXT:    [[CH_CASTED45:%.*]] = alloca i64, align 86622// CHECK9-NEXT:    [[N_CASTED46:%.*]] = alloca i64, align 86623// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS47:%.*]] = alloca [5 x ptr], align 86624// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS48:%.*]] = alloca [5 x ptr], align 86625// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS49:%.*]] = alloca [5 x ptr], align 86626// CHECK9-NEXT:    [[_TMP50:%.*]] = alloca i32, align 46627// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_51:%.*]] = alloca i32, align 46628// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_52:%.*]] = alloca i32, align 46629// CHECK9-NEXT:    [[KERNEL_ARGS57:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 86630// CHECK9-NEXT:    [[N_CASTED60:%.*]] = alloca i64, align 86631// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS61:%.*]] = alloca [4 x ptr], align 86632// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS62:%.*]] = alloca [4 x ptr], align 86633// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS63:%.*]] = alloca [4 x ptr], align 86634// CHECK9-NEXT:    [[_TMP64:%.*]] = alloca i32, align 46635// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_65:%.*]] = alloca i32, align 46636// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_66:%.*]] = alloca i32, align 46637// CHECK9-NEXT:    [[KERNEL_ARGS71:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 86638// CHECK9-NEXT:    [[CH_CASTED74:%.*]] = alloca i64, align 86639// CHECK9-NEXT:    [[N_CASTED75:%.*]] = alloca i64, align 86640// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS76:%.*]] = alloca [5 x ptr], align 86641// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS77:%.*]] = alloca [5 x ptr], align 86642// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS78:%.*]] = alloca [5 x ptr], align 86643// CHECK9-NEXT:    [[_TMP79:%.*]] = alloca i32, align 46644// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_80:%.*]] = alloca i32, align 46645// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_81:%.*]] = alloca i32, align 46646// CHECK9-NEXT:    [[KERNEL_ARGS86:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 86647// CHECK9-NEXT:    store i32 10000, ptr [[N]], align 46648// CHECK9-NEXT:    store i32 100, ptr [[CH]], align 46649// CHECK9-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 46650// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[N_CASTED]], align 46651// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[N_CASTED]], align 86652// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A]], align 86653// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B]], align 86654// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C]], align 86655// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 06656// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP5]], align 86657// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 06658// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP6]], align 86659// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 06660// CHECK9-NEXT:    store ptr null, ptr [[TMP7]], align 86661// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 16662// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[TMP8]], align 86663// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 16664// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[TMP9]], align 86665// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 16666// CHECK9-NEXT:    store ptr null, ptr [[TMP10]], align 86667// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 26668// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[TMP11]], align 86669// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 26670// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[TMP12]], align 86671// CHECK9-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 26672// CHECK9-NEXT:    store ptr null, ptr [[TMP13]], align 86673// CHECK9-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 36674// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[TMP14]], align 86675// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 36676// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[TMP15]], align 86677// CHECK9-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 36678// CHECK9-NEXT:    store ptr null, ptr [[TMP16]], align 86679// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 06680// CHECK9-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 06681// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 46682// CHECK9-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 46683// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46684// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 06685// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16686// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 16687// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 46688// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46689// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 16690// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i646691// CHECK9-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 06692// CHECK9-NEXT:    store i32 3, ptr [[TMP23]], align 46693// CHECK9-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 16694// CHECK9-NEXT:    store i32 4, ptr [[TMP24]], align 46695// CHECK9-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 26696// CHECK9-NEXT:    store ptr [[TMP17]], ptr [[TMP25]], align 86697// CHECK9-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 36698// CHECK9-NEXT:    store ptr [[TMP18]], ptr [[TMP26]], align 86699// CHECK9-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 46700// CHECK9-NEXT:    store ptr @.offload_sizes.13, ptr [[TMP27]], align 86701// CHECK9-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 56702// CHECK9-NEXT:    store ptr @.offload_maptypes.14, ptr [[TMP28]], align 86703// CHECK9-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 66704// CHECK9-NEXT:    store ptr null, ptr [[TMP29]], align 86705// CHECK9-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 76706// CHECK9-NEXT:    store ptr null, ptr [[TMP30]], align 86707// CHECK9-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 86708// CHECK9-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 86709// CHECK9-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 96710// CHECK9-NEXT:    store i64 0, ptr [[TMP32]], align 86711// CHECK9-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 106712// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 46713// CHECK9-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 116714// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 46715// CHECK9-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 126716// CHECK9-NEXT:    store i32 0, ptr [[TMP35]], align 46717// CHECK9-NEXT:    [[TMP36:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.region_id, ptr [[KERNEL_ARGS]])6718// CHECK9-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 06719// CHECK9-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]6720// CHECK9:       omp_offload.failed:6721// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42(i64 [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]) #[[ATTR2]]6722// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT]]6723// CHECK9:       omp_offload.cont:6724// CHECK9-NEXT:    [[TMP38:%.*]] = load i32, ptr [[N]], align 46725// CHECK9-NEXT:    store i32 [[TMP38]], ptr [[N_CASTED3]], align 46726// CHECK9-NEXT:    [[TMP39:%.*]] = load i64, ptr [[N_CASTED3]], align 86727// CHECK9-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[A]], align 86728// CHECK9-NEXT:    [[TMP41:%.*]] = load ptr, ptr [[B]], align 86729// CHECK9-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[C]], align 86730// CHECK9-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 06731// CHECK9-NEXT:    store i64 [[TMP39]], ptr [[TMP43]], align 86732// CHECK9-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 06733// CHECK9-NEXT:    store i64 [[TMP39]], ptr [[TMP44]], align 86734// CHECK9-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 06735// CHECK9-NEXT:    store ptr null, ptr [[TMP45]], align 86736// CHECK9-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 16737// CHECK9-NEXT:    store ptr [[TMP40]], ptr [[TMP46]], align 86738// CHECK9-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 16739// CHECK9-NEXT:    store ptr [[TMP40]], ptr [[TMP47]], align 86740// CHECK9-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 16741// CHECK9-NEXT:    store ptr null, ptr [[TMP48]], align 86742// CHECK9-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 26743// CHECK9-NEXT:    store ptr [[TMP41]], ptr [[TMP49]], align 86744// CHECK9-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 26745// CHECK9-NEXT:    store ptr [[TMP41]], ptr [[TMP50]], align 86746// CHECK9-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 26747// CHECK9-NEXT:    store ptr null, ptr [[TMP51]], align 86748// CHECK9-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 36749// CHECK9-NEXT:    store ptr [[TMP42]], ptr [[TMP52]], align 86750// CHECK9-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 36751// CHECK9-NEXT:    store ptr [[TMP42]], ptr [[TMP53]], align 86752// CHECK9-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 36753// CHECK9-NEXT:    store ptr null, ptr [[TMP54]], align 86754// CHECK9-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 06755// CHECK9-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 06756// CHECK9-NEXT:    [[TMP57:%.*]] = load i32, ptr [[N]], align 46757// CHECK9-NEXT:    store i32 [[TMP57]], ptr [[DOTCAPTURE_EXPR_8]], align 46758// CHECK9-NEXT:    [[TMP58:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_8]], align 46759// CHECK9-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP58]], 06760// CHECK9-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 16761// CHECK9-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[DIV11]], 16762// CHECK9-NEXT:    store i32 [[SUB12]], ptr [[DOTCAPTURE_EXPR_9]], align 46763// CHECK9-NEXT:    [[TMP59:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 46764// CHECK9-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP59]], 16765// CHECK9-NEXT:    [[TMP60:%.*]] = zext i32 [[ADD13]] to i646766// CHECK9-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 06767// CHECK9-NEXT:    store i32 3, ptr [[TMP61]], align 46768// CHECK9-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 16769// CHECK9-NEXT:    store i32 4, ptr [[TMP62]], align 46770// CHECK9-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 26771// CHECK9-NEXT:    store ptr [[TMP55]], ptr [[TMP63]], align 86772// CHECK9-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 36773// CHECK9-NEXT:    store ptr [[TMP56]], ptr [[TMP64]], align 86774// CHECK9-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 46775// CHECK9-NEXT:    store ptr @.offload_sizes.15, ptr [[TMP65]], align 86776// CHECK9-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 56777// CHECK9-NEXT:    store ptr @.offload_maptypes.16, ptr [[TMP66]], align 86778// CHECK9-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 66779// CHECK9-NEXT:    store ptr null, ptr [[TMP67]], align 86780// CHECK9-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 76781// CHECK9-NEXT:    store ptr null, ptr [[TMP68]], align 86782// CHECK9-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 86783// CHECK9-NEXT:    store i64 [[TMP60]], ptr [[TMP69]], align 86784// CHECK9-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 96785// CHECK9-NEXT:    store i64 0, ptr [[TMP70]], align 86786// CHECK9-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 106787// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP71]], align 46788// CHECK9-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 116789// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP72]], align 46790// CHECK9-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 126791// CHECK9-NEXT:    store i32 0, ptr [[TMP73]], align 46792// CHECK9-NEXT:    [[TMP74:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.region_id, ptr [[KERNEL_ARGS14]])6793// CHECK9-NEXT:    [[TMP75:%.*]] = icmp ne i32 [[TMP74]], 06794// CHECK9-NEXT:    br i1 [[TMP75]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]6795// CHECK9:       omp_offload.failed15:6796// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51(i64 [[TMP39]], ptr [[TMP40]], ptr [[TMP41]], ptr [[TMP42]]) #[[ATTR2]]6797// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT16]]6798// CHECK9:       omp_offload.cont16:6799// CHECK9-NEXT:    [[TMP76:%.*]] = load i32, ptr [[CH]], align 46800// CHECK9-NEXT:    store i32 [[TMP76]], ptr [[CH_CASTED]], align 46801// CHECK9-NEXT:    [[TMP77:%.*]] = load i64, ptr [[CH_CASTED]], align 86802// CHECK9-NEXT:    [[TMP78:%.*]] = load i32, ptr [[N]], align 46803// CHECK9-NEXT:    store i32 [[TMP78]], ptr [[N_CASTED17]], align 46804// CHECK9-NEXT:    [[TMP79:%.*]] = load i64, ptr [[N_CASTED17]], align 86805// CHECK9-NEXT:    [[TMP80:%.*]] = load ptr, ptr [[A]], align 86806// CHECK9-NEXT:    [[TMP81:%.*]] = load ptr, ptr [[B]], align 86807// CHECK9-NEXT:    [[TMP82:%.*]] = load ptr, ptr [[C]], align 86808// CHECK9-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 06809// CHECK9-NEXT:    store i64 [[TMP77]], ptr [[TMP83]], align 86810// CHECK9-NEXT:    [[TMP84:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 06811// CHECK9-NEXT:    store i64 [[TMP77]], ptr [[TMP84]], align 86812// CHECK9-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 06813// CHECK9-NEXT:    store ptr null, ptr [[TMP85]], align 86814// CHECK9-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 16815// CHECK9-NEXT:    store i64 [[TMP79]], ptr [[TMP86]], align 86816// CHECK9-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 16817// CHECK9-NEXT:    store i64 [[TMP79]], ptr [[TMP87]], align 86818// CHECK9-NEXT:    [[TMP88:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 16819// CHECK9-NEXT:    store ptr null, ptr [[TMP88]], align 86820// CHECK9-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 26821// CHECK9-NEXT:    store ptr [[TMP80]], ptr [[TMP89]], align 86822// CHECK9-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 26823// CHECK9-NEXT:    store ptr [[TMP80]], ptr [[TMP90]], align 86824// CHECK9-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 26825// CHECK9-NEXT:    store ptr null, ptr [[TMP91]], align 86826// CHECK9-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 36827// CHECK9-NEXT:    store ptr [[TMP81]], ptr [[TMP92]], align 86828// CHECK9-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 36829// CHECK9-NEXT:    store ptr [[TMP81]], ptr [[TMP93]], align 86830// CHECK9-NEXT:    [[TMP94:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 36831// CHECK9-NEXT:    store ptr null, ptr [[TMP94]], align 86832// CHECK9-NEXT:    [[TMP95:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 46833// CHECK9-NEXT:    store ptr [[TMP82]], ptr [[TMP95]], align 86834// CHECK9-NEXT:    [[TMP96:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 46835// CHECK9-NEXT:    store ptr [[TMP82]], ptr [[TMP96]], align 86836// CHECK9-NEXT:    [[TMP97:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 46837// CHECK9-NEXT:    store ptr null, ptr [[TMP97]], align 86838// CHECK9-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 06839// CHECK9-NEXT:    [[TMP99:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 06840// CHECK9-NEXT:    [[TMP100:%.*]] = load i32, ptr [[N]], align 46841// CHECK9-NEXT:    store i32 [[TMP100]], ptr [[DOTCAPTURE_EXPR_22]], align 46842// CHECK9-NEXT:    [[TMP101:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 46843// CHECK9-NEXT:    [[SUB24:%.*]] = sub nsw i32 [[TMP101]], 06844// CHECK9-NEXT:    [[DIV25:%.*]] = sdiv i32 [[SUB24]], 16845// CHECK9-NEXT:    [[SUB26:%.*]] = sub nsw i32 [[DIV25]], 16846// CHECK9-NEXT:    store i32 [[SUB26]], ptr [[DOTCAPTURE_EXPR_23]], align 46847// CHECK9-NEXT:    [[TMP102:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_23]], align 46848// CHECK9-NEXT:    [[ADD27:%.*]] = add nsw i32 [[TMP102]], 16849// CHECK9-NEXT:    [[TMP103:%.*]] = zext i32 [[ADD27]] to i646850// CHECK9-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 06851// CHECK9-NEXT:    store i32 3, ptr [[TMP104]], align 46852// CHECK9-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 16853// CHECK9-NEXT:    store i32 5, ptr [[TMP105]], align 46854// CHECK9-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 26855// CHECK9-NEXT:    store ptr [[TMP98]], ptr [[TMP106]], align 86856// CHECK9-NEXT:    [[TMP107:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 36857// CHECK9-NEXT:    store ptr [[TMP99]], ptr [[TMP107]], align 86858// CHECK9-NEXT:    [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 46859// CHECK9-NEXT:    store ptr @.offload_sizes.17, ptr [[TMP108]], align 86860// CHECK9-NEXT:    [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 56861// CHECK9-NEXT:    store ptr @.offload_maptypes.18, ptr [[TMP109]], align 86862// CHECK9-NEXT:    [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 66863// CHECK9-NEXT:    store ptr null, ptr [[TMP110]], align 86864// CHECK9-NEXT:    [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 76865// CHECK9-NEXT:    store ptr null, ptr [[TMP111]], align 86866// CHECK9-NEXT:    [[TMP112:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 86867// CHECK9-NEXT:    store i64 [[TMP103]], ptr [[TMP112]], align 86868// CHECK9-NEXT:    [[TMP113:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 96869// CHECK9-NEXT:    store i64 0, ptr [[TMP113]], align 86870// CHECK9-NEXT:    [[TMP114:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 106871// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP114]], align 46872// CHECK9-NEXT:    [[TMP115:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 116873// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP115]], align 46874// CHECK9-NEXT:    [[TMP116:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 126875// CHECK9-NEXT:    store i32 0, ptr [[TMP116]], align 46876// CHECK9-NEXT:    [[TMP117:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.region_id, ptr [[KERNEL_ARGS28]])6877// CHECK9-NEXT:    [[TMP118:%.*]] = icmp ne i32 [[TMP117]], 06878// CHECK9-NEXT:    br i1 [[TMP118]], label [[OMP_OFFLOAD_FAILED29:%.*]], label [[OMP_OFFLOAD_CONT30:%.*]]6879// CHECK9:       omp_offload.failed29:6880// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59(i64 [[TMP77]], i64 [[TMP79]], ptr [[TMP80]], ptr [[TMP81]], ptr [[TMP82]]) #[[ATTR2]]6881// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT30]]6882// CHECK9:       omp_offload.cont30:6883// CHECK9-NEXT:    [[TMP119:%.*]] = load i32, ptr [[N]], align 46884// CHECK9-NEXT:    store i32 [[TMP119]], ptr [[N_CASTED31]], align 46885// CHECK9-NEXT:    [[TMP120:%.*]] = load i64, ptr [[N_CASTED31]], align 86886// CHECK9-NEXT:    [[TMP121:%.*]] = load ptr, ptr [[A]], align 86887// CHECK9-NEXT:    [[TMP122:%.*]] = load ptr, ptr [[B]], align 86888// CHECK9-NEXT:    [[TMP123:%.*]] = load ptr, ptr [[C]], align 86889// CHECK9-NEXT:    [[TMP124:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 06890// CHECK9-NEXT:    store i64 [[TMP120]], ptr [[TMP124]], align 86891// CHECK9-NEXT:    [[TMP125:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 06892// CHECK9-NEXT:    store i64 [[TMP120]], ptr [[TMP125]], align 86893// CHECK9-NEXT:    [[TMP126:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 06894// CHECK9-NEXT:    store ptr null, ptr [[TMP126]], align 86895// CHECK9-NEXT:    [[TMP127:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 16896// CHECK9-NEXT:    store ptr [[TMP121]], ptr [[TMP127]], align 86897// CHECK9-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 16898// CHECK9-NEXT:    store ptr [[TMP121]], ptr [[TMP128]], align 86899// CHECK9-NEXT:    [[TMP129:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 16900// CHECK9-NEXT:    store ptr null, ptr [[TMP129]], align 86901// CHECK9-NEXT:    [[TMP130:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 26902// CHECK9-NEXT:    store ptr [[TMP122]], ptr [[TMP130]], align 86903// CHECK9-NEXT:    [[TMP131:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 26904// CHECK9-NEXT:    store ptr [[TMP122]], ptr [[TMP131]], align 86905// CHECK9-NEXT:    [[TMP132:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 26906// CHECK9-NEXT:    store ptr null, ptr [[TMP132]], align 86907// CHECK9-NEXT:    [[TMP133:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 36908// CHECK9-NEXT:    store ptr [[TMP123]], ptr [[TMP133]], align 86909// CHECK9-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 36910// CHECK9-NEXT:    store ptr [[TMP123]], ptr [[TMP134]], align 86911// CHECK9-NEXT:    [[TMP135:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 36912// CHECK9-NEXT:    store ptr null, ptr [[TMP135]], align 86913// CHECK9-NEXT:    [[TMP136:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 06914// CHECK9-NEXT:    [[TMP137:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 06915// CHECK9-NEXT:    [[TMP138:%.*]] = load i32, ptr [[N]], align 46916// CHECK9-NEXT:    store i32 [[TMP138]], ptr [[DOTCAPTURE_EXPR_36]], align 46917// CHECK9-NEXT:    [[TMP139:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_36]], align 46918// CHECK9-NEXT:    [[SUB38:%.*]] = sub nsw i32 [[TMP139]], 06919// CHECK9-NEXT:    [[DIV39:%.*]] = sdiv i32 [[SUB38]], 16920// CHECK9-NEXT:    [[SUB40:%.*]] = sub nsw i32 [[DIV39]], 16921// CHECK9-NEXT:    store i32 [[SUB40]], ptr [[DOTCAPTURE_EXPR_37]], align 46922// CHECK9-NEXT:    [[TMP140:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_37]], align 46923// CHECK9-NEXT:    [[ADD41:%.*]] = add nsw i32 [[TMP140]], 16924// CHECK9-NEXT:    [[TMP141:%.*]] = zext i32 [[ADD41]] to i646925// CHECK9-NEXT:    [[TMP142:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 06926// CHECK9-NEXT:    store i32 3, ptr [[TMP142]], align 46927// CHECK9-NEXT:    [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 16928// CHECK9-NEXT:    store i32 4, ptr [[TMP143]], align 46929// CHECK9-NEXT:    [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 26930// CHECK9-NEXT:    store ptr [[TMP136]], ptr [[TMP144]], align 86931// CHECK9-NEXT:    [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 36932// CHECK9-NEXT:    store ptr [[TMP137]], ptr [[TMP145]], align 86933// CHECK9-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 46934// CHECK9-NEXT:    store ptr @.offload_sizes.19, ptr [[TMP146]], align 86935// CHECK9-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 56936// CHECK9-NEXT:    store ptr @.offload_maptypes.20, ptr [[TMP147]], align 86937// CHECK9-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 66938// CHECK9-NEXT:    store ptr null, ptr [[TMP148]], align 86939// CHECK9-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 76940// CHECK9-NEXT:    store ptr null, ptr [[TMP149]], align 86941// CHECK9-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 86942// CHECK9-NEXT:    store i64 [[TMP141]], ptr [[TMP150]], align 86943// CHECK9-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 96944// CHECK9-NEXT:    store i64 0, ptr [[TMP151]], align 86945// CHECK9-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 106946// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP152]], align 46947// CHECK9-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 116948// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP153]], align 46949// CHECK9-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 126950// CHECK9-NEXT:    store i32 0, ptr [[TMP154]], align 46951// CHECK9-NEXT:    [[TMP155:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.region_id, ptr [[KERNEL_ARGS42]])6952// CHECK9-NEXT:    [[TMP156:%.*]] = icmp ne i32 [[TMP155]], 06953// CHECK9-NEXT:    br i1 [[TMP156]], label [[OMP_OFFLOAD_FAILED43:%.*]], label [[OMP_OFFLOAD_CONT44:%.*]]6954// CHECK9:       omp_offload.failed43:6955// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67(i64 [[TMP120]], ptr [[TMP121]], ptr [[TMP122]], ptr [[TMP123]]) #[[ATTR2]]6956// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT44]]6957// CHECK9:       omp_offload.cont44:6958// CHECK9-NEXT:    [[TMP157:%.*]] = load i32, ptr [[CH]], align 46959// CHECK9-NEXT:    store i32 [[TMP157]], ptr [[CH_CASTED45]], align 46960// CHECK9-NEXT:    [[TMP158:%.*]] = load i64, ptr [[CH_CASTED45]], align 86961// CHECK9-NEXT:    [[TMP159:%.*]] = load i32, ptr [[N]], align 46962// CHECK9-NEXT:    store i32 [[TMP159]], ptr [[N_CASTED46]], align 46963// CHECK9-NEXT:    [[TMP160:%.*]] = load i64, ptr [[N_CASTED46]], align 86964// CHECK9-NEXT:    [[TMP161:%.*]] = load ptr, ptr [[A]], align 86965// CHECK9-NEXT:    [[TMP162:%.*]] = load ptr, ptr [[B]], align 86966// CHECK9-NEXT:    [[TMP163:%.*]] = load ptr, ptr [[C]], align 86967// CHECK9-NEXT:    [[TMP164:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 06968// CHECK9-NEXT:    store i64 [[TMP158]], ptr [[TMP164]], align 86969// CHECK9-NEXT:    [[TMP165:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 06970// CHECK9-NEXT:    store i64 [[TMP158]], ptr [[TMP165]], align 86971// CHECK9-NEXT:    [[TMP166:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 06972// CHECK9-NEXT:    store ptr null, ptr [[TMP166]], align 86973// CHECK9-NEXT:    [[TMP167:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 16974// CHECK9-NEXT:    store i64 [[TMP160]], ptr [[TMP167]], align 86975// CHECK9-NEXT:    [[TMP168:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 16976// CHECK9-NEXT:    store i64 [[TMP160]], ptr [[TMP168]], align 86977// CHECK9-NEXT:    [[TMP169:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 16978// CHECK9-NEXT:    store ptr null, ptr [[TMP169]], align 86979// CHECK9-NEXT:    [[TMP170:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 26980// CHECK9-NEXT:    store ptr [[TMP161]], ptr [[TMP170]], align 86981// CHECK9-NEXT:    [[TMP171:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 26982// CHECK9-NEXT:    store ptr [[TMP161]], ptr [[TMP171]], align 86983// CHECK9-NEXT:    [[TMP172:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 26984// CHECK9-NEXT:    store ptr null, ptr [[TMP172]], align 86985// CHECK9-NEXT:    [[TMP173:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 36986// CHECK9-NEXT:    store ptr [[TMP162]], ptr [[TMP173]], align 86987// CHECK9-NEXT:    [[TMP174:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 36988// CHECK9-NEXT:    store ptr [[TMP162]], ptr [[TMP174]], align 86989// CHECK9-NEXT:    [[TMP175:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 36990// CHECK9-NEXT:    store ptr null, ptr [[TMP175]], align 86991// CHECK9-NEXT:    [[TMP176:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 46992// CHECK9-NEXT:    store ptr [[TMP163]], ptr [[TMP176]], align 86993// CHECK9-NEXT:    [[TMP177:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 46994// CHECK9-NEXT:    store ptr [[TMP163]], ptr [[TMP177]], align 86995// CHECK9-NEXT:    [[TMP178:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 46996// CHECK9-NEXT:    store ptr null, ptr [[TMP178]], align 86997// CHECK9-NEXT:    [[TMP179:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 06998// CHECK9-NEXT:    [[TMP180:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 06999// CHECK9-NEXT:    [[TMP181:%.*]] = load i32, ptr [[N]], align 47000// CHECK9-NEXT:    store i32 [[TMP181]], ptr [[DOTCAPTURE_EXPR_51]], align 47001// CHECK9-NEXT:    [[TMP182:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_51]], align 47002// CHECK9-NEXT:    [[SUB53:%.*]] = sub nsw i32 [[TMP182]], 07003// CHECK9-NEXT:    [[DIV54:%.*]] = sdiv i32 [[SUB53]], 17004// CHECK9-NEXT:    [[SUB55:%.*]] = sub nsw i32 [[DIV54]], 17005// CHECK9-NEXT:    store i32 [[SUB55]], ptr [[DOTCAPTURE_EXPR_52]], align 47006// CHECK9-NEXT:    [[TMP183:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_52]], align 47007// CHECK9-NEXT:    [[ADD56:%.*]] = add nsw i32 [[TMP183]], 17008// CHECK9-NEXT:    [[TMP184:%.*]] = zext i32 [[ADD56]] to i647009// CHECK9-NEXT:    [[TMP185:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 07010// CHECK9-NEXT:    store i32 3, ptr [[TMP185]], align 47011// CHECK9-NEXT:    [[TMP186:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 17012// CHECK9-NEXT:    store i32 5, ptr [[TMP186]], align 47013// CHECK9-NEXT:    [[TMP187:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 27014// CHECK9-NEXT:    store ptr [[TMP179]], ptr [[TMP187]], align 87015// CHECK9-NEXT:    [[TMP188:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 37016// CHECK9-NEXT:    store ptr [[TMP180]], ptr [[TMP188]], align 87017// CHECK9-NEXT:    [[TMP189:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 47018// CHECK9-NEXT:    store ptr @.offload_sizes.21, ptr [[TMP189]], align 87019// CHECK9-NEXT:    [[TMP190:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 57020// CHECK9-NEXT:    store ptr @.offload_maptypes.22, ptr [[TMP190]], align 87021// CHECK9-NEXT:    [[TMP191:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 67022// CHECK9-NEXT:    store ptr null, ptr [[TMP191]], align 87023// CHECK9-NEXT:    [[TMP192:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 77024// CHECK9-NEXT:    store ptr null, ptr [[TMP192]], align 87025// CHECK9-NEXT:    [[TMP193:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 87026// CHECK9-NEXT:    store i64 [[TMP184]], ptr [[TMP193]], align 87027// CHECK9-NEXT:    [[TMP194:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 97028// CHECK9-NEXT:    store i64 0, ptr [[TMP194]], align 87029// CHECK9-NEXT:    [[TMP195:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 107030// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP195]], align 47031// CHECK9-NEXT:    [[TMP196:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 117032// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP196]], align 47033// CHECK9-NEXT:    [[TMP197:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 127034// CHECK9-NEXT:    store i32 0, ptr [[TMP197]], align 47035// CHECK9-NEXT:    [[TMP198:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.region_id, ptr [[KERNEL_ARGS57]])7036// CHECK9-NEXT:    [[TMP199:%.*]] = icmp ne i32 [[TMP198]], 07037// CHECK9-NEXT:    br i1 [[TMP199]], label [[OMP_OFFLOAD_FAILED58:%.*]], label [[OMP_OFFLOAD_CONT59:%.*]]7038// CHECK9:       omp_offload.failed58:7039// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75(i64 [[TMP158]], i64 [[TMP160]], ptr [[TMP161]], ptr [[TMP162]], ptr [[TMP163]]) #[[ATTR2]]7040// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT59]]7041// CHECK9:       omp_offload.cont59:7042// CHECK9-NEXT:    [[TMP200:%.*]] = load i32, ptr [[N]], align 47043// CHECK9-NEXT:    store i32 [[TMP200]], ptr [[N_CASTED60]], align 47044// CHECK9-NEXT:    [[TMP201:%.*]] = load i64, ptr [[N_CASTED60]], align 87045// CHECK9-NEXT:    [[TMP202:%.*]] = load ptr, ptr [[A]], align 87046// CHECK9-NEXT:    [[TMP203:%.*]] = load ptr, ptr [[B]], align 87047// CHECK9-NEXT:    [[TMP204:%.*]] = load ptr, ptr [[C]], align 87048// CHECK9-NEXT:    [[TMP205:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 07049// CHECK9-NEXT:    store i64 [[TMP201]], ptr [[TMP205]], align 87050// CHECK9-NEXT:    [[TMP206:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 07051// CHECK9-NEXT:    store i64 [[TMP201]], ptr [[TMP206]], align 87052// CHECK9-NEXT:    [[TMP207:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 07053// CHECK9-NEXT:    store ptr null, ptr [[TMP207]], align 87054// CHECK9-NEXT:    [[TMP208:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 17055// CHECK9-NEXT:    store ptr [[TMP202]], ptr [[TMP208]], align 87056// CHECK9-NEXT:    [[TMP209:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 17057// CHECK9-NEXT:    store ptr [[TMP202]], ptr [[TMP209]], align 87058// CHECK9-NEXT:    [[TMP210:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 17059// CHECK9-NEXT:    store ptr null, ptr [[TMP210]], align 87060// CHECK9-NEXT:    [[TMP211:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 27061// CHECK9-NEXT:    store ptr [[TMP203]], ptr [[TMP211]], align 87062// CHECK9-NEXT:    [[TMP212:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 27063// CHECK9-NEXT:    store ptr [[TMP203]], ptr [[TMP212]], align 87064// CHECK9-NEXT:    [[TMP213:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 27065// CHECK9-NEXT:    store ptr null, ptr [[TMP213]], align 87066// CHECK9-NEXT:    [[TMP214:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 37067// CHECK9-NEXT:    store ptr [[TMP204]], ptr [[TMP214]], align 87068// CHECK9-NEXT:    [[TMP215:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 37069// CHECK9-NEXT:    store ptr [[TMP204]], ptr [[TMP215]], align 87070// CHECK9-NEXT:    [[TMP216:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 37071// CHECK9-NEXT:    store ptr null, ptr [[TMP216]], align 87072// CHECK9-NEXT:    [[TMP217:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 07073// CHECK9-NEXT:    [[TMP218:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 07074// CHECK9-NEXT:    [[TMP219:%.*]] = load i32, ptr [[N]], align 47075// CHECK9-NEXT:    store i32 [[TMP219]], ptr [[DOTCAPTURE_EXPR_65]], align 47076// CHECK9-NEXT:    [[TMP220:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_65]], align 47077// CHECK9-NEXT:    [[SUB67:%.*]] = sub nsw i32 [[TMP220]], 07078// CHECK9-NEXT:    [[DIV68:%.*]] = sdiv i32 [[SUB67]], 17079// CHECK9-NEXT:    [[SUB69:%.*]] = sub nsw i32 [[DIV68]], 17080// CHECK9-NEXT:    store i32 [[SUB69]], ptr [[DOTCAPTURE_EXPR_66]], align 47081// CHECK9-NEXT:    [[TMP221:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_66]], align 47082// CHECK9-NEXT:    [[ADD70:%.*]] = add nsw i32 [[TMP221]], 17083// CHECK9-NEXT:    [[TMP222:%.*]] = zext i32 [[ADD70]] to i647084// CHECK9-NEXT:    [[TMP223:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 07085// CHECK9-NEXT:    store i32 3, ptr [[TMP223]], align 47086// CHECK9-NEXT:    [[TMP224:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 17087// CHECK9-NEXT:    store i32 4, ptr [[TMP224]], align 47088// CHECK9-NEXT:    [[TMP225:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 27089// CHECK9-NEXT:    store ptr [[TMP217]], ptr [[TMP225]], align 87090// CHECK9-NEXT:    [[TMP226:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 37091// CHECK9-NEXT:    store ptr [[TMP218]], ptr [[TMP226]], align 87092// CHECK9-NEXT:    [[TMP227:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 47093// CHECK9-NEXT:    store ptr @.offload_sizes.23, ptr [[TMP227]], align 87094// CHECK9-NEXT:    [[TMP228:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 57095// CHECK9-NEXT:    store ptr @.offload_maptypes.24, ptr [[TMP228]], align 87096// CHECK9-NEXT:    [[TMP229:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 67097// CHECK9-NEXT:    store ptr null, ptr [[TMP229]], align 87098// CHECK9-NEXT:    [[TMP230:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 77099// CHECK9-NEXT:    store ptr null, ptr [[TMP230]], align 87100// CHECK9-NEXT:    [[TMP231:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 87101// CHECK9-NEXT:    store i64 [[TMP222]], ptr [[TMP231]], align 87102// CHECK9-NEXT:    [[TMP232:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 97103// CHECK9-NEXT:    store i64 0, ptr [[TMP232]], align 87104// CHECK9-NEXT:    [[TMP233:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 107105// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP233]], align 47106// CHECK9-NEXT:    [[TMP234:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 117107// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP234]], align 47108// CHECK9-NEXT:    [[TMP235:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 127109// CHECK9-NEXT:    store i32 0, ptr [[TMP235]], align 47110// CHECK9-NEXT:    [[TMP236:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.region_id, ptr [[KERNEL_ARGS71]])7111// CHECK9-NEXT:    [[TMP237:%.*]] = icmp ne i32 [[TMP236]], 07112// CHECK9-NEXT:    br i1 [[TMP237]], label [[OMP_OFFLOAD_FAILED72:%.*]], label [[OMP_OFFLOAD_CONT73:%.*]]7113// CHECK9:       omp_offload.failed72:7114// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83(i64 [[TMP201]], ptr [[TMP202]], ptr [[TMP203]], ptr [[TMP204]]) #[[ATTR2]]7115// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT73]]7116// CHECK9:       omp_offload.cont73:7117// CHECK9-NEXT:    [[TMP238:%.*]] = load i32, ptr [[CH]], align 47118// CHECK9-NEXT:    store i32 [[TMP238]], ptr [[CH_CASTED74]], align 47119// CHECK9-NEXT:    [[TMP239:%.*]] = load i64, ptr [[CH_CASTED74]], align 87120// CHECK9-NEXT:    [[TMP240:%.*]] = load i32, ptr [[N]], align 47121// CHECK9-NEXT:    store i32 [[TMP240]], ptr [[N_CASTED75]], align 47122// CHECK9-NEXT:    [[TMP241:%.*]] = load i64, ptr [[N_CASTED75]], align 87123// CHECK9-NEXT:    [[TMP242:%.*]] = load ptr, ptr [[A]], align 87124// CHECK9-NEXT:    [[TMP243:%.*]] = load ptr, ptr [[B]], align 87125// CHECK9-NEXT:    [[TMP244:%.*]] = load ptr, ptr [[C]], align 87126// CHECK9-NEXT:    [[TMP245:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 07127// CHECK9-NEXT:    store i64 [[TMP239]], ptr [[TMP245]], align 87128// CHECK9-NEXT:    [[TMP246:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 07129// CHECK9-NEXT:    store i64 [[TMP239]], ptr [[TMP246]], align 87130// CHECK9-NEXT:    [[TMP247:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 07131// CHECK9-NEXT:    store ptr null, ptr [[TMP247]], align 87132// CHECK9-NEXT:    [[TMP248:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 17133// CHECK9-NEXT:    store i64 [[TMP241]], ptr [[TMP248]], align 87134// CHECK9-NEXT:    [[TMP249:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 17135// CHECK9-NEXT:    store i64 [[TMP241]], ptr [[TMP249]], align 87136// CHECK9-NEXT:    [[TMP250:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 17137// CHECK9-NEXT:    store ptr null, ptr [[TMP250]], align 87138// CHECK9-NEXT:    [[TMP251:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 27139// CHECK9-NEXT:    store ptr [[TMP242]], ptr [[TMP251]], align 87140// CHECK9-NEXT:    [[TMP252:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 27141// CHECK9-NEXT:    store ptr [[TMP242]], ptr [[TMP252]], align 87142// CHECK9-NEXT:    [[TMP253:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 27143// CHECK9-NEXT:    store ptr null, ptr [[TMP253]], align 87144// CHECK9-NEXT:    [[TMP254:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 37145// CHECK9-NEXT:    store ptr [[TMP243]], ptr [[TMP254]], align 87146// CHECK9-NEXT:    [[TMP255:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 37147// CHECK9-NEXT:    store ptr [[TMP243]], ptr [[TMP255]], align 87148// CHECK9-NEXT:    [[TMP256:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 37149// CHECK9-NEXT:    store ptr null, ptr [[TMP256]], align 87150// CHECK9-NEXT:    [[TMP257:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 47151// CHECK9-NEXT:    store ptr [[TMP244]], ptr [[TMP257]], align 87152// CHECK9-NEXT:    [[TMP258:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 47153// CHECK9-NEXT:    store ptr [[TMP244]], ptr [[TMP258]], align 87154// CHECK9-NEXT:    [[TMP259:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 47155// CHECK9-NEXT:    store ptr null, ptr [[TMP259]], align 87156// CHECK9-NEXT:    [[TMP260:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 07157// CHECK9-NEXT:    [[TMP261:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 07158// CHECK9-NEXT:    [[TMP262:%.*]] = load i32, ptr [[N]], align 47159// CHECK9-NEXT:    store i32 [[TMP262]], ptr [[DOTCAPTURE_EXPR_80]], align 47160// CHECK9-NEXT:    [[TMP263:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_80]], align 47161// CHECK9-NEXT:    [[SUB82:%.*]] = sub nsw i32 [[TMP263]], 07162// CHECK9-NEXT:    [[DIV83:%.*]] = sdiv i32 [[SUB82]], 17163// CHECK9-NEXT:    [[SUB84:%.*]] = sub nsw i32 [[DIV83]], 17164// CHECK9-NEXT:    store i32 [[SUB84]], ptr [[DOTCAPTURE_EXPR_81]], align 47165// CHECK9-NEXT:    [[TMP264:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_81]], align 47166// CHECK9-NEXT:    [[ADD85:%.*]] = add nsw i32 [[TMP264]], 17167// CHECK9-NEXT:    [[TMP265:%.*]] = zext i32 [[ADD85]] to i647168// CHECK9-NEXT:    [[TMP266:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 07169// CHECK9-NEXT:    store i32 3, ptr [[TMP266]], align 47170// CHECK9-NEXT:    [[TMP267:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 17171// CHECK9-NEXT:    store i32 5, ptr [[TMP267]], align 47172// CHECK9-NEXT:    [[TMP268:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 27173// CHECK9-NEXT:    store ptr [[TMP260]], ptr [[TMP268]], align 87174// CHECK9-NEXT:    [[TMP269:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 37175// CHECK9-NEXT:    store ptr [[TMP261]], ptr [[TMP269]], align 87176// CHECK9-NEXT:    [[TMP270:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 47177// CHECK9-NEXT:    store ptr @.offload_sizes.25, ptr [[TMP270]], align 87178// CHECK9-NEXT:    [[TMP271:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 57179// CHECK9-NEXT:    store ptr @.offload_maptypes.26, ptr [[TMP271]], align 87180// CHECK9-NEXT:    [[TMP272:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 67181// CHECK9-NEXT:    store ptr null, ptr [[TMP272]], align 87182// CHECK9-NEXT:    [[TMP273:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 77183// CHECK9-NEXT:    store ptr null, ptr [[TMP273]], align 87184// CHECK9-NEXT:    [[TMP274:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 87185// CHECK9-NEXT:    store i64 [[TMP265]], ptr [[TMP274]], align 87186// CHECK9-NEXT:    [[TMP275:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 97187// CHECK9-NEXT:    store i64 0, ptr [[TMP275]], align 87188// CHECK9-NEXT:    [[TMP276:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 107189// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP276]], align 47190// CHECK9-NEXT:    [[TMP277:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 117191// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP277]], align 47192// CHECK9-NEXT:    [[TMP278:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 127193// CHECK9-NEXT:    store i32 0, ptr [[TMP278]], align 47194// CHECK9-NEXT:    [[TMP279:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.region_id, ptr [[KERNEL_ARGS86]])7195// CHECK9-NEXT:    [[TMP280:%.*]] = icmp ne i32 [[TMP279]], 07196// CHECK9-NEXT:    br i1 [[TMP280]], label [[OMP_OFFLOAD_FAILED87:%.*]], label [[OMP_OFFLOAD_CONT88:%.*]]7197// CHECK9:       omp_offload.failed87:7198// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91(i64 [[TMP239]], i64 [[TMP241]], ptr [[TMP242]], ptr [[TMP243]], ptr [[TMP244]]) #[[ATTR2]]7199// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT88]]7200// CHECK9:       omp_offload.cont88:7201// CHECK9-NEXT:    ret i32 07202//7203//7204// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l427205// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {7206// CHECK9-NEXT:  entry:7207// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 87208// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87209// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87210// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87211// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 87212// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87213// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87214// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87215// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])7216// CHECK9-NEXT:    ret void7217//7218//7219// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined7220// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {7221// CHECK9-NEXT:  entry:7222// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87223// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87224// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87225// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87226// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87227// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87228// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47229// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47230// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47231// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47232// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47233// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 47234// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 47235// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47236// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47237// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 47238// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87239// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87240// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87241// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87242// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87243// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87244// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 87245// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 87246// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 87247// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 87248// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 47249// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 47250// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47251// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 07252// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17253// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17254// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47255// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47256// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47257// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]7258// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7259// CHECK9:       omp.precond.then:7260// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 47261// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47262// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 47263// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47264// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47265// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87266// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 47267// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7268// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47269// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47270// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]7271// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7272// CHECK9:       cond.true:7273// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47274// CHECK9-NEXT:    br label [[COND_END:%.*]]7275// CHECK9:       cond.false:7276// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47277// CHECK9-NEXT:    br label [[COND_END]]7278// CHECK9:       cond.end:7279// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]7280// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 47281// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47282// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 47283// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7284// CHECK9:       omp.inner.for.cond:7285// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47286// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47287// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]7288// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7289// CHECK9:       omp.inner.for.body:7290// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47291// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i647292// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47293// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i647294// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])7295// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7296// CHECK9:       omp.inner.for.inc:7297// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47298// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 47299// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]7300// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 47301// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]7302// CHECK9:       omp.inner.for.end:7303// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7304// CHECK9:       omp.loop.exit:7305// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87306// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 47307// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])7308// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]7309// CHECK9:       omp.precond.end:7310// CHECK9-NEXT:    ret void7311//7312//7313// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined.omp_outlined7314// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {7315// CHECK9-NEXT:  entry:7316// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87317// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87318// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 87319// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 87320// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87321// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87322// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87323// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87324// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47325// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47326// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47327// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47328// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47329// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 47330// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 47331// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47332// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47333// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 47334// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87335// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87336// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 87337// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 87338// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87339// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87340// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87341// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87342// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 87343// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 87344// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 87345// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 87346// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 47347// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 47348// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47349// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 07350// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17351// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17352// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47353// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47354// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47355// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]7356// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7357// CHECK9:       omp.precond.then:7358// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 47359// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47360// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 47361// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 87362// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i327363// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 87364// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i327365// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 47366// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 47367// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47368// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47369// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87370// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 47371// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7372// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47373// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47374// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]7375// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7376// CHECK9:       cond.true:7377// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47378// CHECK9-NEXT:    br label [[COND_END:%.*]]7379// CHECK9:       cond.false:7380// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47381// CHECK9-NEXT:    br label [[COND_END]]7382// CHECK9:       cond.end:7383// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]7384// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 47385// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 47386// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 47387// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7388// CHECK9:       omp.inner.for.cond:7389// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47390// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47391// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]7392// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7393// CHECK9:       omp.inner.for.body:7394// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47395// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 17396// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]7397// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 47398// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87399// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 47400// CHECK9-NEXT:    [[TMP22:%.*]] = call i32 @__kmpc_cancel(ptr @[[GLOB3]], i32 [[TMP21]], i32 2)7401// CHECK9-NEXT:    [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 07402// CHECK9-NEXT:    br i1 [[TMP23]], label [[DOTCANCEL_EXIT:%.*]], label [[DOTCANCEL_CONTINUE:%.*]]7403// CHECK9:       .cancel.exit:7404// CHECK9-NEXT:    br label [[CANCEL_EXIT:%.*]]7405// CHECK9:       .cancel.continue:7406// CHECK9-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP2]], align 87407// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I4]], align 47408// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP25]] to i647409// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP24]], i64 [[IDXPROM]]7410// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[ARRAYIDX]], align 47411// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP3]], align 87412// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I4]], align 47413// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP28]] to i647414// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP27]], i64 [[IDXPROM7]]7415// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[ARRAYIDX8]], align 47416// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP26]], [[TMP29]]7417// CHECK9-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[TMP1]], align 87418// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[I4]], align 47419// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP31]] to i647420// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP30]], i64 [[IDXPROM10]]7421// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 47422// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]7423// CHECK9:       omp.body.continue:7424// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7425// CHECK9:       omp.inner.for.inc:7426// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47427// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], 17428// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 47429// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]7430// CHECK9:       omp.inner.for.end:7431// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7432// CHECK9:       omp.loop.exit:7433// CHECK9-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87434// CHECK9-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 47435// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])7436// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]7437// CHECK9:       cancel.exit:7438// CHECK9-NEXT:    [[TMP35:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87439// CHECK9-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 47440// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP36]])7441// CHECK9-NEXT:    br label [[CANCEL_CONT:%.*]]7442// CHECK9:       omp.precond.end:7443// CHECK9-NEXT:    br label [[CANCEL_CONT]]7444// CHECK9:       cancel.cont:7445// CHECK9-NEXT:    ret void7446//7447//7448// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l517449// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {7450// CHECK9-NEXT:  entry:7451// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 87452// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87453// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87454// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87455// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 87456// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87457// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87458// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87459// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])7460// CHECK9-NEXT:    ret void7461//7462//7463// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.omp_outlined7464// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {7465// CHECK9-NEXT:  entry:7466// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87467// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87468// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87469// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87470// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87471// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87472// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47473// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47474// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47475// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47476// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47477// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 47478// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 47479// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47480// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47481// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 47482// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87483// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87484// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87485// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87486// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87487// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87488// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 87489// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 87490// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 87491// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 87492// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 47493// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 47494// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47495// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 07496// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17497// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17498// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47499// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47500// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47501// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]7502// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7503// CHECK9:       omp.precond.then:7504// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 47505// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47506// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 47507// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47508// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47509// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87510// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 47511// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7512// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47513// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47514// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]7515// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7516// CHECK9:       cond.true:7517// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47518// CHECK9-NEXT:    br label [[COND_END:%.*]]7519// CHECK9:       cond.false:7520// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47521// CHECK9-NEXT:    br label [[COND_END]]7522// CHECK9:       cond.end:7523// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]7524// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 47525// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47526// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 47527// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7528// CHECK9:       omp.inner.for.cond:7529// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47530// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47531// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]7532// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7533// CHECK9:       omp.inner.for.body:7534// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47535// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i647536// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47537// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i647538// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])7539// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7540// CHECK9:       omp.inner.for.inc:7541// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47542// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 47543// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]7544// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 47545// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]7546// CHECK9:       omp.inner.for.end:7547// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7548// CHECK9:       omp.loop.exit:7549// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87550// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 47551// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])7552// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]7553// CHECK9:       omp.precond.end:7554// CHECK9-NEXT:    ret void7555//7556//7557// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.omp_outlined.omp_outlined7558// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {7559// CHECK9-NEXT:  entry:7560// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87561// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87562// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 87563// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 87564// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87565// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87566// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87567// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87568// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47569// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47570// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47571// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47572// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47573// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 47574// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 47575// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47576// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47577// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 47578// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87579// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87580// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 87581// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 87582// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87583// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87584// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87585// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87586// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 87587// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 87588// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 87589// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 87590// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 47591// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 47592// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47593// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 07594// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17595// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17596// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47597// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47598// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47599// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]7600// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7601// CHECK9:       omp.precond.then:7602// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 47603// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47604// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 47605// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 87606// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i327607// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 87608// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i327609// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 47610// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 47611// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47612// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47613// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87614// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 47615// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7616// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47617// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47618// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]7619// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7620// CHECK9:       cond.true:7621// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47622// CHECK9-NEXT:    br label [[COND_END:%.*]]7623// CHECK9:       cond.false:7624// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47625// CHECK9-NEXT:    br label [[COND_END]]7626// CHECK9:       cond.end:7627// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]7628// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 47629// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 47630// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 47631// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7632// CHECK9:       omp.inner.for.cond:7633// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47634// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47635// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]7636// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7637// CHECK9:       omp.inner.for.body:7638// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47639// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 17640// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]7641// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 47642// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 87643// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 47644// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i647645// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i64 [[IDXPROM]]7646// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 47647// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 87648// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 47649// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i647650// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i64 [[IDXPROM7]]7651// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX8]], align 47652// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]7653// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 87654// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 47655// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i647656// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDXPROM10]]7657// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 47658// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]7659// CHECK9:       omp.body.continue:7660// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7661// CHECK9:       omp.inner.for.inc:7662// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47663// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 17664// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 47665// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]7666// CHECK9:       omp.inner.for.end:7667// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7668// CHECK9:       omp.loop.exit:7669// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87670// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 47671// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])7672// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]7673// CHECK9:       omp.precond.end:7674// CHECK9-NEXT:    ret void7675//7676//7677// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l597678// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {7679// CHECK9-NEXT:  entry:7680// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 87681// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 87682// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87683// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87684// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87685// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 87686// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 87687// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87688// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87689// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87690// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])7691// CHECK9-NEXT:    ret void7692//7693//7694// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.omp_outlined7695// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {7696// CHECK9-NEXT:  entry:7697// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87698// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87699// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 87700// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87701// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87702// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87703// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87704// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47705// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47706// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47707// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47708// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47709// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 47710// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 47711// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47712// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47713// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 47714// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87715// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87716// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 87717// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87718// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87719// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87720// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87721// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 87722// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 87723// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 87724// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 87725// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 87726// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 47727// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 47728// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47729// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 07730// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17731// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17732// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47733// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47734// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47735// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]7736// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7737// CHECK9:       omp.precond.then:7738// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 47739// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47740// CHECK9-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 47741// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47742// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47743// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 47744// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87745// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 47746// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 91, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP9]])7747// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47748// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47749// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]7750// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7751// CHECK9:       cond.true:7752// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47753// CHECK9-NEXT:    br label [[COND_END:%.*]]7754// CHECK9:       cond.false:7755// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47756// CHECK9-NEXT:    br label [[COND_END]]7757// CHECK9:       cond.end:7758// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]7759// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 47760// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47761// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 47762// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7763// CHECK9:       omp.inner.for.cond:7764// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47765// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47766// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 17767// CHECK9-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]7768// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7769// CHECK9:       omp.inner.for.body:7770// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47771// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i647772// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47773// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i647774// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]])7775// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7776// CHECK9:       omp.inner.for.inc:7777// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47778// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 47779// CHECK9-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]7780// CHECK9-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 47781// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47782// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 47783// CHECK9-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]7784// CHECK9-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 47785// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47786// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 47787// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP27]], [[TMP28]]7788// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 47789// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47790// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47791// CHECK9-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP29]], [[TMP30]]7792// CHECK9-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]7793// CHECK9:       cond.true10:7794// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47795// CHECK9-NEXT:    br label [[COND_END12:%.*]]7796// CHECK9:       cond.false11:7797// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47798// CHECK9-NEXT:    br label [[COND_END12]]7799// CHECK9:       cond.end12:7800// CHECK9-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP31]], [[COND_TRUE10]] ], [ [[TMP32]], [[COND_FALSE11]] ]7801// CHECK9-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 47802// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47803// CHECK9-NEXT:    store i32 [[TMP33]], ptr [[DOTOMP_IV]], align 47804// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]7805// CHECK9:       omp.inner.for.end:7806// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7807// CHECK9:       omp.loop.exit:7808// CHECK9-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87809// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 47810// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP35]])7811// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]7812// CHECK9:       omp.precond.end:7813// CHECK9-NEXT:    ret void7814//7815//7816// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.omp_outlined.omp_outlined7817// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {7818// CHECK9-NEXT:  entry:7819// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87820// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87821// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 87822// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 87823// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87824// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87825// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87826// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87827// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47828// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47829// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47830// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47831// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47832// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 47833// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 47834// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47835// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47836// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 47837// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87838// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87839// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 87840// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 87841// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87842// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87843// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87844// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87845// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 87846// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 87847// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 87848// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 87849// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 47850// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 47851// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47852// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 07853// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17854// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17855// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47856// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47857// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47858// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]7859// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7860// CHECK9:       omp.precond.then:7861// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 47862// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47863// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 47864// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 87865// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i327866// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 87867// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i327868// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 47869// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 47870// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47871// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47872// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87873// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 47874// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)7875// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47876// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47877// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]7878// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7879// CHECK9:       cond.true:7880// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47881// CHECK9-NEXT:    br label [[COND_END:%.*]]7882// CHECK9:       cond.false:7883// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47884// CHECK9-NEXT:    br label [[COND_END]]7885// CHECK9:       cond.end:7886// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]7887// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 47888// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 47889// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 47890// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7891// CHECK9:       omp.inner.for.cond:7892// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47893// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47894// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]7895// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7896// CHECK9:       omp.inner.for.body:7897// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47898// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 17899// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]7900// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 47901// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 87902// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 47903// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i647904// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i64 [[IDXPROM]]7905// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 47906// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 87907// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 47908// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i647909// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i64 [[IDXPROM7]]7910// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX8]], align 47911// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]7912// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 87913// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 47914// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i647915// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDXPROM10]]7916// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 47917// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]7918// CHECK9:       omp.body.continue:7919// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7920// CHECK9:       omp.inner.for.inc:7921// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 47922// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 17923// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 47924// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]7925// CHECK9:       omp.inner.for.end:7926// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7927// CHECK9:       omp.loop.exit:7928// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87929// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 47930// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])7931// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]7932// CHECK9:       omp.precond.end:7933// CHECK9-NEXT:    ret void7934//7935//7936// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l677937// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {7938// CHECK9-NEXT:  entry:7939// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 87940// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87941// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87942// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87943// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 87944// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87945// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87946// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87947// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])7948// CHECK9-NEXT:    ret void7949//7950//7951// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.omp_outlined7952// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {7953// CHECK9-NEXT:  entry:7954// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87955// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87956// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87957// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87958// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87959// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87960// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47961// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47962// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47963// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47964// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47965// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 47966// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 47967// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47968// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47969// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 47970// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87971// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87972// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87973// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87974// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87975// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87976// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 87977// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 87978// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 87979// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 87980// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 47981// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 47982// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47983// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 07984// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17985// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17986// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47987// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47988// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47989// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]7990// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7991// CHECK9:       omp.precond.then:7992// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 47993// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47994// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 47995// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47996// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47997// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87998// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 47999// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)8000// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48001// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48002// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]8003// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8004// CHECK9:       cond.true:8005// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48006// CHECK9-NEXT:    br label [[COND_END:%.*]]8007// CHECK9:       cond.false:8008// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48009// CHECK9-NEXT:    br label [[COND_END]]8010// CHECK9:       cond.end:8011// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]8012// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 48013// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48014// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 48015// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8016// CHECK9:       omp.inner.for.cond:8017// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48018// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48019// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]8020// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8021// CHECK9:       omp.inner.for.body:8022// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48023// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i648024// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48025// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i648026// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])8027// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8028// CHECK9:       omp.inner.for.inc:8029// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48030// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 48031// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]8032// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 48033// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]8034// CHECK9:       omp.inner.for.end:8035// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8036// CHECK9:       omp.loop.exit:8037// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88038// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 48039// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])8040// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8041// CHECK9:       omp.precond.end:8042// CHECK9-NEXT:    ret void8043//8044//8045// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.omp_outlined.omp_outlined8046// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {8047// CHECK9-NEXT:  entry:8048// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88049// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88050// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 88051// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 88052// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88053// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88054// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88055// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88056// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48057// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48058// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48059// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48060// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48061// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 48062// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 48063// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48064// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48065// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 48066// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88067// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88068// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 88069// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 88070// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88071// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88072// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88073// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88074// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88075// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88076// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88077// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88078// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48079// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 48080// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48081// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08082// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18083// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 18084// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 48085// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48086// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48087// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8088// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8089// CHECK9:       omp.precond.then:8090// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 48091// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48092// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 48093// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 88094// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i328095// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88096// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i328097// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 48098// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 48099// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48100// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48101// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88102// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 48103// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)8104// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48105// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48106// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]8107// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8108// CHECK9:       cond.true:8109// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48110// CHECK9-NEXT:    br label [[COND_END:%.*]]8111// CHECK9:       cond.false:8112// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48113// CHECK9-NEXT:    br label [[COND_END]]8114// CHECK9:       cond.end:8115// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]8116// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 48117// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48118// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 48119// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8120// CHECK9:       omp.inner.for.cond:8121// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48122// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48123// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]8124// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8125// CHECK9:       omp.inner.for.body:8126// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48127// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 18128// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]8129// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 48130// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 88131// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 48132// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i648133// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i64 [[IDXPROM]]8134// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 48135// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 88136// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 48137// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i648138// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i64 [[IDXPROM7]]8139// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX8]], align 48140// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]8141// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 88142// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 48143// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i648144// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDXPROM10]]8145// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 48146// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]8147// CHECK9:       omp.body.continue:8148// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8149// CHECK9:       omp.inner.for.inc:8150// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48151// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 18152// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 48153// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]8154// CHECK9:       omp.inner.for.end:8155// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8156// CHECK9:       omp.loop.exit:8157// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88158// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 48159// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])8160// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8161// CHECK9:       omp.precond.end:8162// CHECK9-NEXT:    ret void8163//8164//8165// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l758166// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {8167// CHECK9-NEXT:  entry:8168// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 88169// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 88170// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88171// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88172// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88173// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 88174// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 88175// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88176// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88177// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88178// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])8179// CHECK9-NEXT:    ret void8180//8181//8182// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.omp_outlined8183// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {8184// CHECK9-NEXT:  entry:8185// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88186// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88187// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 88188// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88189// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88190// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88191// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88192// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48193// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48194// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48195// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48196// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 48197// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48198// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 48199// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 48200// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48201// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48202// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 48203// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 88204// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88205// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88206// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 88207// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88208// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88209// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88210// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88211// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 88212// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 88213// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 88214// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 88215// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 88216// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 48217// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 48218// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 48219// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 48220// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48221// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 08222// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18223// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 18224// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 48225// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48226// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48227// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]8228// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8229// CHECK9:       omp.precond.then:8230// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 48231// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48232// CHECK9-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 48233// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48234// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48235// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88236// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 48237// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)8238// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48239// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48240// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]8241// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8242// CHECK9:       cond.true:8243// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48244// CHECK9-NEXT:    br label [[COND_END:%.*]]8245// CHECK9:       cond.false:8246// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48247// CHECK9-NEXT:    br label [[COND_END]]8248// CHECK9:       cond.end:8249// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]8250// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 48251// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48252// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 48253// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8254// CHECK9:       omp.inner.for.cond:8255// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48256// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48257// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]8258// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8259// CHECK9:       omp.inner.for.body:8260// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48261// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i648262// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48263// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i648264// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48265// CHECK9-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 48266// CHECK9-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 88267// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]])8268// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8269// CHECK9:       omp.inner.for.inc:8270// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48271// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 48272// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]8273// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 48274// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]8275// CHECK9:       omp.inner.for.end:8276// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8277// CHECK9:       omp.loop.exit:8278// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88279// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 48280// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])8281// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8282// CHECK9:       omp.precond.end:8283// CHECK9-NEXT:    ret void8284//8285//8286// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.omp_outlined.omp_outlined8287// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]], i64 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] {8288// CHECK9-NEXT:  entry:8289// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88290// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88291// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 88292// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 88293// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88294// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88295// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88296// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88297// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 88298// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48299// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48300// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48301// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 48302// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48303// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 48304// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 48305// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48306// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48307// CHECK9-NEXT:    [[I5:%.*]] = alloca i32, align 48308// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88309// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88310// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 88311// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 88312// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88313// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88314// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88315// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88316// CHECK9-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 88317// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88318// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88319// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88320// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88321// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48322// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 48323// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48324// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08325// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18326// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 18327// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 48328// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48329// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48330// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8331// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8332// CHECK9:       omp.precond.then:8333// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 48334// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48335// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 48336// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 88337// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i328338// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88339// CHECK9-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i328340// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 48341// CHECK9-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 48342// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48343// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48344// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 48345// CHECK9-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88346// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 48347// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP12]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP10]])8348// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]8349// CHECK9:       omp.dispatch.cond:8350// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48351// CHECK9-NEXT:    [[TMP14:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88352// CHECK9-NEXT:    [[CONV6:%.*]] = trunc i64 [[TMP14]] to i328353// CHECK9-NEXT:    [[CMP7:%.*]] = icmp sgt i32 [[TMP13]], [[CONV6]]8354// CHECK9-NEXT:    br i1 [[CMP7]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8355// CHECK9:       cond.true:8356// CHECK9-NEXT:    [[TMP15:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88357// CHECK9-NEXT:    [[CONV8:%.*]] = trunc i64 [[TMP15]] to i328358// CHECK9-NEXT:    br label [[COND_END:%.*]]8359// CHECK9:       cond.false:8360// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48361// CHECK9-NEXT:    br label [[COND_END]]8362// CHECK9:       cond.end:8363// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[CONV8]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]8364// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 48365// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48366// CHECK9-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 48367// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48368// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48369// CHECK9-NEXT:    [[CMP9:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]8370// CHECK9-NEXT:    br i1 [[CMP9]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]8371// CHECK9:       omp.dispatch.body:8372// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8373// CHECK9:       omp.inner.for.cond:8374// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48375// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48376// CHECK9-NEXT:    [[CMP10:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]8377// CHECK9-NEXT:    br i1 [[CMP10]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8378// CHECK9:       omp.inner.for.body:8379// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48380// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 18381// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]8382// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I5]], align 48383// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 88384// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I5]], align 48385// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP24]] to i648386// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i64 [[IDXPROM]]8387// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX]], align 48388// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 88389// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I5]], align 48390// CHECK9-NEXT:    [[IDXPROM11:%.*]] = sext i32 [[TMP27]] to i648391// CHECK9-NEXT:    [[ARRAYIDX12:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDXPROM11]]8392// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[ARRAYIDX12]], align 48393// CHECK9-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP25]], [[TMP28]]8394// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 88395// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I5]], align 48396// CHECK9-NEXT:    [[IDXPROM14:%.*]] = sext i32 [[TMP30]] to i648397// CHECK9-NEXT:    [[ARRAYIDX15:%.*]] = getelementptr inbounds i32, ptr [[TMP29]], i64 [[IDXPROM14]]8398// CHECK9-NEXT:    store i32 [[ADD13]], ptr [[ARRAYIDX15]], align 48399// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]8400// CHECK9:       omp.body.continue:8401// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8402// CHECK9:       omp.inner.for.inc:8403// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48404// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 [[TMP31]], 18405// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[DOTOMP_IV]], align 48406// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]8407// CHECK9:       omp.inner.for.end:8408// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]8409// CHECK9:       omp.dispatch.inc:8410// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48411// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 48412// CHECK9-NEXT:    [[ADD17:%.*]] = add nsw i32 [[TMP32]], [[TMP33]]8413// CHECK9-NEXT:    store i32 [[ADD17]], ptr [[DOTOMP_LB]], align 48414// CHECK9-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48415// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 48416// CHECK9-NEXT:    [[ADD18:%.*]] = add nsw i32 [[TMP34]], [[TMP35]]8417// CHECK9-NEXT:    store i32 [[ADD18]], ptr [[DOTOMP_UB]], align 48418// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]8419// CHECK9:       omp.dispatch.end:8420// CHECK9-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88421// CHECK9-NEXT:    [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 48422// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP37]])8423// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8424// CHECK9:       omp.precond.end:8425// CHECK9-NEXT:    ret void8426//8427//8428// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l838429// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {8430// CHECK9-NEXT:  entry:8431// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 88432// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88433// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88434// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88435// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 88436// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88437// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88438// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88439// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])8440// CHECK9-NEXT:    ret void8441//8442//8443// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.omp_outlined8444// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {8445// CHECK9-NEXT:  entry:8446// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88447// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88448// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88449// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88450// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88451// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88452// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48453// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48454// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48455// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48456// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48457// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 48458// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 48459// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48460// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48461// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 48462// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88463// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88464// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88465// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88466// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88467// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88468// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88469// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88470// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88471// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88472// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48473// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 48474// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48475// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08476// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18477// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 18478// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 48479// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48480// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48481// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8482// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8483// CHECK9:       omp.precond.then:8484// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 48485// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48486// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 48487// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48488// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48489// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88490// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 48491// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)8492// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48493// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48494// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]8495// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8496// CHECK9:       cond.true:8497// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48498// CHECK9-NEXT:    br label [[COND_END:%.*]]8499// CHECK9:       cond.false:8500// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48501// CHECK9-NEXT:    br label [[COND_END]]8502// CHECK9:       cond.end:8503// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]8504// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 48505// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48506// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 48507// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8508// CHECK9:       omp.inner.for.cond:8509// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48510// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48511// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]8512// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8513// CHECK9:       omp.inner.for.body:8514// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48515// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i648516// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48517// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i648518// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])8519// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8520// CHECK9:       omp.inner.for.inc:8521// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48522// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 48523// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]8524// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 48525// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]8526// CHECK9:       omp.inner.for.end:8527// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8528// CHECK9:       omp.loop.exit:8529// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88530// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 48531// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])8532// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8533// CHECK9:       omp.precond.end:8534// CHECK9-NEXT:    ret void8535//8536//8537// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.omp_outlined.omp_outlined8538// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {8539// CHECK9-NEXT:  entry:8540// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88541// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88542// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 88543// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 88544// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88545// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88546// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88547// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88548// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48549// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48550// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48551// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48552// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48553// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 48554// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 48555// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48556// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48557// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 48558// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88559// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88560// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 88561// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 88562// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88563// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88564// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88565// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88566// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88567// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88568// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88569// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88570// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48571// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 48572// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48573// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08574// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18575// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 18576// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 48577// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48578// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48579// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8580// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8581// CHECK9:       omp.precond.then:8582// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 48583// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48584// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 48585// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 88586// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i328587// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88588// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i328589// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 48590// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 48591// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48592// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48593// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48594// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48595// CHECK9-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88596// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 48597// CHECK9-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)8598// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]8599// CHECK9:       omp.dispatch.cond:8600// CHECK9-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88601// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 48602// CHECK9-NEXT:    [[TMP16:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP15]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])8603// CHECK9-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 08604// CHECK9-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]8605// CHECK9:       omp.dispatch.body:8606// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48607// CHECK9-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 48608// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8609// CHECK9:       omp.inner.for.cond:8610// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP25:![0-9]+]]8611// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP25]]8612// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]8613// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8614// CHECK9:       omp.inner.for.body:8615// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP25]]8616// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 18617// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]8618// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP25]]8619// CHECK9-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP25]]8620// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP25]]8621// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP22]] to i648622// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP21]], i64 [[IDXPROM]]8623// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP25]]8624// CHECK9-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP25]]8625// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP25]]8626// CHECK9-NEXT:    [[IDXPROM6:%.*]] = sext i32 [[TMP25]] to i648627// CHECK9-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds i32, ptr [[TMP24]], i64 [[IDXPROM6]]8628// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[ARRAYIDX7]], align 4, !llvm.access.group [[ACC_GRP25]]8629// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP23]], [[TMP26]]8630// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP25]]8631// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP25]]8632// CHECK9-NEXT:    [[IDXPROM9:%.*]] = sext i32 [[TMP28]] to i648633// CHECK9-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds i32, ptr [[TMP27]], i64 [[IDXPROM9]]8634// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[ARRAYIDX10]], align 4, !llvm.access.group [[ACC_GRP25]]8635// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]8636// CHECK9:       omp.body.continue:8637// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8638// CHECK9:       omp.inner.for.inc:8639// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP25]]8640// CHECK9-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP29]], 18641// CHECK9-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP25]]8642// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP26:![0-9]+]]8643// CHECK9:       omp.inner.for.end:8644// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]8645// CHECK9:       omp.dispatch.inc:8646// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]8647// CHECK9:       omp.dispatch.end:8648// CHECK9-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88649// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[TMP30]], align 48650// CHECK9-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP31]])8651// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8652// CHECK9:       omp.precond.end:8653// CHECK9-NEXT:    ret void8654//8655//8656// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l918657// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {8658// CHECK9-NEXT:  entry:8659// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 88660// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 88661// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88662// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88663// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88664// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 88665// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 88666// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88667// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88668// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88669// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])8670// CHECK9-NEXT:    ret void8671//8672//8673// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.omp_outlined8674// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]]) #[[ATTR1]] {8675// CHECK9-NEXT:  entry:8676// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88677// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88678// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 88679// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88680// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88681// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88682// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88683// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48684// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48685// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48686// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48687// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 48688// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48689// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 48690// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 48691// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48692// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48693// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 48694// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 88695// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88696// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88697// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 88698// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88699// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88700// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88701// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88702// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 88703// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 88704// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 88705// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 88706// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 88707// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 48708// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 48709// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 48710// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 48711// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48712// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 08713// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18714// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 18715// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 48716// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48717// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48718// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]8719// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8720// CHECK9:       omp.precond.then:8721// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 48722// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48723// CHECK9-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 48724// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48725// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48726// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88727// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 48728// CHECK9-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)8729// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48730// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48731// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]8732// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8733// CHECK9:       cond.true:8734// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48735// CHECK9-NEXT:    br label [[COND_END:%.*]]8736// CHECK9:       cond.false:8737// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48738// CHECK9-NEXT:    br label [[COND_END]]8739// CHECK9:       cond.end:8740// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]8741// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 48742// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48743// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 48744// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8745// CHECK9:       omp.inner.for.cond:8746// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48747// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48748// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]8749// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8750// CHECK9:       omp.inner.for.body:8751// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48752// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i648753// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48754// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i648755// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48756// CHECK9-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 48757// CHECK9-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 88758// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]])8759// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8760// CHECK9:       omp.inner.for.inc:8761// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 48762// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 48763// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]8764// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 48765// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]]8766// CHECK9:       omp.inner.for.end:8767// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8768// CHECK9:       omp.loop.exit:8769// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88770// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 48771// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])8772// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8773// CHECK9:       omp.precond.end:8774// CHECK9-NEXT:    ret void8775//8776//8777// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.omp_outlined.omp_outlined8778// CHECK9-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i64 noundef [[DOTPREVIOUS_LB_:%.*]], i64 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[C:%.*]], i64 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] {8779// CHECK9-NEXT:  entry:8780// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88781// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88782// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 88783// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 88784// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88785// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88786// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88787// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88788// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 88789// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48790// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48791// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48792// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 48793// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48794// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 48795// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 48796// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48797// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48798// CHECK9-NEXT:    [[I5:%.*]] = alloca i32, align 48799// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88800// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88801// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 88802// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 88803// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88804// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88805// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88806// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88807// CHECK9-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 88808// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88809// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88810// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88811// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88812// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48813// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 48814// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48815// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08816// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18817// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 18818// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 48819// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48820// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48821// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8822// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8823// CHECK9:       omp.precond.then:8824// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 48825// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48826// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 48827// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 88828// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i328829// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88830// CHECK9-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i328831// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 48832// CHECK9-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 48833// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48834// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48835// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 48836// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48837// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48838// CHECK9-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88839// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 48840// CHECK9-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])8841// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]8842// CHECK9:       omp.dispatch.cond:8843// CHECK9-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88844// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 48845// CHECK9-NEXT:    [[TMP17:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP16]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])8846// CHECK9-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 08847// CHECK9-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]8848// CHECK9:       omp.dispatch.body:8849// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48850// CHECK9-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 48851// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8852// CHECK9:       omp.inner.for.cond:8853// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP28:![0-9]+]]8854// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP28]]8855// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]8856// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8857// CHECK9:       omp.inner.for.body:8858// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP28]]8859// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 18860// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]8861// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP28]]8862// CHECK9-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP28]]8863// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP28]]8864// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP23]] to i648865// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP22]], i64 [[IDXPROM]]8866// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP28]]8867// CHECK9-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP28]]8868// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP28]]8869// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP26]] to i648870// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP25]], i64 [[IDXPROM7]]8871// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP28]]8872// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP24]], [[TMP27]]8873// CHECK9-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP28]]8874// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP28]]8875// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP29]] to i648876// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP28]], i64 [[IDXPROM10]]8877// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 4, !llvm.access.group [[ACC_GRP28]]8878// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]8879// CHECK9:       omp.body.continue:8880// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8881// CHECK9:       omp.inner.for.inc:8882// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP28]]8883// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP30]], 18884// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP28]]8885// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP29:![0-9]+]]8886// CHECK9:       omp.inner.for.end:8887// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]8888// CHECK9:       omp.dispatch.inc:8889// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]8890// CHECK9:       omp.dispatch.end:8891// CHECK9-NEXT:    [[TMP31:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88892// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[TMP31]], align 48893// CHECK9-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP32]])8894// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8895// CHECK9:       omp.precond.end:8896// CHECK9-NEXT:    ret void8897//8898//8899// CHECK11-LABEL: define {{[^@]+}}@main8900// CHECK11-SAME: () #[[ATTR0:[0-9]+]] {8901// CHECK11-NEXT:  entry:8902// CHECK11-NEXT:    [[RETVAL:%.*]] = alloca i32, align 48903// CHECK11-NEXT:    [[A:%.*]] = alloca ptr, align 48904// CHECK11-NEXT:    [[B:%.*]] = alloca ptr, align 48905// CHECK11-NEXT:    [[C:%.*]] = alloca ptr, align 48906// CHECK11-NEXT:    [[N:%.*]] = alloca i32, align 48907// CHECK11-NEXT:    [[CH:%.*]] = alloca i32, align 48908// CHECK11-NEXT:    [[N_CASTED:%.*]] = alloca i32, align 48909// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 48910// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 48911// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 48912// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 48913// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48914// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48915// CHECK11-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 88916// CHECK11-NEXT:    [[N_CASTED3:%.*]] = alloca i32, align 48917// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS4:%.*]] = alloca [4 x ptr], align 48918// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS5:%.*]] = alloca [4 x ptr], align 48919// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS6:%.*]] = alloca [4 x ptr], align 48920// CHECK11-NEXT:    [[_TMP7:%.*]] = alloca i32, align 48921// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_8:%.*]] = alloca i32, align 48922// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 48923// CHECK11-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 88924// CHECK11-NEXT:    [[CH_CASTED:%.*]] = alloca i32, align 48925// CHECK11-NEXT:    [[N_CASTED17:%.*]] = alloca i32, align 48926// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS18:%.*]] = alloca [5 x ptr], align 48927// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS19:%.*]] = alloca [5 x ptr], align 48928// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS20:%.*]] = alloca [5 x ptr], align 48929// CHECK11-NEXT:    [[_TMP21:%.*]] = alloca i32, align 48930// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 48931// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_23:%.*]] = alloca i32, align 48932// CHECK11-NEXT:    [[KERNEL_ARGS28:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 88933// CHECK11-NEXT:    [[N_CASTED31:%.*]] = alloca i32, align 48934// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS32:%.*]] = alloca [4 x ptr], align 48935// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS33:%.*]] = alloca [4 x ptr], align 48936// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS34:%.*]] = alloca [4 x ptr], align 48937// CHECK11-NEXT:    [[_TMP35:%.*]] = alloca i32, align 48938// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_36:%.*]] = alloca i32, align 48939// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_37:%.*]] = alloca i32, align 48940// CHECK11-NEXT:    [[KERNEL_ARGS42:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 88941// CHECK11-NEXT:    [[CH_CASTED45:%.*]] = alloca i32, align 48942// CHECK11-NEXT:    [[N_CASTED46:%.*]] = alloca i32, align 48943// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS47:%.*]] = alloca [5 x ptr], align 48944// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS48:%.*]] = alloca [5 x ptr], align 48945// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS49:%.*]] = alloca [5 x ptr], align 48946// CHECK11-NEXT:    [[_TMP50:%.*]] = alloca i32, align 48947// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_51:%.*]] = alloca i32, align 48948// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_52:%.*]] = alloca i32, align 48949// CHECK11-NEXT:    [[KERNEL_ARGS57:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 88950// CHECK11-NEXT:    [[N_CASTED60:%.*]] = alloca i32, align 48951// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS61:%.*]] = alloca [4 x ptr], align 48952// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS62:%.*]] = alloca [4 x ptr], align 48953// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS63:%.*]] = alloca [4 x ptr], align 48954// CHECK11-NEXT:    [[_TMP64:%.*]] = alloca i32, align 48955// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_65:%.*]] = alloca i32, align 48956// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_66:%.*]] = alloca i32, align 48957// CHECK11-NEXT:    [[KERNEL_ARGS71:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 88958// CHECK11-NEXT:    [[CH_CASTED74:%.*]] = alloca i32, align 48959// CHECK11-NEXT:    [[N_CASTED75:%.*]] = alloca i32, align 48960// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS76:%.*]] = alloca [5 x ptr], align 48961// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS77:%.*]] = alloca [5 x ptr], align 48962// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS78:%.*]] = alloca [5 x ptr], align 48963// CHECK11-NEXT:    [[_TMP79:%.*]] = alloca i32, align 48964// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_80:%.*]] = alloca i32, align 48965// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_81:%.*]] = alloca i32, align 48966// CHECK11-NEXT:    [[KERNEL_ARGS86:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 88967// CHECK11-NEXT:    store i32 0, ptr [[RETVAL]], align 48968// CHECK11-NEXT:    store i32 10000, ptr [[N]], align 48969// CHECK11-NEXT:    store i32 100, ptr [[CH]], align 48970// CHECK11-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 48971// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[N_CASTED]], align 48972// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[N_CASTED]], align 48973// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A]], align 48974// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B]], align 48975// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C]], align 48976// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 08977// CHECK11-NEXT:    store i32 [[TMP1]], ptr [[TMP5]], align 48978// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 08979// CHECK11-NEXT:    store i32 [[TMP1]], ptr [[TMP6]], align 48980// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 08981// CHECK11-NEXT:    store ptr null, ptr [[TMP7]], align 48982// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 18983// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[TMP8]], align 48984// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 18985// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[TMP9]], align 48986// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 18987// CHECK11-NEXT:    store ptr null, ptr [[TMP10]], align 48988// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 28989// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[TMP11]], align 48990// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 28991// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[TMP12]], align 48992// CHECK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 28993// CHECK11-NEXT:    store ptr null, ptr [[TMP13]], align 48994// CHECK11-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 38995// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[TMP14]], align 48996// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 38997// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[TMP15]], align 48998// CHECK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 38999// CHECK11-NEXT:    store ptr null, ptr [[TMP16]], align 49000// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 09001// CHECK11-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 09002// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 49003// CHECK11-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 49004// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49005// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 09006// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19007// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 19008// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 49009// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49010// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 19011// CHECK11-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i649012// CHECK11-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 09013// CHECK11-NEXT:    store i32 3, ptr [[TMP23]], align 49014// CHECK11-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 19015// CHECK11-NEXT:    store i32 4, ptr [[TMP24]], align 49016// CHECK11-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 29017// CHECK11-NEXT:    store ptr [[TMP17]], ptr [[TMP25]], align 49018// CHECK11-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 39019// CHECK11-NEXT:    store ptr [[TMP18]], ptr [[TMP26]], align 49020// CHECK11-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 49021// CHECK11-NEXT:    store ptr @.offload_sizes, ptr [[TMP27]], align 49022// CHECK11-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 59023// CHECK11-NEXT:    store ptr @.offload_maptypes, ptr [[TMP28]], align 49024// CHECK11-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 69025// CHECK11-NEXT:    store ptr null, ptr [[TMP29]], align 49026// CHECK11-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 79027// CHECK11-NEXT:    store ptr null, ptr [[TMP30]], align 49028// CHECK11-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 89029// CHECK11-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 89030// CHECK11-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 99031// CHECK11-NEXT:    store i64 0, ptr [[TMP32]], align 89032// CHECK11-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 109033// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 49034// CHECK11-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 119035// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 49036// CHECK11-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 129037// CHECK11-NEXT:    store i32 0, ptr [[TMP35]], align 49038// CHECK11-NEXT:    [[TMP36:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3:[0-9]+]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.region_id, ptr [[KERNEL_ARGS]])9039// CHECK11-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 09040// CHECK11-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]9041// CHECK11:       omp_offload.failed:9042// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369(i32 [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]) #[[ATTR2:[0-9]+]]9043// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT]]9044// CHECK11:       omp_offload.cont:9045// CHECK11-NEXT:    [[TMP38:%.*]] = load i32, ptr [[N]], align 49046// CHECK11-NEXT:    store i32 [[TMP38]], ptr [[N_CASTED3]], align 49047// CHECK11-NEXT:    [[TMP39:%.*]] = load i32, ptr [[N_CASTED3]], align 49048// CHECK11-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[A]], align 49049// CHECK11-NEXT:    [[TMP41:%.*]] = load ptr, ptr [[B]], align 49050// CHECK11-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[C]], align 49051// CHECK11-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 09052// CHECK11-NEXT:    store i32 [[TMP39]], ptr [[TMP43]], align 49053// CHECK11-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 09054// CHECK11-NEXT:    store i32 [[TMP39]], ptr [[TMP44]], align 49055// CHECK11-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 09056// CHECK11-NEXT:    store ptr null, ptr [[TMP45]], align 49057// CHECK11-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 19058// CHECK11-NEXT:    store ptr [[TMP40]], ptr [[TMP46]], align 49059// CHECK11-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 19060// CHECK11-NEXT:    store ptr [[TMP40]], ptr [[TMP47]], align 49061// CHECK11-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 19062// CHECK11-NEXT:    store ptr null, ptr [[TMP48]], align 49063// CHECK11-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 29064// CHECK11-NEXT:    store ptr [[TMP41]], ptr [[TMP49]], align 49065// CHECK11-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 29066// CHECK11-NEXT:    store ptr [[TMP41]], ptr [[TMP50]], align 49067// CHECK11-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 29068// CHECK11-NEXT:    store ptr null, ptr [[TMP51]], align 49069// CHECK11-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 39070// CHECK11-NEXT:    store ptr [[TMP42]], ptr [[TMP52]], align 49071// CHECK11-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 39072// CHECK11-NEXT:    store ptr [[TMP42]], ptr [[TMP53]], align 49073// CHECK11-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 39074// CHECK11-NEXT:    store ptr null, ptr [[TMP54]], align 49075// CHECK11-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 09076// CHECK11-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 09077// CHECK11-NEXT:    [[TMP57:%.*]] = load i32, ptr [[N]], align 49078// CHECK11-NEXT:    store i32 [[TMP57]], ptr [[DOTCAPTURE_EXPR_8]], align 49079// CHECK11-NEXT:    [[TMP58:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_8]], align 49080// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP58]], 09081// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 19082// CHECK11-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[DIV11]], 19083// CHECK11-NEXT:    store i32 [[SUB12]], ptr [[DOTCAPTURE_EXPR_9]], align 49084// CHECK11-NEXT:    [[TMP59:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 49085// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP59]], 19086// CHECK11-NEXT:    [[TMP60:%.*]] = zext i32 [[ADD13]] to i649087// CHECK11-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 09088// CHECK11-NEXT:    store i32 3, ptr [[TMP61]], align 49089// CHECK11-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 19090// CHECK11-NEXT:    store i32 4, ptr [[TMP62]], align 49091// CHECK11-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 29092// CHECK11-NEXT:    store ptr [[TMP55]], ptr [[TMP63]], align 49093// CHECK11-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 39094// CHECK11-NEXT:    store ptr [[TMP56]], ptr [[TMP64]], align 49095// CHECK11-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 49096// CHECK11-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP65]], align 49097// CHECK11-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 59098// CHECK11-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP66]], align 49099// CHECK11-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 69100// CHECK11-NEXT:    store ptr null, ptr [[TMP67]], align 49101// CHECK11-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 79102// CHECK11-NEXT:    store ptr null, ptr [[TMP68]], align 49103// CHECK11-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 89104// CHECK11-NEXT:    store i64 [[TMP60]], ptr [[TMP69]], align 89105// CHECK11-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 99106// CHECK11-NEXT:    store i64 0, ptr [[TMP70]], align 89107// CHECK11-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 109108// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP71]], align 49109// CHECK11-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 119110// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP72]], align 49111// CHECK11-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 129112// CHECK11-NEXT:    store i32 0, ptr [[TMP73]], align 49113// CHECK11-NEXT:    [[TMP74:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.region_id, ptr [[KERNEL_ARGS14]])9114// CHECK11-NEXT:    [[TMP75:%.*]] = icmp ne i32 [[TMP74]], 09115// CHECK11-NEXT:    br i1 [[TMP75]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]9116// CHECK11:       omp_offload.failed15:9117// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408(i32 [[TMP39]], ptr [[TMP40]], ptr [[TMP41]], ptr [[TMP42]]) #[[ATTR2]]9118// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT16]]9119// CHECK11:       omp_offload.cont16:9120// CHECK11-NEXT:    [[TMP76:%.*]] = load i32, ptr [[CH]], align 49121// CHECK11-NEXT:    store i32 [[TMP76]], ptr [[CH_CASTED]], align 49122// CHECK11-NEXT:    [[TMP77:%.*]] = load i32, ptr [[CH_CASTED]], align 49123// CHECK11-NEXT:    [[TMP78:%.*]] = load i32, ptr [[N]], align 49124// CHECK11-NEXT:    store i32 [[TMP78]], ptr [[N_CASTED17]], align 49125// CHECK11-NEXT:    [[TMP79:%.*]] = load i32, ptr [[N_CASTED17]], align 49126// CHECK11-NEXT:    [[TMP80:%.*]] = load ptr, ptr [[A]], align 49127// CHECK11-NEXT:    [[TMP81:%.*]] = load ptr, ptr [[B]], align 49128// CHECK11-NEXT:    [[TMP82:%.*]] = load ptr, ptr [[C]], align 49129// CHECK11-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 09130// CHECK11-NEXT:    store i32 [[TMP77]], ptr [[TMP83]], align 49131// CHECK11-NEXT:    [[TMP84:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 09132// CHECK11-NEXT:    store i32 [[TMP77]], ptr [[TMP84]], align 49133// CHECK11-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 09134// CHECK11-NEXT:    store ptr null, ptr [[TMP85]], align 49135// CHECK11-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 19136// CHECK11-NEXT:    store i32 [[TMP79]], ptr [[TMP86]], align 49137// CHECK11-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 19138// CHECK11-NEXT:    store i32 [[TMP79]], ptr [[TMP87]], align 49139// CHECK11-NEXT:    [[TMP88:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 19140// CHECK11-NEXT:    store ptr null, ptr [[TMP88]], align 49141// CHECK11-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 29142// CHECK11-NEXT:    store ptr [[TMP80]], ptr [[TMP89]], align 49143// CHECK11-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 29144// CHECK11-NEXT:    store ptr [[TMP80]], ptr [[TMP90]], align 49145// CHECK11-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 29146// CHECK11-NEXT:    store ptr null, ptr [[TMP91]], align 49147// CHECK11-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 39148// CHECK11-NEXT:    store ptr [[TMP81]], ptr [[TMP92]], align 49149// CHECK11-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 39150// CHECK11-NEXT:    store ptr [[TMP81]], ptr [[TMP93]], align 49151// CHECK11-NEXT:    [[TMP94:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 39152// CHECK11-NEXT:    store ptr null, ptr [[TMP94]], align 49153// CHECK11-NEXT:    [[TMP95:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 49154// CHECK11-NEXT:    store ptr [[TMP82]], ptr [[TMP95]], align 49155// CHECK11-NEXT:    [[TMP96:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 49156// CHECK11-NEXT:    store ptr [[TMP82]], ptr [[TMP96]], align 49157// CHECK11-NEXT:    [[TMP97:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 49158// CHECK11-NEXT:    store ptr null, ptr [[TMP97]], align 49159// CHECK11-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 09160// CHECK11-NEXT:    [[TMP99:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 09161// CHECK11-NEXT:    [[TMP100:%.*]] = load i32, ptr [[N]], align 49162// CHECK11-NEXT:    store i32 [[TMP100]], ptr [[DOTCAPTURE_EXPR_22]], align 49163// CHECK11-NEXT:    [[TMP101:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 49164// CHECK11-NEXT:    [[SUB24:%.*]] = sub nsw i32 [[TMP101]], 09165// CHECK11-NEXT:    [[DIV25:%.*]] = sdiv i32 [[SUB24]], 19166// CHECK11-NEXT:    [[SUB26:%.*]] = sub nsw i32 [[DIV25]], 19167// CHECK11-NEXT:    store i32 [[SUB26]], ptr [[DOTCAPTURE_EXPR_23]], align 49168// CHECK11-NEXT:    [[TMP102:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_23]], align 49169// CHECK11-NEXT:    [[ADD27:%.*]] = add nsw i32 [[TMP102]], 19170// CHECK11-NEXT:    [[TMP103:%.*]] = zext i32 [[ADD27]] to i649171// CHECK11-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 09172// CHECK11-NEXT:    store i32 3, ptr [[TMP104]], align 49173// CHECK11-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 19174// CHECK11-NEXT:    store i32 5, ptr [[TMP105]], align 49175// CHECK11-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 29176// CHECK11-NEXT:    store ptr [[TMP98]], ptr [[TMP106]], align 49177// CHECK11-NEXT:    [[TMP107:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 39178// CHECK11-NEXT:    store ptr [[TMP99]], ptr [[TMP107]], align 49179// CHECK11-NEXT:    [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 49180// CHECK11-NEXT:    store ptr @.offload_sizes.3, ptr [[TMP108]], align 49181// CHECK11-NEXT:    [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 59182// CHECK11-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP109]], align 49183// CHECK11-NEXT:    [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 69184// CHECK11-NEXT:    store ptr null, ptr [[TMP110]], align 49185// CHECK11-NEXT:    [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 79186// CHECK11-NEXT:    store ptr null, ptr [[TMP111]], align 49187// CHECK11-NEXT:    [[TMP112:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 89188// CHECK11-NEXT:    store i64 [[TMP103]], ptr [[TMP112]], align 89189// CHECK11-NEXT:    [[TMP113:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 99190// CHECK11-NEXT:    store i64 0, ptr [[TMP113]], align 89191// CHECK11-NEXT:    [[TMP114:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 109192// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP114]], align 49193// CHECK11-NEXT:    [[TMP115:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 119194// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP115]], align 49195// CHECK11-NEXT:    [[TMP116:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 129196// CHECK11-NEXT:    store i32 0, ptr [[TMP116]], align 49197// CHECK11-NEXT:    [[TMP117:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.region_id, ptr [[KERNEL_ARGS28]])9198// CHECK11-NEXT:    [[TMP118:%.*]] = icmp ne i32 [[TMP117]], 09199// CHECK11-NEXT:    br i1 [[TMP118]], label [[OMP_OFFLOAD_FAILED29:%.*]], label [[OMP_OFFLOAD_CONT30:%.*]]9200// CHECK11:       omp_offload.failed29:9201// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447(i32 [[TMP77]], i32 [[TMP79]], ptr [[TMP80]], ptr [[TMP81]], ptr [[TMP82]]) #[[ATTR2]]9202// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT30]]9203// CHECK11:       omp_offload.cont30:9204// CHECK11-NEXT:    [[TMP119:%.*]] = load i32, ptr [[N]], align 49205// CHECK11-NEXT:    store i32 [[TMP119]], ptr [[N_CASTED31]], align 49206// CHECK11-NEXT:    [[TMP120:%.*]] = load i32, ptr [[N_CASTED31]], align 49207// CHECK11-NEXT:    [[TMP121:%.*]] = load ptr, ptr [[A]], align 49208// CHECK11-NEXT:    [[TMP122:%.*]] = load ptr, ptr [[B]], align 49209// CHECK11-NEXT:    [[TMP123:%.*]] = load ptr, ptr [[C]], align 49210// CHECK11-NEXT:    [[TMP124:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 09211// CHECK11-NEXT:    store i32 [[TMP120]], ptr [[TMP124]], align 49212// CHECK11-NEXT:    [[TMP125:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 09213// CHECK11-NEXT:    store i32 [[TMP120]], ptr [[TMP125]], align 49214// CHECK11-NEXT:    [[TMP126:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 09215// CHECK11-NEXT:    store ptr null, ptr [[TMP126]], align 49216// CHECK11-NEXT:    [[TMP127:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 19217// CHECK11-NEXT:    store ptr [[TMP121]], ptr [[TMP127]], align 49218// CHECK11-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 19219// CHECK11-NEXT:    store ptr [[TMP121]], ptr [[TMP128]], align 49220// CHECK11-NEXT:    [[TMP129:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 19221// CHECK11-NEXT:    store ptr null, ptr [[TMP129]], align 49222// CHECK11-NEXT:    [[TMP130:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 29223// CHECK11-NEXT:    store ptr [[TMP122]], ptr [[TMP130]], align 49224// CHECK11-NEXT:    [[TMP131:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 29225// CHECK11-NEXT:    store ptr [[TMP122]], ptr [[TMP131]], align 49226// CHECK11-NEXT:    [[TMP132:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 29227// CHECK11-NEXT:    store ptr null, ptr [[TMP132]], align 49228// CHECK11-NEXT:    [[TMP133:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 39229// CHECK11-NEXT:    store ptr [[TMP123]], ptr [[TMP133]], align 49230// CHECK11-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 39231// CHECK11-NEXT:    store ptr [[TMP123]], ptr [[TMP134]], align 49232// CHECK11-NEXT:    [[TMP135:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 39233// CHECK11-NEXT:    store ptr null, ptr [[TMP135]], align 49234// CHECK11-NEXT:    [[TMP136:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 09235// CHECK11-NEXT:    [[TMP137:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 09236// CHECK11-NEXT:    [[TMP138:%.*]] = load i32, ptr [[N]], align 49237// CHECK11-NEXT:    store i32 [[TMP138]], ptr [[DOTCAPTURE_EXPR_36]], align 49238// CHECK11-NEXT:    [[TMP139:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_36]], align 49239// CHECK11-NEXT:    [[SUB38:%.*]] = sub nsw i32 [[TMP139]], 09240// CHECK11-NEXT:    [[DIV39:%.*]] = sdiv i32 [[SUB38]], 19241// CHECK11-NEXT:    [[SUB40:%.*]] = sub nsw i32 [[DIV39]], 19242// CHECK11-NEXT:    store i32 [[SUB40]], ptr [[DOTCAPTURE_EXPR_37]], align 49243// CHECK11-NEXT:    [[TMP140:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_37]], align 49244// CHECK11-NEXT:    [[ADD41:%.*]] = add nsw i32 [[TMP140]], 19245// CHECK11-NEXT:    [[TMP141:%.*]] = zext i32 [[ADD41]] to i649246// CHECK11-NEXT:    [[TMP142:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 09247// CHECK11-NEXT:    store i32 3, ptr [[TMP142]], align 49248// CHECK11-NEXT:    [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 19249// CHECK11-NEXT:    store i32 4, ptr [[TMP143]], align 49250// CHECK11-NEXT:    [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 29251// CHECK11-NEXT:    store ptr [[TMP136]], ptr [[TMP144]], align 49252// CHECK11-NEXT:    [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 39253// CHECK11-NEXT:    store ptr [[TMP137]], ptr [[TMP145]], align 49254// CHECK11-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 49255// CHECK11-NEXT:    store ptr @.offload_sizes.5, ptr [[TMP146]], align 49256// CHECK11-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 59257// CHECK11-NEXT:    store ptr @.offload_maptypes.6, ptr [[TMP147]], align 49258// CHECK11-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 69259// CHECK11-NEXT:    store ptr null, ptr [[TMP148]], align 49260// CHECK11-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 79261// CHECK11-NEXT:    store ptr null, ptr [[TMP149]], align 49262// CHECK11-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 89263// CHECK11-NEXT:    store i64 [[TMP141]], ptr [[TMP150]], align 89264// CHECK11-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 99265// CHECK11-NEXT:    store i64 0, ptr [[TMP151]], align 89266// CHECK11-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 109267// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP152]], align 49268// CHECK11-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 119269// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP153]], align 49270// CHECK11-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 129271// CHECK11-NEXT:    store i32 0, ptr [[TMP154]], align 49272// CHECK11-NEXT:    [[TMP155:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.region_id, ptr [[KERNEL_ARGS42]])9273// CHECK11-NEXT:    [[TMP156:%.*]] = icmp ne i32 [[TMP155]], 09274// CHECK11-NEXT:    br i1 [[TMP156]], label [[OMP_OFFLOAD_FAILED43:%.*]], label [[OMP_OFFLOAD_CONT44:%.*]]9275// CHECK11:       omp_offload.failed43:9276// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478(i32 [[TMP120]], ptr [[TMP121]], ptr [[TMP122]], ptr [[TMP123]]) #[[ATTR2]]9277// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT44]]9278// CHECK11:       omp_offload.cont44:9279// CHECK11-NEXT:    [[TMP157:%.*]] = load i32, ptr [[CH]], align 49280// CHECK11-NEXT:    store i32 [[TMP157]], ptr [[CH_CASTED45]], align 49281// CHECK11-NEXT:    [[TMP158:%.*]] = load i32, ptr [[CH_CASTED45]], align 49282// CHECK11-NEXT:    [[TMP159:%.*]] = load i32, ptr [[N]], align 49283// CHECK11-NEXT:    store i32 [[TMP159]], ptr [[N_CASTED46]], align 49284// CHECK11-NEXT:    [[TMP160:%.*]] = load i32, ptr [[N_CASTED46]], align 49285// CHECK11-NEXT:    [[TMP161:%.*]] = load ptr, ptr [[A]], align 49286// CHECK11-NEXT:    [[TMP162:%.*]] = load ptr, ptr [[B]], align 49287// CHECK11-NEXT:    [[TMP163:%.*]] = load ptr, ptr [[C]], align 49288// CHECK11-NEXT:    [[TMP164:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 09289// CHECK11-NEXT:    store i32 [[TMP158]], ptr [[TMP164]], align 49290// CHECK11-NEXT:    [[TMP165:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 09291// CHECK11-NEXT:    store i32 [[TMP158]], ptr [[TMP165]], align 49292// CHECK11-NEXT:    [[TMP166:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 09293// CHECK11-NEXT:    store ptr null, ptr [[TMP166]], align 49294// CHECK11-NEXT:    [[TMP167:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 19295// CHECK11-NEXT:    store i32 [[TMP160]], ptr [[TMP167]], align 49296// CHECK11-NEXT:    [[TMP168:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 19297// CHECK11-NEXT:    store i32 [[TMP160]], ptr [[TMP168]], align 49298// CHECK11-NEXT:    [[TMP169:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 19299// CHECK11-NEXT:    store ptr null, ptr [[TMP169]], align 49300// CHECK11-NEXT:    [[TMP170:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 29301// CHECK11-NEXT:    store ptr [[TMP161]], ptr [[TMP170]], align 49302// CHECK11-NEXT:    [[TMP171:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 29303// CHECK11-NEXT:    store ptr [[TMP161]], ptr [[TMP171]], align 49304// CHECK11-NEXT:    [[TMP172:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 29305// CHECK11-NEXT:    store ptr null, ptr [[TMP172]], align 49306// CHECK11-NEXT:    [[TMP173:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 39307// CHECK11-NEXT:    store ptr [[TMP162]], ptr [[TMP173]], align 49308// CHECK11-NEXT:    [[TMP174:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 39309// CHECK11-NEXT:    store ptr [[TMP162]], ptr [[TMP174]], align 49310// CHECK11-NEXT:    [[TMP175:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 39311// CHECK11-NEXT:    store ptr null, ptr [[TMP175]], align 49312// CHECK11-NEXT:    [[TMP176:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 49313// CHECK11-NEXT:    store ptr [[TMP163]], ptr [[TMP176]], align 49314// CHECK11-NEXT:    [[TMP177:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 49315// CHECK11-NEXT:    store ptr [[TMP163]], ptr [[TMP177]], align 49316// CHECK11-NEXT:    [[TMP178:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 49317// CHECK11-NEXT:    store ptr null, ptr [[TMP178]], align 49318// CHECK11-NEXT:    [[TMP179:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 09319// CHECK11-NEXT:    [[TMP180:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 09320// CHECK11-NEXT:    [[TMP181:%.*]] = load i32, ptr [[N]], align 49321// CHECK11-NEXT:    store i32 [[TMP181]], ptr [[DOTCAPTURE_EXPR_51]], align 49322// CHECK11-NEXT:    [[TMP182:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_51]], align 49323// CHECK11-NEXT:    [[SUB53:%.*]] = sub nsw i32 [[TMP182]], 09324// CHECK11-NEXT:    [[DIV54:%.*]] = sdiv i32 [[SUB53]], 19325// CHECK11-NEXT:    [[SUB55:%.*]] = sub nsw i32 [[DIV54]], 19326// CHECK11-NEXT:    store i32 [[SUB55]], ptr [[DOTCAPTURE_EXPR_52]], align 49327// CHECK11-NEXT:    [[TMP183:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_52]], align 49328// CHECK11-NEXT:    [[ADD56:%.*]] = add nsw i32 [[TMP183]], 19329// CHECK11-NEXT:    [[TMP184:%.*]] = zext i32 [[ADD56]] to i649330// CHECK11-NEXT:    [[TMP185:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 09331// CHECK11-NEXT:    store i32 3, ptr [[TMP185]], align 49332// CHECK11-NEXT:    [[TMP186:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 19333// CHECK11-NEXT:    store i32 5, ptr [[TMP186]], align 49334// CHECK11-NEXT:    [[TMP187:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 29335// CHECK11-NEXT:    store ptr [[TMP179]], ptr [[TMP187]], align 49336// CHECK11-NEXT:    [[TMP188:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 39337// CHECK11-NEXT:    store ptr [[TMP180]], ptr [[TMP188]], align 49338// CHECK11-NEXT:    [[TMP189:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 49339// CHECK11-NEXT:    store ptr @.offload_sizes.7, ptr [[TMP189]], align 49340// CHECK11-NEXT:    [[TMP190:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 59341// CHECK11-NEXT:    store ptr @.offload_maptypes.8, ptr [[TMP190]], align 49342// CHECK11-NEXT:    [[TMP191:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 69343// CHECK11-NEXT:    store ptr null, ptr [[TMP191]], align 49344// CHECK11-NEXT:    [[TMP192:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 79345// CHECK11-NEXT:    store ptr null, ptr [[TMP192]], align 49346// CHECK11-NEXT:    [[TMP193:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 89347// CHECK11-NEXT:    store i64 [[TMP184]], ptr [[TMP193]], align 89348// CHECK11-NEXT:    [[TMP194:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 99349// CHECK11-NEXT:    store i64 0, ptr [[TMP194]], align 89350// CHECK11-NEXT:    [[TMP195:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 109351// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP195]], align 49352// CHECK11-NEXT:    [[TMP196:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 119353// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP196]], align 49354// CHECK11-NEXT:    [[TMP197:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 129355// CHECK11-NEXT:    store i32 0, ptr [[TMP197]], align 49356// CHECK11-NEXT:    [[TMP198:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.region_id, ptr [[KERNEL_ARGS57]])9357// CHECK11-NEXT:    [[TMP199:%.*]] = icmp ne i32 [[TMP198]], 09358// CHECK11-NEXT:    br i1 [[TMP199]], label [[OMP_OFFLOAD_FAILED58:%.*]], label [[OMP_OFFLOAD_CONT59:%.*]]9359// CHECK11:       omp_offload.failed58:9360// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506(i32 [[TMP158]], i32 [[TMP160]], ptr [[TMP161]], ptr [[TMP162]], ptr [[TMP163]]) #[[ATTR2]]9361// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT59]]9362// CHECK11:       omp_offload.cont59:9363// CHECK11-NEXT:    [[TMP200:%.*]] = load i32, ptr [[N]], align 49364// CHECK11-NEXT:    store i32 [[TMP200]], ptr [[N_CASTED60]], align 49365// CHECK11-NEXT:    [[TMP201:%.*]] = load i32, ptr [[N_CASTED60]], align 49366// CHECK11-NEXT:    [[TMP202:%.*]] = load ptr, ptr [[A]], align 49367// CHECK11-NEXT:    [[TMP203:%.*]] = load ptr, ptr [[B]], align 49368// CHECK11-NEXT:    [[TMP204:%.*]] = load ptr, ptr [[C]], align 49369// CHECK11-NEXT:    [[TMP205:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 09370// CHECK11-NEXT:    store i32 [[TMP201]], ptr [[TMP205]], align 49371// CHECK11-NEXT:    [[TMP206:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 09372// CHECK11-NEXT:    store i32 [[TMP201]], ptr [[TMP206]], align 49373// CHECK11-NEXT:    [[TMP207:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 09374// CHECK11-NEXT:    store ptr null, ptr [[TMP207]], align 49375// CHECK11-NEXT:    [[TMP208:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 19376// CHECK11-NEXT:    store ptr [[TMP202]], ptr [[TMP208]], align 49377// CHECK11-NEXT:    [[TMP209:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 19378// CHECK11-NEXT:    store ptr [[TMP202]], ptr [[TMP209]], align 49379// CHECK11-NEXT:    [[TMP210:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 19380// CHECK11-NEXT:    store ptr null, ptr [[TMP210]], align 49381// CHECK11-NEXT:    [[TMP211:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 29382// CHECK11-NEXT:    store ptr [[TMP203]], ptr [[TMP211]], align 49383// CHECK11-NEXT:    [[TMP212:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 29384// CHECK11-NEXT:    store ptr [[TMP203]], ptr [[TMP212]], align 49385// CHECK11-NEXT:    [[TMP213:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 29386// CHECK11-NEXT:    store ptr null, ptr [[TMP213]], align 49387// CHECK11-NEXT:    [[TMP214:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 39388// CHECK11-NEXT:    store ptr [[TMP204]], ptr [[TMP214]], align 49389// CHECK11-NEXT:    [[TMP215:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 39390// CHECK11-NEXT:    store ptr [[TMP204]], ptr [[TMP215]], align 49391// CHECK11-NEXT:    [[TMP216:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 39392// CHECK11-NEXT:    store ptr null, ptr [[TMP216]], align 49393// CHECK11-NEXT:    [[TMP217:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 09394// CHECK11-NEXT:    [[TMP218:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 09395// CHECK11-NEXT:    [[TMP219:%.*]] = load i32, ptr [[N]], align 49396// CHECK11-NEXT:    store i32 [[TMP219]], ptr [[DOTCAPTURE_EXPR_65]], align 49397// CHECK11-NEXT:    [[TMP220:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_65]], align 49398// CHECK11-NEXT:    [[SUB67:%.*]] = sub nsw i32 [[TMP220]], 09399// CHECK11-NEXT:    [[DIV68:%.*]] = sdiv i32 [[SUB67]], 19400// CHECK11-NEXT:    [[SUB69:%.*]] = sub nsw i32 [[DIV68]], 19401// CHECK11-NEXT:    store i32 [[SUB69]], ptr [[DOTCAPTURE_EXPR_66]], align 49402// CHECK11-NEXT:    [[TMP221:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_66]], align 49403// CHECK11-NEXT:    [[ADD70:%.*]] = add nsw i32 [[TMP221]], 19404// CHECK11-NEXT:    [[TMP222:%.*]] = zext i32 [[ADD70]] to i649405// CHECK11-NEXT:    [[TMP223:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 09406// CHECK11-NEXT:    store i32 3, ptr [[TMP223]], align 49407// CHECK11-NEXT:    [[TMP224:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 19408// CHECK11-NEXT:    store i32 4, ptr [[TMP224]], align 49409// CHECK11-NEXT:    [[TMP225:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 29410// CHECK11-NEXT:    store ptr [[TMP217]], ptr [[TMP225]], align 49411// CHECK11-NEXT:    [[TMP226:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 39412// CHECK11-NEXT:    store ptr [[TMP218]], ptr [[TMP226]], align 49413// CHECK11-NEXT:    [[TMP227:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 49414// CHECK11-NEXT:    store ptr @.offload_sizes.9, ptr [[TMP227]], align 49415// CHECK11-NEXT:    [[TMP228:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 59416// CHECK11-NEXT:    store ptr @.offload_maptypes.10, ptr [[TMP228]], align 49417// CHECK11-NEXT:    [[TMP229:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 69418// CHECK11-NEXT:    store ptr null, ptr [[TMP229]], align 49419// CHECK11-NEXT:    [[TMP230:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 79420// CHECK11-NEXT:    store ptr null, ptr [[TMP230]], align 49421// CHECK11-NEXT:    [[TMP231:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 89422// CHECK11-NEXT:    store i64 [[TMP222]], ptr [[TMP231]], align 89423// CHECK11-NEXT:    [[TMP232:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 99424// CHECK11-NEXT:    store i64 0, ptr [[TMP232]], align 89425// CHECK11-NEXT:    [[TMP233:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 109426// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP233]], align 49427// CHECK11-NEXT:    [[TMP234:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 119428// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP234]], align 49429// CHECK11-NEXT:    [[TMP235:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 129430// CHECK11-NEXT:    store i32 0, ptr [[TMP235]], align 49431// CHECK11-NEXT:    [[TMP236:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.region_id, ptr [[KERNEL_ARGS71]])9432// CHECK11-NEXT:    [[TMP237:%.*]] = icmp ne i32 [[TMP236]], 09433// CHECK11-NEXT:    br i1 [[TMP237]], label [[OMP_OFFLOAD_FAILED72:%.*]], label [[OMP_OFFLOAD_CONT73:%.*]]9434// CHECK11:       omp_offload.failed72:9435// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536(i32 [[TMP201]], ptr [[TMP202]], ptr [[TMP203]], ptr [[TMP204]]) #[[ATTR2]]9436// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT73]]9437// CHECK11:       omp_offload.cont73:9438// CHECK11-NEXT:    [[TMP238:%.*]] = load i32, ptr [[CH]], align 49439// CHECK11-NEXT:    store i32 [[TMP238]], ptr [[CH_CASTED74]], align 49440// CHECK11-NEXT:    [[TMP239:%.*]] = load i32, ptr [[CH_CASTED74]], align 49441// CHECK11-NEXT:    [[TMP240:%.*]] = load i32, ptr [[N]], align 49442// CHECK11-NEXT:    store i32 [[TMP240]], ptr [[N_CASTED75]], align 49443// CHECK11-NEXT:    [[TMP241:%.*]] = load i32, ptr [[N_CASTED75]], align 49444// CHECK11-NEXT:    [[TMP242:%.*]] = load ptr, ptr [[A]], align 49445// CHECK11-NEXT:    [[TMP243:%.*]] = load ptr, ptr [[B]], align 49446// CHECK11-NEXT:    [[TMP244:%.*]] = load ptr, ptr [[C]], align 49447// CHECK11-NEXT:    [[TMP245:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 09448// CHECK11-NEXT:    store i32 [[TMP239]], ptr [[TMP245]], align 49449// CHECK11-NEXT:    [[TMP246:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 09450// CHECK11-NEXT:    store i32 [[TMP239]], ptr [[TMP246]], align 49451// CHECK11-NEXT:    [[TMP247:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 09452// CHECK11-NEXT:    store ptr null, ptr [[TMP247]], align 49453// CHECK11-NEXT:    [[TMP248:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 19454// CHECK11-NEXT:    store i32 [[TMP241]], ptr [[TMP248]], align 49455// CHECK11-NEXT:    [[TMP249:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 19456// CHECK11-NEXT:    store i32 [[TMP241]], ptr [[TMP249]], align 49457// CHECK11-NEXT:    [[TMP250:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 19458// CHECK11-NEXT:    store ptr null, ptr [[TMP250]], align 49459// CHECK11-NEXT:    [[TMP251:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 29460// CHECK11-NEXT:    store ptr [[TMP242]], ptr [[TMP251]], align 49461// CHECK11-NEXT:    [[TMP252:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 29462// CHECK11-NEXT:    store ptr [[TMP242]], ptr [[TMP252]], align 49463// CHECK11-NEXT:    [[TMP253:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 29464// CHECK11-NEXT:    store ptr null, ptr [[TMP253]], align 49465// CHECK11-NEXT:    [[TMP254:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 39466// CHECK11-NEXT:    store ptr [[TMP243]], ptr [[TMP254]], align 49467// CHECK11-NEXT:    [[TMP255:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 39468// CHECK11-NEXT:    store ptr [[TMP243]], ptr [[TMP255]], align 49469// CHECK11-NEXT:    [[TMP256:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 39470// CHECK11-NEXT:    store ptr null, ptr [[TMP256]], align 49471// CHECK11-NEXT:    [[TMP257:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 49472// CHECK11-NEXT:    store ptr [[TMP244]], ptr [[TMP257]], align 49473// CHECK11-NEXT:    [[TMP258:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 49474// CHECK11-NEXT:    store ptr [[TMP244]], ptr [[TMP258]], align 49475// CHECK11-NEXT:    [[TMP259:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 49476// CHECK11-NEXT:    store ptr null, ptr [[TMP259]], align 49477// CHECK11-NEXT:    [[TMP260:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 09478// CHECK11-NEXT:    [[TMP261:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 09479// CHECK11-NEXT:    [[TMP262:%.*]] = load i32, ptr [[N]], align 49480// CHECK11-NEXT:    store i32 [[TMP262]], ptr [[DOTCAPTURE_EXPR_80]], align 49481// CHECK11-NEXT:    [[TMP263:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_80]], align 49482// CHECK11-NEXT:    [[SUB82:%.*]] = sub nsw i32 [[TMP263]], 09483// CHECK11-NEXT:    [[DIV83:%.*]] = sdiv i32 [[SUB82]], 19484// CHECK11-NEXT:    [[SUB84:%.*]] = sub nsw i32 [[DIV83]], 19485// CHECK11-NEXT:    store i32 [[SUB84]], ptr [[DOTCAPTURE_EXPR_81]], align 49486// CHECK11-NEXT:    [[TMP264:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_81]], align 49487// CHECK11-NEXT:    [[ADD85:%.*]] = add nsw i32 [[TMP264]], 19488// CHECK11-NEXT:    [[TMP265:%.*]] = zext i32 [[ADD85]] to i649489// CHECK11-NEXT:    [[TMP266:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 09490// CHECK11-NEXT:    store i32 3, ptr [[TMP266]], align 49491// CHECK11-NEXT:    [[TMP267:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 19492// CHECK11-NEXT:    store i32 5, ptr [[TMP267]], align 49493// CHECK11-NEXT:    [[TMP268:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 29494// CHECK11-NEXT:    store ptr [[TMP260]], ptr [[TMP268]], align 49495// CHECK11-NEXT:    [[TMP269:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 39496// CHECK11-NEXT:    store ptr [[TMP261]], ptr [[TMP269]], align 49497// CHECK11-NEXT:    [[TMP270:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 49498// CHECK11-NEXT:    store ptr @.offload_sizes.11, ptr [[TMP270]], align 49499// CHECK11-NEXT:    [[TMP271:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 59500// CHECK11-NEXT:    store ptr @.offload_maptypes.12, ptr [[TMP271]], align 49501// CHECK11-NEXT:    [[TMP272:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 69502// CHECK11-NEXT:    store ptr null, ptr [[TMP272]], align 49503// CHECK11-NEXT:    [[TMP273:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 79504// CHECK11-NEXT:    store ptr null, ptr [[TMP273]], align 49505// CHECK11-NEXT:    [[TMP274:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 89506// CHECK11-NEXT:    store i64 [[TMP265]], ptr [[TMP274]], align 89507// CHECK11-NEXT:    [[TMP275:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 99508// CHECK11-NEXT:    store i64 0, ptr [[TMP275]], align 89509// CHECK11-NEXT:    [[TMP276:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 109510// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP276]], align 49511// CHECK11-NEXT:    [[TMP277:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 119512// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP277]], align 49513// CHECK11-NEXT:    [[TMP278:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 129514// CHECK11-NEXT:    store i32 0, ptr [[TMP278]], align 49515// CHECK11-NEXT:    [[TMP279:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.region_id, ptr [[KERNEL_ARGS86]])9516// CHECK11-NEXT:    [[TMP280:%.*]] = icmp ne i32 [[TMP279]], 09517// CHECK11-NEXT:    br i1 [[TMP280]], label [[OMP_OFFLOAD_FAILED87:%.*]], label [[OMP_OFFLOAD_CONT88:%.*]]9518// CHECK11:       omp_offload.failed87:9519// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562(i32 [[TMP239]], i32 [[TMP241]], ptr [[TMP242]], ptr [[TMP243]], ptr [[TMP244]]) #[[ATTR2]]9520// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT88]]9521// CHECK11:       omp_offload.cont88:9522// CHECK11-NEXT:    [[CALL:%.*]] = call noundef i32 @_Z5tmainIiET_v()9523// CHECK11-NEXT:    ret i32 [[CALL]]9524//9525//9526// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l3699527// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1:[0-9]+]] {9528// CHECK11-NEXT:  entry:9529// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 49530// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 49531// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 49532// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 49533// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 49534// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 49535// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 49536// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 49537// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])9538// CHECK11-NEXT:    ret void9539//9540//9541// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.omp_outlined9542// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {9543// CHECK11-NEXT:  entry:9544// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 49545// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 49546// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 49547// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 49548// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 49549// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 49550// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 49551// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 49552// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 49553// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 49554// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 49555// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 49556// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 49557// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 49558// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 49559// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 49560// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 49561// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 49562// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 49563// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 49564// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 49565// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 49566// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 49567// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 49568// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 49569// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 49570// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 49571// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 49572// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49573// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 09574// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19575// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 19576// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 49577// CHECK11-NEXT:    store i32 0, ptr [[I]], align 49578// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49579// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]9580// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]9581// CHECK11:       omp.precond.then:9582// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 49583// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49584// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 49585// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 49586// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 49587// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 49588// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 49589// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)9590// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49591// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49592// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]9593// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]9594// CHECK11:       cond.true:9595// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49596// CHECK11-NEXT:    br label [[COND_END:%.*]]9597// CHECK11:       cond.false:9598// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49599// CHECK11-NEXT:    br label [[COND_END]]9600// CHECK11:       cond.end:9601// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]9602// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 49603// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 49604// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 49605// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]9606// CHECK11:       omp.inner.for.cond:9607// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49608// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49609// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]9610// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]9611// CHECK11:       omp.inner.for.body:9612// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 49613// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49614// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])9615// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]9616// CHECK11:       omp.inner.for.inc:9617// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49618// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 49619// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]9620// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 49621// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]9622// CHECK11:       omp.inner.for.end:9623// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]9624// CHECK11:       omp.loop.exit:9625// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 49626// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 49627// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])9628// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]9629// CHECK11:       omp.precond.end:9630// CHECK11-NEXT:    ret void9631//9632//9633// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l369.omp_outlined.omp_outlined9634// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {9635// CHECK11-NEXT:  entry:9636// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 49637// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 49638// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 49639// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 49640// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 49641// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 49642// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 49643// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 49644// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 49645// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 49646// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 49647// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 49648// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 49649// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 49650// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 49651// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 49652// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 49653// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 49654// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 49655// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 49656// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 49657// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 49658// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 49659// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 49660// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 49661// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 49662// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 49663// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 49664// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 49665// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 49666// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 49667// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 49668// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49669// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 09670// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19671// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 19672// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 49673// CHECK11-NEXT:    store i32 0, ptr [[I]], align 49674// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49675// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]9676// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]9677// CHECK11:       omp.precond.then:9678// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 49679// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49680// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 49681// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 49682// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 49683// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 49684// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 49685// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 49686// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 49687// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 49688// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 49689// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2:[0-9]+]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)9690// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49691// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49692// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]9693// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]9694// CHECK11:       cond.true:9695// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49696// CHECK11-NEXT:    br label [[COND_END:%.*]]9697// CHECK11:       cond.false:9698// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49699// CHECK11-NEXT:    br label [[COND_END]]9700// CHECK11:       cond.end:9701// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]9702// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 49703// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 49704// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 49705// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]9706// CHECK11:       omp.inner.for.cond:9707// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49708// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49709// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]9710// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]9711// CHECK11:       omp.inner.for.body:9712// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49713// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 19714// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]9715// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 49716// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 49717// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 49718// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]9719// CHECK11-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 49720// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 49721// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 49722// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]9723// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 49724// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]9725// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 49726// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 49727// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]9728// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 49729// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]9730// CHECK11:       omp.body.continue:9731// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]9732// CHECK11:       omp.inner.for.inc:9733// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49734// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 19735// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 49736// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]9737// CHECK11:       omp.inner.for.end:9738// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]9739// CHECK11:       omp.loop.exit:9740// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 49741// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 49742// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])9743// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]9744// CHECK11:       omp.precond.end:9745// CHECK11-NEXT:    ret void9746//9747//9748// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l4089749// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {9750// CHECK11-NEXT:  entry:9751// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 49752// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 49753// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 49754// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 49755// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 49756// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 49757// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 49758// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 49759// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])9760// CHECK11-NEXT:    ret void9761//9762//9763// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.omp_outlined9764// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {9765// CHECK11-NEXT:  entry:9766// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 49767// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 49768// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 49769// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 49770// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 49771// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 49772// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 49773// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 49774// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 49775// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 49776// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 49777// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 49778// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 49779// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 49780// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 49781// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 49782// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 49783// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 49784// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 49785// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 49786// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 49787// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 49788// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 49789// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 49790// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 49791// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 49792// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 49793// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 49794// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49795// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 09796// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19797// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 19798// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 49799// CHECK11-NEXT:    store i32 0, ptr [[I]], align 49800// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49801// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]9802// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]9803// CHECK11:       omp.precond.then:9804// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 49805// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49806// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 49807// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 49808// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 49809// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 49810// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 49811// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)9812// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49813// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49814// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]9815// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]9816// CHECK11:       cond.true:9817// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49818// CHECK11-NEXT:    br label [[COND_END:%.*]]9819// CHECK11:       cond.false:9820// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49821// CHECK11-NEXT:    br label [[COND_END]]9822// CHECK11:       cond.end:9823// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]9824// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 49825// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 49826// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 49827// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]9828// CHECK11:       omp.inner.for.cond:9829// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49830// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49831// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]9832// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]9833// CHECK11:       omp.inner.for.body:9834// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 49835// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49836// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])9837// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]9838// CHECK11:       omp.inner.for.inc:9839// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49840// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 49841// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]9842// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 49843// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]9844// CHECK11:       omp.inner.for.end:9845// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]9846// CHECK11:       omp.loop.exit:9847// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 49848// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 49849// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])9850// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]9851// CHECK11:       omp.precond.end:9852// CHECK11-NEXT:    ret void9853//9854//9855// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l408.omp_outlined.omp_outlined9856// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {9857// CHECK11-NEXT:  entry:9858// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 49859// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 49860// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 49861// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 49862// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 49863// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 49864// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 49865// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 49866// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 49867// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 49868// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 49869// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 49870// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 49871// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 49872// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 49873// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 49874// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 49875// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 49876// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 49877// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 49878// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 49879// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 49880// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 49881// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 49882// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 49883// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 49884// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 49885// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 49886// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 49887// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 49888// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 49889// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 49890// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49891// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 09892// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19893// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 19894// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 49895// CHECK11-NEXT:    store i32 0, ptr [[I]], align 49896// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49897// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]9898// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]9899// CHECK11:       omp.precond.then:9900// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 49901// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49902// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 49903// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 49904// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 49905// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 49906// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 49907// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 49908// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 49909// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 49910// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 49911// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)9912// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49913// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49914// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]9915// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]9916// CHECK11:       cond.true:9917// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49918// CHECK11-NEXT:    br label [[COND_END:%.*]]9919// CHECK11:       cond.false:9920// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49921// CHECK11-NEXT:    br label [[COND_END]]9922// CHECK11:       cond.end:9923// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]9924// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 49925// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 49926// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 49927// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]9928// CHECK11:       omp.inner.for.cond:9929// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49930// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49931// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]9932// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]9933// CHECK11:       omp.inner.for.body:9934// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49935// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 19936// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]9937// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 49938// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 49939// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 49940// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]9941// CHECK11-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 49942// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 49943// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 49944// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]9945// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 49946// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]9947// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 49948// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 49949// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]9950// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 49951// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]9952// CHECK11:       omp.body.continue:9953// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]9954// CHECK11:       omp.inner.for.inc:9955// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49956// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 19957// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 49958// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]9959// CHECK11:       omp.inner.for.end:9960// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]9961// CHECK11:       omp.loop.exit:9962// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 49963// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 49964// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])9965// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]9966// CHECK11:       omp.precond.end:9967// CHECK11-NEXT:    ret void9968//9969//9970// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l4479971// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {9972// CHECK11-NEXT:  entry:9973// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 49974// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 49975// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 49976// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 49977// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 49978// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 49979// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 49980// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 49981// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 49982// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 49983// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])9984// CHECK11-NEXT:    ret void9985//9986//9987// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.omp_outlined9988// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {9989// CHECK11-NEXT:  entry:9990// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 49991// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 49992// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 49993// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 49994// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 49995// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 49996// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 49997// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 49998// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 49999// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410000// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410001// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410002// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 410003// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 410004// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410005// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410006// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410007// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410008// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410009// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 410010// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410011// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410012// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410013// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410014// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 410015// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 410016// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 410017// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 410018// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 410019// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 410020// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 410021// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410022// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 010023// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110024// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110025// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410026// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410027// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410028// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]10029// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10030// CHECK11:       omp.precond.then:10031// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 410032// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410033// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 410034// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410035// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410036// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 410037// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410038// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 410039// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 91, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP9]])10040// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410041// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410042// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]10043// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10044// CHECK11:       cond.true:10045// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410046// CHECK11-NEXT:    br label [[COND_END:%.*]]10047// CHECK11:       cond.false:10048// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410049// CHECK11-NEXT:    br label [[COND_END]]10050// CHECK11:       cond.end:10051// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]10052// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 410053// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410054// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 410055// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10056// CHECK11:       omp.inner.for.cond:10057// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410058// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410059// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 110060// CHECK11-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]10061// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10062// CHECK11:       omp.inner.for.body:10063// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410064// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410065// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]])10066// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10067// CHECK11:       omp.inner.for.inc:10068// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410069// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 410070// CHECK11-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]10071// CHECK11-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 410072// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410073// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 410074// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]10075// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 410076// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410077// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 410078// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]10079// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 410080// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410081// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410082// CHECK11-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP27]], [[TMP28]]10083// CHECK11-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]10084// CHECK11:       cond.true10:10085// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410086// CHECK11-NEXT:    br label [[COND_END12:%.*]]10087// CHECK11:       cond.false11:10088// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410089// CHECK11-NEXT:    br label [[COND_END12]]10090// CHECK11:       cond.end12:10091// CHECK11-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP29]], [[COND_TRUE10]] ], [ [[TMP30]], [[COND_FALSE11]] ]10092// CHECK11-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 410093// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410094// CHECK11-NEXT:    store i32 [[TMP31]], ptr [[DOTOMP_IV]], align 410095// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]10096// CHECK11:       omp.inner.for.end:10097// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10098// CHECK11:       omp.loop.exit:10099// CHECK11-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410100// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 410101// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP33]])10102// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10103// CHECK11:       omp.precond.end:10104// CHECK11-NEXT:    ret void10105//10106//10107// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l447.omp_outlined.omp_outlined10108// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {10109// CHECK11-NEXT:  entry:10110// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410111// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410112// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 410113// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 410114// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410115// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410116// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410117// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410118// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410119// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410120// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410121// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410122// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410123// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 410124// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 410125// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410126// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410127// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410128// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410129// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410130// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 410131// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 410132// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410133// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410134// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410135// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410136// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410137// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410138// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410139// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410140// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410141// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410142// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410143// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010144// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110145// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110146// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410147// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410148// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410149// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10150// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10151// CHECK11:       omp.precond.then:10152// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 410153// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410154// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 410155// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 410156// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 410157// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 410158// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 410159// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410160// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410161// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410162// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 410163// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)10164// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410165// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410166// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]10167// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10168// CHECK11:       cond.true:10169// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410170// CHECK11-NEXT:    br label [[COND_END:%.*]]10171// CHECK11:       cond.false:10172// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410173// CHECK11-NEXT:    br label [[COND_END]]10174// CHECK11:       cond.end:10175// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]10176// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 410177// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 410178// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 410179// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10180// CHECK11:       omp.inner.for.cond:10181// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410182// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410183// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]10184// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10185// CHECK11:       omp.inner.for.body:10186// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410187// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 110188// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]10189// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 410190// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 410191// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 410192// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]10193// CHECK11-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 410194// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 410195// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 410196// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]10197// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 410198// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]10199// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 410200// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 410201// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]10202// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 410203// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]10204// CHECK11:       omp.body.continue:10205// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10206// CHECK11:       omp.inner.for.inc:10207// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410208// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 110209// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 410210// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]10211// CHECK11:       omp.inner.for.end:10212// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10213// CHECK11:       omp.loop.exit:10214// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410215// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 410216// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])10217// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10218// CHECK11:       omp.precond.end:10219// CHECK11-NEXT:    ret void10220//10221//10222// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l47810223// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {10224// CHECK11-NEXT:  entry:10225// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 410226// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410227// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410228// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410229// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 410230// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410231// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410232// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410233// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])10234// CHECK11-NEXT:    ret void10235//10236//10237// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.omp_outlined10238// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {10239// CHECK11-NEXT:  entry:10240// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410241// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410242// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410243// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410244// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410245// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410246// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410247// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410248// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410249// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410250// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410251// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 410252// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 410253// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410254// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410255// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410256// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410257// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410258// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410259// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410260// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410261// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410262// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410263// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410264// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410265// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410266// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410267// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410268// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410269// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010270// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110271// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110272// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410273// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410274// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410275// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10276// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10277// CHECK11:       omp.precond.then:10278// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 410279// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410280// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 410281// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410282// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410283// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410284// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 410285// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)10286// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410287// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410288// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]10289// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10290// CHECK11:       cond.true:10291// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410292// CHECK11-NEXT:    br label [[COND_END:%.*]]10293// CHECK11:       cond.false:10294// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410295// CHECK11-NEXT:    br label [[COND_END]]10296// CHECK11:       cond.end:10297// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]10298// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 410299// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410300// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 410301// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10302// CHECK11:       omp.inner.for.cond:10303// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410304// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410305// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]10306// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10307// CHECK11:       omp.inner.for.body:10308// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410309// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410310// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])10311// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10312// CHECK11:       omp.inner.for.inc:10313// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410314// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 410315// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]10316// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 410317// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]10318// CHECK11:       omp.inner.for.end:10319// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10320// CHECK11:       omp.loop.exit:10321// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410322// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 410323// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])10324// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10325// CHECK11:       omp.precond.end:10326// CHECK11-NEXT:    ret void10327//10328//10329// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l478.omp_outlined.omp_outlined10330// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {10331// CHECK11-NEXT:  entry:10332// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410333// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410334// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 410335// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 410336// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410337// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410338// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410339// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410340// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410341// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410342// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410343// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410344// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410345// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 410346// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 410347// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410348// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410349// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410350// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410351// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410352// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 410353// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 410354// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410355// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410356// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410357// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410358// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410359// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410360// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410361// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410362// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410363// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410364// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410365// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010366// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110367// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110368// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410369// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410370// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410371// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10372// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10373// CHECK11:       omp.precond.then:10374// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 410375// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410376// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 410377// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 410378// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 410379// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 410380// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 410381// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410382// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410383// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410384// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 410385// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)10386// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410387// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410388// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]10389// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10390// CHECK11:       cond.true:10391// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410392// CHECK11-NEXT:    br label [[COND_END:%.*]]10393// CHECK11:       cond.false:10394// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410395// CHECK11-NEXT:    br label [[COND_END]]10396// CHECK11:       cond.end:10397// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]10398// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 410399// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 410400// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 410401// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10402// CHECK11:       omp.inner.for.cond:10403// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410404// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410405// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]10406// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10407// CHECK11:       omp.inner.for.body:10408// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410409// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 110410// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]10411// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 410412// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 410413// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 410414// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]10415// CHECK11-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 410416// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 410417// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 410418// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]10419// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 410420// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]10421// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 410422// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 410423// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]10424// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 410425// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]10426// CHECK11:       omp.body.continue:10427// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10428// CHECK11:       omp.inner.for.inc:10429// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410430// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 110431// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 410432// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]10433// CHECK11:       omp.inner.for.end:10434// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10435// CHECK11:       omp.loop.exit:10436// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410437// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 410438// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])10439// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10440// CHECK11:       omp.precond.end:10441// CHECK11-NEXT:    ret void10442//10443//10444// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l50610445// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {10446// CHECK11-NEXT:  entry:10447// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 410448// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 410449// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410450// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410451// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410452// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 410453// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 410454// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410455// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410456// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410457// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])10458// CHECK11-NEXT:    ret void10459//10460//10461// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.omp_outlined10462// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {10463// CHECK11-NEXT:  entry:10464// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410465// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410466// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 410467// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410468// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410469// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410470// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410471// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410472// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410473// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410474// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410475// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 410476// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410477// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 410478// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 410479// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410480// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410481// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 410482// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 410483// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410484// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410485// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 410486// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410487// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410488// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410489// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410490// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 410491// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 410492// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 410493// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 410494// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 410495// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 410496// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 410497// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 410498// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 410499// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410500// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 010501// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110502// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 110503// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 410504// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410505// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410506// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]10507// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10508// CHECK11:       omp.precond.then:10509// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 410510// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 410511// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 410512// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410513// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410514// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410515// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 410516// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)10517// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410518// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 410519// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]10520// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10521// CHECK11:       cond.true:10522// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 410523// CHECK11-NEXT:    br label [[COND_END:%.*]]10524// CHECK11:       cond.false:10525// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410526// CHECK11-NEXT:    br label [[COND_END]]10527// CHECK11:       cond.end:10528// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]10529// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 410530// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410531// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 410532// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10533// CHECK11:       omp.inner.for.cond:10534// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410535// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410536// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]10537// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10538// CHECK11:       omp.inner.for.body:10539// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410540// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410541// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410542// CHECK11-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 410543// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 410544// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]])10545// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10546// CHECK11:       omp.inner.for.inc:10547// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410548// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 410549// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]10550// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 410551// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]10552// CHECK11:       omp.inner.for.end:10553// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10554// CHECK11:       omp.loop.exit:10555// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410556// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 410557// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])10558// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10559// CHECK11:       omp.precond.end:10560// CHECK11-NEXT:    ret void10561//10562//10563// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l506.omp_outlined.omp_outlined10564// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]], i32 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] {10565// CHECK11-NEXT:  entry:10566// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410567// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410568// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 410569// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 410570// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410571// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410572// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410573// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410574// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 410575// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410576// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410577// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410578// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 410579// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410580// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 410581// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 410582// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410583// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410584// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 410585// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410586// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410587// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 410588// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 410589// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410590// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410591// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410592// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410593// CHECK11-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 410594// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410595// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410596// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410597// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410598// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410599// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 410600// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410601// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010602// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110603// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 110604// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 410605// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410606// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410607// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10608// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10609// CHECK11:       omp.precond.then:10610// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 410611// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 410612// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 410613// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 410614// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 410615// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 410616// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 410617// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410618// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410619// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 410620// CHECK11-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410621// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 410622// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP12]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP10]])10623// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]10624// CHECK11:       omp.dispatch.cond:10625// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410626// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 410627// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP13]], [[TMP14]]10628// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10629// CHECK11:       cond.true:10630// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 410631// CHECK11-NEXT:    br label [[COND_END:%.*]]10632// CHECK11:       cond.false:10633// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410634// CHECK11-NEXT:    br label [[COND_END]]10635// CHECK11:       cond.end:10636// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP15]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]10637// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 410638// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 410639// CHECK11-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 410640// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410641// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410642// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]10643// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]10644// CHECK11:       omp.dispatch.body:10645// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10646// CHECK11:       omp.inner.for.cond:10647// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410648// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410649// CHECK11-NEXT:    [[CMP7:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]10650// CHECK11-NEXT:    br i1 [[CMP7]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10651// CHECK11:       omp.inner.for.body:10652// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410653// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 110654// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]10655// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I4]], align 410656// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 410657// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 410658// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]10659// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX]], align 410660// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 410661// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 410662// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]10663// CHECK11-NEXT:    [[TMP28:%.*]] = load double, ptr [[ARRAYIDX8]], align 410664// CHECK11-NEXT:    [[ADD9:%.*]] = fadd double [[TMP25]], [[TMP28]]10665// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 410666// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I4]], align 410667// CHECK11-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds double, ptr [[TMP29]], i32 [[TMP30]]10668// CHECK11-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX10]], align 410669// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]10670// CHECK11:       omp.body.continue:10671// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10672// CHECK11:       omp.inner.for.inc:10673// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410674// CHECK11-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP31]], 110675// CHECK11-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 410676// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]10677// CHECK11:       omp.inner.for.end:10678// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]10679// CHECK11:       omp.dispatch.inc:10680// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_LB]], align 410681// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 410682// CHECK11-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], [[TMP33]]10683// CHECK11-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_LB]], align 410684// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410685// CHECK11-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 410686// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP34]], [[TMP35]]10687// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[DOTOMP_UB]], align 410688// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]10689// CHECK11:       omp.dispatch.end:10690// CHECK11-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410691// CHECK11-NEXT:    [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 410692// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP37]])10693// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10694// CHECK11:       omp.precond.end:10695// CHECK11-NEXT:    ret void10696//10697//10698// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l53610699// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {10700// CHECK11-NEXT:  entry:10701// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 410702// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410703// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410704// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410705// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 410706// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410707// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410708// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410709// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])10710// CHECK11-NEXT:    ret void10711//10712//10713// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.omp_outlined10714// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {10715// CHECK11-NEXT:  entry:10716// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410717// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410718// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410719// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410720// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410721// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410722// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410723// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410724// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410725// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410726// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410727// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 410728// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 410729// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410730// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410731// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410732// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410733// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410734// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410735// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410736// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410737// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410738// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410739// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410740// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410741// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410742// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410743// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410744// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410745// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010746// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110747// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110748// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410749// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410750// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410751// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10752// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10753// CHECK11:       omp.precond.then:10754// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 410755// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410756// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 410757// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410758// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410759// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410760// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 410761// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)10762// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410763// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410764// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]10765// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10766// CHECK11:       cond.true:10767// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410768// CHECK11-NEXT:    br label [[COND_END:%.*]]10769// CHECK11:       cond.false:10770// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410771// CHECK11-NEXT:    br label [[COND_END]]10772// CHECK11:       cond.end:10773// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]10774// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 410775// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410776// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 410777// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10778// CHECK11:       omp.inner.for.cond:10779// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410780// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410781// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]10782// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10783// CHECK11:       omp.inner.for.body:10784// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410785// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410786// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])10787// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10788// CHECK11:       omp.inner.for.inc:10789// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 410790// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 410791// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]10792// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 410793// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]10794// CHECK11:       omp.inner.for.end:10795// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10796// CHECK11:       omp.loop.exit:10797// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410798// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 410799// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])10800// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10801// CHECK11:       omp.precond.end:10802// CHECK11-NEXT:    ret void10803//10804//10805// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l536.omp_outlined.omp_outlined10806// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {10807// CHECK11-NEXT:  entry:10808// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410809// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410810// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 410811// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 410812// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410813// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410814// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410815// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410816// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410817// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410818// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410819// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410820// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410821// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 410822// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 410823// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410824// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410825// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410826// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410827// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410828// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 410829// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 410830// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410831// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410832// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410833// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410834// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410835// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410836// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410837// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410838// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410839// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410840// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410841// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010842// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110843// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110844// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410845// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410846// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410847// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10848// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10849// CHECK11:       omp.precond.then:10850// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 410851// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410852// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 410853// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 410854// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 410855// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 410856// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 410857// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410858// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410859// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 410860// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410861// CHECK11-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410862// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 410863// CHECK11-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)10864// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]10865// CHECK11:       omp.dispatch.cond:10866// CHECK11-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410867// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 410868// CHECK11-NEXT:    [[TMP16:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP15]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])10869// CHECK11-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 010870// CHECK11-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]10871// CHECK11:       omp.dispatch.body:10872// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 410873// CHECK11-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 410874// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10875// CHECK11:       omp.inner.for.cond:10876// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP20:![0-9]+]]10877// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP20]]10878// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]10879// CHECK11-NEXT:    br i1 [[CMP4]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10880// CHECK11:       omp.inner.for.body:10881// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP20]]10882// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 110883// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]10884// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP20]]10885// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP20]]10886// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP20]]10887// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP21]], i32 [[TMP22]]10888// CHECK11-NEXT:    [[TMP23:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP20]]10889// CHECK11-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP20]]10890// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP20]]10891// CHECK11-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds double, ptr [[TMP24]], i32 [[TMP25]]10892// CHECK11-NEXT:    [[TMP26:%.*]] = load double, ptr [[ARRAYIDX5]], align 4, !llvm.access.group [[ACC_GRP20]]10893// CHECK11-NEXT:    [[ADD6:%.*]] = fadd double [[TMP23]], [[TMP26]]10894// CHECK11-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP20]]10895// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP20]]10896// CHECK11-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds double, ptr [[TMP27]], i32 [[TMP28]]10897// CHECK11-NEXT:    store double [[ADD6]], ptr [[ARRAYIDX7]], align 4, !llvm.access.group [[ACC_GRP20]]10898// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]10899// CHECK11:       omp.body.continue:10900// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10901// CHECK11:       omp.inner.for.inc:10902// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP20]]10903// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP29]], 110904// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP20]]10905// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP21:![0-9]+]]10906// CHECK11:       omp.inner.for.end:10907// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]10908// CHECK11:       omp.dispatch.inc:10909// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]10910// CHECK11:       omp.dispatch.end:10911// CHECK11-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410912// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[TMP30]], align 410913// CHECK11-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP31]])10914// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10915// CHECK11:       omp.precond.end:10916// CHECK11-NEXT:    ret void10917//10918//10919// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l56210920// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {10921// CHECK11-NEXT:  entry:10922// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 410923// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 410924// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410925// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410926// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410927// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 410928// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 410929// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410930// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410931// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410932// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])10933// CHECK11-NEXT:    ret void10934//10935//10936// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.omp_outlined10937// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {10938// CHECK11-NEXT:  entry:10939// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410940// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410941// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 410942// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410943// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410944// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410945// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410946// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410947// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410948// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410949// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410950// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 410951// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410952// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 410953// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 410954// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410955// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410956// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 410957// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 410958// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410959// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410960// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 410961// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410962// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410963// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410964// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410965// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 410966// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 410967// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 410968// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 410969// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 410970// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 410971// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 410972// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 410973// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 410974// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410975// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 010976// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110977// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 110978// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 410979// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410980// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410981// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]10982// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10983// CHECK11:       omp.precond.then:10984// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 410985// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 410986// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 410987// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410988// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410989// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410990// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 410991// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)10992// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410993// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 410994// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]10995// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10996// CHECK11:       cond.true:10997// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 410998// CHECK11-NEXT:    br label [[COND_END:%.*]]10999// CHECK11:       cond.false:11000// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411001// CHECK11-NEXT:    br label [[COND_END]]11002// CHECK11:       cond.end:11003// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]11004// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 411005// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 411006// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 411007// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11008// CHECK11:       omp.inner.for.cond:11009// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 411010// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411011// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]11012// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11013// CHECK11:       omp.inner.for.body:11014// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 411015// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411016// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411017// CHECK11-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 411018// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 411019// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]])11020// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11021// CHECK11:       omp.inner.for.inc:11022// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 411023// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 411024// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]11025// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 411026// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]11027// CHECK11:       omp.inner.for.end:11028// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]11029// CHECK11:       omp.loop.exit:11030// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411031// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 411032// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])11033// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11034// CHECK11:       omp.precond.end:11035// CHECK11-NEXT:    ret void11036//11037//11038// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l562.omp_outlined.omp_outlined11039// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]], i32 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] {11040// CHECK11-NEXT:  entry:11041// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411042// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411043// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 411044// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 411045// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411046// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411047// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411048// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411049// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 411050// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411051// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411052// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411053// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 411054// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411055// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 411056// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 411057// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411058// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411059// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 411060// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411061// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411062// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 411063// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 411064// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411065// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411066// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411067// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411068// CHECK11-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 411069// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 411070// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 411071// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 411072// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 411073// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 411074// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 411075// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411076// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 011077// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111078// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 111079// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 411080// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411081// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411082// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]11083// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11084// CHECK11:       omp.precond.then:11085// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 411086// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 411087// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 411088// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 411089// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 411090// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 411091// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 411092// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411093// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411094// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 411095// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411096// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411097// CHECK11-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411098// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 411099// CHECK11-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])11100// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]11101// CHECK11:       omp.dispatch.cond:11102// CHECK11-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411103// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 411104// CHECK11-NEXT:    [[TMP17:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP16]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])11105// CHECK11-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 011106// CHECK11-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]11107// CHECK11:       omp.dispatch.body:11108// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411109// CHECK11-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 411110// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11111// CHECK11:       omp.inner.for.cond:11112// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP23:![0-9]+]]11113// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP23]]11114// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]11115// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11116// CHECK11:       omp.inner.for.body:11117// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP23]]11118// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 111119// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]11120// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP23]]11121// CHECK11-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP23]]11122// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP23]]11123// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP22]], i32 [[TMP23]]11124// CHECK11-NEXT:    [[TMP24:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP23]]11125// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP23]]11126// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP23]]11127// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP25]], i32 [[TMP26]]11128// CHECK11-NEXT:    [[TMP27:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP23]]11129// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP24]], [[TMP27]]11130// CHECK11-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP23]]11131// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP23]]11132// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP28]], i32 [[TMP29]]11133// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP23]]11134// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]11135// CHECK11:       omp.body.continue:11136// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11137// CHECK11:       omp.inner.for.inc:11138// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP23]]11139// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP30]], 111140// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP23]]11141// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP24:![0-9]+]]11142// CHECK11:       omp.inner.for.end:11143// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]11144// CHECK11:       omp.dispatch.inc:11145// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]11146// CHECK11:       omp.dispatch.end:11147// CHECK11-NEXT:    [[TMP31:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411148// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[TMP31]], align 411149// CHECK11-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP32]])11150// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11151// CHECK11:       omp.precond.end:11152// CHECK11-NEXT:    ret void11153//11154//11155// CHECK11-LABEL: define {{[^@]+}}@_Z5tmainIiET_v11156// CHECK11-SAME: () #[[ATTR3:[0-9]+]] comdat {11157// CHECK11-NEXT:  entry:11158// CHECK11-NEXT:    [[A:%.*]] = alloca ptr, align 411159// CHECK11-NEXT:    [[B:%.*]] = alloca ptr, align 411160// CHECK11-NEXT:    [[C:%.*]] = alloca ptr, align 411161// CHECK11-NEXT:    [[N:%.*]] = alloca i32, align 411162// CHECK11-NEXT:    [[CH:%.*]] = alloca i32, align 411163// CHECK11-NEXT:    [[N_CASTED:%.*]] = alloca i32, align 411164// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 411165// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 411166// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 411167// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411168// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 411169// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411170// CHECK11-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 811171// CHECK11-NEXT:    [[N_CASTED3:%.*]] = alloca i32, align 411172// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS4:%.*]] = alloca [4 x ptr], align 411173// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS5:%.*]] = alloca [4 x ptr], align 411174// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS6:%.*]] = alloca [4 x ptr], align 411175// CHECK11-NEXT:    [[_TMP7:%.*]] = alloca i32, align 411176// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_8:%.*]] = alloca i32, align 411177// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 411178// CHECK11-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 811179// CHECK11-NEXT:    [[CH_CASTED:%.*]] = alloca i32, align 411180// CHECK11-NEXT:    [[N_CASTED17:%.*]] = alloca i32, align 411181// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS18:%.*]] = alloca [5 x ptr], align 411182// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS19:%.*]] = alloca [5 x ptr], align 411183// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS20:%.*]] = alloca [5 x ptr], align 411184// CHECK11-NEXT:    [[_TMP21:%.*]] = alloca i32, align 411185// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 411186// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_23:%.*]] = alloca i32, align 411187// CHECK11-NEXT:    [[KERNEL_ARGS28:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 811188// CHECK11-NEXT:    [[N_CASTED31:%.*]] = alloca i32, align 411189// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS32:%.*]] = alloca [4 x ptr], align 411190// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS33:%.*]] = alloca [4 x ptr], align 411191// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS34:%.*]] = alloca [4 x ptr], align 411192// CHECK11-NEXT:    [[_TMP35:%.*]] = alloca i32, align 411193// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_36:%.*]] = alloca i32, align 411194// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_37:%.*]] = alloca i32, align 411195// CHECK11-NEXT:    [[KERNEL_ARGS42:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 811196// CHECK11-NEXT:    [[CH_CASTED45:%.*]] = alloca i32, align 411197// CHECK11-NEXT:    [[N_CASTED46:%.*]] = alloca i32, align 411198// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS47:%.*]] = alloca [5 x ptr], align 411199// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS48:%.*]] = alloca [5 x ptr], align 411200// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS49:%.*]] = alloca [5 x ptr], align 411201// CHECK11-NEXT:    [[_TMP50:%.*]] = alloca i32, align 411202// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_51:%.*]] = alloca i32, align 411203// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_52:%.*]] = alloca i32, align 411204// CHECK11-NEXT:    [[KERNEL_ARGS57:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 811205// CHECK11-NEXT:    [[N_CASTED60:%.*]] = alloca i32, align 411206// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS61:%.*]] = alloca [4 x ptr], align 411207// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS62:%.*]] = alloca [4 x ptr], align 411208// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS63:%.*]] = alloca [4 x ptr], align 411209// CHECK11-NEXT:    [[_TMP64:%.*]] = alloca i32, align 411210// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_65:%.*]] = alloca i32, align 411211// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_66:%.*]] = alloca i32, align 411212// CHECK11-NEXT:    [[KERNEL_ARGS71:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 811213// CHECK11-NEXT:    [[CH_CASTED74:%.*]] = alloca i32, align 411214// CHECK11-NEXT:    [[N_CASTED75:%.*]] = alloca i32, align 411215// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS76:%.*]] = alloca [5 x ptr], align 411216// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS77:%.*]] = alloca [5 x ptr], align 411217// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS78:%.*]] = alloca [5 x ptr], align 411218// CHECK11-NEXT:    [[_TMP79:%.*]] = alloca i32, align 411219// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_80:%.*]] = alloca i32, align 411220// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_81:%.*]] = alloca i32, align 411221// CHECK11-NEXT:    [[KERNEL_ARGS86:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 811222// CHECK11-NEXT:    store i32 10000, ptr [[N]], align 411223// CHECK11-NEXT:    store i32 100, ptr [[CH]], align 411224// CHECK11-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 411225// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[N_CASTED]], align 411226// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[N_CASTED]], align 411227// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A]], align 411228// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B]], align 411229// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C]], align 411230// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 011231// CHECK11-NEXT:    store i32 [[TMP1]], ptr [[TMP5]], align 411232// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 011233// CHECK11-NEXT:    store i32 [[TMP1]], ptr [[TMP6]], align 411234// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 011235// CHECK11-NEXT:    store ptr null, ptr [[TMP7]], align 411236// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 111237// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[TMP8]], align 411238// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 111239// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[TMP9]], align 411240// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 111241// CHECK11-NEXT:    store ptr null, ptr [[TMP10]], align 411242// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 211243// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[TMP11]], align 411244// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 211245// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[TMP12]], align 411246// CHECK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 211247// CHECK11-NEXT:    store ptr null, ptr [[TMP13]], align 411248// CHECK11-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 311249// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[TMP14]], align 411250// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 311251// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[TMP15]], align 411252// CHECK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 311253// CHECK11-NEXT:    store ptr null, ptr [[TMP16]], align 411254// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 011255// CHECK11-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 011256// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 411257// CHECK11-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 411258// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411259// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 011260// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111261// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 111262// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 411263// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411264// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 111265// CHECK11-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i6411266// CHECK11-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 011267// CHECK11-NEXT:    store i32 3, ptr [[TMP23]], align 411268// CHECK11-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 111269// CHECK11-NEXT:    store i32 4, ptr [[TMP24]], align 411270// CHECK11-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 211271// CHECK11-NEXT:    store ptr [[TMP17]], ptr [[TMP25]], align 411272// CHECK11-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 311273// CHECK11-NEXT:    store ptr [[TMP18]], ptr [[TMP26]], align 411274// CHECK11-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 411275// CHECK11-NEXT:    store ptr @.offload_sizes.13, ptr [[TMP27]], align 411276// CHECK11-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 511277// CHECK11-NEXT:    store ptr @.offload_maptypes.14, ptr [[TMP28]], align 411278// CHECK11-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 611279// CHECK11-NEXT:    store ptr null, ptr [[TMP29]], align 411280// CHECK11-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 711281// CHECK11-NEXT:    store ptr null, ptr [[TMP30]], align 411282// CHECK11-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 811283// CHECK11-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 811284// CHECK11-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 911285// CHECK11-NEXT:    store i64 0, ptr [[TMP32]], align 811286// CHECK11-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1011287// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 411288// CHECK11-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1111289// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 411290// CHECK11-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1211291// CHECK11-NEXT:    store i32 0, ptr [[TMP35]], align 411292// CHECK11-NEXT:    [[TMP36:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.region_id, ptr [[KERNEL_ARGS]])11293// CHECK11-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 011294// CHECK11-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]11295// CHECK11:       omp_offload.failed:11296// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42(i32 [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]) #[[ATTR2]]11297// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT]]11298// CHECK11:       omp_offload.cont:11299// CHECK11-NEXT:    [[TMP38:%.*]] = load i32, ptr [[N]], align 411300// CHECK11-NEXT:    store i32 [[TMP38]], ptr [[N_CASTED3]], align 411301// CHECK11-NEXT:    [[TMP39:%.*]] = load i32, ptr [[N_CASTED3]], align 411302// CHECK11-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[A]], align 411303// CHECK11-NEXT:    [[TMP41:%.*]] = load ptr, ptr [[B]], align 411304// CHECK11-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[C]], align 411305// CHECK11-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 011306// CHECK11-NEXT:    store i32 [[TMP39]], ptr [[TMP43]], align 411307// CHECK11-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 011308// CHECK11-NEXT:    store i32 [[TMP39]], ptr [[TMP44]], align 411309// CHECK11-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 011310// CHECK11-NEXT:    store ptr null, ptr [[TMP45]], align 411311// CHECK11-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 111312// CHECK11-NEXT:    store ptr [[TMP40]], ptr [[TMP46]], align 411313// CHECK11-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 111314// CHECK11-NEXT:    store ptr [[TMP40]], ptr [[TMP47]], align 411315// CHECK11-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 111316// CHECK11-NEXT:    store ptr null, ptr [[TMP48]], align 411317// CHECK11-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 211318// CHECK11-NEXT:    store ptr [[TMP41]], ptr [[TMP49]], align 411319// CHECK11-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 211320// CHECK11-NEXT:    store ptr [[TMP41]], ptr [[TMP50]], align 411321// CHECK11-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 211322// CHECK11-NEXT:    store ptr null, ptr [[TMP51]], align 411323// CHECK11-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 311324// CHECK11-NEXT:    store ptr [[TMP42]], ptr [[TMP52]], align 411325// CHECK11-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 311326// CHECK11-NEXT:    store ptr [[TMP42]], ptr [[TMP53]], align 411327// CHECK11-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 311328// CHECK11-NEXT:    store ptr null, ptr [[TMP54]], align 411329// CHECK11-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 011330// CHECK11-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 011331// CHECK11-NEXT:    [[TMP57:%.*]] = load i32, ptr [[N]], align 411332// CHECK11-NEXT:    store i32 [[TMP57]], ptr [[DOTCAPTURE_EXPR_8]], align 411333// CHECK11-NEXT:    [[TMP58:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_8]], align 411334// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP58]], 011335// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 111336// CHECK11-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[DIV11]], 111337// CHECK11-NEXT:    store i32 [[SUB12]], ptr [[DOTCAPTURE_EXPR_9]], align 411338// CHECK11-NEXT:    [[TMP59:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 411339// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP59]], 111340// CHECK11-NEXT:    [[TMP60:%.*]] = zext i32 [[ADD13]] to i6411341// CHECK11-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 011342// CHECK11-NEXT:    store i32 3, ptr [[TMP61]], align 411343// CHECK11-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 111344// CHECK11-NEXT:    store i32 4, ptr [[TMP62]], align 411345// CHECK11-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 211346// CHECK11-NEXT:    store ptr [[TMP55]], ptr [[TMP63]], align 411347// CHECK11-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 311348// CHECK11-NEXT:    store ptr [[TMP56]], ptr [[TMP64]], align 411349// CHECK11-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 411350// CHECK11-NEXT:    store ptr @.offload_sizes.15, ptr [[TMP65]], align 411351// CHECK11-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 511352// CHECK11-NEXT:    store ptr @.offload_maptypes.16, ptr [[TMP66]], align 411353// CHECK11-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 611354// CHECK11-NEXT:    store ptr null, ptr [[TMP67]], align 411355// CHECK11-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 711356// CHECK11-NEXT:    store ptr null, ptr [[TMP68]], align 411357// CHECK11-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 811358// CHECK11-NEXT:    store i64 [[TMP60]], ptr [[TMP69]], align 811359// CHECK11-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 911360// CHECK11-NEXT:    store i64 0, ptr [[TMP70]], align 811361// CHECK11-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1011362// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP71]], align 411363// CHECK11-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1111364// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP72]], align 411365// CHECK11-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1211366// CHECK11-NEXT:    store i32 0, ptr [[TMP73]], align 411367// CHECK11-NEXT:    [[TMP74:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.region_id, ptr [[KERNEL_ARGS14]])11368// CHECK11-NEXT:    [[TMP75:%.*]] = icmp ne i32 [[TMP74]], 011369// CHECK11-NEXT:    br i1 [[TMP75]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]11370// CHECK11:       omp_offload.failed15:11371// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51(i32 [[TMP39]], ptr [[TMP40]], ptr [[TMP41]], ptr [[TMP42]]) #[[ATTR2]]11372// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT16]]11373// CHECK11:       omp_offload.cont16:11374// CHECK11-NEXT:    [[TMP76:%.*]] = load i32, ptr [[CH]], align 411375// CHECK11-NEXT:    store i32 [[TMP76]], ptr [[CH_CASTED]], align 411376// CHECK11-NEXT:    [[TMP77:%.*]] = load i32, ptr [[CH_CASTED]], align 411377// CHECK11-NEXT:    [[TMP78:%.*]] = load i32, ptr [[N]], align 411378// CHECK11-NEXT:    store i32 [[TMP78]], ptr [[N_CASTED17]], align 411379// CHECK11-NEXT:    [[TMP79:%.*]] = load i32, ptr [[N_CASTED17]], align 411380// CHECK11-NEXT:    [[TMP80:%.*]] = load ptr, ptr [[A]], align 411381// CHECK11-NEXT:    [[TMP81:%.*]] = load ptr, ptr [[B]], align 411382// CHECK11-NEXT:    [[TMP82:%.*]] = load ptr, ptr [[C]], align 411383// CHECK11-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 011384// CHECK11-NEXT:    store i32 [[TMP77]], ptr [[TMP83]], align 411385// CHECK11-NEXT:    [[TMP84:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 011386// CHECK11-NEXT:    store i32 [[TMP77]], ptr [[TMP84]], align 411387// CHECK11-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 011388// CHECK11-NEXT:    store ptr null, ptr [[TMP85]], align 411389// CHECK11-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 111390// CHECK11-NEXT:    store i32 [[TMP79]], ptr [[TMP86]], align 411391// CHECK11-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 111392// CHECK11-NEXT:    store i32 [[TMP79]], ptr [[TMP87]], align 411393// CHECK11-NEXT:    [[TMP88:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 111394// CHECK11-NEXT:    store ptr null, ptr [[TMP88]], align 411395// CHECK11-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 211396// CHECK11-NEXT:    store ptr [[TMP80]], ptr [[TMP89]], align 411397// CHECK11-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 211398// CHECK11-NEXT:    store ptr [[TMP80]], ptr [[TMP90]], align 411399// CHECK11-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 211400// CHECK11-NEXT:    store ptr null, ptr [[TMP91]], align 411401// CHECK11-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 311402// CHECK11-NEXT:    store ptr [[TMP81]], ptr [[TMP92]], align 411403// CHECK11-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 311404// CHECK11-NEXT:    store ptr [[TMP81]], ptr [[TMP93]], align 411405// CHECK11-NEXT:    [[TMP94:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 311406// CHECK11-NEXT:    store ptr null, ptr [[TMP94]], align 411407// CHECK11-NEXT:    [[TMP95:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 411408// CHECK11-NEXT:    store ptr [[TMP82]], ptr [[TMP95]], align 411409// CHECK11-NEXT:    [[TMP96:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 411410// CHECK11-NEXT:    store ptr [[TMP82]], ptr [[TMP96]], align 411411// CHECK11-NEXT:    [[TMP97:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 411412// CHECK11-NEXT:    store ptr null, ptr [[TMP97]], align 411413// CHECK11-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 011414// CHECK11-NEXT:    [[TMP99:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 011415// CHECK11-NEXT:    [[TMP100:%.*]] = load i32, ptr [[N]], align 411416// CHECK11-NEXT:    store i32 [[TMP100]], ptr [[DOTCAPTURE_EXPR_22]], align 411417// CHECK11-NEXT:    [[TMP101:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 411418// CHECK11-NEXT:    [[SUB24:%.*]] = sub nsw i32 [[TMP101]], 011419// CHECK11-NEXT:    [[DIV25:%.*]] = sdiv i32 [[SUB24]], 111420// CHECK11-NEXT:    [[SUB26:%.*]] = sub nsw i32 [[DIV25]], 111421// CHECK11-NEXT:    store i32 [[SUB26]], ptr [[DOTCAPTURE_EXPR_23]], align 411422// CHECK11-NEXT:    [[TMP102:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_23]], align 411423// CHECK11-NEXT:    [[ADD27:%.*]] = add nsw i32 [[TMP102]], 111424// CHECK11-NEXT:    [[TMP103:%.*]] = zext i32 [[ADD27]] to i6411425// CHECK11-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 011426// CHECK11-NEXT:    store i32 3, ptr [[TMP104]], align 411427// CHECK11-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 111428// CHECK11-NEXT:    store i32 5, ptr [[TMP105]], align 411429// CHECK11-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 211430// CHECK11-NEXT:    store ptr [[TMP98]], ptr [[TMP106]], align 411431// CHECK11-NEXT:    [[TMP107:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 311432// CHECK11-NEXT:    store ptr [[TMP99]], ptr [[TMP107]], align 411433// CHECK11-NEXT:    [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 411434// CHECK11-NEXT:    store ptr @.offload_sizes.17, ptr [[TMP108]], align 411435// CHECK11-NEXT:    [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 511436// CHECK11-NEXT:    store ptr @.offload_maptypes.18, ptr [[TMP109]], align 411437// CHECK11-NEXT:    [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 611438// CHECK11-NEXT:    store ptr null, ptr [[TMP110]], align 411439// CHECK11-NEXT:    [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 711440// CHECK11-NEXT:    store ptr null, ptr [[TMP111]], align 411441// CHECK11-NEXT:    [[TMP112:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 811442// CHECK11-NEXT:    store i64 [[TMP103]], ptr [[TMP112]], align 811443// CHECK11-NEXT:    [[TMP113:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 911444// CHECK11-NEXT:    store i64 0, ptr [[TMP113]], align 811445// CHECK11-NEXT:    [[TMP114:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 1011446// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP114]], align 411447// CHECK11-NEXT:    [[TMP115:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 1111448// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP115]], align 411449// CHECK11-NEXT:    [[TMP116:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 1211450// CHECK11-NEXT:    store i32 0, ptr [[TMP116]], align 411451// CHECK11-NEXT:    [[TMP117:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.region_id, ptr [[KERNEL_ARGS28]])11452// CHECK11-NEXT:    [[TMP118:%.*]] = icmp ne i32 [[TMP117]], 011453// CHECK11-NEXT:    br i1 [[TMP118]], label [[OMP_OFFLOAD_FAILED29:%.*]], label [[OMP_OFFLOAD_CONT30:%.*]]11454// CHECK11:       omp_offload.failed29:11455// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59(i32 [[TMP77]], i32 [[TMP79]], ptr [[TMP80]], ptr [[TMP81]], ptr [[TMP82]]) #[[ATTR2]]11456// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT30]]11457// CHECK11:       omp_offload.cont30:11458// CHECK11-NEXT:    [[TMP119:%.*]] = load i32, ptr [[N]], align 411459// CHECK11-NEXT:    store i32 [[TMP119]], ptr [[N_CASTED31]], align 411460// CHECK11-NEXT:    [[TMP120:%.*]] = load i32, ptr [[N_CASTED31]], align 411461// CHECK11-NEXT:    [[TMP121:%.*]] = load ptr, ptr [[A]], align 411462// CHECK11-NEXT:    [[TMP122:%.*]] = load ptr, ptr [[B]], align 411463// CHECK11-NEXT:    [[TMP123:%.*]] = load ptr, ptr [[C]], align 411464// CHECK11-NEXT:    [[TMP124:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 011465// CHECK11-NEXT:    store i32 [[TMP120]], ptr [[TMP124]], align 411466// CHECK11-NEXT:    [[TMP125:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 011467// CHECK11-NEXT:    store i32 [[TMP120]], ptr [[TMP125]], align 411468// CHECK11-NEXT:    [[TMP126:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 011469// CHECK11-NEXT:    store ptr null, ptr [[TMP126]], align 411470// CHECK11-NEXT:    [[TMP127:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 111471// CHECK11-NEXT:    store ptr [[TMP121]], ptr [[TMP127]], align 411472// CHECK11-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 111473// CHECK11-NEXT:    store ptr [[TMP121]], ptr [[TMP128]], align 411474// CHECK11-NEXT:    [[TMP129:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 111475// CHECK11-NEXT:    store ptr null, ptr [[TMP129]], align 411476// CHECK11-NEXT:    [[TMP130:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 211477// CHECK11-NEXT:    store ptr [[TMP122]], ptr [[TMP130]], align 411478// CHECK11-NEXT:    [[TMP131:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 211479// CHECK11-NEXT:    store ptr [[TMP122]], ptr [[TMP131]], align 411480// CHECK11-NEXT:    [[TMP132:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 211481// CHECK11-NEXT:    store ptr null, ptr [[TMP132]], align 411482// CHECK11-NEXT:    [[TMP133:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 311483// CHECK11-NEXT:    store ptr [[TMP123]], ptr [[TMP133]], align 411484// CHECK11-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 311485// CHECK11-NEXT:    store ptr [[TMP123]], ptr [[TMP134]], align 411486// CHECK11-NEXT:    [[TMP135:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 311487// CHECK11-NEXT:    store ptr null, ptr [[TMP135]], align 411488// CHECK11-NEXT:    [[TMP136:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 011489// CHECK11-NEXT:    [[TMP137:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 011490// CHECK11-NEXT:    [[TMP138:%.*]] = load i32, ptr [[N]], align 411491// CHECK11-NEXT:    store i32 [[TMP138]], ptr [[DOTCAPTURE_EXPR_36]], align 411492// CHECK11-NEXT:    [[TMP139:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_36]], align 411493// CHECK11-NEXT:    [[SUB38:%.*]] = sub nsw i32 [[TMP139]], 011494// CHECK11-NEXT:    [[DIV39:%.*]] = sdiv i32 [[SUB38]], 111495// CHECK11-NEXT:    [[SUB40:%.*]] = sub nsw i32 [[DIV39]], 111496// CHECK11-NEXT:    store i32 [[SUB40]], ptr [[DOTCAPTURE_EXPR_37]], align 411497// CHECK11-NEXT:    [[TMP140:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_37]], align 411498// CHECK11-NEXT:    [[ADD41:%.*]] = add nsw i32 [[TMP140]], 111499// CHECK11-NEXT:    [[TMP141:%.*]] = zext i32 [[ADD41]] to i6411500// CHECK11-NEXT:    [[TMP142:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 011501// CHECK11-NEXT:    store i32 3, ptr [[TMP142]], align 411502// CHECK11-NEXT:    [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 111503// CHECK11-NEXT:    store i32 4, ptr [[TMP143]], align 411504// CHECK11-NEXT:    [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 211505// CHECK11-NEXT:    store ptr [[TMP136]], ptr [[TMP144]], align 411506// CHECK11-NEXT:    [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 311507// CHECK11-NEXT:    store ptr [[TMP137]], ptr [[TMP145]], align 411508// CHECK11-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 411509// CHECK11-NEXT:    store ptr @.offload_sizes.19, ptr [[TMP146]], align 411510// CHECK11-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 511511// CHECK11-NEXT:    store ptr @.offload_maptypes.20, ptr [[TMP147]], align 411512// CHECK11-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 611513// CHECK11-NEXT:    store ptr null, ptr [[TMP148]], align 411514// CHECK11-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 711515// CHECK11-NEXT:    store ptr null, ptr [[TMP149]], align 411516// CHECK11-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 811517// CHECK11-NEXT:    store i64 [[TMP141]], ptr [[TMP150]], align 811518// CHECK11-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 911519// CHECK11-NEXT:    store i64 0, ptr [[TMP151]], align 811520// CHECK11-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 1011521// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP152]], align 411522// CHECK11-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 1111523// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP153]], align 411524// CHECK11-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 1211525// CHECK11-NEXT:    store i32 0, ptr [[TMP154]], align 411526// CHECK11-NEXT:    [[TMP155:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.region_id, ptr [[KERNEL_ARGS42]])11527// CHECK11-NEXT:    [[TMP156:%.*]] = icmp ne i32 [[TMP155]], 011528// CHECK11-NEXT:    br i1 [[TMP156]], label [[OMP_OFFLOAD_FAILED43:%.*]], label [[OMP_OFFLOAD_CONT44:%.*]]11529// CHECK11:       omp_offload.failed43:11530// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67(i32 [[TMP120]], ptr [[TMP121]], ptr [[TMP122]], ptr [[TMP123]]) #[[ATTR2]]11531// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT44]]11532// CHECK11:       omp_offload.cont44:11533// CHECK11-NEXT:    [[TMP157:%.*]] = load i32, ptr [[CH]], align 411534// CHECK11-NEXT:    store i32 [[TMP157]], ptr [[CH_CASTED45]], align 411535// CHECK11-NEXT:    [[TMP158:%.*]] = load i32, ptr [[CH_CASTED45]], align 411536// CHECK11-NEXT:    [[TMP159:%.*]] = load i32, ptr [[N]], align 411537// CHECK11-NEXT:    store i32 [[TMP159]], ptr [[N_CASTED46]], align 411538// CHECK11-NEXT:    [[TMP160:%.*]] = load i32, ptr [[N_CASTED46]], align 411539// CHECK11-NEXT:    [[TMP161:%.*]] = load ptr, ptr [[A]], align 411540// CHECK11-NEXT:    [[TMP162:%.*]] = load ptr, ptr [[B]], align 411541// CHECK11-NEXT:    [[TMP163:%.*]] = load ptr, ptr [[C]], align 411542// CHECK11-NEXT:    [[TMP164:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 011543// CHECK11-NEXT:    store i32 [[TMP158]], ptr [[TMP164]], align 411544// CHECK11-NEXT:    [[TMP165:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 011545// CHECK11-NEXT:    store i32 [[TMP158]], ptr [[TMP165]], align 411546// CHECK11-NEXT:    [[TMP166:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 011547// CHECK11-NEXT:    store ptr null, ptr [[TMP166]], align 411548// CHECK11-NEXT:    [[TMP167:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 111549// CHECK11-NEXT:    store i32 [[TMP160]], ptr [[TMP167]], align 411550// CHECK11-NEXT:    [[TMP168:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 111551// CHECK11-NEXT:    store i32 [[TMP160]], ptr [[TMP168]], align 411552// CHECK11-NEXT:    [[TMP169:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 111553// CHECK11-NEXT:    store ptr null, ptr [[TMP169]], align 411554// CHECK11-NEXT:    [[TMP170:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 211555// CHECK11-NEXT:    store ptr [[TMP161]], ptr [[TMP170]], align 411556// CHECK11-NEXT:    [[TMP171:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 211557// CHECK11-NEXT:    store ptr [[TMP161]], ptr [[TMP171]], align 411558// CHECK11-NEXT:    [[TMP172:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 211559// CHECK11-NEXT:    store ptr null, ptr [[TMP172]], align 411560// CHECK11-NEXT:    [[TMP173:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 311561// CHECK11-NEXT:    store ptr [[TMP162]], ptr [[TMP173]], align 411562// CHECK11-NEXT:    [[TMP174:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 311563// CHECK11-NEXT:    store ptr [[TMP162]], ptr [[TMP174]], align 411564// CHECK11-NEXT:    [[TMP175:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 311565// CHECK11-NEXT:    store ptr null, ptr [[TMP175]], align 411566// CHECK11-NEXT:    [[TMP176:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 411567// CHECK11-NEXT:    store ptr [[TMP163]], ptr [[TMP176]], align 411568// CHECK11-NEXT:    [[TMP177:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 411569// CHECK11-NEXT:    store ptr [[TMP163]], ptr [[TMP177]], align 411570// CHECK11-NEXT:    [[TMP178:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 411571// CHECK11-NEXT:    store ptr null, ptr [[TMP178]], align 411572// CHECK11-NEXT:    [[TMP179:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 011573// CHECK11-NEXT:    [[TMP180:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 011574// CHECK11-NEXT:    [[TMP181:%.*]] = load i32, ptr [[N]], align 411575// CHECK11-NEXT:    store i32 [[TMP181]], ptr [[DOTCAPTURE_EXPR_51]], align 411576// CHECK11-NEXT:    [[TMP182:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_51]], align 411577// CHECK11-NEXT:    [[SUB53:%.*]] = sub nsw i32 [[TMP182]], 011578// CHECK11-NEXT:    [[DIV54:%.*]] = sdiv i32 [[SUB53]], 111579// CHECK11-NEXT:    [[SUB55:%.*]] = sub nsw i32 [[DIV54]], 111580// CHECK11-NEXT:    store i32 [[SUB55]], ptr [[DOTCAPTURE_EXPR_52]], align 411581// CHECK11-NEXT:    [[TMP183:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_52]], align 411582// CHECK11-NEXT:    [[ADD56:%.*]] = add nsw i32 [[TMP183]], 111583// CHECK11-NEXT:    [[TMP184:%.*]] = zext i32 [[ADD56]] to i6411584// CHECK11-NEXT:    [[TMP185:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 011585// CHECK11-NEXT:    store i32 3, ptr [[TMP185]], align 411586// CHECK11-NEXT:    [[TMP186:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 111587// CHECK11-NEXT:    store i32 5, ptr [[TMP186]], align 411588// CHECK11-NEXT:    [[TMP187:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 211589// CHECK11-NEXT:    store ptr [[TMP179]], ptr [[TMP187]], align 411590// CHECK11-NEXT:    [[TMP188:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 311591// CHECK11-NEXT:    store ptr [[TMP180]], ptr [[TMP188]], align 411592// CHECK11-NEXT:    [[TMP189:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 411593// CHECK11-NEXT:    store ptr @.offload_sizes.21, ptr [[TMP189]], align 411594// CHECK11-NEXT:    [[TMP190:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 511595// CHECK11-NEXT:    store ptr @.offload_maptypes.22, ptr [[TMP190]], align 411596// CHECK11-NEXT:    [[TMP191:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 611597// CHECK11-NEXT:    store ptr null, ptr [[TMP191]], align 411598// CHECK11-NEXT:    [[TMP192:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 711599// CHECK11-NEXT:    store ptr null, ptr [[TMP192]], align 411600// CHECK11-NEXT:    [[TMP193:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 811601// CHECK11-NEXT:    store i64 [[TMP184]], ptr [[TMP193]], align 811602// CHECK11-NEXT:    [[TMP194:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 911603// CHECK11-NEXT:    store i64 0, ptr [[TMP194]], align 811604// CHECK11-NEXT:    [[TMP195:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 1011605// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP195]], align 411606// CHECK11-NEXT:    [[TMP196:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 1111607// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP196]], align 411608// CHECK11-NEXT:    [[TMP197:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 1211609// CHECK11-NEXT:    store i32 0, ptr [[TMP197]], align 411610// CHECK11-NEXT:    [[TMP198:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.region_id, ptr [[KERNEL_ARGS57]])11611// CHECK11-NEXT:    [[TMP199:%.*]] = icmp ne i32 [[TMP198]], 011612// CHECK11-NEXT:    br i1 [[TMP199]], label [[OMP_OFFLOAD_FAILED58:%.*]], label [[OMP_OFFLOAD_CONT59:%.*]]11613// CHECK11:       omp_offload.failed58:11614// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75(i32 [[TMP158]], i32 [[TMP160]], ptr [[TMP161]], ptr [[TMP162]], ptr [[TMP163]]) #[[ATTR2]]11615// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT59]]11616// CHECK11:       omp_offload.cont59:11617// CHECK11-NEXT:    [[TMP200:%.*]] = load i32, ptr [[N]], align 411618// CHECK11-NEXT:    store i32 [[TMP200]], ptr [[N_CASTED60]], align 411619// CHECK11-NEXT:    [[TMP201:%.*]] = load i32, ptr [[N_CASTED60]], align 411620// CHECK11-NEXT:    [[TMP202:%.*]] = load ptr, ptr [[A]], align 411621// CHECK11-NEXT:    [[TMP203:%.*]] = load ptr, ptr [[B]], align 411622// CHECK11-NEXT:    [[TMP204:%.*]] = load ptr, ptr [[C]], align 411623// CHECK11-NEXT:    [[TMP205:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 011624// CHECK11-NEXT:    store i32 [[TMP201]], ptr [[TMP205]], align 411625// CHECK11-NEXT:    [[TMP206:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 011626// CHECK11-NEXT:    store i32 [[TMP201]], ptr [[TMP206]], align 411627// CHECK11-NEXT:    [[TMP207:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 011628// CHECK11-NEXT:    store ptr null, ptr [[TMP207]], align 411629// CHECK11-NEXT:    [[TMP208:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 111630// CHECK11-NEXT:    store ptr [[TMP202]], ptr [[TMP208]], align 411631// CHECK11-NEXT:    [[TMP209:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 111632// CHECK11-NEXT:    store ptr [[TMP202]], ptr [[TMP209]], align 411633// CHECK11-NEXT:    [[TMP210:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 111634// CHECK11-NEXT:    store ptr null, ptr [[TMP210]], align 411635// CHECK11-NEXT:    [[TMP211:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 211636// CHECK11-NEXT:    store ptr [[TMP203]], ptr [[TMP211]], align 411637// CHECK11-NEXT:    [[TMP212:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 211638// CHECK11-NEXT:    store ptr [[TMP203]], ptr [[TMP212]], align 411639// CHECK11-NEXT:    [[TMP213:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 211640// CHECK11-NEXT:    store ptr null, ptr [[TMP213]], align 411641// CHECK11-NEXT:    [[TMP214:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 311642// CHECK11-NEXT:    store ptr [[TMP204]], ptr [[TMP214]], align 411643// CHECK11-NEXT:    [[TMP215:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 311644// CHECK11-NEXT:    store ptr [[TMP204]], ptr [[TMP215]], align 411645// CHECK11-NEXT:    [[TMP216:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 311646// CHECK11-NEXT:    store ptr null, ptr [[TMP216]], align 411647// CHECK11-NEXT:    [[TMP217:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 011648// CHECK11-NEXT:    [[TMP218:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 011649// CHECK11-NEXT:    [[TMP219:%.*]] = load i32, ptr [[N]], align 411650// CHECK11-NEXT:    store i32 [[TMP219]], ptr [[DOTCAPTURE_EXPR_65]], align 411651// CHECK11-NEXT:    [[TMP220:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_65]], align 411652// CHECK11-NEXT:    [[SUB67:%.*]] = sub nsw i32 [[TMP220]], 011653// CHECK11-NEXT:    [[DIV68:%.*]] = sdiv i32 [[SUB67]], 111654// CHECK11-NEXT:    [[SUB69:%.*]] = sub nsw i32 [[DIV68]], 111655// CHECK11-NEXT:    store i32 [[SUB69]], ptr [[DOTCAPTURE_EXPR_66]], align 411656// CHECK11-NEXT:    [[TMP221:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_66]], align 411657// CHECK11-NEXT:    [[ADD70:%.*]] = add nsw i32 [[TMP221]], 111658// CHECK11-NEXT:    [[TMP222:%.*]] = zext i32 [[ADD70]] to i6411659// CHECK11-NEXT:    [[TMP223:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 011660// CHECK11-NEXT:    store i32 3, ptr [[TMP223]], align 411661// CHECK11-NEXT:    [[TMP224:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 111662// CHECK11-NEXT:    store i32 4, ptr [[TMP224]], align 411663// CHECK11-NEXT:    [[TMP225:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 211664// CHECK11-NEXT:    store ptr [[TMP217]], ptr [[TMP225]], align 411665// CHECK11-NEXT:    [[TMP226:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 311666// CHECK11-NEXT:    store ptr [[TMP218]], ptr [[TMP226]], align 411667// CHECK11-NEXT:    [[TMP227:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 411668// CHECK11-NEXT:    store ptr @.offload_sizes.23, ptr [[TMP227]], align 411669// CHECK11-NEXT:    [[TMP228:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 511670// CHECK11-NEXT:    store ptr @.offload_maptypes.24, ptr [[TMP228]], align 411671// CHECK11-NEXT:    [[TMP229:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 611672// CHECK11-NEXT:    store ptr null, ptr [[TMP229]], align 411673// CHECK11-NEXT:    [[TMP230:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 711674// CHECK11-NEXT:    store ptr null, ptr [[TMP230]], align 411675// CHECK11-NEXT:    [[TMP231:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 811676// CHECK11-NEXT:    store i64 [[TMP222]], ptr [[TMP231]], align 811677// CHECK11-NEXT:    [[TMP232:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 911678// CHECK11-NEXT:    store i64 0, ptr [[TMP232]], align 811679// CHECK11-NEXT:    [[TMP233:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 1011680// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP233]], align 411681// CHECK11-NEXT:    [[TMP234:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 1111682// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP234]], align 411683// CHECK11-NEXT:    [[TMP235:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 1211684// CHECK11-NEXT:    store i32 0, ptr [[TMP235]], align 411685// CHECK11-NEXT:    [[TMP236:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.region_id, ptr [[KERNEL_ARGS71]])11686// CHECK11-NEXT:    [[TMP237:%.*]] = icmp ne i32 [[TMP236]], 011687// CHECK11-NEXT:    br i1 [[TMP237]], label [[OMP_OFFLOAD_FAILED72:%.*]], label [[OMP_OFFLOAD_CONT73:%.*]]11688// CHECK11:       omp_offload.failed72:11689// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83(i32 [[TMP201]], ptr [[TMP202]], ptr [[TMP203]], ptr [[TMP204]]) #[[ATTR2]]11690// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT73]]11691// CHECK11:       omp_offload.cont73:11692// CHECK11-NEXT:    [[TMP238:%.*]] = load i32, ptr [[CH]], align 411693// CHECK11-NEXT:    store i32 [[TMP238]], ptr [[CH_CASTED74]], align 411694// CHECK11-NEXT:    [[TMP239:%.*]] = load i32, ptr [[CH_CASTED74]], align 411695// CHECK11-NEXT:    [[TMP240:%.*]] = load i32, ptr [[N]], align 411696// CHECK11-NEXT:    store i32 [[TMP240]], ptr [[N_CASTED75]], align 411697// CHECK11-NEXT:    [[TMP241:%.*]] = load i32, ptr [[N_CASTED75]], align 411698// CHECK11-NEXT:    [[TMP242:%.*]] = load ptr, ptr [[A]], align 411699// CHECK11-NEXT:    [[TMP243:%.*]] = load ptr, ptr [[B]], align 411700// CHECK11-NEXT:    [[TMP244:%.*]] = load ptr, ptr [[C]], align 411701// CHECK11-NEXT:    [[TMP245:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 011702// CHECK11-NEXT:    store i32 [[TMP239]], ptr [[TMP245]], align 411703// CHECK11-NEXT:    [[TMP246:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 011704// CHECK11-NEXT:    store i32 [[TMP239]], ptr [[TMP246]], align 411705// CHECK11-NEXT:    [[TMP247:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 011706// CHECK11-NEXT:    store ptr null, ptr [[TMP247]], align 411707// CHECK11-NEXT:    [[TMP248:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 111708// CHECK11-NEXT:    store i32 [[TMP241]], ptr [[TMP248]], align 411709// CHECK11-NEXT:    [[TMP249:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 111710// CHECK11-NEXT:    store i32 [[TMP241]], ptr [[TMP249]], align 411711// CHECK11-NEXT:    [[TMP250:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 111712// CHECK11-NEXT:    store ptr null, ptr [[TMP250]], align 411713// CHECK11-NEXT:    [[TMP251:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 211714// CHECK11-NEXT:    store ptr [[TMP242]], ptr [[TMP251]], align 411715// CHECK11-NEXT:    [[TMP252:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 211716// CHECK11-NEXT:    store ptr [[TMP242]], ptr [[TMP252]], align 411717// CHECK11-NEXT:    [[TMP253:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 211718// CHECK11-NEXT:    store ptr null, ptr [[TMP253]], align 411719// CHECK11-NEXT:    [[TMP254:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 311720// CHECK11-NEXT:    store ptr [[TMP243]], ptr [[TMP254]], align 411721// CHECK11-NEXT:    [[TMP255:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 311722// CHECK11-NEXT:    store ptr [[TMP243]], ptr [[TMP255]], align 411723// CHECK11-NEXT:    [[TMP256:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 311724// CHECK11-NEXT:    store ptr null, ptr [[TMP256]], align 411725// CHECK11-NEXT:    [[TMP257:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 411726// CHECK11-NEXT:    store ptr [[TMP244]], ptr [[TMP257]], align 411727// CHECK11-NEXT:    [[TMP258:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 411728// CHECK11-NEXT:    store ptr [[TMP244]], ptr [[TMP258]], align 411729// CHECK11-NEXT:    [[TMP259:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 411730// CHECK11-NEXT:    store ptr null, ptr [[TMP259]], align 411731// CHECK11-NEXT:    [[TMP260:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 011732// CHECK11-NEXT:    [[TMP261:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 011733// CHECK11-NEXT:    [[TMP262:%.*]] = load i32, ptr [[N]], align 411734// CHECK11-NEXT:    store i32 [[TMP262]], ptr [[DOTCAPTURE_EXPR_80]], align 411735// CHECK11-NEXT:    [[TMP263:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_80]], align 411736// CHECK11-NEXT:    [[SUB82:%.*]] = sub nsw i32 [[TMP263]], 011737// CHECK11-NEXT:    [[DIV83:%.*]] = sdiv i32 [[SUB82]], 111738// CHECK11-NEXT:    [[SUB84:%.*]] = sub nsw i32 [[DIV83]], 111739// CHECK11-NEXT:    store i32 [[SUB84]], ptr [[DOTCAPTURE_EXPR_81]], align 411740// CHECK11-NEXT:    [[TMP264:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_81]], align 411741// CHECK11-NEXT:    [[ADD85:%.*]] = add nsw i32 [[TMP264]], 111742// CHECK11-NEXT:    [[TMP265:%.*]] = zext i32 [[ADD85]] to i6411743// CHECK11-NEXT:    [[TMP266:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 011744// CHECK11-NEXT:    store i32 3, ptr [[TMP266]], align 411745// CHECK11-NEXT:    [[TMP267:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 111746// CHECK11-NEXT:    store i32 5, ptr [[TMP267]], align 411747// CHECK11-NEXT:    [[TMP268:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 211748// CHECK11-NEXT:    store ptr [[TMP260]], ptr [[TMP268]], align 411749// CHECK11-NEXT:    [[TMP269:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 311750// CHECK11-NEXT:    store ptr [[TMP261]], ptr [[TMP269]], align 411751// CHECK11-NEXT:    [[TMP270:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 411752// CHECK11-NEXT:    store ptr @.offload_sizes.25, ptr [[TMP270]], align 411753// CHECK11-NEXT:    [[TMP271:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 511754// CHECK11-NEXT:    store ptr @.offload_maptypes.26, ptr [[TMP271]], align 411755// CHECK11-NEXT:    [[TMP272:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 611756// CHECK11-NEXT:    store ptr null, ptr [[TMP272]], align 411757// CHECK11-NEXT:    [[TMP273:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 711758// CHECK11-NEXT:    store ptr null, ptr [[TMP273]], align 411759// CHECK11-NEXT:    [[TMP274:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 811760// CHECK11-NEXT:    store i64 [[TMP265]], ptr [[TMP274]], align 811761// CHECK11-NEXT:    [[TMP275:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 911762// CHECK11-NEXT:    store i64 0, ptr [[TMP275]], align 811763// CHECK11-NEXT:    [[TMP276:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 1011764// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP276]], align 411765// CHECK11-NEXT:    [[TMP277:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 1111766// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP277]], align 411767// CHECK11-NEXT:    [[TMP278:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 1211768// CHECK11-NEXT:    store i32 0, ptr [[TMP278]], align 411769// CHECK11-NEXT:    [[TMP279:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB3]], i64 -1, i32 0, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.region_id, ptr [[KERNEL_ARGS86]])11770// CHECK11-NEXT:    [[TMP280:%.*]] = icmp ne i32 [[TMP279]], 011771// CHECK11-NEXT:    br i1 [[TMP280]], label [[OMP_OFFLOAD_FAILED87:%.*]], label [[OMP_OFFLOAD_CONT88:%.*]]11772// CHECK11:       omp_offload.failed87:11773// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91(i32 [[TMP239]], i32 [[TMP241]], ptr [[TMP242]], ptr [[TMP243]], ptr [[TMP244]]) #[[ATTR2]]11774// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT88]]11775// CHECK11:       omp_offload.cont88:11776// CHECK11-NEXT:    ret i32 011777//11778//11779// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l4211780// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {11781// CHECK11-NEXT:  entry:11782// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 411783// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411784// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411785// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411786// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 411787// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411788// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411789// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411790// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])11791// CHECK11-NEXT:    ret void11792//11793//11794// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined11795// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {11796// CHECK11-NEXT:  entry:11797// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411798// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411799// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411800// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411801// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411802// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411803// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411804// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411805// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 411806// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411807// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411808// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 411809// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 411810// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411811// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411812// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 411813// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411814// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411815// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411816// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411817// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411818// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411819// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 411820// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 411821// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 411822// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 411823// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 411824// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 411825// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411826// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 011827// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111828// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 111829// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 411830// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411831// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411832// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]11833// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11834// CHECK11:       omp.precond.then:11835// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 411836// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411837// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 411838// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411839// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411840// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411841// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 411842// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)11843// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411844// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411845// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]11846// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]11847// CHECK11:       cond.true:11848// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411849// CHECK11-NEXT:    br label [[COND_END:%.*]]11850// CHECK11:       cond.false:11851// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411852// CHECK11-NEXT:    br label [[COND_END]]11853// CHECK11:       cond.end:11854// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]11855// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 411856// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 411857// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 411858// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11859// CHECK11:       omp.inner.for.cond:11860// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 411861// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411862// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]11863// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11864// CHECK11:       omp.inner.for.body:11865// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 411866// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411867// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])11868// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11869// CHECK11:       omp.inner.for.inc:11870// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 411871// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 411872// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]11873// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 411874// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]11875// CHECK11:       omp.inner.for.end:11876// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]11877// CHECK11:       omp.loop.exit:11878// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411879// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 411880// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])11881// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11882// CHECK11:       omp.precond.end:11883// CHECK11-NEXT:    ret void11884//11885//11886// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined.omp_outlined11887// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {11888// CHECK11-NEXT:  entry:11889// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411890// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411891// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 411892// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 411893// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411894// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411895// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411896// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411897// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411898// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411899// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 411900// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411901// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411902// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 411903// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 411904// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411905// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411906// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 411907// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411908// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411909// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 411910// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 411911// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411912// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411913// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411914// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411915// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 411916// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 411917// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 411918// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 411919// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 411920// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 411921// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411922// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 011923// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111924// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 111925// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 411926// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411927// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411928// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]11929// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11930// CHECK11:       omp.precond.then:11931// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 411932// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411933// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 411934// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 411935// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 411936// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 411937// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 411938// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411939// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411940// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411941// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 411942// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)11943// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411944// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411945// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]11946// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]11947// CHECK11:       cond.true:11948// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411949// CHECK11-NEXT:    br label [[COND_END:%.*]]11950// CHECK11:       cond.false:11951// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411952// CHECK11-NEXT:    br label [[COND_END]]11953// CHECK11:       cond.end:11954// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]11955// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 411956// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411957// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 411958// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11959// CHECK11:       omp.inner.for.cond:11960// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 411961// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411962// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]11963// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11964// CHECK11:       omp.inner.for.body:11965// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 411966// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 111967// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]11968// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 411969// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411970// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 411971// CHECK11-NEXT:    [[TMP22:%.*]] = call i32 @__kmpc_cancel(ptr @[[GLOB3]], i32 [[TMP21]], i32 2)11972// CHECK11-NEXT:    [[TMP23:%.*]] = icmp ne i32 [[TMP22]], 011973// CHECK11-NEXT:    br i1 [[TMP23]], label [[DOTCANCEL_EXIT:%.*]], label [[DOTCANCEL_CONTINUE:%.*]]11974// CHECK11:       .cancel.exit:11975// CHECK11-NEXT:    br label [[CANCEL_EXIT:%.*]]11976// CHECK11:       .cancel.continue:11977// CHECK11-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP2]], align 411978// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I3]], align 411979// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP24]], i32 [[TMP25]]11980// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[ARRAYIDX]], align 411981// CHECK11-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP3]], align 411982// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I3]], align 411983// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[TMP27]], i32 [[TMP28]]11984// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[ARRAYIDX6]], align 411985// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP26]], [[TMP29]]11986// CHECK11-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[TMP1]], align 411987// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[I3]], align 411988// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP30]], i32 [[TMP31]]11989// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[ARRAYIDX8]], align 411990// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]11991// CHECK11:       omp.body.continue:11992// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11993// CHECK11:       omp.inner.for.inc:11994// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 411995// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP32]], 111996// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 411997// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]11998// CHECK11:       omp.inner.for.end:11999// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12000// CHECK11:       omp.loop.exit:12001// CHECK11-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412002// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 412003// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])12004// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12005// CHECK11:       cancel.exit:12006// CHECK11-NEXT:    [[TMP35:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412007// CHECK11-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 412008// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP36]])12009// CHECK11-NEXT:    br label [[CANCEL_CONT:%.*]]12010// CHECK11:       omp.precond.end:12011// CHECK11-NEXT:    br label [[CANCEL_CONT]]12012// CHECK11:       cancel.cont:12013// CHECK11-NEXT:    ret void12014//12015//12016// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l5112017// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {12018// CHECK11-NEXT:  entry:12019// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 412020// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412021// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412022// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412023// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 412024// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412025// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412026// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412027// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])12028// CHECK11-NEXT:    ret void12029//12030//12031// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.omp_outlined12032// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {12033// CHECK11-NEXT:  entry:12034// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412035// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412036// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412037// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412038// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412039// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412040// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412041// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412042// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412043// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412044// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412045// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 412046// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 412047// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412048// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412049// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 412050// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412051// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412052// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412053// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412054// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412055// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412056// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 412057// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 412058// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 412059// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 412060// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 412061// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 412062// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412063// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 012064// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112065// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112066// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412067// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412068// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412069// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]12070// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12071// CHECK11:       omp.precond.then:12072// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 412073// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412074// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 412075// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412076// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412077// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412078// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 412079// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)12080// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412081// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412082// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]12083// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12084// CHECK11:       cond.true:12085// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412086// CHECK11-NEXT:    br label [[COND_END:%.*]]12087// CHECK11:       cond.false:12088// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412089// CHECK11-NEXT:    br label [[COND_END]]12090// CHECK11:       cond.end:12091// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]12092// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 412093// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412094// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 412095// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12096// CHECK11:       omp.inner.for.cond:12097// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412098// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412099// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]12100// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12101// CHECK11:       omp.inner.for.body:12102// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412103// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412104// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])12105// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12106// CHECK11:       omp.inner.for.inc:12107// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412108// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 412109// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]12110// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 412111// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]12112// CHECK11:       omp.inner.for.end:12113// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12114// CHECK11:       omp.loop.exit:12115// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412116// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 412117// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])12118// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12119// CHECK11:       omp.precond.end:12120// CHECK11-NEXT:    ret void12121//12122//12123// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l51.omp_outlined.omp_outlined12124// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {12125// CHECK11-NEXT:  entry:12126// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412127// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412128// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 412129// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 412130// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412131// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412132// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412133// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412134// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412135// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412136// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412137// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412138// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412139// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 412140// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 412141// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412142// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412143// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 412144// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412145// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412146// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 412147// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 412148// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412149// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412150// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412151// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412152// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 412153// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 412154// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 412155// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 412156// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 412157// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 412158// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412159// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 012160// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112161// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112162// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412163// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412164// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412165// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]12166// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12167// CHECK11:       omp.precond.then:12168// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 412169// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412170// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 412171// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 412172// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 412173// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 412174// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 412175// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412176// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412177// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412178// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 412179// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)12180// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412181// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412182// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]12183// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12184// CHECK11:       cond.true:12185// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412186// CHECK11-NEXT:    br label [[COND_END:%.*]]12187// CHECK11:       cond.false:12188// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412189// CHECK11-NEXT:    br label [[COND_END]]12190// CHECK11:       cond.end:12191// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]12192// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 412193// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 412194// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 412195// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12196// CHECK11:       omp.inner.for.cond:12197// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412198// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412199// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]12200// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12201// CHECK11:       omp.inner.for.body:12202// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412203// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 112204// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]12205// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 412206// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 412207// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 412208// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 [[TMP21]]12209// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 412210// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 412211// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 412212// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 [[TMP24]]12213// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX6]], align 412214// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]12215// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 412216// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 412217// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i32 [[TMP27]]12218// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[ARRAYIDX8]], align 412219// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]12220// CHECK11:       omp.body.continue:12221// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12222// CHECK11:       omp.inner.for.inc:12223// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412224// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 112225// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 412226// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]12227// CHECK11:       omp.inner.for.end:12228// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12229// CHECK11:       omp.loop.exit:12230// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412231// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 412232// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])12233// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12234// CHECK11:       omp.precond.end:12235// CHECK11-NEXT:    ret void12236//12237//12238// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l5912239// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {12240// CHECK11-NEXT:  entry:12241// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 412242// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 412243// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412244// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412245// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412246// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 412247// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 412248// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412249// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412250// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412251// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])12252// CHECK11-NEXT:    ret void12253//12254//12255// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.omp_outlined12256// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {12257// CHECK11-NEXT:  entry:12258// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412259// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412260// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 412261// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412262// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412263// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412264// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412265// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412266// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412267// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412268// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412269// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412270// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 412271// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 412272// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412273// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412274// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 412275// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412276// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412277// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 412278// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412279// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412280// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412281// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412282// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 412283// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 412284// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 412285// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 412286// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 412287// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 412288// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 412289// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412290// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 012291// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112292// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112293// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412294// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412295// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412296// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]12297// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12298// CHECK11:       omp.precond.then:12299// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 412300// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412301// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 412302// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412303// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412304// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 412305// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412306// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 412307// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 91, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP9]])12308// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412309// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412310// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]12311// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12312// CHECK11:       cond.true:12313// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412314// CHECK11-NEXT:    br label [[COND_END:%.*]]12315// CHECK11:       cond.false:12316// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412317// CHECK11-NEXT:    br label [[COND_END]]12318// CHECK11:       cond.end:12319// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]12320// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 412321// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412322// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 412323// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12324// CHECK11:       omp.inner.for.cond:12325// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412326// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412327// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 112328// CHECK11-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]12329// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12330// CHECK11:       omp.inner.for.body:12331// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412332// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412333// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]])12334// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12335// CHECK11:       omp.inner.for.inc:12336// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412337// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 412338// CHECK11-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]12339// CHECK11-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 412340// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412341// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 412342// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]12343// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 412344// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412345// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 412346// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]12347// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 412348// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412349// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412350// CHECK11-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP27]], [[TMP28]]12351// CHECK11-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]12352// CHECK11:       cond.true10:12353// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412354// CHECK11-NEXT:    br label [[COND_END12:%.*]]12355// CHECK11:       cond.false11:12356// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412357// CHECK11-NEXT:    br label [[COND_END12]]12358// CHECK11:       cond.end12:12359// CHECK11-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP29]], [[COND_TRUE10]] ], [ [[TMP30]], [[COND_FALSE11]] ]12360// CHECK11-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 412361// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412362// CHECK11-NEXT:    store i32 [[TMP31]], ptr [[DOTOMP_IV]], align 412363// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]12364// CHECK11:       omp.inner.for.end:12365// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12366// CHECK11:       omp.loop.exit:12367// CHECK11-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412368// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 412369// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP33]])12370// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12371// CHECK11:       omp.precond.end:12372// CHECK11-NEXT:    ret void12373//12374//12375// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l59.omp_outlined.omp_outlined12376// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {12377// CHECK11-NEXT:  entry:12378// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412379// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412380// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 412381// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 412382// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412383// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412384// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412385// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412386// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412387// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412388// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412389// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412390// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412391// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 412392// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 412393// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412394// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412395// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 412396// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412397// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412398// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 412399// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 412400// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412401// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412402// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412403// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412404// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 412405// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 412406// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 412407// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 412408// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 412409// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 412410// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412411// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 012412// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112413// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112414// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412415// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412416// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412417// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]12418// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12419// CHECK11:       omp.precond.then:12420// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 412421// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412422// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 412423// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 412424// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 412425// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 412426// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 412427// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412428// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412429// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412430// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 412431// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)12432// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412433// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412434// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]12435// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12436// CHECK11:       cond.true:12437// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412438// CHECK11-NEXT:    br label [[COND_END:%.*]]12439// CHECK11:       cond.false:12440// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412441// CHECK11-NEXT:    br label [[COND_END]]12442// CHECK11:       cond.end:12443// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]12444// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 412445// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 412446// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 412447// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12448// CHECK11:       omp.inner.for.cond:12449// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412450// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412451// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]12452// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12453// CHECK11:       omp.inner.for.body:12454// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412455// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 112456// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]12457// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 412458// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 412459// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 412460// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 [[TMP21]]12461// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 412462// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 412463// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 412464// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 [[TMP24]]12465// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX6]], align 412466// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]12467// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 412468// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 412469// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i32 [[TMP27]]12470// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[ARRAYIDX8]], align 412471// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]12472// CHECK11:       omp.body.continue:12473// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12474// CHECK11:       omp.inner.for.inc:12475// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412476// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 112477// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 412478// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]12479// CHECK11:       omp.inner.for.end:12480// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12481// CHECK11:       omp.loop.exit:12482// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412483// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 412484// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])12485// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12486// CHECK11:       omp.precond.end:12487// CHECK11-NEXT:    ret void12488//12489//12490// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l6712491// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {12492// CHECK11-NEXT:  entry:12493// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 412494// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412495// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412496// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412497// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 412498// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412499// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412500// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412501// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])12502// CHECK11-NEXT:    ret void12503//12504//12505// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.omp_outlined12506// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {12507// CHECK11-NEXT:  entry:12508// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412509// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412510// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412511// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412512// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412513// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412514// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412515// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412516// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412517// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412518// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412519// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 412520// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 412521// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412522// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412523// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 412524// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412525// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412526// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412527// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412528// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412529// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412530// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 412531// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 412532// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 412533// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 412534// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 412535// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 412536// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412537// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 012538// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112539// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112540// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412541// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412542// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412543// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]12544// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12545// CHECK11:       omp.precond.then:12546// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 412547// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412548// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 412549// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412550// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412551// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412552// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 412553// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)12554// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412555// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412556// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]12557// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12558// CHECK11:       cond.true:12559// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412560// CHECK11-NEXT:    br label [[COND_END:%.*]]12561// CHECK11:       cond.false:12562// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412563// CHECK11-NEXT:    br label [[COND_END]]12564// CHECK11:       cond.end:12565// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]12566// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 412567// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412568// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 412569// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12570// CHECK11:       omp.inner.for.cond:12571// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412572// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412573// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]12574// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12575// CHECK11:       omp.inner.for.body:12576// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412577// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412578// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])12579// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12580// CHECK11:       omp.inner.for.inc:12581// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412582// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 412583// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]12584// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 412585// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]12586// CHECK11:       omp.inner.for.end:12587// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12588// CHECK11:       omp.loop.exit:12589// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412590// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 412591// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])12592// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12593// CHECK11:       omp.precond.end:12594// CHECK11-NEXT:    ret void12595//12596//12597// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l67.omp_outlined.omp_outlined12598// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {12599// CHECK11-NEXT:  entry:12600// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412601// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412602// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 412603// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 412604// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412605// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412606// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412607// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412608// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412609// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412610// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412611// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412612// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412613// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 412614// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 412615// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412616// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412617// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 412618// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412619// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412620// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 412621// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 412622// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412623// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412624// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412625// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412626// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 412627// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 412628// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 412629// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 412630// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 412631// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 412632// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412633// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 012634// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112635// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112636// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412637// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412638// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412639// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]12640// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12641// CHECK11:       omp.precond.then:12642// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 412643// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412644// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 412645// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 412646// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 412647// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 412648// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 412649// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412650// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412651// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412652// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 412653// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP11]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)12654// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412655// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412656// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]12657// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12658// CHECK11:       cond.true:12659// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412660// CHECK11-NEXT:    br label [[COND_END:%.*]]12661// CHECK11:       cond.false:12662// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412663// CHECK11-NEXT:    br label [[COND_END]]12664// CHECK11:       cond.end:12665// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]12666// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 412667// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 412668// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 412669// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12670// CHECK11:       omp.inner.for.cond:12671// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412672// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412673// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]12674// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12675// CHECK11:       omp.inner.for.body:12676// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412677// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 112678// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]12679// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 412680// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 412681// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 412682// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 [[TMP21]]12683// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 412684// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 412685// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 412686// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 [[TMP24]]12687// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX6]], align 412688// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]12689// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 412690// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 412691// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i32 [[TMP27]]12692// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[ARRAYIDX8]], align 412693// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]12694// CHECK11:       omp.body.continue:12695// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12696// CHECK11:       omp.inner.for.inc:12697// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412698// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 112699// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 412700// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]12701// CHECK11:       omp.inner.for.end:12702// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12703// CHECK11:       omp.loop.exit:12704// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412705// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 412706// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])12707// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12708// CHECK11:       omp.precond.end:12709// CHECK11-NEXT:    ret void12710//12711//12712// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l7512713// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {12714// CHECK11-NEXT:  entry:12715// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 412716// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 412717// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412718// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412719// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412720// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 412721// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 412722// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412723// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412724// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412725// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])12726// CHECK11-NEXT:    ret void12727//12728//12729// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.omp_outlined12730// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {12731// CHECK11-NEXT:  entry:12732// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412733// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412734// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 412735// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412736// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412737// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412738// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412739// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412740// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412741// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412742// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412743// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 412744// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412745// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 412746// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 412747// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412748// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412749// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 412750// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 412751// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412752// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412753// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 412754// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412755// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412756// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412757// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412758// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 412759// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 412760// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 412761// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 412762// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 412763// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 412764// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 412765// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 412766// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 412767// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412768// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 012769// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112770// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 112771// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 412772// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412773// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412774// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]12775// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12776// CHECK11:       omp.precond.then:12777// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 412778// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 412779// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 412780// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412781// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412782// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412783// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 412784// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)12785// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412786// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 412787// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]12788// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12789// CHECK11:       cond.true:12790// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 412791// CHECK11-NEXT:    br label [[COND_END:%.*]]12792// CHECK11:       cond.false:12793// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412794// CHECK11-NEXT:    br label [[COND_END]]12795// CHECK11:       cond.end:12796// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]12797// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 412798// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412799// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 412800// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12801// CHECK11:       omp.inner.for.cond:12802// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412803// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412804// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]12805// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12806// CHECK11:       omp.inner.for.body:12807// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412808// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412809// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412810// CHECK11-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 412811// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 412812// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]])12813// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12814// CHECK11:       omp.inner.for.inc:12815// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412816// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 412817// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]12818// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 412819// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]12820// CHECK11:       omp.inner.for.end:12821// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12822// CHECK11:       omp.loop.exit:12823// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412824// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 412825// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])12826// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12827// CHECK11:       omp.precond.end:12828// CHECK11-NEXT:    ret void12829//12830//12831// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l75.omp_outlined.omp_outlined12832// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]], i32 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] {12833// CHECK11-NEXT:  entry:12834// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412835// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412836// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 412837// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 412838// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412839// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412840// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412841// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412842// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 412843// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412844// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412845// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412846// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 412847// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412848// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 412849// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 412850// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412851// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412852// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 412853// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412854// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412855// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 412856// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 412857// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412858// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412859// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412860// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412861// CHECK11-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 412862// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 412863// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 412864// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 412865// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 412866// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 412867// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 412868// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412869// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 012870// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112871// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 112872// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 412873// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412874// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412875// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]12876// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12877// CHECK11:       omp.precond.then:12878// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 412879// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 412880// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 412881// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 412882// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 412883// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 412884// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 412885// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412886// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412887// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 412888// CHECK11-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412889// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 412890// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB2]], i32 [[TMP12]], i32 33, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 [[TMP10]])12891// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]12892// CHECK11:       omp.dispatch.cond:12893// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412894// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 412895// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP13]], [[TMP14]]12896// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12897// CHECK11:       cond.true:12898// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 412899// CHECK11-NEXT:    br label [[COND_END:%.*]]12900// CHECK11:       cond.false:12901// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412902// CHECK11-NEXT:    br label [[COND_END]]12903// CHECK11:       cond.end:12904// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP15]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]12905// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 412906// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 412907// CHECK11-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 412908// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412909// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412910// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]12911// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]12912// CHECK11:       omp.dispatch.body:12913// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12914// CHECK11:       omp.inner.for.cond:12915// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412916// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412917// CHECK11-NEXT:    [[CMP7:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]12918// CHECK11-NEXT:    br i1 [[CMP7]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12919// CHECK11:       omp.inner.for.body:12920// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412921// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 112922// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]12923// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I4]], align 412924// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 412925// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 412926// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 [[TMP24]]12927// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX]], align 412928// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 412929// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 412930// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i32 [[TMP27]]12931// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[ARRAYIDX8]], align 412932// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP25]], [[TMP28]]12933// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 412934// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I4]], align 412935// CHECK11-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds i32, ptr [[TMP29]], i32 [[TMP30]]12936// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX10]], align 412937// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]12938// CHECK11:       omp.body.continue:12939// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12940// CHECK11:       omp.inner.for.inc:12941// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV]], align 412942// CHECK11-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP31]], 112943// CHECK11-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 412944// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]12945// CHECK11:       omp.inner.for.end:12946// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]12947// CHECK11:       omp.dispatch.inc:12948// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_LB]], align 412949// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 412950// CHECK11-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], [[TMP33]]12951// CHECK11-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_LB]], align 412952// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412953// CHECK11-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 412954// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP34]], [[TMP35]]12955// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[DOTOMP_UB]], align 412956// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]12957// CHECK11:       omp.dispatch.end:12958// CHECK11-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412959// CHECK11-NEXT:    [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 412960// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP37]])12961// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12962// CHECK11:       omp.precond.end:12963// CHECK11-NEXT:    ret void12964//12965//12966// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l8312967// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {12968// CHECK11-NEXT:  entry:12969// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 412970// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412971// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412972// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412973// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 412974// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412975// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412976// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412977// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])12978// CHECK11-NEXT:    ret void12979//12980//12981// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.omp_outlined12982// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {12983// CHECK11-NEXT:  entry:12984// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412985// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412986// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412987// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412988// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412989// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412990// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412991// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412992// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412993// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412994// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412995// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 412996// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 412997// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412998// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412999// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 413000// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413001// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413002// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413003// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413004// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413005// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413006// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 413007// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 413008// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 413009// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 413010// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 413011// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 413012// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413013// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 013014// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113015// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 113016// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 413017// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413018// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413019// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]13020// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13021// CHECK11:       omp.precond.then:13022// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 413023// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413024// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 413025// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413026// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413027// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413028// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 413029// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP9]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)13030// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413031// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413032// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]13033// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]13034// CHECK11:       cond.true:13035// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413036// CHECK11-NEXT:    br label [[COND_END:%.*]]13037// CHECK11:       cond.false:13038// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413039// CHECK11-NEXT:    br label [[COND_END]]13040// CHECK11:       cond.end:13041// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]13042// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 413043// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 413044// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 413045// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13046// CHECK11:       omp.inner.for.cond:13047// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 413048// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413049// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]13050// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13051// CHECK11:       omp.inner.for.body:13052// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 413053// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413054// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]])13055// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13056// CHECK11:       omp.inner.for.inc:13057// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 413058// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 413059// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]13060// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 413061// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]13062// CHECK11:       omp.inner.for.end:13063// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]13064// CHECK11:       omp.loop.exit:13065// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413066// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 413067// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])13068// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13069// CHECK11:       omp.precond.end:13070// CHECK11-NEXT:    ret void13071//13072//13073// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l83.omp_outlined.omp_outlined13074// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {13075// CHECK11-NEXT:  entry:13076// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413077// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413078// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 413079// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 413080// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413081// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413082// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413083// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413084// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413085// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413086// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 413087// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413088// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413089// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 413090// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 413091// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413092// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413093// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 413094// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413095// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413096// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 413097// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 413098// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413099// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413100// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413101// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413102// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 413103// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 413104// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 413105// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 413106// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 413107// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 413108// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413109// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 013110// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113111// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 113112// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 413113// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413114// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413115// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]13116// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13117// CHECK11:       omp.precond.then:13118// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 413119// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413120// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 413121// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 413122// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 413123// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 413124// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 413125// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413126// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413127// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 413128// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413129// CHECK11-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413130// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 413131// CHECK11-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)13132// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]13133// CHECK11:       omp.dispatch.cond:13134// CHECK11-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413135// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 413136// CHECK11-NEXT:    [[TMP16:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP15]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])13137// CHECK11-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 013138// CHECK11-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]13139// CHECK11:       omp.dispatch.body:13140// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 413141// CHECK11-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 413142// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13143// CHECK11:       omp.inner.for.cond:13144// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26:![0-9]+]]13145// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP26]]13146// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]13147// CHECK11-NEXT:    br i1 [[CMP4]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13148// CHECK11:       omp.inner.for.body:13149// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26]]13150// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 113151// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]13152// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP26]]13153// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP26]]13154// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP26]]13155// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP21]], i32 [[TMP22]]13156// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP26]]13157// CHECK11-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP26]]13158// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP26]]13159// CHECK11-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds i32, ptr [[TMP24]], i32 [[TMP25]]13160// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[ARRAYIDX5]], align 4, !llvm.access.group [[ACC_GRP26]]13161// CHECK11-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP23]], [[TMP26]]13162// CHECK11-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP26]]13163// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP26]]13164// CHECK11-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds i32, ptr [[TMP27]], i32 [[TMP28]]13165// CHECK11-NEXT:    store i32 [[ADD6]], ptr [[ARRAYIDX7]], align 4, !llvm.access.group [[ACC_GRP26]]13166// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]13167// CHECK11:       omp.body.continue:13168// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13169// CHECK11:       omp.inner.for.inc:13170// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26]]13171// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP29]], 113172// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26]]13173// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP27:![0-9]+]]13174// CHECK11:       omp.inner.for.end:13175// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]13176// CHECK11:       omp.dispatch.inc:13177// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]13178// CHECK11:       omp.dispatch.end:13179// CHECK11-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413180// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[TMP30]], align 413181// CHECK11-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP31]])13182// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13183// CHECK11:       omp.precond.end:13184// CHECK11-NEXT:    ret void13185//13186//13187// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l9113188// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {13189// CHECK11-NEXT:  entry:13190// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 413191// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 413192// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413193// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413194// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413195// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 413196// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 413197// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413198// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413199// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413200// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])13201// CHECK11-NEXT:    ret void13202//13203//13204// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.omp_outlined13205// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[CH:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]]) #[[ATTR1]] {13206// CHECK11-NEXT:  entry:13207// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413208// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413209// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 413210// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413211// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413212// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413213// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413214// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 413215// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413216// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413217// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413218// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 413219// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413220// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 413221// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 413222// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413223// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413224// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 413225// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 413226// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413227// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413228// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 413229// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413230// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413231// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413232// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413233// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 413234// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 413235// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 413236// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 413237// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 413238// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 413239// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 413240// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 413241// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 413242// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413243// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 013244// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113245// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 113246// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 413247// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413248// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413249// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]13250// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13251// CHECK11:       omp.precond.then:13252// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 413253// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 413254// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 413255// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413256// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413257// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413258// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 413259// CHECK11-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP11]], i32 92, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_COMB_LB]], ptr [[DOTOMP_COMB_UB]], ptr [[DOTOMP_STRIDE]], i32 1, i32 1)13260// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413261// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 413262// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]13263// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]13264// CHECK11:       cond.true:13265// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 413266// CHECK11-NEXT:    br label [[COND_END:%.*]]13267// CHECK11:       cond.false:13268// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413269// CHECK11-NEXT:    br label [[COND_END]]13270// CHECK11:       cond.end:13271// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]13272// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 413273// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 413274// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 413275// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13276// CHECK11:       omp.inner.for.cond:13277// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 413278// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413279// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]13280// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13281// CHECK11:       omp.inner.for.body:13282// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 413283// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413284// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413285// CHECK11-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 413286// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 413287// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]])13288// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13289// CHECK11:       omp.inner.for.inc:13290// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 413291// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 413292// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]13293// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 413294// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]]13295// CHECK11:       omp.inner.for.end:13296// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]13297// CHECK11:       omp.loop.exit:13298// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413299// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 413300// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])13301// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13302// CHECK11:       omp.precond.end:13303// CHECK11-NEXT:    ret void13304//13305//13306// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l91.omp_outlined.omp_outlined13307// CHECK11-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]], i32 noundef [[DOTPREVIOUS_LB_:%.*]], i32 noundef [[DOTPREVIOUS_UB_:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[N:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[C:%.*]], i32 noundef [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] {13308// CHECK11-NEXT:  entry:13309// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413310// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413311// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 413312// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 413313// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413314// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413315// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413316// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413317// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 413318// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413319// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413320// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413321// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 413322// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413323// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 413324// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 413325// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413326// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413327// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 413328// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413329// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413330// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 413331// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 413332// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413333// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413334// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413335// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413336// CHECK11-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 413337// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 413338// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 413339// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 413340// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 413341// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 413342// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 413343// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413344// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 013345// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113346// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 113347// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 413348// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413349// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413350// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]13351// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13352// CHECK11:       omp.precond.then:13353// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 413354// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 413355// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 413356// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 413357// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 413358// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 413359// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 413360// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413361// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413362// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 413363// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 413364// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413365// CHECK11-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413366// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 413367// CHECK11-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])13368// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]13369// CHECK11:       omp.dispatch.cond:13370// CHECK11-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413371// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 413372// CHECK11-NEXT:    [[TMP17:%.*]] = call i32 @__kmpc_dispatch_next_4(ptr @[[GLOB3]], i32 [[TMP16]], ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]])13373// CHECK11-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 013374// CHECK11-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]13375// CHECK11:       omp.dispatch.body:13376// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 413377// CHECK11-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 413378// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13379// CHECK11:       omp.inner.for.cond:13380// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29:![0-9]+]]13381// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP29]]13382// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]13383// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13384// CHECK11:       omp.inner.for.body:13385// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29]]13386// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 113387// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]13388// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP29]]13389// CHECK11-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP29]]13390// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP29]]13391// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP22]], i32 [[TMP23]]13392// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP29]]13393// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP29]]13394// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP29]]13395// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[TMP25]], i32 [[TMP26]]13396// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP29]]13397// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP24]], [[TMP27]]13398// CHECK11-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP29]]13399// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP29]]13400// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP28]], i32 [[TMP29]]13401// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP29]]13402// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]13403// CHECK11:       omp.body.continue:13404// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13405// CHECK11:       omp.inner.for.inc:13406// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29]]13407// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP30]], 113408// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29]]13409// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP30:![0-9]+]]13410// CHECK11:       omp.inner.for.end:13411// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]13412// CHECK11:       omp.dispatch.inc:13413// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]13414// CHECK11:       omp.dispatch.end:13415// CHECK11-NEXT:    [[TMP31:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413416// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[TMP31]], align 413417// CHECK11-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP32]])13418// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13419// CHECK11:       omp.precond.end:13420// CHECK11-NEXT:    ret void13421//13422