brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 MiB · a96733b Raw
13966 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 --check-prefix=CHECK511// 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 --check-prefix=CHECK513// 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 --check-prefix=CHECK714// 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 --check-prefix=CHECK716 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 --check-prefix=CHECK1325// 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 --check-prefix=CHECK1327// 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 --check-prefix=CHECK1528// 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 --check-prefix=CHECK1530// 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 for simd45  for (int i = 0; i < n; ++i) {46    a[i] = b[i] + c[i];47  }48 49  // dist_schedule: static no chunk50  #pragma omp target51  #pragma omp teams52  #pragma omp distribute parallel for simd dist_schedule(static)53  for (int i = 0; i < n; ++i) {54    a[i] = b[i] + c[i];55  }56 57  // dist_schedule: static chunk58  #pragma omp target59  #pragma omp teams60  #pragma omp distribute parallel for simd dist_schedule(static, ch)61  for (int i = 0; i < n; ++i) {62    a[i] = b[i] + c[i];63  }64 65  // schedule: static no chunk66  #pragma omp target67  #pragma omp teams68  #pragma omp distribute parallel for simd schedule(static)69  for (int i = 0; i < n; ++i) {70    a[i] = b[i] + c[i];71  }72 73  // schedule: static chunk74  #pragma omp target75  #pragma omp teams76  #pragma omp distribute parallel for simd schedule(static, ch)77  for (int i = 0; i < n; ++i) {78    a[i] = b[i] + c[i];79  }80 81  // schedule: dynamic no chunk82  #pragma omp target83  #pragma omp teams84  #pragma omp distribute parallel for simd schedule(dynamic)85  for (int i = 0; i < n; ++i) {86    a[i] = b[i] + c[i];87  }88 89  // schedule: dynamic chunk90  #pragma omp target91  #pragma omp teams92  #pragma omp distribute parallel for simd schedule(dynamic, ch)93  for (int i = 0; i < n; ++i) {94    a[i] = b[i] + c[i];95  }96 97  return T();98}99 100int main() {101  double *a, *b, *c;102  int n = 10000;103  int ch = 100;104 105#ifdef LAMBDA106  [&]() {107 108 109 110 111 112 113 114 115    // no schedule clauses116    #pragma omp target117    #pragma omp teams118 119    #pragma omp distribute parallel for simd120    for (int i = 0; i < n; ++i) {121      a[i] = b[i] + c[i];122 123 124      // check EUB for distribute125 126      // initialize omp.iv127 128      // check exit condition129 130      // check that PrevLB and PrevUB are passed to the 'for'131      // check that distlb and distub are properly passed to fork_call132 133      // increment by stride (distInc - 'parallel for' executes the whole chunk) and latch134 135 136      // implementation of 'parallel for'137 138 139      // initialize lb and ub to PrevLB and PrevUB140 141      // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used142      // In this case we use EUB143 144      // initialize omp.iv145 146      // check exit condition147 148      // check that PrevLB and PrevUB are passed to the 'for'149 150      // check stride 1 for 'for' in 'distribute parallel for simd'151 152 153      [&]() {154	a[i] = b[i] + c[i];155      }();156    }157 158    // dist_schedule: static no chunk (same sa default - no dist_schedule)159    #pragma omp target160    #pragma omp teams161 162    #pragma omp distribute parallel for simd dist_schedule(static)163    for (int i = 0; i < n; ++i) {164      a[i] = b[i] + c[i];165 166 167      // check EUB for distribute168 169      // initialize omp.iv170 171      // check exit condition172 173      // check that PrevLB and PrevUB are passed to the 'for'174      // check that distlb and distub are properly passed to fork_call175 176      // increment by stride (distInc - 'parallel for' executes the whole chunk) and latch177 178 179      // implementation of 'parallel for'180 181 182      // initialize lb and ub to PrevLB and PrevUB183 184      // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used185      // In this case we use EUB186 187      // initialize omp.iv188 189      // check exit condition190 191      // check that PrevLB and PrevUB are passed to the 'for'192 193      // check stride 1 for 'for' in 'distribute parallel for simd'194 195      [&]() {196	a[i] = b[i] + c[i];197      }();198    }199 200    // dist_schedule: static chunk201    #pragma omp target202    #pragma omp teams203 204    #pragma omp distribute parallel for simd dist_schedule(static, ch)205    for (int i = 0; i < n; ++i) {206      a[i] = b[i] + c[i];207 208 209      // check EUB for distribute210 211      // initialize omp.iv212 213      // check exit condition214 215      // check that PrevLB and PrevUB are passed to the 'for'216      // check that distlb and distub are properly passed to fork_call217 218      // check DistInc219 220      // Update UB221 222      // Store LB in IV223 224 225      // loop exit226 227      // skip implementation of 'parallel for': using default scheduling and was tested above228      [&]() {229	a[i] = b[i] + c[i];230      }();231    }232 233    // schedule: static no chunk234    #pragma omp target235    #pragma omp teams236 237    #pragma omp distribute parallel for simd schedule(static)238    for (int i = 0; i < n; ++i) {239      a[i] = b[i] + c[i];240 241      // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case242 243      // 'parallel for' implementation is the same as the case without schedule clase (static no chunk is the default)244 245 246      // initialize lb and ub to PrevLB and PrevUB247 248      // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used249      // In this case we use EUB250 251      // initialize omp.iv252 253      // check exit condition254 255      // check that PrevLB and PrevUB are passed to the 'for'256 257      // check stride 1 for 'for' in 'distribute parallel for simd'258 259 260      [&]() {261	a[i] = b[i] + c[i];262      }();263    }264 265    // schedule: static chunk266    #pragma omp target267    #pragma omp teams268 269    #pragma omp distribute parallel for simd schedule(static, ch)270    for (int i = 0; i < n; ++i) {271      a[i] = b[i] + c[i];272      // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case273 274      // 'parallel for' implementation using outer and inner loops and PrevEUB275 276      // initialize lb and ub to PrevLB and PrevUB277 278      // check PrevEUB (using PrevUB instead of NumIt as upper bound)279 280      // initialize omp.iv (IV = LB)281 282      // outer loop: while (IV < UB) {283 284 285 286      // skip body branch287 288      // IV = IV + 1 and inner loop latch289 290      // check NextLB and NextUB291 292 293      [&]() {294	a[i] = b[i] + c[i];295      }();296    }297 298    // schedule: dynamic no chunk299    #pragma omp target300    #pragma omp teams301 302    #pragma omp distribute parallel for simd schedule(dynamic)303    for (int i = 0; i < n; ++i) {304      a[i] = b[i] + c[i];305      // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case306 307      // 'parallel for' implementation using outer and inner loops and PrevEUB308 309      // initialize lb and ub to PrevLB and PrevUB310 311 312      // initialize omp.iv (IV = LB)313 314 315      // skip body branch316 317      // IV = IV + 1 and inner loop latch318 319      // check NextLB and NextUB320 321 322      [&]() {323	a[i] = b[i] + c[i];324      }();325    }326 327    // schedule: dynamic chunk328    #pragma omp target329    #pragma omp teams330 331    #pragma omp distribute parallel for simd schedule(dynamic, ch)332    for (int i = 0; i < n; ++i) {333      a[i] = b[i] + c[i];334      // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case335 336      // 'parallel for' implementation using outer and inner loops and PrevEUB337 338      // initialize lb and ub to PrevLB and PrevUB339 340 341      // initialize omp.iv (IV = LB)342 343 344      // skip body branch345 346      // IV = IV + 1 and inner loop latch347 348      // check NextLB and NextUB349 350 351      [&]() {352	a[i] = b[i] + c[i];353      }();354    }355  }();356  return 0;357#else358 359 360 361 362 363 364 365 366 367  // no schedule clauses368  #pragma omp target369  #pragma omp teams370 371  #pragma omp distribute parallel for simd372  for (int i = 0; i < n; ++i) {373    a[i] = b[i] + c[i];374 375 376    // check EUB for distribute377 378    // initialize omp.iv379 380    // check exit condition381 382    // check that PrevLB and PrevUB are passed to the 'for'383    // check that distlb and distub are properly passed to fork_call384 385    // increment by stride (distInc - 'parallel for' executes the whole chunk) and latch386 387 388    // implementation of 'parallel for'389 390 391    // initialize lb and ub to PrevLB and PrevUB392 393    // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used394    // In this case we use EUB395 396    // initialize omp.iv397 398    // check exit condition399 400    // check that PrevLB and PrevUB are passed to the 'for'401 402    // check stride 1 for 'for' in 'distribute parallel for simd'403 404  }405 406  // dist_schedule: static no chunk407  #pragma omp target408  #pragma omp teams409 410  #pragma omp distribute parallel for simd dist_schedule(static)411  for (int i = 0; i < n; ++i) {412    a[i] = b[i] + c[i];413 414 415    // check EUB for distribute416 417    // initialize omp.iv418 419    // check exit condition420 421    // check that PrevLB and PrevUB are passed to the 'for'422    // check that distlb and distub are properly passed to fork_call423 424    // increment by stride (distInc - 'parallel for' executes the whole chunk) and latch425 426 427    // implementation of 'parallel for'428 429 430    // initialize lb and ub to PrevLB and PrevUB431 432    // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used433    // In this case we use EUB434 435    // initialize omp.iv436 437    // check exit condition438 439    // check that PrevLB and PrevUB are passed to the 'for'440 441    // check stride 1 for 'for' in 'distribute parallel for simd'442 443  }444 445  // dist_schedule: static chunk446  #pragma omp target447  #pragma omp teams448 449  #pragma omp distribute parallel for simd dist_schedule(static, ch)450  for (int i = 0; i < n; ++i) {451    a[i] = b[i] + c[i];452 453    // unlike the previous tests, in this one we have a outer and inner loop for 'distribute'454 455    // check EUB for distribute456 457    // initialize omp.iv458 459    // check exit condition460 461    // check that PrevLB and PrevUB are passed to the 'for'462    // check that distlb and distub are properly passed to fork_call463 464    // check DistInc465 466    // Update UB467 468    // Store LB in IV469 470 471    // loop exit472 473    // skip implementation of 'parallel for': using default scheduling and was tested above474  }475 476  // schedule: static no chunk477  #pragma omp target478  #pragma omp teams479 480  #pragma omp distribute parallel for simd schedule(static)481  for (int i = 0; i < n; ++i) {482    a[i] = b[i] + c[i];483 484    // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case485 486    // 'parallel for' implementation is the same as the case without schedule clase (static no chunk is the default)487 488 489    // initialize lb and ub to PrevLB and PrevUB490 491    // PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used492    // In this case we use EUB493 494    // initialize omp.iv495 496    // check exit condition497 498    // check that PrevLB and PrevUB are passed to the 'for'499 500    // check stride 1 for 'for' in 'distribute parallel for simd'501 502  }503 504  // schedule: static chunk505  #pragma omp target506  #pragma omp teams507 508  #pragma omp distribute parallel for simd schedule(static, ch)509  for (int i = 0; i < n; ++i) {510    a[i] = b[i] + c[i];511    // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case512 513    // 'parallel for' implementation using outer and inner loops and PrevEUB514 515    // initialize lb and ub to PrevLB and PrevUB516 517    // check PrevEUB (using PrevUB instead of NumIt as upper bound)518 519    // initialize omp.iv (IV = LB)520 521    // outer loop: while (IV < UB) {522 523 524 525    // skip body branch526 527    // IV = IV + 1 and inner loop latch528 529    // check NextLB and NextUB530 531 532  }533 534  // schedule: dynamic no chunk535  #pragma omp target536  #pragma omp teams537 538  #pragma omp distribute parallel for simd schedule(dynamic)539  for (int i = 0; i < n; ++i) {540    a[i] = b[i] + c[i];541    // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case542 543    // 'parallel for' implementation using outer and inner loops and PrevEUB544 545    // initialize lb and ub to PrevLB and PrevUB546 547 548    // initialize omp.iv (IV = LB)549 550 551    // skip body branch552 553    // IV = IV + 1 and inner loop latch554 555    // check NextLB and NextUB556 557 558  }559 560  // schedule: dynamic chunk561  #pragma omp target562  #pragma omp teams563 564  #pragma omp distribute parallel for simd schedule(dynamic, ch)565  for (int i = 0; i < n; ++i) {566    a[i] = b[i] + c[i];567    // skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case568 569    // 'parallel for' implementation using outer and inner loops and PrevEUB570 571    // initialize lb and ub to PrevLB and PrevUB572 573 574    // initialize omp.iv (IV = LB)575 576 577    // skip body branch578 579    // IV = IV + 1 and inner loop latch580 581    // check NextLB and NextUB582 583 584  }585 586  return tmain<int>();587#endif588}589 590// check code591 592 593 594 595 596 597 598 599 600 601 602// check EUB for distribute603 604// initialize omp.iv605 606// check exit condition607 608// check that PrevLB and PrevUB are passed to the 'for'609// check that distlb and distub are properly passed to fork_call610 611// increment by stride (distInc - 'parallel for' executes the whole chunk) and latch612 613 614// implementation of 'parallel for'615 616 617// initialize lb and ub to PrevLB and PrevUB618 619// PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used620// In this case we use EUB621 622// initialize omp.iv623 624// check exit condition625 626// check that PrevLB and PrevUB are passed to the 'for'627 628// check stride 1 for 'for' in 'distribute parallel for simd'629 630 631 632 633 634// check EUB for distribute635 636// initialize omp.iv637 638// check exit condition639 640// check that PrevLB and PrevUB are passed to the 'for'641// check that distlb and distub are properly passed to fork_call642 643// increment by stride (distInc - 'parallel for' executes the whole chunk) and latch644 645 646// implementation of 'parallel for'647 648 649// initialize lb and ub to PrevLB and PrevUB650 651// PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used652// In this case we use EUB653 654// initialize omp.iv655 656// check exit condition657 658// check that PrevLB and PrevUB are passed to the 'for'659 660// check stride 1 for 'for' in 'distribute parallel for simd'661 662 663 664 665// unlike the previous tests, in this one we have a outer and inner loop for 'distribute'666 667// check EUB for distribute668 669// initialize omp.iv670 671// check exit condition672 673// check that PrevLB and PrevUB are passed to the 'for'674// check that distlb and distub are properly passed to fork_call675 676// check DistInc677 678// Update UB679 680// Store LB in IV681 682 683// loop exit684 685// skip implementation of 'parallel for': using default scheduling and was tested above686 687 688 689// skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case690 691// 'parallel for' implementation is the same as the case without schedule clase (static no chunk is the default)692 693 694// initialize lb and ub to PrevLB and PrevUB695 696// PrevEUB is only used when 'for' has a chunked schedule, otherwise EUB is used697// In this case we use EUB698 699// initialize omp.iv700 701// check exit condition702 703// check that PrevLB and PrevUB are passed to the 'for'704 705// check stride 1 for 'for' in 'distribute parallel for simd'706 707 708 709// skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case710 711// 'parallel for' implementation using outer and inner loops and PrevEUB712 713// initialize lb and ub to PrevLB and PrevUB714 715// check PrevEUB (using PrevUB instead of NumIt as upper bound)716 717// initialize omp.iv (IV = LB)718 719// outer loop: while (IV < UB) {720 721 722 723// skip body branch724 725// IV = IV + 1 and inner loop latch726 727// check NextLB and NextUB728 729 730 731 732// skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case733 734// 'parallel for' implementation using outer and inner loops and PrevEUB735 736// initialize lb and ub to PrevLB and PrevUB737 738 739// initialize omp.iv (IV = LB)740 741 742// skip body branch743 744// IV = IV + 1 and inner loop latch745 746// check NextLB and NextUB747 748 749 750 751// skip rest of implementation of 'distribute' as it is tested above for default dist_schedule case752 753// 'parallel for' implementation using outer and inner loops and PrevEUB754 755// initialize lb and ub to PrevLB and PrevUB756 757 758// initialize omp.iv (IV = LB)759 760 761// skip body branch762 763// IV = IV + 1 and inner loop latch764 765// check NextLB and NextUB766 767 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_l116798// 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_l116.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_l116.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 4, !llvm.access.group [[ACC_GRP10:![0-9]+]]879// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP10]]880// 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 4, !llvm.access.group [[ACC_GRP10]]884// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i64885// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP10]]886// 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_l116.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP10]]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 4, !llvm.access.group [[ACC_GRP10]]891// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP10]]892// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]893// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP10]]894// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP11:![0-9]+]]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:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 4902// CHECK1-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0903// CHECK1-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]904// CHECK1:       .omp.final.then:905// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4906// CHECK1-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 0907// CHECK1-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 1908// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 1909// CHECK1-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]910// CHECK1-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 4911// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]912// CHECK1:       .omp.final.done:913// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]914// CHECK1:       omp.precond.end:915// CHECK1-NEXT:    ret void916//917//918// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l116.omp_outlined.omp_outlined919// 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]] {920// CHECK1-NEXT:  entry:921// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8922// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8923// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 8924// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 8925// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 8926// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8927// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8928// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 8929// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4930// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 4931// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4932// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4933// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 4934// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4935// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4936// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4937// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4938// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 4939// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_0:%.*]], align 8940// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8941// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8942// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 8943// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 8944// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 8945// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8946// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8947// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 8948// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 8949// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 8950// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 8951// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 8952// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 4953// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 4954// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4955// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 0956// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 1957// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1958// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 4959// CHECK1-NEXT:    store i32 0, ptr [[I]], align 4960// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4961// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]962// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]963// CHECK1:       omp.precond.then:964// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 4965// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4966// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 4967// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 8968// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i32969// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 8970// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i32971// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 4972// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 4973// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 4974// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4975// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8976// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 4977// 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)978// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4979// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4980// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]981// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]982// CHECK1:       cond.true:983// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4984// CHECK1-NEXT:    br label [[COND_END:%.*]]985// CHECK1:       cond.false:986// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4987// CHECK1-NEXT:    br label [[COND_END]]988// CHECK1:       cond.end:989// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]990// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 4991// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 4992// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 4993// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]994// CHECK1:       omp.inner.for.cond:995// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP14:![0-9]+]]996// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP14]]997// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]998// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]999// CHECK1:       omp.inner.for.body:1000// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP14]]1001// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 11002// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1003// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP14]]1004// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP14]]1005// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP14]]1006// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i641007// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]1008// CHECK1-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP14]]1009// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP14]]1010// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP14]]1011// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i641012// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]1013// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP14]]1014// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]1015// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP14]]1016// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP14]]1017// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i641018// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]1019// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP14]]1020// CHECK1-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 01021// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 8, !llvm.access.group [[ACC_GRP14]]1022// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 11023// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP29]], align 8, !llvm.access.group [[ACC_GRP14]]1024// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 21025// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 8, !llvm.access.group [[ACC_GRP14]]1026// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 31027// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 8, !llvm.access.group [[ACC_GRP14]]1028// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]]), !llvm.access.group [[ACC_GRP14]]1029// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1030// CHECK1:       omp.body.continue:1031// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1032// CHECK1:       omp.inner.for.inc:1033// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP14]]1034// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], 11035// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP14]]1036// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP15:![0-9]+]]1037// CHECK1:       omp.inner.for.end:1038// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1039// CHECK1:       omp.loop.exit:1040// CHECK1-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81041// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 41042// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])1043// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 41044// CHECK1-NEXT:    [[TMP36:%.*]] = icmp ne i32 [[TMP35]], 01045// CHECK1-NEXT:    br i1 [[TMP36]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]1046// CHECK1:       .omp.final.then:1047// CHECK1-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41048// CHECK1-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP37]], 01049// CHECK1-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 11050// CHECK1-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 11051// CHECK1-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]1052// CHECK1-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 41053// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]1054// CHECK1:       .omp.final.done:1055// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1056// CHECK1:       omp.precond.end:1057// CHECK1-NEXT:    ret void1058//1059//1060// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l1591061// CHECK1-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {1062// CHECK1-NEXT:  entry:1063// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 81064// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81065// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81066// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81067// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 81068// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81069// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81070// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81071// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l159.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])1072// CHECK1-NEXT:    ret void1073//1074//1075// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l159.omp_outlined1076// 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]] {1077// CHECK1-NEXT:  entry:1078// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81079// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81080// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81081// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81082// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81083// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81084// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41085// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41086// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41087// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41088// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41089// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41090// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41091// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41092// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41093// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 41094// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81095// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81096// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81097// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81098// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81099// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81100// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81101// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81102// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81103// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81104// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41105// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41106// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41107// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01108// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11109// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11110// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41111// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41112// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41113// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1114// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1115// CHECK1:       omp.precond.then:1116// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41117// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41118// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 41119// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41120// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41121// CHECK1-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81122// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 41123// 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)1124// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41125// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41126// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]1127// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1128// CHECK1:       cond.true:1129// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41130// CHECK1-NEXT:    br label [[COND_END:%.*]]1131// CHECK1:       cond.false:1132// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41133// CHECK1-NEXT:    br label [[COND_END]]1134// CHECK1:       cond.end:1135// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]1136// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41137// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41138// CHECK1-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 41139// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1140// CHECK1:       omp.inner.for.cond:1141// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP19:![0-9]+]]1142// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP19]]1143// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]1144// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1145// CHECK1:       omp.inner.for.body:1146// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP19]]1147// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i641148// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP19]]1149// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i641150// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l159.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP19]]1151// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1152// CHECK1:       omp.inner.for.inc:1153// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP19]]1154// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP19]]1155// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]1156// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP19]]1157// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP20:![0-9]+]]1158// CHECK1:       omp.inner.for.end:1159// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1160// CHECK1:       omp.loop.exit:1161// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81162// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 41163// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])1164// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 41165// CHECK1-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 01166// CHECK1-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]1167// CHECK1:       .omp.final.then:1168// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41169// CHECK1-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 01170// CHECK1-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 11171// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 11172// CHECK1-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]1173// CHECK1-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 41174// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]1175// CHECK1:       .omp.final.done:1176// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1177// CHECK1:       omp.precond.end:1178// CHECK1-NEXT:    ret void1179//1180//1181// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l159.omp_outlined.omp_outlined1182// 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]] {1183// CHECK1-NEXT:  entry:1184// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81185// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81186// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81187// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81188// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81189// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81190// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81191// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81192// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41193// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41194// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41195// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41196// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41197// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41198// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41199// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41200// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41201// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 41202// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_1:%.*]], align 81203// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81204// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81205// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81206// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81207// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81208// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81209// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81210// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81211// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81212// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81213// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81214// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81215// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41216// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41217// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41218// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01219// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11220// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11221// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41222// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41223// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41224// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1225// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1226// CHECK1:       omp.precond.then:1227// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41228// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41229// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 41230// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81231// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i321232// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81233// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i321234// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41235// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 41236// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41237// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41238// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81239// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41240// 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)1241// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41242// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41243// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1244// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1245// CHECK1:       cond.true:1246// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41247// CHECK1-NEXT:    br label [[COND_END:%.*]]1248// CHECK1:       cond.false:1249// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41250// CHECK1-NEXT:    br label [[COND_END]]1251// CHECK1:       cond.end:1252// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1253// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41254// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41255// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41256// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1257// CHECK1:       omp.inner.for.cond:1258// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22:![0-9]+]]1259// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP22]]1260// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]1261// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1262// CHECK1:       omp.inner.for.body:1263// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22]]1264// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 11265// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1266// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP22]]1267// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP22]]1268// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP22]]1269// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i641270// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]1271// CHECK1-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP22]]1272// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP22]]1273// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP22]]1274// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i641275// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]1276// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP22]]1277// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]1278// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP22]]1279// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP22]]1280// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i641281// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]1282// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP22]]1283// CHECK1-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 01284// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 8, !llvm.access.group [[ACC_GRP22]]1285// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 11286// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP29]], align 8, !llvm.access.group [[ACC_GRP22]]1287// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 21288// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 8, !llvm.access.group [[ACC_GRP22]]1289// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 31290// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 8, !llvm.access.group [[ACC_GRP22]]1291// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE0_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]]), !llvm.access.group [[ACC_GRP22]]1292// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1293// CHECK1:       omp.body.continue:1294// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1295// CHECK1:       omp.inner.for.inc:1296// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22]]1297// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], 11298// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22]]1299// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP23:![0-9]+]]1300// CHECK1:       omp.inner.for.end:1301// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1302// CHECK1:       omp.loop.exit:1303// CHECK1-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81304// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 41305// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])1306// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 41307// CHECK1-NEXT:    [[TMP36:%.*]] = icmp ne i32 [[TMP35]], 01308// CHECK1-NEXT:    br i1 [[TMP36]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]1309// CHECK1:       .omp.final.then:1310// CHECK1-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41311// CHECK1-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP37]], 01312// CHECK1-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 11313// CHECK1-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 11314// CHECK1-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]1315// CHECK1-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 41316// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]1317// CHECK1:       .omp.final.done:1318// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1319// CHECK1:       omp.precond.end:1320// CHECK1-NEXT:    ret void1321//1322//1323// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2011324// CHECK1-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {1325// CHECK1-NEXT:  entry:1326// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 81327// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 81328// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81329// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81330// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81331// CHECK1-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 81332// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 81333// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81334// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81335// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81336// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l201.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])1337// CHECK1-NEXT:    ret void1338//1339//1340// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l201.omp_outlined1341// 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]] {1342// CHECK1-NEXT:  entry:1343// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81344// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81345// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 81346// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81347// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81348// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81349// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81350// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41351// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41352// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41353// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41354// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41355// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41356// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41357// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41358// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41359// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 41360// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81361// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81362// CHECK1-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 81363// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81364// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81365// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81366// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81367// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 81368// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 81369// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 81370// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 81371// CHECK1-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 81372// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 41373// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 41374// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41375// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 01376// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11377// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11378// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41379// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41380// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41381// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]1382// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1383// CHECK1:       omp.precond.then:1384// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41385// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41386// CHECK1-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 41387// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41388// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41389// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 41390// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81391// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41392// 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]])1393// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41394// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41395// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1396// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1397// CHECK1:       cond.true:1398// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41399// CHECK1-NEXT:    br label [[COND_END:%.*]]1400// CHECK1:       cond.false:1401// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41402// CHECK1-NEXT:    br label [[COND_END]]1403// CHECK1:       cond.end:1404// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1405// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41406// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41407// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41408// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1409// CHECK1:       omp.inner.for.cond:1410// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP25:![0-9]+]]1411// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP25]]1412// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 11413// CHECK1-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]1414// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1415// CHECK1:       omp.inner.for.body:1416// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP25]]1417// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i641418// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP25]]1419// CHECK1-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i641420// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l201.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]), !llvm.access.group [[ACC_GRP25]]1421// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1422// CHECK1:       omp.inner.for.inc:1423// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP25]]1424// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP25]]1425// CHECK1-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]1426// CHECK1-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP25]]1427// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP25]]1428// CHECK1-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP25]]1429// CHECK1-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]1430// CHECK1-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP25]]1431// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP25]]1432// CHECK1-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP25]]1433// CHECK1-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP27]], [[TMP28]]1434// CHECK1-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP25]]1435// CHECK1-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP25]]1436// CHECK1-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP25]]1437// CHECK1-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP29]], [[TMP30]]1438// CHECK1-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]1439// CHECK1:       cond.true10:1440// CHECK1-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP25]]1441// CHECK1-NEXT:    br label [[COND_END12:%.*]]1442// CHECK1:       cond.false11:1443// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP25]]1444// CHECK1-NEXT:    br label [[COND_END12]]1445// CHECK1:       cond.end12:1446// CHECK1-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP31]], [[COND_TRUE10]] ], [ [[TMP32]], [[COND_FALSE11]] ]1447// CHECK1-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP25]]1448// CHECK1-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP25]]1449// CHECK1-NEXT:    store i32 [[TMP33]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP25]]1450// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP26:![0-9]+]]1451// CHECK1:       omp.inner.for.end:1452// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1453// CHECK1:       omp.loop.exit:1454// CHECK1-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81455// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 41456// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP35]])1457// CHECK1-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 41458// CHECK1-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 01459// CHECK1-NEXT:    br i1 [[TMP37]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]1460// CHECK1:       .omp.final.then:1461// CHECK1-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41462// CHECK1-NEXT:    [[SUB14:%.*]] = sub nsw i32 [[TMP38]], 01463// CHECK1-NEXT:    [[DIV15:%.*]] = sdiv i32 [[SUB14]], 11464// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV15]], 11465// CHECK1-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL]]1466// CHECK1-NEXT:    store i32 [[ADD16]], ptr [[I3]], align 41467// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]1468// CHECK1:       .omp.final.done:1469// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1470// CHECK1:       omp.precond.end:1471// CHECK1-NEXT:    ret void1472//1473//1474// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l201.omp_outlined.omp_outlined1475// 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]] {1476// CHECK1-NEXT:  entry:1477// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81478// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81479// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81480// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81481// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81482// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81483// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81484// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81485// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41486// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41487// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41488// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41489// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41490// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41491// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41492// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41493// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41494// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 41495// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_2:%.*]], align 81496// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81497// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81498// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81499// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81500// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81501// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81502// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81503// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81504// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81505// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81506// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81507// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81508// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41509// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41510// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41511// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01512// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11513// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11514// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41515// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41516// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41517// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1518// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1519// CHECK1:       omp.precond.then:1520// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41521// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41522// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 41523// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81524// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i321525// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81526// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i321527// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41528// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 41529// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41530// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41531// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81532// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41533// 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)1534// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41535// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41536// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1537// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1538// CHECK1:       cond.true:1539// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41540// CHECK1-NEXT:    br label [[COND_END:%.*]]1541// CHECK1:       cond.false:1542// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41543// CHECK1-NEXT:    br label [[COND_END]]1544// CHECK1:       cond.end:1545// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1546// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41547// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41548// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41549// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1550// CHECK1:       omp.inner.for.cond:1551// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP28:![0-9]+]]1552// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP28]]1553// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]1554// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1555// CHECK1:       omp.inner.for.body:1556// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP28]]1557// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 11558// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1559// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP28]]1560// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP28]]1561// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP28]]1562// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i641563// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]1564// CHECK1-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP28]]1565// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP28]]1566// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP28]]1567// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i641568// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]1569// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP28]]1570// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]1571// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP28]]1572// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP28]]1573// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i641574// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]1575// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP28]]1576// CHECK1-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 01577// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 8, !llvm.access.group [[ACC_GRP28]]1578// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 11579// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP29]], align 8, !llvm.access.group [[ACC_GRP28]]1580// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 21581// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 8, !llvm.access.group [[ACC_GRP28]]1582// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 31583// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 8, !llvm.access.group [[ACC_GRP28]]1584// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE1_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]]), !llvm.access.group [[ACC_GRP28]]1585// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1586// CHECK1:       omp.body.continue:1587// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1588// CHECK1:       omp.inner.for.inc:1589// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP28]]1590// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], 11591// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP28]]1592// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP29:![0-9]+]]1593// CHECK1:       omp.inner.for.end:1594// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1595// CHECK1:       omp.loop.exit:1596// CHECK1-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81597// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 41598// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])1599// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 41600// CHECK1-NEXT:    [[TMP36:%.*]] = icmp ne i32 [[TMP35]], 01601// CHECK1-NEXT:    br i1 [[TMP36]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]1602// CHECK1:       .omp.final.then:1603// CHECK1-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41604// CHECK1-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP37]], 01605// CHECK1-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 11606// CHECK1-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 11607// CHECK1-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]1608// CHECK1-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 41609// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]1610// CHECK1:       .omp.final.done:1611// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1612// CHECK1:       omp.precond.end:1613// CHECK1-NEXT:    ret void1614//1615//1616// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2341617// CHECK1-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {1618// CHECK1-NEXT:  entry:1619// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 81620// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81621// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81622// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81623// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 81624// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81625// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81626// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81627// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l234.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])1628// CHECK1-NEXT:    ret void1629//1630//1631// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l234.omp_outlined1632// 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]] {1633// CHECK1-NEXT:  entry:1634// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81635// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81636// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81637// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81638// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81639// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81640// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41641// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41642// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41643// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41644// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41645// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41646// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41647// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41648// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41649// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 41650// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81651// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81652// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81653// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81654// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81655// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81656// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81657// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81658// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81659// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81660// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41661// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41662// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41663// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01664// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11665// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11666// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41667// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41668// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41669// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1670// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1671// CHECK1:       omp.precond.then:1672// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41673// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41674// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 41675// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41676// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41677// CHECK1-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81678// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 41679// 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)1680// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41681// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41682// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]1683// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1684// CHECK1:       cond.true:1685// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41686// CHECK1-NEXT:    br label [[COND_END:%.*]]1687// CHECK1:       cond.false:1688// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41689// CHECK1-NEXT:    br label [[COND_END]]1690// CHECK1:       cond.end:1691// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]1692// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41693// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41694// CHECK1-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 41695// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1696// CHECK1:       omp.inner.for.cond:1697// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP31:![0-9]+]]1698// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP31]]1699// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]1700// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1701// CHECK1:       omp.inner.for.body:1702// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP31]]1703// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i641704// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP31]]1705// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i641706// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l234.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP31]]1707// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1708// CHECK1:       omp.inner.for.inc:1709// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP31]]1710// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP31]]1711// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]1712// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP31]]1713// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP32:![0-9]+]]1714// CHECK1:       omp.inner.for.end:1715// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1716// CHECK1:       omp.loop.exit:1717// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81718// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 41719// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])1720// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 41721// CHECK1-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 01722// CHECK1-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]1723// CHECK1:       .omp.final.then:1724// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41725// CHECK1-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 01726// CHECK1-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 11727// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 11728// CHECK1-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]1729// CHECK1-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 41730// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]1731// CHECK1:       .omp.final.done:1732// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1733// CHECK1:       omp.precond.end:1734// CHECK1-NEXT:    ret void1735//1736//1737// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l234.omp_outlined.omp_outlined1738// 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]] {1739// CHECK1-NEXT:  entry:1740// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81741// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81742// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 81743// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 81744// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81745// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81746// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81747// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81748// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41749// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41750// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41751// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41752// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41753// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 41754// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 41755// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41756// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41757// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 41758// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_3:%.*]], align 81759// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81760// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81761// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 81762// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 81763// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81764// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81765// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81766// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81767// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 81768// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 81769// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 81770// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 81771// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 41772// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 41773// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41774// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 01775// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11776// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11777// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41778// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41779// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41780// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]1781// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1782// CHECK1:       omp.precond.then:1783// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 41784// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41785// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 41786// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 81787// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i321788// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 81789// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i321790// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 41791// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 41792// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41793// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41794// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81795// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41796// 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)1797// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41798// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41799// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1800// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1801// CHECK1:       cond.true:1802// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41803// CHECK1-NEXT:    br label [[COND_END:%.*]]1804// CHECK1:       cond.false:1805// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 41806// CHECK1-NEXT:    br label [[COND_END]]1807// CHECK1:       cond.end:1808// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1809// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 41810// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 41811// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41812// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1813// CHECK1:       omp.inner.for.cond:1814// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP34:![0-9]+]]1815// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP34]]1816// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]1817// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1818// CHECK1:       omp.inner.for.body:1819// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP34]]1820// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 11821// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]1822// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP34]]1823// CHECK1-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP34]]1824// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP34]]1825// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i641826// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]1827// CHECK1-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP34]]1828// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP34]]1829// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP34]]1830// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i641831// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]1832// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP34]]1833// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]1834// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP34]]1835// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP34]]1836// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i641837// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]1838// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP34]]1839// CHECK1-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 01840// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 8, !llvm.access.group [[ACC_GRP34]]1841// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 11842// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP29]], align 8, !llvm.access.group [[ACC_GRP34]]1843// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 21844// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 8, !llvm.access.group [[ACC_GRP34]]1845// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 31846// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 8, !llvm.access.group [[ACC_GRP34]]1847// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE2_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]]), !llvm.access.group [[ACC_GRP34]]1848// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]1849// CHECK1:       omp.body.continue:1850// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1851// CHECK1:       omp.inner.for.inc:1852// CHECK1-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP34]]1853// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], 11854// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP34]]1855// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP35:![0-9]+]]1856// CHECK1:       omp.inner.for.end:1857// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1858// CHECK1:       omp.loop.exit:1859// CHECK1-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81860// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 41861// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])1862// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 41863// CHECK1-NEXT:    [[TMP36:%.*]] = icmp ne i32 [[TMP35]], 01864// CHECK1-NEXT:    br i1 [[TMP36]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]1865// CHECK1:       .omp.final.then:1866// CHECK1-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41867// CHECK1-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP37]], 01868// CHECK1-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 11869// CHECK1-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 11870// CHECK1-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]1871// CHECK1-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 41872// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]1873// CHECK1:       .omp.final.done:1874// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]1875// CHECK1:       omp.precond.end:1876// CHECK1-NEXT:    ret void1877//1878//1879// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2661880// CHECK1-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {1881// CHECK1-NEXT:  entry:1882// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 81883// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 81884// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81885// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81886// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81887// CHECK1-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 81888// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 81889// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81890// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81891// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81892// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l266.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])1893// CHECK1-NEXT:    ret void1894//1895//1896// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l266.omp_outlined1897// 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]] {1898// CHECK1-NEXT:  entry:1899// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 81900// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 81901// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 81902// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 81903// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 81904// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 81905// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 81906// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41907// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 41908// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 41909// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41910// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 41911// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 41912// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 41913// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 41914// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 41915// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 41916// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 41917// CHECK1-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 81918// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 81919// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 81920// CHECK1-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 81921// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 81922// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 81923// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 81924// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 81925// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 81926// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 81927// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 81928// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 81929// CHECK1-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 81930// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 41931// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 41932// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 41933// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 41934// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41935// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 01936// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 11937// CHECK1-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 11938// CHECK1-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 41939// CHECK1-NEXT:    store i32 0, ptr [[I]], align 41940// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41941// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]1942// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]1943// CHECK1:       omp.precond.then:1944// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 41945// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 41946// CHECK1-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 41947// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 41948// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 41949// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81950// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 41951// 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)1952// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41953// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 41954// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]1955// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]1956// CHECK1:       cond.true:1957// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 41958// CHECK1-NEXT:    br label [[COND_END:%.*]]1959// CHECK1:       cond.false:1960// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 41961// CHECK1-NEXT:    br label [[COND_END]]1962// CHECK1:       cond.end:1963// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]1964// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 41965// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 41966// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 41967// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]1968// CHECK1:       omp.inner.for.cond:1969// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP37:![0-9]+]]1970// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP37]]1971// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]1972// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]1973// CHECK1:       omp.inner.for.body:1974// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP37]]1975// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i641976// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP37]]1977// CHECK1-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i641978// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP37]]1979// CHECK1-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP37]]1980// CHECK1-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 8, !llvm.access.group [[ACC_GRP37]]1981// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l266.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]]), !llvm.access.group [[ACC_GRP37]]1982// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]1983// CHECK1:       omp.inner.for.inc:1984// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP37]]1985// CHECK1-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP37]]1986// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]1987// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP37]]1988// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP38:![0-9]+]]1989// CHECK1:       omp.inner.for.end:1990// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]1991// CHECK1:       omp.loop.exit:1992// CHECK1-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 81993// CHECK1-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 41994// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])1995// CHECK1-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 41996// CHECK1-NEXT:    [[TMP30:%.*]] = icmp ne i32 [[TMP29]], 01997// CHECK1-NEXT:    br i1 [[TMP30]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]1998// CHECK1:       .omp.final.then:1999// CHECK1-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42000// CHECK1-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP31]], 02001// CHECK1-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 12002// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 12003// CHECK1-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]2004// CHECK1-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 42005// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]2006// CHECK1:       .omp.final.done:2007// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2008// CHECK1:       omp.precond.end:2009// CHECK1-NEXT:    ret void2010//2011//2012// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l266.omp_outlined.omp_outlined2013// 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]] {2014// CHECK1-NEXT:  entry:2015// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82016// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82017// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82018// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82019// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82020// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82021// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82022// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82023// CHECK1-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 82024// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42025// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42026// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42027// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 42028// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42029// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42030// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42031// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42032// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42033// CHECK1-NEXT:    [[I5:%.*]] = alloca i32, align 42034// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_4:%.*]], align 82035// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82036// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82037// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82038// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82039// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82040// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82041// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82042// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82043// CHECK1-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 82044// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 82045// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 82046// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 82047// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 82048// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42049// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 42050// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42051// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02052// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12053// CHECK1-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 12054// CHECK1-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 42055// CHECK1-NEXT:    store i32 0, ptr [[I]], align 42056// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42057// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2058// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2059// CHECK1:       omp.precond.then:2060// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42061// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42062// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 42063// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82064// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i322065// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82066// CHECK1-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i322067// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42068// CHECK1-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 42069// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42070// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42071// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 42072// CHECK1-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82073// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 42074// 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]])2075// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]2076// CHECK1:       omp.dispatch.cond:2077// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42078// CHECK1-NEXT:    [[TMP14:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82079// CHECK1-NEXT:    [[CONV6:%.*]] = trunc i64 [[TMP14]] to i322080// CHECK1-NEXT:    [[CMP7:%.*]] = icmp sgt i32 [[TMP13]], [[CONV6]]2081// CHECK1-NEXT:    br i1 [[CMP7]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2082// CHECK1:       cond.true:2083// CHECK1-NEXT:    [[TMP15:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82084// CHECK1-NEXT:    [[CONV8:%.*]] = trunc i64 [[TMP15]] to i322085// CHECK1-NEXT:    br label [[COND_END:%.*]]2086// CHECK1:       cond.false:2087// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42088// CHECK1-NEXT:    br label [[COND_END]]2089// CHECK1:       cond.end:2090// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[CONV8]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]2091// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42092// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42093// CHECK1-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 42094// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 42095// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42096// CHECK1-NEXT:    [[CMP9:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]2097// CHECK1-NEXT:    br i1 [[CMP9]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]2098// CHECK1:       omp.dispatch.body:2099// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2100// CHECK1:       omp.inner.for.cond:2101// CHECK1-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP40:![0-9]+]]2102// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP40]]2103// CHECK1-NEXT:    [[CMP10:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]2104// CHECK1-NEXT:    br i1 [[CMP10]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2105// CHECK1:       omp.inner.for.body:2106// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP40]]2107// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 12108// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2109// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP40]]2110// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP40]]2111// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP40]]2112// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP24]] to i642113// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM]]2114// CHECK1-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP40]]2115// CHECK1-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP40]]2116// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP40]]2117// CHECK1-NEXT:    [[IDXPROM11:%.*]] = sext i32 [[TMP27]] to i642118// CHECK1-NEXT:    [[ARRAYIDX12:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM11]]2119// CHECK1-NEXT:    [[TMP28:%.*]] = load double, ptr [[ARRAYIDX12]], align 8, !llvm.access.group [[ACC_GRP40]]2120// CHECK1-NEXT:    [[ADD13:%.*]] = fadd double [[TMP25]], [[TMP28]]2121// CHECK1-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP40]]2122// CHECK1-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP40]]2123// CHECK1-NEXT:    [[IDXPROM14:%.*]] = sext i32 [[TMP30]] to i642124// CHECK1-NEXT:    [[ARRAYIDX15:%.*]] = getelementptr inbounds double, ptr [[TMP29]], i64 [[IDXPROM14]]2125// CHECK1-NEXT:    store double [[ADD13]], ptr [[ARRAYIDX15]], align 8, !llvm.access.group [[ACC_GRP40]]2126// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 02127// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP31]], align 8, !llvm.access.group [[ACC_GRP40]]2128// CHECK1-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 12129// CHECK1-NEXT:    store ptr [[I5]], ptr [[TMP32]], align 8, !llvm.access.group [[ACC_GRP40]]2130// CHECK1-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 22131// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP33]], align 8, !llvm.access.group [[ACC_GRP40]]2132// CHECK1-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 32133// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP34]], align 8, !llvm.access.group [[ACC_GRP40]]2134// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE3_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]]), !llvm.access.group [[ACC_GRP40]]2135// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2136// CHECK1:       omp.body.continue:2137// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2138// CHECK1:       omp.inner.for.inc:2139// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP40]]2140// CHECK1-NEXT:    [[ADD16:%.*]] = add nsw i32 [[TMP35]], 12141// CHECK1-NEXT:    store i32 [[ADD16]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP40]]2142// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP41:![0-9]+]]2143// CHECK1:       omp.inner.for.end:2144// CHECK1-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]2145// CHECK1:       omp.dispatch.inc:2146// CHECK1-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42147// CHECK1-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42148// CHECK1-NEXT:    [[ADD17:%.*]] = add nsw i32 [[TMP36]], [[TMP37]]2149// CHECK1-NEXT:    store i32 [[ADD17]], ptr [[DOTOMP_LB]], align 42150// CHECK1-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42151// CHECK1-NEXT:    [[TMP39:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 42152// CHECK1-NEXT:    [[ADD18:%.*]] = add nsw i32 [[TMP38]], [[TMP39]]2153// CHECK1-NEXT:    store i32 [[ADD18]], ptr [[DOTOMP_UB]], align 42154// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND]]2155// CHECK1:       omp.dispatch.end:2156// CHECK1-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82157// CHECK1-NEXT:    [[TMP41:%.*]] = load i32, ptr [[TMP40]], align 42158// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP41]])2159// CHECK1-NEXT:    [[TMP42:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 42160// CHECK1-NEXT:    [[TMP43:%.*]] = icmp ne i32 [[TMP42]], 02161// CHECK1-NEXT:    br i1 [[TMP43]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]2162// CHECK1:       .omp.final.then:2163// CHECK1-NEXT:    [[TMP44:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42164// CHECK1-NEXT:    [[SUB19:%.*]] = sub nsw i32 [[TMP44]], 02165// CHECK1-NEXT:    [[DIV20:%.*]] = sdiv i32 [[SUB19]], 12166// CHECK1-NEXT:    [[MUL21:%.*]] = mul nsw i32 [[DIV20]], 12167// CHECK1-NEXT:    [[ADD22:%.*]] = add nsw i32 0, [[MUL21]]2168// CHECK1-NEXT:    store i32 [[ADD22]], ptr [[I5]], align 42169// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]2170// CHECK1:       .omp.final.done:2171// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2172// CHECK1:       omp.precond.end:2173// CHECK1-NEXT:    ret void2174//2175//2176// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2992177// CHECK1-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {2178// CHECK1-NEXT:  entry:2179// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 82180// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82181// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82182// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82183// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 82184// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82185// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82186// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82187// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l299.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])2188// CHECK1-NEXT:    ret void2189//2190//2191// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l299.omp_outlined2192// 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]] {2193// CHECK1-NEXT:  entry:2194// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82195// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82196// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82197// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82198// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82199// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82200// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42201// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42202// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42203// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42204// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42205// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42206// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42207// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42208// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42209// CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 42210// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82211// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82212// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82213// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82214// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82215// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82216// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 82217// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 82218// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 82219// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 82220// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42221// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42222// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42223// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02224// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12225// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12226// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42227// CHECK1-NEXT:    store i32 0, ptr [[I]], align 42228// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42229// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2230// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2231// CHECK1:       omp.precond.then:2232// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42233// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42234// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 42235// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42236// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42237// CHECK1-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82238// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 42239// 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)2240// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42241// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42242// CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]2243// CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2244// CHECK1:       cond.true:2245// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42246// CHECK1-NEXT:    br label [[COND_END:%.*]]2247// CHECK1:       cond.false:2248// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42249// CHECK1-NEXT:    br label [[COND_END]]2250// CHECK1:       cond.end:2251// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]2252// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42253// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42254// CHECK1-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 42255// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2256// CHECK1:       omp.inner.for.cond:2257// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP43:![0-9]+]]2258// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP43]]2259// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]2260// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2261// CHECK1:       omp.inner.for.body:2262// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP43]]2263// CHECK1-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i642264// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP43]]2265// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i642266// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l299.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP43]]2267// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2268// CHECK1:       omp.inner.for.inc:2269// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP43]]2270// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP43]]2271// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]2272// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP43]]2273// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP44:![0-9]+]]2274// CHECK1:       omp.inner.for.end:2275// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2276// CHECK1:       omp.loop.exit:2277// CHECK1-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82278// CHECK1-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 42279// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])2280// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 42281// CHECK1-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 02282// CHECK1-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]2283// CHECK1:       .omp.final.then:2284// CHECK1-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42285// CHECK1-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 02286// CHECK1-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 12287// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 12288// CHECK1-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]2289// CHECK1-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 42290// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]2291// CHECK1:       .omp.final.done:2292// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2293// CHECK1:       omp.precond.end:2294// CHECK1-NEXT:    ret void2295//2296//2297// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l299.omp_outlined.omp_outlined2298// 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]] {2299// CHECK1-NEXT:  entry:2300// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82301// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82302// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82303// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82304// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82305// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82306// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82307// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82308// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42309// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42310// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42311// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42312// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42313// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42314// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42315// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42316// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42317// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 42318// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_5:%.*]], align 82319// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82320// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82321// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82322// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82323// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82324// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82325// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82326// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82327// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 82328// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 82329// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 82330// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 82331// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42332// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42333// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42334// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02335// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12336// CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12337// CHECK1-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42338// CHECK1-NEXT:    store i32 0, ptr [[I]], align 42339// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42340// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2341// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2342// CHECK1:       omp.precond.then:2343// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42344// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42345// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 42346// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82347// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i322348// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82349// CHECK1-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i322350// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42351// CHECK1-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 42352// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42353// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42354// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42355// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42356// CHECK1-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82357// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 42358// CHECK1-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)2359// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]2360// CHECK1:       omp.dispatch.cond:2361// CHECK1-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82362// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 42363// 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]])2364// CHECK1-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 02365// CHECK1-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]2366// CHECK1:       omp.dispatch.body:2367// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42368// CHECK1-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 42369// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2370// CHECK1:       omp.inner.for.cond:2371// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP46:![0-9]+]]2372// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP46]]2373// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]2374// CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2375// CHECK1:       omp.inner.for.body:2376// CHECK1-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP46]]2377// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 12378// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2379// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP46]]2380// CHECK1-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP46]]2381// CHECK1-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP46]]2382// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP22]] to i642383// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP21]], i64 [[IDXPROM]]2384// CHECK1-NEXT:    [[TMP23:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP46]]2385// CHECK1-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP46]]2386// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP46]]2387// CHECK1-NEXT:    [[IDXPROM6:%.*]] = sext i32 [[TMP25]] to i642388// CHECK1-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds double, ptr [[TMP24]], i64 [[IDXPROM6]]2389// CHECK1-NEXT:    [[TMP26:%.*]] = load double, ptr [[ARRAYIDX7]], align 8, !llvm.access.group [[ACC_GRP46]]2390// CHECK1-NEXT:    [[ADD8:%.*]] = fadd double [[TMP23]], [[TMP26]]2391// CHECK1-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP46]]2392// CHECK1-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP46]]2393// CHECK1-NEXT:    [[IDXPROM9:%.*]] = sext i32 [[TMP28]] to i642394// CHECK1-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds double, ptr [[TMP27]], i64 [[IDXPROM9]]2395// CHECK1-NEXT:    store double [[ADD8]], ptr [[ARRAYIDX10]], align 8, !llvm.access.group [[ACC_GRP46]]2396// CHECK1-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 02397// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP29]], align 8, !llvm.access.group [[ACC_GRP46]]2398// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 12399// CHECK1-NEXT:    store ptr [[I4]], ptr [[TMP30]], align 8, !llvm.access.group [[ACC_GRP46]]2400// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 22401// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP31]], align 8, !llvm.access.group [[ACC_GRP46]]2402// CHECK1-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 32403// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP32]], align 8, !llvm.access.group [[ACC_GRP46]]2404// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE4_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]]), !llvm.access.group [[ACC_GRP46]]2405// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2406// CHECK1:       omp.body.continue:2407// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2408// CHECK1:       omp.inner.for.inc:2409// CHECK1-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP46]]2410// CHECK1-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP33]], 12411// CHECK1-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP46]]2412// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP47:![0-9]+]]2413// CHECK1:       omp.inner.for.end:2414// CHECK1-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]2415// CHECK1:       omp.dispatch.inc:2416// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND]]2417// CHECK1:       omp.dispatch.end:2418// CHECK1-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82419// CHECK1-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 42420// CHECK1-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP35]])2421// CHECK1-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 42422// CHECK1-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 02423// CHECK1-NEXT:    br i1 [[TMP37]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]2424// CHECK1:       .omp.final.then:2425// CHECK1-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42426// CHECK1-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[TMP38]], 02427// CHECK1-NEXT:    [[DIV13:%.*]] = sdiv i32 [[SUB12]], 12428// CHECK1-NEXT:    [[MUL14:%.*]] = mul nsw i32 [[DIV13]], 12429// CHECK1-NEXT:    [[ADD15:%.*]] = add nsw i32 0, [[MUL14]]2430// CHECK1-NEXT:    store i32 [[ADD15]], ptr [[I4]], align 42431// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]2432// CHECK1:       .omp.final.done:2433// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2434// CHECK1:       omp.precond.end:2435// CHECK1-NEXT:    ret void2436//2437//2438// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l3282439// CHECK1-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {2440// CHECK1-NEXT:  entry:2441// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 82442// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 82443// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82444// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82445// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82446// CHECK1-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 82447// CHECK1-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 82448// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82449// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82450// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82451// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l328.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])2452// CHECK1-NEXT:    ret void2453//2454//2455// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l328.omp_outlined2456// 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]] {2457// CHECK1-NEXT:  entry:2458// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82459// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82460// CHECK1-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 82461// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82462// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82463// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82464// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82465// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42466// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42467// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42468// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42469// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 42470// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42471// CHECK1-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42472// CHECK1-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42473// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42474// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42475// CHECK1-NEXT:    [[I4:%.*]] = alloca i32, align 42476// CHECK1-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 82477// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82478// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82479// CHECK1-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 82480// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82481// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82482// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82483// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82484// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 82485// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 82486// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 82487// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 82488// CHECK1-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 82489// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 42490// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 42491// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 42492// CHECK1-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 42493// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42494// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 02495// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12496// CHECK1-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 12497// CHECK1-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 42498// CHECK1-NEXT:    store i32 0, ptr [[I]], align 42499// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42500// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]2501// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2502// CHECK1:       omp.precond.then:2503// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42504// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42505// CHECK1-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 42506// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42507// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42508// CHECK1-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82509// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 42510// 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)2511// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42512// CHECK1-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42513// CHECK1-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]2514// CHECK1-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2515// CHECK1:       cond.true:2516// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42517// CHECK1-NEXT:    br label [[COND_END:%.*]]2518// CHECK1:       cond.false:2519// CHECK1-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42520// CHECK1-NEXT:    br label [[COND_END]]2521// CHECK1:       cond.end:2522// CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]2523// CHECK1-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42524// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42525// CHECK1-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 42526// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2527// CHECK1:       omp.inner.for.cond:2528// CHECK1-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP49:![0-9]+]]2529// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP49]]2530// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]2531// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2532// CHECK1:       omp.inner.for.body:2533// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP49]]2534// CHECK1-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i642535// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP49]]2536// CHECK1-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i642537// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP49]]2538// CHECK1-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP49]]2539// CHECK1-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 8, !llvm.access.group [[ACC_GRP49]]2540// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l328.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]]), !llvm.access.group [[ACC_GRP49]]2541// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2542// CHECK1:       omp.inner.for.inc:2543// CHECK1-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP49]]2544// CHECK1-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP49]]2545// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]2546// CHECK1-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP49]]2547// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP50:![0-9]+]]2548// CHECK1:       omp.inner.for.end:2549// CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2550// CHECK1:       omp.loop.exit:2551// CHECK1-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82552// CHECK1-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 42553// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])2554// CHECK1-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 42555// CHECK1-NEXT:    [[TMP30:%.*]] = icmp ne i32 [[TMP29]], 02556// CHECK1-NEXT:    br i1 [[TMP30]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]2557// CHECK1:       .omp.final.then:2558// CHECK1-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42559// CHECK1-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP31]], 02560// CHECK1-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 12561// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 12562// CHECK1-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]2563// CHECK1-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 42564// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]2565// CHECK1:       .omp.final.done:2566// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2567// CHECK1:       omp.precond.end:2568// CHECK1-NEXT:    ret void2569//2570//2571// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l328.omp_outlined.omp_outlined2572// 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]] {2573// CHECK1-NEXT:  entry:2574// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 82575// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 82576// CHECK1-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 82577// CHECK1-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 82578// CHECK1-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 82579// CHECK1-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 82580// CHECK1-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 82581// CHECK1-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 82582// CHECK1-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 82583// CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42584// CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 42585// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42586// CHECK1-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 42587// CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 42588// CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42589// CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42590// CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42591// CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42592// CHECK1-NEXT:    [[I5:%.*]] = alloca i32, align 42593// CHECK1-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_6:%.*]], align 82594// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 82595// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 82596// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 82597// CHECK1-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 82598// CHECK1-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 82599// CHECK1-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 82600// CHECK1-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 82601// CHECK1-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 82602// CHECK1-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 82603// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 82604// CHECK1-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 82605// CHECK1-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 82606// CHECK1-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 82607// CHECK1-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42608// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 42609// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42610// CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02611// CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12612// CHECK1-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 12613// CHECK1-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 42614// CHECK1-NEXT:    store i32 0, ptr [[I]], align 42615// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42616// CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2617// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2618// CHECK1:       omp.precond.then:2619// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42620// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42621// CHECK1-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 42622// CHECK1-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 82623// CHECK1-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i322624// CHECK1-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 82625// CHECK1-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i322626// CHECK1-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 42627// CHECK1-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 42628// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42629// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42630// CHECK1-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 42631// CHECK1-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42632// CHECK1-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42633// CHECK1-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82634// CHECK1-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 42635// CHECK1-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])2636// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]2637// CHECK1:       omp.dispatch.cond:2638// CHECK1-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82639// CHECK1-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 42640// 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]])2641// CHECK1-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 02642// CHECK1-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]2643// CHECK1:       omp.dispatch.body:2644// CHECK1-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42645// CHECK1-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 42646// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2647// CHECK1:       omp.inner.for.cond:2648// CHECK1-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP52:![0-9]+]]2649// CHECK1-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP52]]2650// CHECK1-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]2651// CHECK1-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2652// CHECK1:       omp.inner.for.body:2653// CHECK1-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP52]]2654// CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 12655// CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2656// CHECK1-NEXT:    store i32 [[ADD]], ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP52]]2657// CHECK1-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP52]]2658// CHECK1-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP52]]2659// CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP23]] to i642660// CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP22]], i64 [[IDXPROM]]2661// CHECK1-NEXT:    [[TMP24:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP52]]2662// CHECK1-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP52]]2663// CHECK1-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP52]]2664// CHECK1-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP26]] to i642665// CHECK1-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP25]], i64 [[IDXPROM7]]2666// CHECK1-NEXT:    [[TMP27:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP52]]2667// CHECK1-NEXT:    [[ADD9:%.*]] = fadd double [[TMP24]], [[TMP27]]2668// CHECK1-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP52]]2669// CHECK1-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP52]]2670// CHECK1-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP29]] to i642671// CHECK1-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP28]], i64 [[IDXPROM10]]2672// CHECK1-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP52]]2673// CHECK1-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 02674// CHECK1-NEXT:    store ptr [[TMP1]], ptr [[TMP30]], align 8, !llvm.access.group [[ACC_GRP52]]2675// CHECK1-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 12676// CHECK1-NEXT:    store ptr [[I5]], ptr [[TMP31]], align 8, !llvm.access.group [[ACC_GRP52]]2677// CHECK1-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 22678// CHECK1-NEXT:    store ptr [[TMP2]], ptr [[TMP32]], align 8, !llvm.access.group [[ACC_GRP52]]2679// CHECK1-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 32680// CHECK1-NEXT:    store ptr [[TMP3]], ptr [[TMP33]], align 8, !llvm.access.group [[ACC_GRP52]]2681// CHECK1-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE5_clEv"(ptr noundef nonnull align 8 dereferenceable(32) [[REF_TMP]]), !llvm.access.group [[ACC_GRP52]]2682// CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2683// CHECK1:       omp.body.continue:2684// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2685// CHECK1:       omp.inner.for.inc:2686// CHECK1-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP52]]2687// CHECK1-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP34]], 12688// CHECK1-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP52]]2689// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP53:![0-9]+]]2690// CHECK1:       omp.inner.for.end:2691// CHECK1-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]2692// CHECK1:       omp.dispatch.inc:2693// CHECK1-NEXT:    br label [[OMP_DISPATCH_COND]]2694// CHECK1:       omp.dispatch.end:2695// CHECK1-NEXT:    [[TMP35:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 82696// CHECK1-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 42697// CHECK1-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP36]])2698// CHECK1-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 42699// CHECK1-NEXT:    [[TMP38:%.*]] = icmp ne i32 [[TMP37]], 02700// CHECK1-NEXT:    br i1 [[TMP38]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]2701// CHECK1:       .omp.final.then:2702// CHECK1-NEXT:    [[TMP39:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42703// CHECK1-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP39]], 02704// CHECK1-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 12705// CHECK1-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 12706// CHECK1-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]2707// CHECK1-NEXT:    store i32 [[ADD16]], ptr [[I5]], align 42708// CHECK1-NEXT:    br label [[DOTOMP_FINAL_DONE]]2709// CHECK1:       .omp.final.done:2710// CHECK1-NEXT:    br label [[OMP_PRECOND_END]]2711// CHECK1:       omp.precond.end:2712// CHECK1-NEXT:    ret void2713//2714//2715// CHECK3-LABEL: define {{[^@]+}}@main2716// CHECK3-SAME: () #[[ATTR0:[0-9]+]] {2717// CHECK3-NEXT:  entry:2718// CHECK3-NEXT:    [[RETVAL:%.*]] = alloca i32, align 42719// CHECK3-NEXT:    [[A:%.*]] = alloca ptr, align 42720// CHECK3-NEXT:    [[B:%.*]] = alloca ptr, align 42721// CHECK3-NEXT:    [[C:%.*]] = alloca ptr, align 42722// CHECK3-NEXT:    [[N:%.*]] = alloca i32, align 42723// CHECK3-NEXT:    [[CH:%.*]] = alloca i32, align 42724// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 42725// CHECK3-NEXT:    store i32 0, ptr [[RETVAL]], align 42726// CHECK3-NEXT:    store i32 10000, ptr [[N]], align 42727// CHECK3-NEXT:    store i32 100, ptr [[CH]], align 42728// CHECK3-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 02729// CHECK3-NEXT:    store ptr [[N]], ptr [[TMP0]], align 42730// CHECK3-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 12731// CHECK3-NEXT:    store ptr [[A]], ptr [[TMP1]], align 42732// CHECK3-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 22733// CHECK3-NEXT:    store ptr [[B]], ptr [[TMP2]], align 42734// CHECK3-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 32735// CHECK3-NEXT:    store ptr [[C]], ptr [[TMP3]], align 42736// CHECK3-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 42737// CHECK3-NEXT:    store ptr [[CH]], ptr [[TMP4]], align 42738// CHECK3-NEXT:    call void @"_ZZ4mainENK3$_0clEv"(ptr noundef nonnull align 4 dereferenceable(20) [[REF_TMP]])2739// CHECK3-NEXT:    ret i32 02740//2741//2742// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l1162743// CHECK3-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2:[0-9]+]] {2744// CHECK3-NEXT:  entry:2745// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 42746// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 42747// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 42748// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 42749// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 42750// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 42751// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 42752// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 42753// 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_l116.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])2754// CHECK3-NEXT:    ret void2755//2756//2757// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l116.omp_outlined2758// 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]] {2759// CHECK3-NEXT:  entry:2760// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42761// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42762// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 42763// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 42764// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 42765// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 42766// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42767// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 42768// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42769// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42770// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 42771// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 42772// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 42773// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42774// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42775// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 42776// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42777// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42778// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 42779// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 42780// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 42781// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 42782// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 42783// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 42784// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 42785// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 42786// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42787// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42788// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42789// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02790// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12791// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12792// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42793// CHECK3-NEXT:    store i32 0, ptr [[I]], align 42794// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42795// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2796// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2797// CHECK3:       omp.precond.then:2798// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 42799// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42800// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 42801// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42802// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42803// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42804// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 42805// 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)2806// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42807// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42808// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]2809// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2810// CHECK3:       cond.true:2811// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42812// CHECK3-NEXT:    br label [[COND_END:%.*]]2813// CHECK3:       cond.false:2814// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 42815// CHECK3-NEXT:    br label [[COND_END]]2816// CHECK3:       cond.end:2817// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]2818// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 42819// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 42820// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 42821// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2822// CHECK3:       omp.inner.for.cond:2823// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP11:![0-9]+]]2824// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP11]]2825// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]2826// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2827// CHECK3:       omp.inner.for.body:2828// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP11]]2829// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP11]]2830// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l116.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP11]]2831// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2832// CHECK3:       omp.inner.for.inc:2833// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP11]]2834// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP11]]2835// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]2836// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP11]]2837// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP12:![0-9]+]]2838// CHECK3:       omp.inner.for.end:2839// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2840// CHECK3:       omp.loop.exit:2841// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42842// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 42843// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])2844// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 42845// CHECK3-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 02846// CHECK3-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]2847// CHECK3:       .omp.final.then:2848// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42849// CHECK3-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 02850// CHECK3-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 12851// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 12852// CHECK3-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]2853// CHECK3-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 42854// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]2855// CHECK3:       .omp.final.done:2856// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]2857// CHECK3:       omp.precond.end:2858// CHECK3-NEXT:    ret void2859//2860//2861// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l116.omp_outlined.omp_outlined2862// 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]] {2863// CHECK3-NEXT:  entry:2864// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 42865// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 42866// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 42867// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 42868// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 42869// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 42870// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 42871// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 42872// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 42873// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 42874// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42875// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42876// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 42877// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 42878// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 42879// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 42880// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 42881// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 42882// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_0:%.*]], align 42883// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 42884// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 42885// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 42886// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 42887// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 42888// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 42889// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 42890// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 42891// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 42892// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 42893// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 42894// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 42895// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 42896// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 42897// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42898// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 02899// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 12900// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 12901// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 42902// CHECK3-NEXT:    store i32 0, ptr [[I]], align 42903// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42904// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]2905// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]2906// CHECK3:       omp.precond.then:2907// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 42908// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42909// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 42910// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 42911// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 42912// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 42913// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 42914// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 42915// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 42916// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42917// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 42918// 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)2919// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42920// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42921// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]2922// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]2923// CHECK3:       cond.true:2924// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42925// CHECK3-NEXT:    br label [[COND_END:%.*]]2926// CHECK3:       cond.false:2927// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 42928// CHECK3-NEXT:    br label [[COND_END]]2929// CHECK3:       cond.end:2930// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]2931// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 42932// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 42933// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 42934// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]2935// CHECK3:       omp.inner.for.cond:2936// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP15:![0-9]+]]2937// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP15]]2938// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]2939// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]2940// CHECK3:       omp.inner.for.body:2941// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP15]]2942// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 12943// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]2944// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP15]]2945// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP15]]2946// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP15]]2947// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]2948// CHECK3-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP15]]2949// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP15]]2950// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP15]]2951// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]2952// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP15]]2953// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]2954// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP15]]2955// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP15]]2956// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]2957// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP15]]2958// CHECK3-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 02959// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 4, !llvm.access.group [[ACC_GRP15]]2960// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 12961// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP29]], align 4, !llvm.access.group [[ACC_GRP15]]2962// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 22963// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 4, !llvm.access.group [[ACC_GRP15]]2964// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_0]], ptr [[REF_TMP]], i32 0, i32 32965// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 4, !llvm.access.group [[ACC_GRP15]]2966// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]]), !llvm.access.group [[ACC_GRP15]]2967// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]2968// CHECK3:       omp.body.continue:2969// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]2970// CHECK3:       omp.inner.for.inc:2971// CHECK3-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP15]]2972// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP32]], 12973// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP15]]2974// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP16:![0-9]+]]2975// CHECK3:       omp.inner.for.end:2976// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]2977// CHECK3:       omp.loop.exit:2978// CHECK3-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 42979// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 42980// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])2981// CHECK3-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 42982// CHECK3-NEXT:    [[TMP36:%.*]] = icmp ne i32 [[TMP35]], 02983// CHECK3-NEXT:    br i1 [[TMP36]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]2984// CHECK3:       .omp.final.then:2985// CHECK3-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42986// CHECK3-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP37]], 02987// CHECK3-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 12988// CHECK3-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 12989// CHECK3-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]2990// CHECK3-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 42991// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]2992// CHECK3:       .omp.final.done:2993// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]2994// CHECK3:       omp.precond.end:2995// CHECK3-NEXT:    ret void2996//2997//2998// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l1592999// CHECK3-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {3000// CHECK3-NEXT:  entry:3001// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 43002// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43003// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43004// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43005// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 43006// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43007// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43008// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43009// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l159.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])3010// CHECK3-NEXT:    ret void3011//3012//3013// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l159.omp_outlined3014// 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]] {3015// CHECK3-NEXT:  entry:3016// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43017// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43018// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43019// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43020// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43021// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43022// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43023// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43024// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43025// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43026// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43027// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43028// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43029// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43030// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43031// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43032// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43033// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43034// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43035// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43036// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43037// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43038// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43039// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43040// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43041// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43042// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43043// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43044// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43045// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03046// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13047// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13048// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43049// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43050// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43051// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3052// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3053// CHECK3:       omp.precond.then:3054// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43055// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43056// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 43057// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43058// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43059// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43060// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 43061// 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)3062// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43063// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43064// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]3065// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3066// CHECK3:       cond.true:3067// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43068// CHECK3-NEXT:    br label [[COND_END:%.*]]3069// CHECK3:       cond.false:3070// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43071// CHECK3-NEXT:    br label [[COND_END]]3072// CHECK3:       cond.end:3073// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]3074// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43075// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43076// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 43077// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3078// CHECK3:       omp.inner.for.cond:3079// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP20:![0-9]+]]3080// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP20]]3081// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]3082// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3083// CHECK3:       omp.inner.for.body:3084// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP20]]3085// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP20]]3086// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l159.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP20]]3087// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3088// CHECK3:       omp.inner.for.inc:3089// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP20]]3090// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP20]]3091// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]3092// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP20]]3093// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP21:![0-9]+]]3094// CHECK3:       omp.inner.for.end:3095// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3096// CHECK3:       omp.loop.exit:3097// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43098// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 43099// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])3100// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 43101// CHECK3-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 03102// CHECK3-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]3103// CHECK3:       .omp.final.then:3104// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43105// CHECK3-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 03106// CHECK3-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 13107// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 13108// CHECK3-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]3109// CHECK3-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 43110// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]3111// CHECK3:       .omp.final.done:3112// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3113// CHECK3:       omp.precond.end:3114// CHECK3-NEXT:    ret void3115//3116//3117// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l159.omp_outlined.omp_outlined3118// 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]] {3119// CHECK3-NEXT:  entry:3120// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43121// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43122// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43123// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43124// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43125// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43126// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43127// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43128// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43129// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43130// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43131// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43132// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43133// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43134// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43135// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43136// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43137// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43138// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_1:%.*]], align 43139// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43140// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43141// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43142// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43143// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43144// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43145// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43146// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43147// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43148// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43149// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43150// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43151// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43152// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43153// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43154// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03155// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13156// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13157// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43158// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43159// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43160// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3161// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3162// CHECK3:       omp.precond.then:3163// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43164// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43165// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 43166// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43167// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43168// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 43169// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 43170// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43171// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43172// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43173// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 43174// 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)3175// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43176// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43177// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]3178// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3179// CHECK3:       cond.true:3180// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43181// CHECK3-NEXT:    br label [[COND_END:%.*]]3182// CHECK3:       cond.false:3183// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43184// CHECK3-NEXT:    br label [[COND_END]]3185// CHECK3:       cond.end:3186// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]3187// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43188// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43189// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 43190// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3191// CHECK3:       omp.inner.for.cond:3192// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP23:![0-9]+]]3193// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP23]]3194// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]3195// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3196// CHECK3:       omp.inner.for.body:3197// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP23]]3198// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 13199// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3200// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP23]]3201// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP23]]3202// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP23]]3203// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]3204// CHECK3-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP23]]3205// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP23]]3206// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP23]]3207// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]3208// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP23]]3209// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]3210// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP23]]3211// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP23]]3212// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]3213// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP23]]3214// CHECK3-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 03215// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 4, !llvm.access.group [[ACC_GRP23]]3216// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 13217// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP29]], align 4, !llvm.access.group [[ACC_GRP23]]3218// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 23219// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 4, !llvm.access.group [[ACC_GRP23]]3220// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_1]], ptr [[REF_TMP]], i32 0, i32 33221// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 4, !llvm.access.group [[ACC_GRP23]]3222// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE0_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]]), !llvm.access.group [[ACC_GRP23]]3223// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3224// CHECK3:       omp.body.continue:3225// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3226// CHECK3:       omp.inner.for.inc:3227// CHECK3-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP23]]3228// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP32]], 13229// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP23]]3230// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP24:![0-9]+]]3231// CHECK3:       omp.inner.for.end:3232// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3233// CHECK3:       omp.loop.exit:3234// CHECK3-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43235// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 43236// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])3237// CHECK3-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 43238// CHECK3-NEXT:    [[TMP36:%.*]] = icmp ne i32 [[TMP35]], 03239// CHECK3-NEXT:    br i1 [[TMP36]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]3240// CHECK3:       .omp.final.then:3241// CHECK3-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43242// CHECK3-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP37]], 03243// CHECK3-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 13244// CHECK3-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 13245// CHECK3-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]3246// CHECK3-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 43247// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]3248// CHECK3:       .omp.final.done:3249// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3250// CHECK3:       omp.precond.end:3251// CHECK3-NEXT:    ret void3252//3253//3254// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2013255// CHECK3-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {3256// CHECK3-NEXT:  entry:3257// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 43258// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 43259// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43260// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43261// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43262// CHECK3-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 43263// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 43264// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43265// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43266// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43267// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l201.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])3268// CHECK3-NEXT:    ret void3269//3270//3271// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l201.omp_outlined3272// 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]] {3273// CHECK3-NEXT:  entry:3274// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43275// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43276// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 43277// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43278// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43279// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43280// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43281// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43282// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43283// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43284// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43285// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43286// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43287// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43288// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43289// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43290// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43291// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43292// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43293// CHECK3-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 43294// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43295// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43296// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43297// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43298// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 43299// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 43300// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 43301// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 43302// CHECK3-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 43303// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 43304// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 43305// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43306// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 03307// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13308// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13309// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43310// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43311// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43312// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]3313// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3314// CHECK3:       omp.precond.then:3315// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43316// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43317// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 43318// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43319// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43320// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 43321// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43322// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 43323// 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]])3324// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43325// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43326// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]3327// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3328// CHECK3:       cond.true:3329// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43330// CHECK3-NEXT:    br label [[COND_END:%.*]]3331// CHECK3:       cond.false:3332// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43333// CHECK3-NEXT:    br label [[COND_END]]3334// CHECK3:       cond.end:3335// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]3336// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43337// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43338// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 43339// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3340// CHECK3:       omp.inner.for.cond:3341// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26:![0-9]+]]3342// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP26]]3343// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 13344// CHECK3-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]3345// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3346// CHECK3:       omp.inner.for.body:3347// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP26]]3348// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP26]]3349// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l201.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]), !llvm.access.group [[ACC_GRP26]]3350// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3351// CHECK3:       omp.inner.for.inc:3352// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26]]3353// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP26]]3354// CHECK3-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]3355// CHECK3-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26]]3356// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP26]]3357// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP26]]3358// CHECK3-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]3359// CHECK3-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP26]]3360// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP26]]3361// CHECK3-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP26]]3362// CHECK3-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]3363// CHECK3-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP26]]3364// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP26]]3365// CHECK3-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP26]]3366// CHECK3-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP27]], [[TMP28]]3367// CHECK3-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]3368// CHECK3:       cond.true10:3369// CHECK3-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP26]]3370// CHECK3-NEXT:    br label [[COND_END12:%.*]]3371// CHECK3:       cond.false11:3372// CHECK3-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP26]]3373// CHECK3-NEXT:    br label [[COND_END12]]3374// CHECK3:       cond.end12:3375// CHECK3-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP29]], [[COND_TRUE10]] ], [ [[TMP30]], [[COND_FALSE11]] ]3376// CHECK3-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP26]]3377// CHECK3-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP26]]3378// CHECK3-NEXT:    store i32 [[TMP31]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26]]3379// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP27:![0-9]+]]3380// CHECK3:       omp.inner.for.end:3381// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3382// CHECK3:       omp.loop.exit:3383// CHECK3-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43384// CHECK3-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 43385// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP33]])3386// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 43387// CHECK3-NEXT:    [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 03388// CHECK3-NEXT:    br i1 [[TMP35]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]3389// CHECK3:       .omp.final.then:3390// CHECK3-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43391// CHECK3-NEXT:    [[SUB14:%.*]] = sub nsw i32 [[TMP36]], 03392// CHECK3-NEXT:    [[DIV15:%.*]] = sdiv i32 [[SUB14]], 13393// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV15]], 13394// CHECK3-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL]]3395// CHECK3-NEXT:    store i32 [[ADD16]], ptr [[I3]], align 43396// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]3397// CHECK3:       .omp.final.done:3398// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3399// CHECK3:       omp.precond.end:3400// CHECK3-NEXT:    ret void3401//3402//3403// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l201.omp_outlined.omp_outlined3404// 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]] {3405// CHECK3-NEXT:  entry:3406// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43407// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43408// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43409// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43410// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43411// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43412// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43413// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43414// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43415// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43416// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43417// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43418// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43419// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43420// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43421// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43422// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43423// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43424// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_2:%.*]], align 43425// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43426// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43427// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43428// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43429// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43430// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43431// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43432// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43433// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43434// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43435// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43436// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43437// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43438// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43439// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43440// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03441// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13442// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13443// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43444// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43445// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43446// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3447// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3448// CHECK3:       omp.precond.then:3449// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43450// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43451// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 43452// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43453// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43454// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 43455// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 43456// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43457// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43458// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43459// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 43460// 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)3461// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43462// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43463// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]3464// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3465// CHECK3:       cond.true:3466// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43467// CHECK3-NEXT:    br label [[COND_END:%.*]]3468// CHECK3:       cond.false:3469// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43470// CHECK3-NEXT:    br label [[COND_END]]3471// CHECK3:       cond.end:3472// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]3473// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43474// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43475// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 43476// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3477// CHECK3:       omp.inner.for.cond:3478// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29:![0-9]+]]3479// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP29]]3480// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]3481// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3482// CHECK3:       omp.inner.for.body:3483// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29]]3484// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 13485// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3486// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP29]]3487// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP29]]3488// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP29]]3489// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]3490// CHECK3-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP29]]3491// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP29]]3492// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP29]]3493// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]3494// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP29]]3495// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]3496// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP29]]3497// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP29]]3498// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]3499// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP29]]3500// CHECK3-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 03501// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 4, !llvm.access.group [[ACC_GRP29]]3502// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 13503// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP29]], align 4, !llvm.access.group [[ACC_GRP29]]3504// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 23505// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 4, !llvm.access.group [[ACC_GRP29]]3506// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_2]], ptr [[REF_TMP]], i32 0, i32 33507// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 4, !llvm.access.group [[ACC_GRP29]]3508// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE1_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]]), !llvm.access.group [[ACC_GRP29]]3509// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3510// CHECK3:       omp.body.continue:3511// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3512// CHECK3:       omp.inner.for.inc:3513// CHECK3-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29]]3514// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP32]], 13515// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29]]3516// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP30:![0-9]+]]3517// CHECK3:       omp.inner.for.end:3518// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3519// CHECK3:       omp.loop.exit:3520// CHECK3-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43521// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 43522// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])3523// CHECK3-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 43524// CHECK3-NEXT:    [[TMP36:%.*]] = icmp ne i32 [[TMP35]], 03525// CHECK3-NEXT:    br i1 [[TMP36]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]3526// CHECK3:       .omp.final.then:3527// CHECK3-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43528// CHECK3-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP37]], 03529// CHECK3-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 13530// CHECK3-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 13531// CHECK3-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]3532// CHECK3-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 43533// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]3534// CHECK3:       .omp.final.done:3535// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3536// CHECK3:       omp.precond.end:3537// CHECK3-NEXT:    ret void3538//3539//3540// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2343541// CHECK3-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {3542// CHECK3-NEXT:  entry:3543// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 43544// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43545// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43546// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43547// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 43548// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43549// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43550// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43551// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l234.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])3552// CHECK3-NEXT:    ret void3553//3554//3555// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l234.omp_outlined3556// 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]] {3557// CHECK3-NEXT:  entry:3558// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43559// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43560// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43561// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43562// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43563// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43564// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43565// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43566// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43567// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43568// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43569// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43570// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43571// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43572// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43573// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43574// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43575// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43576// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43577// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43578// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43579// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43580// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43581// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43582// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43583// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43584// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43585// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43586// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43587// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03588// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13589// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13590// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43591// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43592// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43593// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3594// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3595// CHECK3:       omp.precond.then:3596// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43597// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43598// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 43599// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43600// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43601// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43602// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 43603// 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)3604// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43605// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43606// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]3607// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3608// CHECK3:       cond.true:3609// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43610// CHECK3-NEXT:    br label [[COND_END:%.*]]3611// CHECK3:       cond.false:3612// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43613// CHECK3-NEXT:    br label [[COND_END]]3614// CHECK3:       cond.end:3615// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]3616// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43617// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43618// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 43619// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3620// CHECK3:       omp.inner.for.cond:3621// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP32:![0-9]+]]3622// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP32]]3623// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]3624// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3625// CHECK3:       omp.inner.for.body:3626// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP32]]3627// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP32]]3628// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l234.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP32]]3629// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3630// CHECK3:       omp.inner.for.inc:3631// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP32]]3632// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP32]]3633// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]3634// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP32]]3635// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP33:![0-9]+]]3636// CHECK3:       omp.inner.for.end:3637// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3638// CHECK3:       omp.loop.exit:3639// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43640// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 43641// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])3642// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 43643// CHECK3-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 03644// CHECK3-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]3645// CHECK3:       .omp.final.then:3646// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43647// CHECK3-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 03648// CHECK3-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 13649// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 13650// CHECK3-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]3651// CHECK3-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 43652// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]3653// CHECK3:       .omp.final.done:3654// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3655// CHECK3:       omp.precond.end:3656// CHECK3-NEXT:    ret void3657//3658//3659// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l234.omp_outlined.omp_outlined3660// 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]] {3661// CHECK3-NEXT:  entry:3662// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43663// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43664// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43665// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43666// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43667// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43668// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43669// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43670// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43671// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43672// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43673// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43674// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43675// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43676// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43677// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43678// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43679// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 43680// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_3:%.*]], align 43681// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43682// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43683// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43684// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43685// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43686// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43687// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43688// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43689// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43690// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43691// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43692// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43693// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43694// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 43695// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43696// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03697// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13698// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 13699// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 43700// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43701// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43702// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3703// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3704// CHECK3:       omp.precond.then:3705// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43706// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43707// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 43708// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43709// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43710// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 43711// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 43712// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43713// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43714// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43715// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 43716// 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)3717// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43718// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43719// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]3720// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3721// CHECK3:       cond.true:3722// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43723// CHECK3-NEXT:    br label [[COND_END:%.*]]3724// CHECK3:       cond.false:3725// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43726// CHECK3-NEXT:    br label [[COND_END]]3727// CHECK3:       cond.end:3728// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]3729// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 43730// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 43731// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 43732// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3733// CHECK3:       omp.inner.for.cond:3734// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP35:![0-9]+]]3735// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP35]]3736// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]3737// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3738// CHECK3:       omp.inner.for.body:3739// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP35]]3740// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 13741// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]3742// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP35]]3743// CHECK3-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP35]]3744// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP35]]3745// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]3746// CHECK3-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP35]]3747// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP35]]3748// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP35]]3749// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]3750// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP35]]3751// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]3752// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP35]]3753// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP35]]3754// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]3755// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP35]]3756// CHECK3-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 03757// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP28]], align 4, !llvm.access.group [[ACC_GRP35]]3758// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 13759// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP29]], align 4, !llvm.access.group [[ACC_GRP35]]3760// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 23761// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP30]], align 4, !llvm.access.group [[ACC_GRP35]]3762// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_3]], ptr [[REF_TMP]], i32 0, i32 33763// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP31]], align 4, !llvm.access.group [[ACC_GRP35]]3764// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE2_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]]), !llvm.access.group [[ACC_GRP35]]3765// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]3766// CHECK3:       omp.body.continue:3767// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3768// CHECK3:       omp.inner.for.inc:3769// CHECK3-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP35]]3770// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP32]], 13771// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP35]]3772// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP36:![0-9]+]]3773// CHECK3:       omp.inner.for.end:3774// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3775// CHECK3:       omp.loop.exit:3776// CHECK3-NEXT:    [[TMP33:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43777// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[TMP33]], align 43778// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP34]])3779// CHECK3-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 43780// CHECK3-NEXT:    [[TMP36:%.*]] = icmp ne i32 [[TMP35]], 03781// CHECK3-NEXT:    br i1 [[TMP36]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]3782// CHECK3:       .omp.final.then:3783// CHECK3-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 43784// CHECK3-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP37]], 03785// CHECK3-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 13786// CHECK3-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 13787// CHECK3-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]3788// CHECK3-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 43789// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]3790// CHECK3:       .omp.final.done: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_l2663797// CHECK3-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {3798// CHECK3-NEXT:  entry:3799// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 43800// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 43801// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43802// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43803// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43804// CHECK3-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 43805// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 43806// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43807// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43808// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43809// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l266.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])3810// CHECK3-NEXT:    ret void3811//3812//3813// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l266.omp_outlined3814// 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]] {3815// CHECK3-NEXT:  entry:3816// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43817// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43818// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 43819// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43820// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43821// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43822// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43823// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 43824// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43825// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43826// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43827// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 43828// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43829// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 43830// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 43831// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43832// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43833// CHECK3-NEXT:    [[I4:%.*]] = alloca i32, align 43834// CHECK3-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 43835// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43836// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43837// CHECK3-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 43838// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43839// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43840// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43841// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43842// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 43843// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 43844// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 43845// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 43846// CHECK3-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 43847// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 43848// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 43849// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 43850// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 43851// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43852// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 03853// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13854// CHECK3-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 13855// CHECK3-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 43856// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43857// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43858// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]3859// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3860// CHECK3:       omp.precond.then:3861// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 43862// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 43863// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 43864// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43865// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43866// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43867// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 43868// 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)3869// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43870// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 43871// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]3872// CHECK3-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3873// CHECK3:       cond.true:3874// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 43875// CHECK3-NEXT:    br label [[COND_END:%.*]]3876// CHECK3:       cond.false:3877// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 43878// CHECK3-NEXT:    br label [[COND_END]]3879// CHECK3:       cond.end:3880// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]3881// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 43882// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 43883// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 43884// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]3885// CHECK3:       omp.inner.for.cond:3886// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP38:![0-9]+]]3887// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP38]]3888// CHECK3-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]3889// CHECK3-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]3890// CHECK3:       omp.inner.for.body:3891// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP38]]3892// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP38]]3893// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP38]]3894// CHECK3-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP38]]3895// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP38]]3896// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l266.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]]), !llvm.access.group [[ACC_GRP38]]3897// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]3898// CHECK3:       omp.inner.for.inc:3899// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP38]]3900// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP38]]3901// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]3902// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP38]]3903// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP39:![0-9]+]]3904// CHECK3:       omp.inner.for.end:3905// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]3906// CHECK3:       omp.loop.exit:3907// CHECK3-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43908// CHECK3-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 43909// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])3910// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 43911// CHECK3-NEXT:    [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 03912// CHECK3-NEXT:    br i1 [[TMP28]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]3913// CHECK3:       .omp.final.then:3914// CHECK3-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43915// CHECK3-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP29]], 03916// CHECK3-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 13917// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 13918// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]3919// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 43920// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]3921// CHECK3:       .omp.final.done:3922// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]3923// CHECK3:       omp.precond.end:3924// CHECK3-NEXT:    ret void3925//3926//3927// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l266.omp_outlined.omp_outlined3928// 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]] {3929// CHECK3-NEXT:  entry:3930// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 43931// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 43932// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 43933// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 43934// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 43935// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 43936// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 43937// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 43938// CHECK3-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 43939// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 43940// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 43941// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 43942// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 43943// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 43944// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 43945// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 43946// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 43947// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 43948// CHECK3-NEXT:    [[I4:%.*]] = alloca i32, align 43949// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_4:%.*]], align 43950// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 43951// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 43952// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 43953// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 43954// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 43955// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 43956// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 43957// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 43958// CHECK3-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 43959// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 43960// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 43961// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 43962// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 43963// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 43964// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 43965// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43966// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 03967// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 13968// CHECK3-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 13969// CHECK3-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 43970// CHECK3-NEXT:    store i32 0, ptr [[I]], align 43971// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 43972// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]3973// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]3974// CHECK3:       omp.precond.then:3975// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 43976// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 43977// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 43978// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 43979// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43980// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 43981// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 43982// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 43983// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 43984// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 43985// CHECK3-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 43986// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 43987// 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]])3988// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]3989// CHECK3:       omp.dispatch.cond:3990// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43991// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43992// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP13]], [[TMP14]]3993// CHECK3-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]3994// CHECK3:       cond.true:3995// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 43996// CHECK3-NEXT:    br label [[COND_END:%.*]]3997// CHECK3:       cond.false:3998// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 43999// CHECK3-NEXT:    br label [[COND_END]]4000// CHECK3:       cond.end:4001// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP15]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]4002// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 44003// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44004// CHECK3-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 44005// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 44006// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44007// CHECK3-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]4008// CHECK3-NEXT:    br i1 [[CMP6]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]4009// CHECK3:       omp.dispatch.body:4010// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4011// CHECK3:       omp.inner.for.cond:4012// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP41:![0-9]+]]4013// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP41]]4014// CHECK3-NEXT:    [[CMP7:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]4015// CHECK3-NEXT:    br i1 [[CMP7]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4016// CHECK3:       omp.inner.for.body:4017// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP41]]4018// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 14019// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4020// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP41]]4021// CHECK3-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP41]]4022// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP41]]4023// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]4024// CHECK3-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP41]]4025// CHECK3-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP41]]4026// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP41]]4027// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]4028// CHECK3-NEXT:    [[TMP28:%.*]] = load double, ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP41]]4029// CHECK3-NEXT:    [[ADD9:%.*]] = fadd double [[TMP25]], [[TMP28]]4030// CHECK3-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP41]]4031// CHECK3-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP41]]4032// CHECK3-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds double, ptr [[TMP29]], i32 [[TMP30]]4033// CHECK3-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX10]], align 4, !llvm.access.group [[ACC_GRP41]]4034// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 04035// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP31]], align 4, !llvm.access.group [[ACC_GRP41]]4036// CHECK3-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 14037// CHECK3-NEXT:    store ptr [[I4]], ptr [[TMP32]], align 4, !llvm.access.group [[ACC_GRP41]]4038// CHECK3-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 24039// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP33]], align 4, !llvm.access.group [[ACC_GRP41]]4040// CHECK3-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_4]], ptr [[REF_TMP]], i32 0, i32 34041// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP34]], align 4, !llvm.access.group [[ACC_GRP41]]4042// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE3_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]]), !llvm.access.group [[ACC_GRP41]]4043// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4044// CHECK3:       omp.body.continue:4045// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4046// CHECK3:       omp.inner.for.inc:4047// CHECK3-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP41]]4048// CHECK3-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP35]], 14049// CHECK3-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP41]]4050// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP42:![0-9]+]]4051// CHECK3:       omp.inner.for.end:4052// CHECK3-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]4053// CHECK3:       omp.dispatch.inc:4054// CHECK3-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44055// CHECK3-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 44056// CHECK3-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP36]], [[TMP37]]4057// CHECK3-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_LB]], align 44058// CHECK3-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44059// CHECK3-NEXT:    [[TMP39:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 44060// CHECK3-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP38]], [[TMP39]]4061// CHECK3-NEXT:    store i32 [[ADD13]], ptr [[DOTOMP_UB]], align 44062// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND]]4063// CHECK3:       omp.dispatch.end:4064// CHECK3-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44065// CHECK3-NEXT:    [[TMP41:%.*]] = load i32, ptr [[TMP40]], align 44066// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP41]])4067// CHECK3-NEXT:    [[TMP42:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 44068// CHECK3-NEXT:    [[TMP43:%.*]] = icmp ne i32 [[TMP42]], 04069// CHECK3-NEXT:    br i1 [[TMP43]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]4070// CHECK3:       .omp.final.then:4071// CHECK3-NEXT:    [[TMP44:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44072// CHECK3-NEXT:    [[SUB14:%.*]] = sub nsw i32 [[TMP44]], 04073// CHECK3-NEXT:    [[DIV15:%.*]] = sdiv i32 [[SUB14]], 14074// CHECK3-NEXT:    [[MUL16:%.*]] = mul nsw i32 [[DIV15]], 14075// CHECK3-NEXT:    [[ADD17:%.*]] = add nsw i32 0, [[MUL16]]4076// CHECK3-NEXT:    store i32 [[ADD17]], ptr [[I4]], align 44077// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]4078// CHECK3:       .omp.final.done:4079// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]4080// CHECK3:       omp.precond.end:4081// CHECK3-NEXT:    ret void4082//4083//4084// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l2994085// CHECK3-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {4086// CHECK3-NEXT:  entry:4087// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 44088// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 44089// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 44090// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 44091// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 44092// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 44093// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 44094// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 44095// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l299.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])4096// CHECK3-NEXT:    ret void4097//4098//4099// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l299.omp_outlined4100// 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]] {4101// CHECK3-NEXT:  entry:4102// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 44103// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 44104// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 44105// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 44106// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 44107// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 44108// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44109// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 44110// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 44111// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 44112// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 44113// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 44114// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 44115// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44116// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44117// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 44118// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 44119// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 44120// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 44121// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 44122// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 44123// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 44124// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 44125// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 44126// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 44127// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 44128// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 44129// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 44130// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44131// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 04132// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 14133// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 14134// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 44135// CHECK3-NEXT:    store i32 0, ptr [[I]], align 44136// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44137// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]4138// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]4139// CHECK3:       omp.precond.then:4140// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 44141// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44142// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 44143// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44144// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44145// CHECK3-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44146// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 44147// 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)4148// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44149// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44150// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]4151// CHECK3-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4152// CHECK3:       cond.true:4153// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44154// CHECK3-NEXT:    br label [[COND_END:%.*]]4155// CHECK3:       cond.false:4156// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44157// CHECK3-NEXT:    br label [[COND_END]]4158// CHECK3:       cond.end:4159// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]4160// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 44161// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44162// CHECK3-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 44163// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4164// CHECK3:       omp.inner.for.cond:4165// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP44:![0-9]+]]4166// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP44]]4167// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]4168// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4169// CHECK3:       omp.inner.for.body:4170// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP44]]4171// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP44]]4172// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l299.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP44]]4173// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4174// CHECK3:       omp.inner.for.inc:4175// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP44]]4176// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP44]]4177// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]4178// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP44]]4179// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP45:![0-9]+]]4180// CHECK3:       omp.inner.for.end:4181// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4182// CHECK3:       omp.loop.exit:4183// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44184// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 44185// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])4186// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 44187// CHECK3-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 04188// CHECK3-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]4189// CHECK3:       .omp.final.then:4190// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44191// CHECK3-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 04192// CHECK3-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 14193// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 14194// CHECK3-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]4195// CHECK3-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 44196// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]4197// CHECK3:       .omp.final.done:4198// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]4199// CHECK3:       omp.precond.end:4200// CHECK3-NEXT:    ret void4201//4202//4203// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l299.omp_outlined.omp_outlined4204// 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]] {4205// CHECK3-NEXT:  entry:4206// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 44207// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 44208// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 44209// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 44210// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 44211// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 44212// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 44213// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 44214// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44215// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 44216// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 44217// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 44218// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 44219// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 44220// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 44221// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44222// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44223// CHECK3-NEXT:    [[I3:%.*]] = alloca i32, align 44224// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_5:%.*]], align 44225// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 44226// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 44227// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 44228// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 44229// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 44230// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 44231// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 44232// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 44233// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 44234// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 44235// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 44236// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 44237// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 44238// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 44239// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44240// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 04241// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 14242// CHECK3-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 14243// CHECK3-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 44244// CHECK3-NEXT:    store i32 0, ptr [[I]], align 44245// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44246// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]4247// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]4248// CHECK3:       omp.precond.then:4249// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 44250// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44251// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 44252// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 44253// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 44254// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 44255// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 44256// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44257// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44258// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44259// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44260// CHECK3-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44261// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 44262// CHECK3-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)4263// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]4264// CHECK3:       omp.dispatch.cond:4265// CHECK3-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44266// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 44267// 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]])4268// CHECK3-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 04269// CHECK3-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]4270// CHECK3:       omp.dispatch.body:4271// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44272// CHECK3-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 44273// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4274// CHECK3:       omp.inner.for.cond:4275// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP47:![0-9]+]]4276// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP47]]4277// CHECK3-NEXT:    [[CMP4:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]4278// CHECK3-NEXT:    br i1 [[CMP4]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4279// CHECK3:       omp.inner.for.body:4280// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP47]]4281// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 14282// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4283// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP47]]4284// CHECK3-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP47]]4285// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP47]]4286// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP21]], i32 [[TMP22]]4287// CHECK3-NEXT:    [[TMP23:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP47]]4288// CHECK3-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP47]]4289// CHECK3-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP47]]4290// CHECK3-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds double, ptr [[TMP24]], i32 [[TMP25]]4291// CHECK3-NEXT:    [[TMP26:%.*]] = load double, ptr [[ARRAYIDX5]], align 4, !llvm.access.group [[ACC_GRP47]]4292// CHECK3-NEXT:    [[ADD6:%.*]] = fadd double [[TMP23]], [[TMP26]]4293// CHECK3-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP47]]4294// CHECK3-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP47]]4295// CHECK3-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds double, ptr [[TMP27]], i32 [[TMP28]]4296// CHECK3-NEXT:    store double [[ADD6]], ptr [[ARRAYIDX7]], align 4, !llvm.access.group [[ACC_GRP47]]4297// CHECK3-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 04298// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP29]], align 4, !llvm.access.group [[ACC_GRP47]]4299// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 14300// CHECK3-NEXT:    store ptr [[I3]], ptr [[TMP30]], align 4, !llvm.access.group [[ACC_GRP47]]4301// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 24302// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP31]], align 4, !llvm.access.group [[ACC_GRP47]]4303// CHECK3-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_5]], ptr [[REF_TMP]], i32 0, i32 34304// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP32]], align 4, !llvm.access.group [[ACC_GRP47]]4305// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE4_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]]), !llvm.access.group [[ACC_GRP47]]4306// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4307// CHECK3:       omp.body.continue:4308// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4309// CHECK3:       omp.inner.for.inc:4310// CHECK3-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP47]]4311// CHECK3-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP33]], 14312// CHECK3-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP47]]4313// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP48:![0-9]+]]4314// CHECK3:       omp.inner.for.end:4315// CHECK3-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]4316// CHECK3:       omp.dispatch.inc:4317// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND]]4318// CHECK3:       omp.dispatch.end:4319// CHECK3-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44320// CHECK3-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 44321// CHECK3-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP35]])4322// CHECK3-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 44323// CHECK3-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 04324// CHECK3-NEXT:    br i1 [[TMP37]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]4325// CHECK3:       .omp.final.then:4326// CHECK3-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44327// CHECK3-NEXT:    [[SUB9:%.*]] = sub nsw i32 [[TMP38]], 04328// CHECK3-NEXT:    [[DIV10:%.*]] = sdiv i32 [[SUB9]], 14329// CHECK3-NEXT:    [[MUL11:%.*]] = mul nsw i32 [[DIV10]], 14330// CHECK3-NEXT:    [[ADD12:%.*]] = add nsw i32 0, [[MUL11]]4331// CHECK3-NEXT:    store i32 [[ADD12]], ptr [[I3]], align 44332// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]4333// CHECK3:       .omp.final.done:4334// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]4335// CHECK3:       omp.precond.end:4336// CHECK3-NEXT:    ret void4337//4338//4339// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l3284340// CHECK3-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR2]] {4341// CHECK3-NEXT:  entry:4342// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 44343// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 44344// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 44345// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 44346// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 44347// CHECK3-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 44348// CHECK3-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 44349// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 44350// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 44351// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 44352// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l328.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])4353// CHECK3-NEXT:    ret void4354//4355//4356// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l328.omp_outlined4357// 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]] {4358// CHECK3-NEXT:  entry:4359// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 44360// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 44361// CHECK3-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 44362// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 44363// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 44364// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 44365// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 44366// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 44367// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44368// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 44369// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 44370// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 44371// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 44372// CHECK3-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 44373// CHECK3-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 44374// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44375// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44376// CHECK3-NEXT:    [[I4:%.*]] = alloca i32, align 44377// CHECK3-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 44378// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 44379// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 44380// CHECK3-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 44381// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 44382// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 44383// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 44384// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 44385// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 44386// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 44387// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 44388// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 44389// CHECK3-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 44390// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 44391// CHECK3-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 44392// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 44393// CHECK3-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 44394// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44395// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 04396// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 14397// CHECK3-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 14398// CHECK3-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 44399// CHECK3-NEXT:    store i32 0, ptr [[I]], align 44400// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44401// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]4402// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]4403// CHECK3:       omp.precond.then:4404// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 44405// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 44406// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 44407// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44408// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44409// CHECK3-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44410// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 44411// 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)4412// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44413// CHECK3-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 44414// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]4415// CHECK3-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]4416// CHECK3:       cond.true:4417// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 44418// CHECK3-NEXT:    br label [[COND_END:%.*]]4419// CHECK3:       cond.false:4420// CHECK3-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 44421// CHECK3-NEXT:    br label [[COND_END]]4422// CHECK3:       cond.end:4423// CHECK3-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]4424// CHECK3-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 44425// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 44426// CHECK3-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 44427// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4428// CHECK3:       omp.inner.for.cond:4429// CHECK3-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP50:![0-9]+]]4430// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP50]]4431// CHECK3-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]4432// CHECK3-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4433// CHECK3:       omp.inner.for.body:4434// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP50]]4435// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP50]]4436// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP50]]4437// CHECK3-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP50]]4438// CHECK3-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP50]]4439// CHECK3-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l328.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]]), !llvm.access.group [[ACC_GRP50]]4440// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4441// CHECK3:       omp.inner.for.inc:4442// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP50]]4443// CHECK3-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP50]]4444// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]4445// CHECK3-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP50]]4446// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP51:![0-9]+]]4447// CHECK3:       omp.inner.for.end:4448// CHECK3-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]4449// CHECK3:       omp.loop.exit:4450// CHECK3-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44451// CHECK3-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 44452// CHECK3-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])4453// CHECK3-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 44454// CHECK3-NEXT:    [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 04455// CHECK3-NEXT:    br i1 [[TMP28]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]4456// CHECK3:       .omp.final.then:4457// CHECK3-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44458// CHECK3-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP29]], 04459// CHECK3-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 14460// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 14461// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]4462// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 44463// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]4464// CHECK3:       .omp.final.done:4465// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]4466// CHECK3:       omp.precond.end:4467// CHECK3-NEXT:    ret void4468//4469//4470// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l328.omp_outlined.omp_outlined4471// 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]] {4472// CHECK3-NEXT:  entry:4473// CHECK3-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 44474// CHECK3-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 44475// CHECK3-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 44476// CHECK3-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 44477// CHECK3-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 44478// CHECK3-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 44479// CHECK3-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 44480// CHECK3-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 44481// CHECK3-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 44482// CHECK3-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 44483// CHECK3-NEXT:    [[TMP:%.*]] = alloca i32, align 44484// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 44485// CHECK3-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 44486// CHECK3-NEXT:    [[I:%.*]] = alloca i32, align 44487// CHECK3-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 44488// CHECK3-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 44489// CHECK3-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 44490// CHECK3-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 44491// CHECK3-NEXT:    [[I4:%.*]] = alloca i32, align 44492// CHECK3-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON_6:%.*]], align 44493// CHECK3-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 44494// CHECK3-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 44495// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 44496// CHECK3-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 44497// CHECK3-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 44498// CHECK3-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 44499// CHECK3-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 44500// CHECK3-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 44501// CHECK3-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 44502// CHECK3-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 44503// CHECK3-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 44504// CHECK3-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 44505// CHECK3-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 44506// CHECK3-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 44507// CHECK3-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 44508// CHECK3-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44509// CHECK3-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 04510// CHECK3-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 14511// CHECK3-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 14512// CHECK3-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 44513// CHECK3-NEXT:    store i32 0, ptr [[I]], align 44514// CHECK3-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44515// CHECK3-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]4516// CHECK3-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]4517// CHECK3:       omp.precond.then:4518// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 44519// CHECK3-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 44520// CHECK3-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 44521// CHECK3-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 44522// CHECK3-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 44523// CHECK3-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 44524// CHECK3-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 44525// CHECK3-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 44526// CHECK3-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 44527// CHECK3-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 44528// CHECK3-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44529// CHECK3-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 44530// CHECK3-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44531// CHECK3-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 44532// CHECK3-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])4533// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]4534// CHECK3:       omp.dispatch.cond:4535// CHECK3-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44536// CHECK3-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 44537// 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]])4538// CHECK3-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 04539// CHECK3-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]4540// CHECK3:       omp.dispatch.body:4541// CHECK3-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 44542// CHECK3-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 44543// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]4544// CHECK3:       omp.inner.for.cond:4545// CHECK3-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP53:![0-9]+]]4546// CHECK3-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP53]]4547// CHECK3-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]4548// CHECK3-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]4549// CHECK3:       omp.inner.for.body:4550// CHECK3-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP53]]4551// CHECK3-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 14552// CHECK3-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]4553// CHECK3-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP53]]4554// CHECK3-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP53]]4555// CHECK3-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP53]]4556// CHECK3-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP22]], i32 [[TMP23]]4557// CHECK3-NEXT:    [[TMP24:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP53]]4558// CHECK3-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP53]]4559// CHECK3-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP53]]4560// CHECK3-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP25]], i32 [[TMP26]]4561// CHECK3-NEXT:    [[TMP27:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP53]]4562// CHECK3-NEXT:    [[ADD7:%.*]] = fadd double [[TMP24]], [[TMP27]]4563// CHECK3-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP53]]4564// CHECK3-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP53]]4565// CHECK3-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP28]], i32 [[TMP29]]4566// CHECK3-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP53]]4567// CHECK3-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 04568// CHECK3-NEXT:    store ptr [[TMP1]], ptr [[TMP30]], align 4, !llvm.access.group [[ACC_GRP53]]4569// CHECK3-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 14570// CHECK3-NEXT:    store ptr [[I4]], ptr [[TMP31]], align 4, !llvm.access.group [[ACC_GRP53]]4571// CHECK3-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 24572// CHECK3-NEXT:    store ptr [[TMP2]], ptr [[TMP32]], align 4, !llvm.access.group [[ACC_GRP53]]4573// CHECK3-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[CLASS_ANON_6]], ptr [[REF_TMP]], i32 0, i32 34574// CHECK3-NEXT:    store ptr [[TMP3]], ptr [[TMP33]], align 4, !llvm.access.group [[ACC_GRP53]]4575// CHECK3-NEXT:    call void @"_ZZZ4mainENK3$_0clEvENKUlvE5_clEv"(ptr noundef nonnull align 4 dereferenceable(16) [[REF_TMP]]), !llvm.access.group [[ACC_GRP53]]4576// CHECK3-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]4577// CHECK3:       omp.body.continue:4578// CHECK3-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]4579// CHECK3:       omp.inner.for.inc:4580// CHECK3-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP53]]4581// CHECK3-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP34]], 14582// CHECK3-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP53]]4583// CHECK3-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP54:![0-9]+]]4584// CHECK3:       omp.inner.for.end:4585// CHECK3-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]4586// CHECK3:       omp.dispatch.inc:4587// CHECK3-NEXT:    br label [[OMP_DISPATCH_COND]]4588// CHECK3:       omp.dispatch.end:4589// CHECK3-NEXT:    [[TMP35:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 44590// CHECK3-NEXT:    [[TMP36:%.*]] = load i32, ptr [[TMP35]], align 44591// CHECK3-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP36]])4592// CHECK3-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 44593// CHECK3-NEXT:    [[TMP38:%.*]] = icmp ne i32 [[TMP37]], 04594// CHECK3-NEXT:    br i1 [[TMP38]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]4595// CHECK3:       .omp.final.then:4596// CHECK3-NEXT:    [[TMP39:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44597// CHECK3-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP39]], 04598// CHECK3-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 14599// CHECK3-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 14600// CHECK3-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]4601// CHECK3-NEXT:    store i32 [[ADD13]], ptr [[I4]], align 44602// CHECK3-NEXT:    br label [[DOTOMP_FINAL_DONE]]4603// CHECK3:       .omp.final.done:4604// CHECK3-NEXT:    br label [[OMP_PRECOND_END]]4605// CHECK3:       omp.precond.end:4606// CHECK3-NEXT:    ret void4607//4608//4609// CHECK5-LABEL: define {{[^@]+}}@main4610// CHECK5-SAME: () #[[ATTR0:[0-9]+]] {4611// CHECK5-NEXT:  entry:4612// CHECK5-NEXT:    [[RETVAL:%.*]] = alloca i32, align 44613// CHECK5-NEXT:    [[A:%.*]] = alloca ptr, align 84614// CHECK5-NEXT:    [[B:%.*]] = alloca ptr, align 84615// CHECK5-NEXT:    [[C:%.*]] = alloca ptr, align 84616// CHECK5-NEXT:    [[N:%.*]] = alloca i32, align 44617// CHECK5-NEXT:    [[CH:%.*]] = alloca i32, align 44618// CHECK5-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 84619// CHECK5-NEXT:    store i32 0, ptr [[RETVAL]], align 44620// CHECK5-NEXT:    store i32 10000, ptr [[N]], align 44621// CHECK5-NEXT:    store i32 100, ptr [[CH]], align 44622// CHECK5-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 04623// CHECK5-NEXT:    store ptr [[N]], ptr [[TMP0]], align 84624// CHECK5-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 14625// CHECK5-NEXT:    store ptr [[A]], ptr [[TMP1]], align 84626// CHECK5-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 24627// CHECK5-NEXT:    store ptr [[B]], ptr [[TMP2]], align 84628// CHECK5-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 34629// CHECK5-NEXT:    store ptr [[C]], ptr [[TMP3]], align 84630// CHECK5-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 44631// CHECK5-NEXT:    store ptr [[CH]], ptr [[TMP4]], align 84632// CHECK5-NEXT:    call void @"_ZZ4mainENK3$_0clEv"(ptr noundef nonnull align 8 dereferenceable(40) [[REF_TMP]])4633// CHECK5-NEXT:    ret i32 04634//4635//4636// CHECK7-LABEL: define {{[^@]+}}@main4637// CHECK7-SAME: () #[[ATTR0:[0-9]+]] {4638// CHECK7-NEXT:  entry:4639// CHECK7-NEXT:    [[RETVAL:%.*]] = alloca i32, align 44640// CHECK7-NEXT:    [[A:%.*]] = alloca ptr, align 44641// CHECK7-NEXT:    [[B:%.*]] = alloca ptr, align 44642// CHECK7-NEXT:    [[C:%.*]] = alloca ptr, align 44643// CHECK7-NEXT:    [[N:%.*]] = alloca i32, align 44644// CHECK7-NEXT:    [[CH:%.*]] = alloca i32, align 44645// CHECK7-NEXT:    [[REF_TMP:%.*]] = alloca [[CLASS_ANON:%.*]], align 44646// CHECK7-NEXT:    store i32 0, ptr [[RETVAL]], align 44647// CHECK7-NEXT:    store i32 10000, ptr [[N]], align 44648// CHECK7-NEXT:    store i32 100, ptr [[CH]], align 44649// CHECK7-NEXT:    [[TMP0:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 04650// CHECK7-NEXT:    store ptr [[N]], ptr [[TMP0]], align 44651// CHECK7-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 14652// CHECK7-NEXT:    store ptr [[A]], ptr [[TMP1]], align 44653// CHECK7-NEXT:    [[TMP2:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 24654// CHECK7-NEXT:    store ptr [[B]], ptr [[TMP2]], align 44655// CHECK7-NEXT:    [[TMP3:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 34656// CHECK7-NEXT:    store ptr [[C]], ptr [[TMP3]], align 44657// CHECK7-NEXT:    [[TMP4:%.*]] = getelementptr inbounds nuw [[CLASS_ANON]], ptr [[REF_TMP]], i32 0, i32 44658// CHECK7-NEXT:    store ptr [[CH]], ptr [[TMP4]], align 44659// CHECK7-NEXT:    call void @"_ZZ4mainENK3$_0clEv"(ptr noundef nonnull align 4 dereferenceable(20) [[REF_TMP]])4660// CHECK7-NEXT:    ret i32 04661//4662//4663// CHECK9-LABEL: define {{[^@]+}}@main4664// CHECK9-SAME: () #[[ATTR0:[0-9]+]] {4665// CHECK9-NEXT:  entry:4666// CHECK9-NEXT:    [[RETVAL:%.*]] = alloca i32, align 44667// CHECK9-NEXT:    [[A:%.*]] = alloca ptr, align 84668// CHECK9-NEXT:    [[B:%.*]] = alloca ptr, align 84669// CHECK9-NEXT:    [[C:%.*]] = alloca ptr, align 84670// CHECK9-NEXT:    [[N:%.*]] = alloca i32, align 44671// CHECK9-NEXT:    [[CH:%.*]] = alloca i32, align 44672// CHECK9-NEXT:    [[N_CASTED:%.*]] = alloca i64, align 84673// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 84674// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 84675// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 84676// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 44677// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 44678// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 44679// CHECK9-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 84680// CHECK9-NEXT:    [[N_CASTED3:%.*]] = alloca i64, align 84681// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS4:%.*]] = alloca [4 x ptr], align 84682// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS5:%.*]] = alloca [4 x ptr], align 84683// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS6:%.*]] = alloca [4 x ptr], align 84684// CHECK9-NEXT:    [[_TMP7:%.*]] = alloca i32, align 44685// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_8:%.*]] = alloca i32, align 44686// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 44687// CHECK9-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84688// CHECK9-NEXT:    [[CH_CASTED:%.*]] = alloca i64, align 84689// CHECK9-NEXT:    [[N_CASTED17:%.*]] = alloca i64, align 84690// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS18:%.*]] = alloca [5 x ptr], align 84691// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS19:%.*]] = alloca [5 x ptr], align 84692// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS20:%.*]] = alloca [5 x ptr], align 84693// CHECK9-NEXT:    [[_TMP21:%.*]] = alloca i32, align 44694// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 44695// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_23:%.*]] = alloca i32, align 44696// CHECK9-NEXT:    [[KERNEL_ARGS28:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84697// CHECK9-NEXT:    [[N_CASTED31:%.*]] = alloca i64, align 84698// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS32:%.*]] = alloca [4 x ptr], align 84699// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS33:%.*]] = alloca [4 x ptr], align 84700// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS34:%.*]] = alloca [4 x ptr], align 84701// CHECK9-NEXT:    [[_TMP35:%.*]] = alloca i32, align 44702// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_36:%.*]] = alloca i32, align 44703// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_37:%.*]] = alloca i32, align 44704// CHECK9-NEXT:    [[KERNEL_ARGS42:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84705// CHECK9-NEXT:    [[CH_CASTED45:%.*]] = alloca i64, align 84706// CHECK9-NEXT:    [[N_CASTED46:%.*]] = alloca i64, align 84707// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS47:%.*]] = alloca [5 x ptr], align 84708// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS48:%.*]] = alloca [5 x ptr], align 84709// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS49:%.*]] = alloca [5 x ptr], align 84710// CHECK9-NEXT:    [[_TMP50:%.*]] = alloca i32, align 44711// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_51:%.*]] = alloca i32, align 44712// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_52:%.*]] = alloca i32, align 44713// CHECK9-NEXT:    [[KERNEL_ARGS57:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84714// CHECK9-NEXT:    [[N_CASTED60:%.*]] = alloca i64, align 84715// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS61:%.*]] = alloca [4 x ptr], align 84716// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS62:%.*]] = alloca [4 x ptr], align 84717// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS63:%.*]] = alloca [4 x ptr], align 84718// CHECK9-NEXT:    [[_TMP64:%.*]] = alloca i32, align 44719// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_65:%.*]] = alloca i32, align 44720// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_66:%.*]] = alloca i32, align 44721// CHECK9-NEXT:    [[KERNEL_ARGS71:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84722// CHECK9-NEXT:    [[CH_CASTED74:%.*]] = alloca i64, align 84723// CHECK9-NEXT:    [[N_CASTED75:%.*]] = alloca i64, align 84724// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS76:%.*]] = alloca [5 x ptr], align 84725// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS77:%.*]] = alloca [5 x ptr], align 84726// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS78:%.*]] = alloca [5 x ptr], align 84727// CHECK9-NEXT:    [[_TMP79:%.*]] = alloca i32, align 44728// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_80:%.*]] = alloca i32, align 44729// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_81:%.*]] = alloca i32, align 44730// CHECK9-NEXT:    [[KERNEL_ARGS86:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 84731// CHECK9-NEXT:    store i32 0, ptr [[RETVAL]], align 44732// CHECK9-NEXT:    store i32 10000, ptr [[N]], align 44733// CHECK9-NEXT:    store i32 100, ptr [[CH]], align 44734// CHECK9-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 44735// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[N_CASTED]], align 44736// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[N_CASTED]], align 84737// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A]], align 84738// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B]], align 84739// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C]], align 84740// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 04741// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP5]], align 84742// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 04743// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP6]], align 84744// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 04745// CHECK9-NEXT:    store ptr null, ptr [[TMP7]], align 84746// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 14747// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[TMP8]], align 84748// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 14749// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[TMP9]], align 84750// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 14751// CHECK9-NEXT:    store ptr null, ptr [[TMP10]], align 84752// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 24753// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[TMP11]], align 84754// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 24755// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[TMP12]], align 84756// CHECK9-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 24757// CHECK9-NEXT:    store ptr null, ptr [[TMP13]], align 84758// CHECK9-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 34759// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[TMP14]], align 84760// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 34761// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[TMP15]], align 84762// CHECK9-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 34763// CHECK9-NEXT:    store ptr null, ptr [[TMP16]], align 84764// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 04765// CHECK9-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 04766// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 44767// CHECK9-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 44768// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 44769// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 04770// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 14771// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 14772// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 44773// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 44774// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 14775// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i644776// CHECK9-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 04777// CHECK9-NEXT:    store i32 3, ptr [[TMP23]], align 44778// CHECK9-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 14779// CHECK9-NEXT:    store i32 4, ptr [[TMP24]], align 44780// CHECK9-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 24781// CHECK9-NEXT:    store ptr [[TMP17]], ptr [[TMP25]], align 84782// CHECK9-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 34783// CHECK9-NEXT:    store ptr [[TMP18]], ptr [[TMP26]], align 84784// CHECK9-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 44785// CHECK9-NEXT:    store ptr @.offload_sizes, ptr [[TMP27]], align 84786// CHECK9-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 54787// CHECK9-NEXT:    store ptr @.offload_maptypes, ptr [[TMP28]], align 84788// CHECK9-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 64789// CHECK9-NEXT:    store ptr null, ptr [[TMP29]], align 84790// CHECK9-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 74791// CHECK9-NEXT:    store ptr null, ptr [[TMP30]], align 84792// CHECK9-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 84793// CHECK9-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 84794// CHECK9-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 94795// CHECK9-NEXT:    store i64 0, ptr [[TMP32]], align 84796// CHECK9-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 104797// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 44798// CHECK9-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 114799// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 44800// CHECK9-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 124801// CHECK9-NEXT:    store i32 0, ptr [[TMP35]], align 44802// 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_l368.region_id, ptr [[KERNEL_ARGS]])4803// CHECK9-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 04804// CHECK9-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]4805// CHECK9:       omp_offload.failed:4806// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368(i64 [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]) #[[ATTR2:[0-9]+]]4807// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT]]4808// CHECK9:       omp_offload.cont:4809// CHECK9-NEXT:    [[TMP38:%.*]] = load i32, ptr [[N]], align 44810// CHECK9-NEXT:    store i32 [[TMP38]], ptr [[N_CASTED3]], align 44811// CHECK9-NEXT:    [[TMP39:%.*]] = load i64, ptr [[N_CASTED3]], align 84812// CHECK9-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[A]], align 84813// CHECK9-NEXT:    [[TMP41:%.*]] = load ptr, ptr [[B]], align 84814// CHECK9-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[C]], align 84815// CHECK9-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 04816// CHECK9-NEXT:    store i64 [[TMP39]], ptr [[TMP43]], align 84817// CHECK9-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 04818// CHECK9-NEXT:    store i64 [[TMP39]], ptr [[TMP44]], align 84819// CHECK9-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 04820// CHECK9-NEXT:    store ptr null, ptr [[TMP45]], align 84821// CHECK9-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 14822// CHECK9-NEXT:    store ptr [[TMP40]], ptr [[TMP46]], align 84823// CHECK9-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 14824// CHECK9-NEXT:    store ptr [[TMP40]], ptr [[TMP47]], align 84825// CHECK9-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 14826// CHECK9-NEXT:    store ptr null, ptr [[TMP48]], align 84827// CHECK9-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 24828// CHECK9-NEXT:    store ptr [[TMP41]], ptr [[TMP49]], align 84829// CHECK9-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 24830// CHECK9-NEXT:    store ptr [[TMP41]], ptr [[TMP50]], align 84831// CHECK9-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 24832// CHECK9-NEXT:    store ptr null, ptr [[TMP51]], align 84833// CHECK9-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 34834// CHECK9-NEXT:    store ptr [[TMP42]], ptr [[TMP52]], align 84835// CHECK9-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 34836// CHECK9-NEXT:    store ptr [[TMP42]], ptr [[TMP53]], align 84837// CHECK9-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 34838// CHECK9-NEXT:    store ptr null, ptr [[TMP54]], align 84839// CHECK9-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 04840// CHECK9-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 04841// CHECK9-NEXT:    [[TMP57:%.*]] = load i32, ptr [[N]], align 44842// CHECK9-NEXT:    store i32 [[TMP57]], ptr [[DOTCAPTURE_EXPR_8]], align 44843// CHECK9-NEXT:    [[TMP58:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_8]], align 44844// CHECK9-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP58]], 04845// CHECK9-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 14846// CHECK9-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[DIV11]], 14847// CHECK9-NEXT:    store i32 [[SUB12]], ptr [[DOTCAPTURE_EXPR_9]], align 44848// CHECK9-NEXT:    [[TMP59:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 44849// CHECK9-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP59]], 14850// CHECK9-NEXT:    [[TMP60:%.*]] = zext i32 [[ADD13]] to i644851// CHECK9-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 04852// CHECK9-NEXT:    store i32 3, ptr [[TMP61]], align 44853// CHECK9-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 14854// CHECK9-NEXT:    store i32 4, ptr [[TMP62]], align 44855// CHECK9-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 24856// CHECK9-NEXT:    store ptr [[TMP55]], ptr [[TMP63]], align 84857// CHECK9-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 34858// CHECK9-NEXT:    store ptr [[TMP56]], ptr [[TMP64]], align 84859// CHECK9-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 44860// CHECK9-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP65]], align 84861// CHECK9-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 54862// CHECK9-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP66]], align 84863// CHECK9-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 64864// CHECK9-NEXT:    store ptr null, ptr [[TMP67]], align 84865// CHECK9-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 74866// CHECK9-NEXT:    store ptr null, ptr [[TMP68]], align 84867// CHECK9-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 84868// CHECK9-NEXT:    store i64 [[TMP60]], ptr [[TMP69]], align 84869// CHECK9-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 94870// CHECK9-NEXT:    store i64 0, ptr [[TMP70]], align 84871// CHECK9-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 104872// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP71]], align 44873// CHECK9-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 114874// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP72]], align 44875// CHECK9-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 124876// CHECK9-NEXT:    store i32 0, ptr [[TMP73]], align 44877// 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_l407.region_id, ptr [[KERNEL_ARGS14]])4878// CHECK9-NEXT:    [[TMP75:%.*]] = icmp ne i32 [[TMP74]], 04879// CHECK9-NEXT:    br i1 [[TMP75]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]4880// CHECK9:       omp_offload.failed15:4881// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407(i64 [[TMP39]], ptr [[TMP40]], ptr [[TMP41]], ptr [[TMP42]]) #[[ATTR2]]4882// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT16]]4883// CHECK9:       omp_offload.cont16:4884// CHECK9-NEXT:    [[TMP76:%.*]] = load i32, ptr [[CH]], align 44885// CHECK9-NEXT:    store i32 [[TMP76]], ptr [[CH_CASTED]], align 44886// CHECK9-NEXT:    [[TMP77:%.*]] = load i64, ptr [[CH_CASTED]], align 84887// CHECK9-NEXT:    [[TMP78:%.*]] = load i32, ptr [[N]], align 44888// CHECK9-NEXT:    store i32 [[TMP78]], ptr [[N_CASTED17]], align 44889// CHECK9-NEXT:    [[TMP79:%.*]] = load i64, ptr [[N_CASTED17]], align 84890// CHECK9-NEXT:    [[TMP80:%.*]] = load ptr, ptr [[A]], align 84891// CHECK9-NEXT:    [[TMP81:%.*]] = load ptr, ptr [[B]], align 84892// CHECK9-NEXT:    [[TMP82:%.*]] = load ptr, ptr [[C]], align 84893// CHECK9-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 04894// CHECK9-NEXT:    store i64 [[TMP77]], ptr [[TMP83]], align 84895// CHECK9-NEXT:    [[TMP84:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 04896// CHECK9-NEXT:    store i64 [[TMP77]], ptr [[TMP84]], align 84897// CHECK9-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 04898// CHECK9-NEXT:    store ptr null, ptr [[TMP85]], align 84899// CHECK9-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 14900// CHECK9-NEXT:    store i64 [[TMP79]], ptr [[TMP86]], align 84901// CHECK9-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 14902// CHECK9-NEXT:    store i64 [[TMP79]], ptr [[TMP87]], align 84903// CHECK9-NEXT:    [[TMP88:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 14904// CHECK9-NEXT:    store ptr null, ptr [[TMP88]], align 84905// CHECK9-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 24906// CHECK9-NEXT:    store ptr [[TMP80]], ptr [[TMP89]], align 84907// CHECK9-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 24908// CHECK9-NEXT:    store ptr [[TMP80]], ptr [[TMP90]], align 84909// CHECK9-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 24910// CHECK9-NEXT:    store ptr null, ptr [[TMP91]], align 84911// CHECK9-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 34912// CHECK9-NEXT:    store ptr [[TMP81]], ptr [[TMP92]], align 84913// CHECK9-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 34914// CHECK9-NEXT:    store ptr [[TMP81]], ptr [[TMP93]], align 84915// CHECK9-NEXT:    [[TMP94:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 34916// CHECK9-NEXT:    store ptr null, ptr [[TMP94]], align 84917// CHECK9-NEXT:    [[TMP95:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 44918// CHECK9-NEXT:    store ptr [[TMP82]], ptr [[TMP95]], align 84919// CHECK9-NEXT:    [[TMP96:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 44920// CHECK9-NEXT:    store ptr [[TMP82]], ptr [[TMP96]], align 84921// CHECK9-NEXT:    [[TMP97:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 44922// CHECK9-NEXT:    store ptr null, ptr [[TMP97]], align 84923// CHECK9-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 04924// CHECK9-NEXT:    [[TMP99:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 04925// CHECK9-NEXT:    [[TMP100:%.*]] = load i32, ptr [[N]], align 44926// CHECK9-NEXT:    store i32 [[TMP100]], ptr [[DOTCAPTURE_EXPR_22]], align 44927// CHECK9-NEXT:    [[TMP101:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 44928// CHECK9-NEXT:    [[SUB24:%.*]] = sub nsw i32 [[TMP101]], 04929// CHECK9-NEXT:    [[DIV25:%.*]] = sdiv i32 [[SUB24]], 14930// CHECK9-NEXT:    [[SUB26:%.*]] = sub nsw i32 [[DIV25]], 14931// CHECK9-NEXT:    store i32 [[SUB26]], ptr [[DOTCAPTURE_EXPR_23]], align 44932// CHECK9-NEXT:    [[TMP102:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_23]], align 44933// CHECK9-NEXT:    [[ADD27:%.*]] = add nsw i32 [[TMP102]], 14934// CHECK9-NEXT:    [[TMP103:%.*]] = zext i32 [[ADD27]] to i644935// CHECK9-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 04936// CHECK9-NEXT:    store i32 3, ptr [[TMP104]], align 44937// CHECK9-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 14938// CHECK9-NEXT:    store i32 5, ptr [[TMP105]], align 44939// CHECK9-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 24940// CHECK9-NEXT:    store ptr [[TMP98]], ptr [[TMP106]], align 84941// CHECK9-NEXT:    [[TMP107:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 34942// CHECK9-NEXT:    store ptr [[TMP99]], ptr [[TMP107]], align 84943// CHECK9-NEXT:    [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 44944// CHECK9-NEXT:    store ptr @.offload_sizes.3, ptr [[TMP108]], align 84945// CHECK9-NEXT:    [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 54946// CHECK9-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP109]], align 84947// CHECK9-NEXT:    [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 64948// CHECK9-NEXT:    store ptr null, ptr [[TMP110]], align 84949// CHECK9-NEXT:    [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 74950// CHECK9-NEXT:    store ptr null, ptr [[TMP111]], align 84951// CHECK9-NEXT:    [[TMP112:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 84952// CHECK9-NEXT:    store i64 [[TMP103]], ptr [[TMP112]], align 84953// CHECK9-NEXT:    [[TMP113:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 94954// CHECK9-NEXT:    store i64 0, ptr [[TMP113]], align 84955// CHECK9-NEXT:    [[TMP114:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 104956// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP114]], align 44957// CHECK9-NEXT:    [[TMP115:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 114958// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP115]], align 44959// CHECK9-NEXT:    [[TMP116:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 124960// CHECK9-NEXT:    store i32 0, ptr [[TMP116]], align 44961// 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_l446.region_id, ptr [[KERNEL_ARGS28]])4962// CHECK9-NEXT:    [[TMP118:%.*]] = icmp ne i32 [[TMP117]], 04963// CHECK9-NEXT:    br i1 [[TMP118]], label [[OMP_OFFLOAD_FAILED29:%.*]], label [[OMP_OFFLOAD_CONT30:%.*]]4964// CHECK9:       omp_offload.failed29:4965// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446(i64 [[TMP77]], i64 [[TMP79]], ptr [[TMP80]], ptr [[TMP81]], ptr [[TMP82]]) #[[ATTR2]]4966// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT30]]4967// CHECK9:       omp_offload.cont30:4968// CHECK9-NEXT:    [[TMP119:%.*]] = load i32, ptr [[N]], align 44969// CHECK9-NEXT:    store i32 [[TMP119]], ptr [[N_CASTED31]], align 44970// CHECK9-NEXT:    [[TMP120:%.*]] = load i64, ptr [[N_CASTED31]], align 84971// CHECK9-NEXT:    [[TMP121:%.*]] = load ptr, ptr [[A]], align 84972// CHECK9-NEXT:    [[TMP122:%.*]] = load ptr, ptr [[B]], align 84973// CHECK9-NEXT:    [[TMP123:%.*]] = load ptr, ptr [[C]], align 84974// CHECK9-NEXT:    [[TMP124:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 04975// CHECK9-NEXT:    store i64 [[TMP120]], ptr [[TMP124]], align 84976// CHECK9-NEXT:    [[TMP125:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 04977// CHECK9-NEXT:    store i64 [[TMP120]], ptr [[TMP125]], align 84978// CHECK9-NEXT:    [[TMP126:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 04979// CHECK9-NEXT:    store ptr null, ptr [[TMP126]], align 84980// CHECK9-NEXT:    [[TMP127:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 14981// CHECK9-NEXT:    store ptr [[TMP121]], ptr [[TMP127]], align 84982// CHECK9-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 14983// CHECK9-NEXT:    store ptr [[TMP121]], ptr [[TMP128]], align 84984// CHECK9-NEXT:    [[TMP129:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 14985// CHECK9-NEXT:    store ptr null, ptr [[TMP129]], align 84986// CHECK9-NEXT:    [[TMP130:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 24987// CHECK9-NEXT:    store ptr [[TMP122]], ptr [[TMP130]], align 84988// CHECK9-NEXT:    [[TMP131:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 24989// CHECK9-NEXT:    store ptr [[TMP122]], ptr [[TMP131]], align 84990// CHECK9-NEXT:    [[TMP132:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 24991// CHECK9-NEXT:    store ptr null, ptr [[TMP132]], align 84992// CHECK9-NEXT:    [[TMP133:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 34993// CHECK9-NEXT:    store ptr [[TMP123]], ptr [[TMP133]], align 84994// CHECK9-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 34995// CHECK9-NEXT:    store ptr [[TMP123]], ptr [[TMP134]], align 84996// CHECK9-NEXT:    [[TMP135:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 34997// CHECK9-NEXT:    store ptr null, ptr [[TMP135]], align 84998// CHECK9-NEXT:    [[TMP136:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 04999// CHECK9-NEXT:    [[TMP137:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 05000// CHECK9-NEXT:    [[TMP138:%.*]] = load i32, ptr [[N]], align 45001// CHECK9-NEXT:    store i32 [[TMP138]], ptr [[DOTCAPTURE_EXPR_36]], align 45002// CHECK9-NEXT:    [[TMP139:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_36]], align 45003// CHECK9-NEXT:    [[SUB38:%.*]] = sub nsw i32 [[TMP139]], 05004// CHECK9-NEXT:    [[DIV39:%.*]] = sdiv i32 [[SUB38]], 15005// CHECK9-NEXT:    [[SUB40:%.*]] = sub nsw i32 [[DIV39]], 15006// CHECK9-NEXT:    store i32 [[SUB40]], ptr [[DOTCAPTURE_EXPR_37]], align 45007// CHECK9-NEXT:    [[TMP140:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_37]], align 45008// CHECK9-NEXT:    [[ADD41:%.*]] = add nsw i32 [[TMP140]], 15009// CHECK9-NEXT:    [[TMP141:%.*]] = zext i32 [[ADD41]] to i645010// CHECK9-NEXT:    [[TMP142:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 05011// CHECK9-NEXT:    store i32 3, ptr [[TMP142]], align 45012// CHECK9-NEXT:    [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 15013// CHECK9-NEXT:    store i32 4, ptr [[TMP143]], align 45014// CHECK9-NEXT:    [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 25015// CHECK9-NEXT:    store ptr [[TMP136]], ptr [[TMP144]], align 85016// CHECK9-NEXT:    [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 35017// CHECK9-NEXT:    store ptr [[TMP137]], ptr [[TMP145]], align 85018// CHECK9-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 45019// CHECK9-NEXT:    store ptr @.offload_sizes.5, ptr [[TMP146]], align 85020// CHECK9-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 55021// CHECK9-NEXT:    store ptr @.offload_maptypes.6, ptr [[TMP147]], align 85022// CHECK9-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 65023// CHECK9-NEXT:    store ptr null, ptr [[TMP148]], align 85024// CHECK9-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 75025// CHECK9-NEXT:    store ptr null, ptr [[TMP149]], align 85026// CHECK9-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 85027// CHECK9-NEXT:    store i64 [[TMP141]], ptr [[TMP150]], align 85028// CHECK9-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 95029// CHECK9-NEXT:    store i64 0, ptr [[TMP151]], align 85030// CHECK9-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 105031// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP152]], align 45032// CHECK9-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 115033// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP153]], align 45034// CHECK9-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 125035// CHECK9-NEXT:    store i32 0, ptr [[TMP154]], align 45036// 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_l477.region_id, ptr [[KERNEL_ARGS42]])5037// CHECK9-NEXT:    [[TMP156:%.*]] = icmp ne i32 [[TMP155]], 05038// CHECK9-NEXT:    br i1 [[TMP156]], label [[OMP_OFFLOAD_FAILED43:%.*]], label [[OMP_OFFLOAD_CONT44:%.*]]5039// CHECK9:       omp_offload.failed43:5040// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477(i64 [[TMP120]], ptr [[TMP121]], ptr [[TMP122]], ptr [[TMP123]]) #[[ATTR2]]5041// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT44]]5042// CHECK9:       omp_offload.cont44:5043// CHECK9-NEXT:    [[TMP157:%.*]] = load i32, ptr [[CH]], align 45044// CHECK9-NEXT:    store i32 [[TMP157]], ptr [[CH_CASTED45]], align 45045// CHECK9-NEXT:    [[TMP158:%.*]] = load i64, ptr [[CH_CASTED45]], align 85046// CHECK9-NEXT:    [[TMP159:%.*]] = load i32, ptr [[N]], align 45047// CHECK9-NEXT:    store i32 [[TMP159]], ptr [[N_CASTED46]], align 45048// CHECK9-NEXT:    [[TMP160:%.*]] = load i64, ptr [[N_CASTED46]], align 85049// CHECK9-NEXT:    [[TMP161:%.*]] = load ptr, ptr [[A]], align 85050// CHECK9-NEXT:    [[TMP162:%.*]] = load ptr, ptr [[B]], align 85051// CHECK9-NEXT:    [[TMP163:%.*]] = load ptr, ptr [[C]], align 85052// CHECK9-NEXT:    [[TMP164:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 05053// CHECK9-NEXT:    store i64 [[TMP158]], ptr [[TMP164]], align 85054// CHECK9-NEXT:    [[TMP165:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 05055// CHECK9-NEXT:    store i64 [[TMP158]], ptr [[TMP165]], align 85056// CHECK9-NEXT:    [[TMP166:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 05057// CHECK9-NEXT:    store ptr null, ptr [[TMP166]], align 85058// CHECK9-NEXT:    [[TMP167:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 15059// CHECK9-NEXT:    store i64 [[TMP160]], ptr [[TMP167]], align 85060// CHECK9-NEXT:    [[TMP168:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 15061// CHECK9-NEXT:    store i64 [[TMP160]], ptr [[TMP168]], align 85062// CHECK9-NEXT:    [[TMP169:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 15063// CHECK9-NEXT:    store ptr null, ptr [[TMP169]], align 85064// CHECK9-NEXT:    [[TMP170:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 25065// CHECK9-NEXT:    store ptr [[TMP161]], ptr [[TMP170]], align 85066// CHECK9-NEXT:    [[TMP171:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 25067// CHECK9-NEXT:    store ptr [[TMP161]], ptr [[TMP171]], align 85068// CHECK9-NEXT:    [[TMP172:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 25069// CHECK9-NEXT:    store ptr null, ptr [[TMP172]], align 85070// CHECK9-NEXT:    [[TMP173:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 35071// CHECK9-NEXT:    store ptr [[TMP162]], ptr [[TMP173]], align 85072// CHECK9-NEXT:    [[TMP174:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 35073// CHECK9-NEXT:    store ptr [[TMP162]], ptr [[TMP174]], align 85074// CHECK9-NEXT:    [[TMP175:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 35075// CHECK9-NEXT:    store ptr null, ptr [[TMP175]], align 85076// CHECK9-NEXT:    [[TMP176:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 45077// CHECK9-NEXT:    store ptr [[TMP163]], ptr [[TMP176]], align 85078// CHECK9-NEXT:    [[TMP177:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 45079// CHECK9-NEXT:    store ptr [[TMP163]], ptr [[TMP177]], align 85080// CHECK9-NEXT:    [[TMP178:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 45081// CHECK9-NEXT:    store ptr null, ptr [[TMP178]], align 85082// CHECK9-NEXT:    [[TMP179:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 05083// CHECK9-NEXT:    [[TMP180:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 05084// CHECK9-NEXT:    [[TMP181:%.*]] = load i32, ptr [[N]], align 45085// CHECK9-NEXT:    store i32 [[TMP181]], ptr [[DOTCAPTURE_EXPR_51]], align 45086// CHECK9-NEXT:    [[TMP182:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_51]], align 45087// CHECK9-NEXT:    [[SUB53:%.*]] = sub nsw i32 [[TMP182]], 05088// CHECK9-NEXT:    [[DIV54:%.*]] = sdiv i32 [[SUB53]], 15089// CHECK9-NEXT:    [[SUB55:%.*]] = sub nsw i32 [[DIV54]], 15090// CHECK9-NEXT:    store i32 [[SUB55]], ptr [[DOTCAPTURE_EXPR_52]], align 45091// CHECK9-NEXT:    [[TMP183:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_52]], align 45092// CHECK9-NEXT:    [[ADD56:%.*]] = add nsw i32 [[TMP183]], 15093// CHECK9-NEXT:    [[TMP184:%.*]] = zext i32 [[ADD56]] to i645094// CHECK9-NEXT:    [[TMP185:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 05095// CHECK9-NEXT:    store i32 3, ptr [[TMP185]], align 45096// CHECK9-NEXT:    [[TMP186:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 15097// CHECK9-NEXT:    store i32 5, ptr [[TMP186]], align 45098// CHECK9-NEXT:    [[TMP187:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 25099// CHECK9-NEXT:    store ptr [[TMP179]], ptr [[TMP187]], align 85100// CHECK9-NEXT:    [[TMP188:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 35101// CHECK9-NEXT:    store ptr [[TMP180]], ptr [[TMP188]], align 85102// CHECK9-NEXT:    [[TMP189:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 45103// CHECK9-NEXT:    store ptr @.offload_sizes.7, ptr [[TMP189]], align 85104// CHECK9-NEXT:    [[TMP190:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 55105// CHECK9-NEXT:    store ptr @.offload_maptypes.8, ptr [[TMP190]], align 85106// CHECK9-NEXT:    [[TMP191:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 65107// CHECK9-NEXT:    store ptr null, ptr [[TMP191]], align 85108// CHECK9-NEXT:    [[TMP192:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 75109// CHECK9-NEXT:    store ptr null, ptr [[TMP192]], align 85110// CHECK9-NEXT:    [[TMP193:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 85111// CHECK9-NEXT:    store i64 [[TMP184]], ptr [[TMP193]], align 85112// CHECK9-NEXT:    [[TMP194:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 95113// CHECK9-NEXT:    store i64 0, ptr [[TMP194]], align 85114// CHECK9-NEXT:    [[TMP195:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 105115// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP195]], align 45116// CHECK9-NEXT:    [[TMP196:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 115117// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP196]], align 45118// CHECK9-NEXT:    [[TMP197:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 125119// CHECK9-NEXT:    store i32 0, ptr [[TMP197]], align 45120// 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_l505.region_id, ptr [[KERNEL_ARGS57]])5121// CHECK9-NEXT:    [[TMP199:%.*]] = icmp ne i32 [[TMP198]], 05122// CHECK9-NEXT:    br i1 [[TMP199]], label [[OMP_OFFLOAD_FAILED58:%.*]], label [[OMP_OFFLOAD_CONT59:%.*]]5123// CHECK9:       omp_offload.failed58:5124// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505(i64 [[TMP158]], i64 [[TMP160]], ptr [[TMP161]], ptr [[TMP162]], ptr [[TMP163]]) #[[ATTR2]]5125// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT59]]5126// CHECK9:       omp_offload.cont59:5127// CHECK9-NEXT:    [[TMP200:%.*]] = load i32, ptr [[N]], align 45128// CHECK9-NEXT:    store i32 [[TMP200]], ptr [[N_CASTED60]], align 45129// CHECK9-NEXT:    [[TMP201:%.*]] = load i64, ptr [[N_CASTED60]], align 85130// CHECK9-NEXT:    [[TMP202:%.*]] = load ptr, ptr [[A]], align 85131// CHECK9-NEXT:    [[TMP203:%.*]] = load ptr, ptr [[B]], align 85132// CHECK9-NEXT:    [[TMP204:%.*]] = load ptr, ptr [[C]], align 85133// CHECK9-NEXT:    [[TMP205:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 05134// CHECK9-NEXT:    store i64 [[TMP201]], ptr [[TMP205]], align 85135// CHECK9-NEXT:    [[TMP206:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 05136// CHECK9-NEXT:    store i64 [[TMP201]], ptr [[TMP206]], align 85137// CHECK9-NEXT:    [[TMP207:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 05138// CHECK9-NEXT:    store ptr null, ptr [[TMP207]], align 85139// CHECK9-NEXT:    [[TMP208:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 15140// CHECK9-NEXT:    store ptr [[TMP202]], ptr [[TMP208]], align 85141// CHECK9-NEXT:    [[TMP209:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 15142// CHECK9-NEXT:    store ptr [[TMP202]], ptr [[TMP209]], align 85143// CHECK9-NEXT:    [[TMP210:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 15144// CHECK9-NEXT:    store ptr null, ptr [[TMP210]], align 85145// CHECK9-NEXT:    [[TMP211:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 25146// CHECK9-NEXT:    store ptr [[TMP203]], ptr [[TMP211]], align 85147// CHECK9-NEXT:    [[TMP212:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 25148// CHECK9-NEXT:    store ptr [[TMP203]], ptr [[TMP212]], align 85149// CHECK9-NEXT:    [[TMP213:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 25150// CHECK9-NEXT:    store ptr null, ptr [[TMP213]], align 85151// CHECK9-NEXT:    [[TMP214:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 35152// CHECK9-NEXT:    store ptr [[TMP204]], ptr [[TMP214]], align 85153// CHECK9-NEXT:    [[TMP215:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 35154// CHECK9-NEXT:    store ptr [[TMP204]], ptr [[TMP215]], align 85155// CHECK9-NEXT:    [[TMP216:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 35156// CHECK9-NEXT:    store ptr null, ptr [[TMP216]], align 85157// CHECK9-NEXT:    [[TMP217:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 05158// CHECK9-NEXT:    [[TMP218:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 05159// CHECK9-NEXT:    [[TMP219:%.*]] = load i32, ptr [[N]], align 45160// CHECK9-NEXT:    store i32 [[TMP219]], ptr [[DOTCAPTURE_EXPR_65]], align 45161// CHECK9-NEXT:    [[TMP220:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_65]], align 45162// CHECK9-NEXT:    [[SUB67:%.*]] = sub nsw i32 [[TMP220]], 05163// CHECK9-NEXT:    [[DIV68:%.*]] = sdiv i32 [[SUB67]], 15164// CHECK9-NEXT:    [[SUB69:%.*]] = sub nsw i32 [[DIV68]], 15165// CHECK9-NEXT:    store i32 [[SUB69]], ptr [[DOTCAPTURE_EXPR_66]], align 45166// CHECK9-NEXT:    [[TMP221:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_66]], align 45167// CHECK9-NEXT:    [[ADD70:%.*]] = add nsw i32 [[TMP221]], 15168// CHECK9-NEXT:    [[TMP222:%.*]] = zext i32 [[ADD70]] to i645169// CHECK9-NEXT:    [[TMP223:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 05170// CHECK9-NEXT:    store i32 3, ptr [[TMP223]], align 45171// CHECK9-NEXT:    [[TMP224:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 15172// CHECK9-NEXT:    store i32 4, ptr [[TMP224]], align 45173// CHECK9-NEXT:    [[TMP225:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 25174// CHECK9-NEXT:    store ptr [[TMP217]], ptr [[TMP225]], align 85175// CHECK9-NEXT:    [[TMP226:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 35176// CHECK9-NEXT:    store ptr [[TMP218]], ptr [[TMP226]], align 85177// CHECK9-NEXT:    [[TMP227:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 45178// CHECK9-NEXT:    store ptr @.offload_sizes.9, ptr [[TMP227]], align 85179// CHECK9-NEXT:    [[TMP228:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 55180// CHECK9-NEXT:    store ptr @.offload_maptypes.10, ptr [[TMP228]], align 85181// CHECK9-NEXT:    [[TMP229:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 65182// CHECK9-NEXT:    store ptr null, ptr [[TMP229]], align 85183// CHECK9-NEXT:    [[TMP230:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 75184// CHECK9-NEXT:    store ptr null, ptr [[TMP230]], align 85185// CHECK9-NEXT:    [[TMP231:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 85186// CHECK9-NEXT:    store i64 [[TMP222]], ptr [[TMP231]], align 85187// CHECK9-NEXT:    [[TMP232:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 95188// CHECK9-NEXT:    store i64 0, ptr [[TMP232]], align 85189// CHECK9-NEXT:    [[TMP233:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 105190// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP233]], align 45191// CHECK9-NEXT:    [[TMP234:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 115192// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP234]], align 45193// CHECK9-NEXT:    [[TMP235:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 125194// CHECK9-NEXT:    store i32 0, ptr [[TMP235]], align 45195// 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_l535.region_id, ptr [[KERNEL_ARGS71]])5196// CHECK9-NEXT:    [[TMP237:%.*]] = icmp ne i32 [[TMP236]], 05197// CHECK9-NEXT:    br i1 [[TMP237]], label [[OMP_OFFLOAD_FAILED72:%.*]], label [[OMP_OFFLOAD_CONT73:%.*]]5198// CHECK9:       omp_offload.failed72:5199// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535(i64 [[TMP201]], ptr [[TMP202]], ptr [[TMP203]], ptr [[TMP204]]) #[[ATTR2]]5200// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT73]]5201// CHECK9:       omp_offload.cont73:5202// CHECK9-NEXT:    [[TMP238:%.*]] = load i32, ptr [[CH]], align 45203// CHECK9-NEXT:    store i32 [[TMP238]], ptr [[CH_CASTED74]], align 45204// CHECK9-NEXT:    [[TMP239:%.*]] = load i64, ptr [[CH_CASTED74]], align 85205// CHECK9-NEXT:    [[TMP240:%.*]] = load i32, ptr [[N]], align 45206// CHECK9-NEXT:    store i32 [[TMP240]], ptr [[N_CASTED75]], align 45207// CHECK9-NEXT:    [[TMP241:%.*]] = load i64, ptr [[N_CASTED75]], align 85208// CHECK9-NEXT:    [[TMP242:%.*]] = load ptr, ptr [[A]], align 85209// CHECK9-NEXT:    [[TMP243:%.*]] = load ptr, ptr [[B]], align 85210// CHECK9-NEXT:    [[TMP244:%.*]] = load ptr, ptr [[C]], align 85211// CHECK9-NEXT:    [[TMP245:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 05212// CHECK9-NEXT:    store i64 [[TMP239]], ptr [[TMP245]], align 85213// CHECK9-NEXT:    [[TMP246:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 05214// CHECK9-NEXT:    store i64 [[TMP239]], ptr [[TMP246]], align 85215// CHECK9-NEXT:    [[TMP247:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 05216// CHECK9-NEXT:    store ptr null, ptr [[TMP247]], align 85217// CHECK9-NEXT:    [[TMP248:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 15218// CHECK9-NEXT:    store i64 [[TMP241]], ptr [[TMP248]], align 85219// CHECK9-NEXT:    [[TMP249:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 15220// CHECK9-NEXT:    store i64 [[TMP241]], ptr [[TMP249]], align 85221// CHECK9-NEXT:    [[TMP250:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 15222// CHECK9-NEXT:    store ptr null, ptr [[TMP250]], align 85223// CHECK9-NEXT:    [[TMP251:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 25224// CHECK9-NEXT:    store ptr [[TMP242]], ptr [[TMP251]], align 85225// CHECK9-NEXT:    [[TMP252:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 25226// CHECK9-NEXT:    store ptr [[TMP242]], ptr [[TMP252]], align 85227// CHECK9-NEXT:    [[TMP253:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 25228// CHECK9-NEXT:    store ptr null, ptr [[TMP253]], align 85229// CHECK9-NEXT:    [[TMP254:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 35230// CHECK9-NEXT:    store ptr [[TMP243]], ptr [[TMP254]], align 85231// CHECK9-NEXT:    [[TMP255:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 35232// CHECK9-NEXT:    store ptr [[TMP243]], ptr [[TMP255]], align 85233// CHECK9-NEXT:    [[TMP256:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 35234// CHECK9-NEXT:    store ptr null, ptr [[TMP256]], align 85235// CHECK9-NEXT:    [[TMP257:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 45236// CHECK9-NEXT:    store ptr [[TMP244]], ptr [[TMP257]], align 85237// CHECK9-NEXT:    [[TMP258:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 45238// CHECK9-NEXT:    store ptr [[TMP244]], ptr [[TMP258]], align 85239// CHECK9-NEXT:    [[TMP259:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 45240// CHECK9-NEXT:    store ptr null, ptr [[TMP259]], align 85241// CHECK9-NEXT:    [[TMP260:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 05242// CHECK9-NEXT:    [[TMP261:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 05243// CHECK9-NEXT:    [[TMP262:%.*]] = load i32, ptr [[N]], align 45244// CHECK9-NEXT:    store i32 [[TMP262]], ptr [[DOTCAPTURE_EXPR_80]], align 45245// CHECK9-NEXT:    [[TMP263:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_80]], align 45246// CHECK9-NEXT:    [[SUB82:%.*]] = sub nsw i32 [[TMP263]], 05247// CHECK9-NEXT:    [[DIV83:%.*]] = sdiv i32 [[SUB82]], 15248// CHECK9-NEXT:    [[SUB84:%.*]] = sub nsw i32 [[DIV83]], 15249// CHECK9-NEXT:    store i32 [[SUB84]], ptr [[DOTCAPTURE_EXPR_81]], align 45250// CHECK9-NEXT:    [[TMP264:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_81]], align 45251// CHECK9-NEXT:    [[ADD85:%.*]] = add nsw i32 [[TMP264]], 15252// CHECK9-NEXT:    [[TMP265:%.*]] = zext i32 [[ADD85]] to i645253// CHECK9-NEXT:    [[TMP266:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 05254// CHECK9-NEXT:    store i32 3, ptr [[TMP266]], align 45255// CHECK9-NEXT:    [[TMP267:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 15256// CHECK9-NEXT:    store i32 5, ptr [[TMP267]], align 45257// CHECK9-NEXT:    [[TMP268:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 25258// CHECK9-NEXT:    store ptr [[TMP260]], ptr [[TMP268]], align 85259// CHECK9-NEXT:    [[TMP269:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 35260// CHECK9-NEXT:    store ptr [[TMP261]], ptr [[TMP269]], align 85261// CHECK9-NEXT:    [[TMP270:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 45262// CHECK9-NEXT:    store ptr @.offload_sizes.11, ptr [[TMP270]], align 85263// CHECK9-NEXT:    [[TMP271:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 55264// CHECK9-NEXT:    store ptr @.offload_maptypes.12, ptr [[TMP271]], align 85265// CHECK9-NEXT:    [[TMP272:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 65266// CHECK9-NEXT:    store ptr null, ptr [[TMP272]], align 85267// CHECK9-NEXT:    [[TMP273:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 75268// CHECK9-NEXT:    store ptr null, ptr [[TMP273]], align 85269// CHECK9-NEXT:    [[TMP274:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 85270// CHECK9-NEXT:    store i64 [[TMP265]], ptr [[TMP274]], align 85271// CHECK9-NEXT:    [[TMP275:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 95272// CHECK9-NEXT:    store i64 0, ptr [[TMP275]], align 85273// CHECK9-NEXT:    [[TMP276:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 105274// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP276]], align 45275// CHECK9-NEXT:    [[TMP277:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 115276// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP277]], align 45277// CHECK9-NEXT:    [[TMP278:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 125278// CHECK9-NEXT:    store i32 0, ptr [[TMP278]], align 45279// 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_l561.region_id, ptr [[KERNEL_ARGS86]])5280// CHECK9-NEXT:    [[TMP280:%.*]] = icmp ne i32 [[TMP279]], 05281// CHECK9-NEXT:    br i1 [[TMP280]], label [[OMP_OFFLOAD_FAILED87:%.*]], label [[OMP_OFFLOAD_CONT88:%.*]]5282// CHECK9:       omp_offload.failed87:5283// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561(i64 [[TMP239]], i64 [[TMP241]], ptr [[TMP242]], ptr [[TMP243]], ptr [[TMP244]]) #[[ATTR2]]5284// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT88]]5285// CHECK9:       omp_offload.cont88:5286// CHECK9-NEXT:    [[CALL:%.*]] = call noundef signext i32 @_Z5tmainIiET_v()5287// CHECK9-NEXT:    ret i32 [[CALL]]5288//5289//5290// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l3685291// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1:[0-9]+]] {5292// CHECK9-NEXT:  entry:5293// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 85294// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85295// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85296// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85297// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 85298// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85299// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85300// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85301// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])5302// CHECK9-NEXT:    ret void5303//5304//5305// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368.omp_outlined5306// 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]] {5307// CHECK9-NEXT:  entry:5308// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85309// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85310// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85311// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85312// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85313// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85314// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45315// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45316// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45317// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45318// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45319// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45320// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45321// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45322// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45323// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 45324// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85325// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85326// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85327// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85328// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85329// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85330// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85331// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85332// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85333// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85334// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45335// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45336// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45337// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05338// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15339// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15340// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45341// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45342// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45343// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5344// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5345// CHECK9:       omp.precond.then:5346// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45347// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45348// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 45349// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45350// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45351// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85352// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 45353// 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)5354// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45355// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45356// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]5357// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5358// CHECK9:       cond.true:5359// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45360// CHECK9-NEXT:    br label [[COND_END:%.*]]5361// CHECK9:       cond.false:5362// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45363// CHECK9-NEXT:    br label [[COND_END]]5364// CHECK9:       cond.end:5365// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]5366// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45367// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45368// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 45369// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5370// CHECK9:       omp.inner.for.cond:5371// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP17:![0-9]+]]5372// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP17]]5373// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]5374// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5375// CHECK9:       omp.inner.for.body:5376// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP17]]5377// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i645378// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP17]]5379// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i645380// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP17]]5381// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5382// CHECK9:       omp.inner.for.inc:5383// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP17]]5384// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP17]]5385// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]5386// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP17]]5387// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP18:![0-9]+]]5388// CHECK9:       omp.inner.for.end:5389// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5390// CHECK9:       omp.loop.exit:5391// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85392// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 45393// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])5394// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 45395// CHECK9-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 05396// CHECK9-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]5397// CHECK9:       .omp.final.then:5398// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45399// CHECK9-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 05400// CHECK9-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 15401// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 15402// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]5403// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 45404// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]5405// CHECK9:       .omp.final.done:5406// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5407// CHECK9:       omp.precond.end:5408// CHECK9-NEXT:    ret void5409//5410//5411// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368.omp_outlined.omp_outlined5412// 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]] {5413// CHECK9-NEXT:  entry:5414// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85415// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85416// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85417// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85418// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85419// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85420// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85421// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85422// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45423// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45424// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45425// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45426// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45427// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45428// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45429// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45430// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45431// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 45432// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85433// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85434// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85435// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85436// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85437// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85438// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85439// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85440// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85441// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85442// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85443// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85444// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45445// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45446// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45447// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05448// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15449// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15450// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45451// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45452// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45453// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5454// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5455// CHECK9:       omp.precond.then:5456// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45457// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45458// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 45459// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85460// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i325461// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85462// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i325463// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45464// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 45465// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45466// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45467// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85468// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 45469// 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)5470// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45471// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45472// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]5473// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5474// CHECK9:       cond.true:5475// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45476// CHECK9-NEXT:    br label [[COND_END:%.*]]5477// CHECK9:       cond.false:5478// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45479// CHECK9-NEXT:    br label [[COND_END]]5480// CHECK9:       cond.end:5481// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]5482// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45483// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45484// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 45485// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5486// CHECK9:       omp.inner.for.cond:5487// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP21:![0-9]+]]5488// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP21]]5489// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]5490// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5491// CHECK9:       omp.inner.for.body:5492// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP21]]5493// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 15494// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5495// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP21]]5496// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP21]]5497// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP21]]5498// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i645499// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]5500// CHECK9-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP21]]5501// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP21]]5502// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP21]]5503// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i645504// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]5505// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP21]]5506// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]5507// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP21]]5508// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP21]]5509// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i645510// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]5511// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP21]]5512// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5513// CHECK9:       omp.body.continue:5514// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5515// CHECK9:       omp.inner.for.inc:5516// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP21]]5517// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 15518// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP21]]5519// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP22:![0-9]+]]5520// CHECK9:       omp.inner.for.end:5521// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5522// CHECK9:       omp.loop.exit:5523// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85524// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 45525// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])5526// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 45527// CHECK9-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 05528// CHECK9-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]5529// CHECK9:       .omp.final.then:5530// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45531// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP33]], 05532// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 15533// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 15534// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]5535// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 45536// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]5537// CHECK9:       .omp.final.done:5538// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5539// CHECK9:       omp.precond.end:5540// CHECK9-NEXT:    ret void5541//5542//5543// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l4075544// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {5545// CHECK9-NEXT:  entry:5546// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 85547// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85548// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85549// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85550// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 85551// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85552// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85553// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85554// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])5555// CHECK9-NEXT:    ret void5556//5557//5558// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407.omp_outlined5559// 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]] {5560// CHECK9-NEXT:  entry:5561// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85562// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85563// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85564// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85565// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85566// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85567// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45568// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45569// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45570// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45571// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45572// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45573// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45574// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45575// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45576// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 45577// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85578// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85579// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85580// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85581// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85582// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85583// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85584// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85585// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85586// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85587// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45588// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45589// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45590// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05591// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15592// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15593// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45594// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45595// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45596// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5597// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5598// CHECK9:       omp.precond.then:5599// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45600// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45601// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 45602// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45603// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45604// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85605// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 45606// 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)5607// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45608// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45609// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]5610// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5611// CHECK9:       cond.true:5612// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45613// CHECK9-NEXT:    br label [[COND_END:%.*]]5614// CHECK9:       cond.false:5615// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45616// CHECK9-NEXT:    br label [[COND_END]]5617// CHECK9:       cond.end:5618// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]5619// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45620// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45621// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 45622// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5623// CHECK9:       omp.inner.for.cond:5624// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26:![0-9]+]]5625// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP26]]5626// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]5627// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5628// CHECK9:       omp.inner.for.body:5629// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP26]]5630// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i645631// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP26]]5632// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i645633// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP26]]5634// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5635// CHECK9:       omp.inner.for.inc:5636// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26]]5637// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP26]]5638// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]5639// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP26]]5640// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP27:![0-9]+]]5641// CHECK9:       omp.inner.for.end:5642// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5643// CHECK9:       omp.loop.exit:5644// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85645// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 45646// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])5647// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 45648// CHECK9-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 05649// CHECK9-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]5650// CHECK9:       .omp.final.then:5651// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45652// CHECK9-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 05653// CHECK9-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 15654// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 15655// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]5656// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 45657// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]5658// CHECK9:       .omp.final.done:5659// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5660// CHECK9:       omp.precond.end:5661// CHECK9-NEXT:    ret void5662//5663//5664// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407.omp_outlined.omp_outlined5665// 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]] {5666// CHECK9-NEXT:  entry:5667// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85668// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85669// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85670// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85671// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85672// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85673// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85674// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85675// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45676// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45677// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45678// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45679// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45680// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45681// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45682// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45683// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45684// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 45685// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85686// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85687// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85688// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85689// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85690// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85691// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85692// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85693// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85694// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85695// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85696// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85697// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45698// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45699// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45700// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05701// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15702// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15703// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45704// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45705// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45706// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5707// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5708// CHECK9:       omp.precond.then:5709// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45710// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45711// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 45712// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85713// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i325714// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85715// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i325716// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 45717// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 45718// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45719// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45720// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85721// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 45722// 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)5723// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45724// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45725// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]5726// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5727// CHECK9:       cond.true:5728// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45729// CHECK9-NEXT:    br label [[COND_END:%.*]]5730// CHECK9:       cond.false:5731// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 45732// CHECK9-NEXT:    br label [[COND_END]]5733// CHECK9:       cond.end:5734// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]5735// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 45736// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 45737// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 45738// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5739// CHECK9:       omp.inner.for.cond:5740// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29:![0-9]+]]5741// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP29]]5742// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]5743// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5744// CHECK9:       omp.inner.for.body:5745// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29]]5746// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 15747// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]5748// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP29]]5749// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP29]]5750// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP29]]5751// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i645752// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]5753// CHECK9-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP29]]5754// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP29]]5755// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP29]]5756// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i645757// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]5758// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP29]]5759// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]5760// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP29]]5761// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP29]]5762// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i645763// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]5764// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP29]]5765// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]5766// CHECK9:       omp.body.continue:5767// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5768// CHECK9:       omp.inner.for.inc:5769// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29]]5770// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 15771// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP29]]5772// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP30:![0-9]+]]5773// CHECK9:       omp.inner.for.end:5774// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5775// CHECK9:       omp.loop.exit:5776// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85777// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 45778// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])5779// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 45780// CHECK9-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 05781// CHECK9-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]5782// CHECK9:       .omp.final.then:5783// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45784// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP33]], 05785// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 15786// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 15787// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]5788// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 45789// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]5790// CHECK9:       .omp.final.done:5791// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5792// CHECK9:       omp.precond.end:5793// CHECK9-NEXT:    ret void5794//5795//5796// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l4465797// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {5798// CHECK9-NEXT:  entry:5799// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 85800// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 85801// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85802// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85803// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85804// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 85805// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 85806// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85807// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85808// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85809// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])5810// CHECK9-NEXT:    ret void5811//5812//5813// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446.omp_outlined5814// 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]] {5815// CHECK9-NEXT:  entry:5816// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85817// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85818// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 85819// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85820// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85821// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85822// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85823// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45824// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45825// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45826// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45827// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45828// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 45829// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 45830// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45831// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45832// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 45833// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85834// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85835// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 85836// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85837// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85838// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85839// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85840// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 85841// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 85842// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 85843// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 85844// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 85845// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 45846// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 45847// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45848// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 05849// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15850// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15851// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45852// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45853// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45854// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]5855// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5856// CHECK9:       omp.precond.then:5857// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 45858// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45859// CHECK9-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 45860// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 45861// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 45862// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 45863// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85864// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 45865// 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]])5866// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45867// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45868// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]5869// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]5870// CHECK9:       cond.true:5871// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45872// CHECK9-NEXT:    br label [[COND_END:%.*]]5873// CHECK9:       cond.false:5874// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 45875// CHECK9-NEXT:    br label [[COND_END]]5876// CHECK9:       cond.end:5877// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]5878// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 45879// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 45880// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 45881// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]5882// CHECK9:       omp.inner.for.cond:5883// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP32:![0-9]+]]5884// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP32]]5885// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 15886// CHECK9-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]5887// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]5888// CHECK9:       omp.inner.for.body:5889// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP32]]5890// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i645891// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP32]]5892// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i645893// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]), !llvm.access.group [[ACC_GRP32]]5894// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]5895// CHECK9:       omp.inner.for.inc:5896// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP32]]5897// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP32]]5898// CHECK9-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]5899// CHECK9-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP32]]5900// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP32]]5901// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP32]]5902// CHECK9-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]5903// CHECK9-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP32]]5904// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP32]]5905// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP32]]5906// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP27]], [[TMP28]]5907// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP32]]5908// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP32]]5909// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP32]]5910// CHECK9-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP29]], [[TMP30]]5911// CHECK9-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]5912// CHECK9:       cond.true10:5913// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP32]]5914// CHECK9-NEXT:    br label [[COND_END12:%.*]]5915// CHECK9:       cond.false11:5916// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP32]]5917// CHECK9-NEXT:    br label [[COND_END12]]5918// CHECK9:       cond.end12:5919// CHECK9-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP31]], [[COND_TRUE10]] ], [ [[TMP32]], [[COND_FALSE11]] ]5920// CHECK9-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP32]]5921// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP32]]5922// CHECK9-NEXT:    store i32 [[TMP33]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP32]]5923// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP33:![0-9]+]]5924// CHECK9:       omp.inner.for.end:5925// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]5926// CHECK9:       omp.loop.exit:5927// CHECK9-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 85928// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 45929// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP35]])5930// CHECK9-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 45931// CHECK9-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 05932// CHECK9-NEXT:    br i1 [[TMP37]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]5933// CHECK9:       .omp.final.then:5934// CHECK9-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45935// CHECK9-NEXT:    [[SUB14:%.*]] = sub nsw i32 [[TMP38]], 05936// CHECK9-NEXT:    [[DIV15:%.*]] = sdiv i32 [[SUB14]], 15937// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV15]], 15938// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL]]5939// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I3]], align 45940// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]5941// CHECK9:       .omp.final.done:5942// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]5943// CHECK9:       omp.precond.end:5944// CHECK9-NEXT:    ret void5945//5946//5947// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446.omp_outlined.omp_outlined5948// 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]] {5949// CHECK9-NEXT:  entry:5950// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 85951// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 85952// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 85953// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 85954// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 85955// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 85956// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 85957// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 85958// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 45959// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 45960// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 45961// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 45962// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 45963// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 45964// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 45965// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 45966// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 45967// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 45968// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 85969// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 85970// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 85971// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 85972// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 85973// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 85974// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 85975// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 85976// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 85977// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 85978// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 85979// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 85980// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 45981// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 45982// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45983// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 05984// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 15985// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 15986// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 45987// CHECK9-NEXT:    store i32 0, ptr [[I]], align 45988// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 45989// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]5990// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]5991// CHECK9:       omp.precond.then:5992// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 45993// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 45994// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 45995// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 85996// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i325997// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 85998// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i325999// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46000// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 46001// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46002// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46003// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86004// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 46005// 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)6006// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46007// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46008// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]6009// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6010// CHECK9:       cond.true:6011// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46012// CHECK9-NEXT:    br label [[COND_END:%.*]]6013// CHECK9:       cond.false:6014// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46015// CHECK9-NEXT:    br label [[COND_END]]6016// CHECK9:       cond.end:6017// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]6018// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 46019// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46020// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 46021// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6022// CHECK9:       omp.inner.for.cond:6023// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP35:![0-9]+]]6024// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP35]]6025// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]6026// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6027// CHECK9:       omp.inner.for.body:6028// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP35]]6029// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 16030// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6031// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP35]]6032// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP35]]6033// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP35]]6034// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i646035// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]6036// CHECK9-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP35]]6037// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP35]]6038// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP35]]6039// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i646040// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]6041// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP35]]6042// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]6043// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP35]]6044// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP35]]6045// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i646046// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]6047// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP35]]6048// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6049// CHECK9:       omp.body.continue:6050// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6051// CHECK9:       omp.inner.for.inc:6052// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP35]]6053// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 16054// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP35]]6055// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP36:![0-9]+]]6056// CHECK9:       omp.inner.for.end:6057// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6058// CHECK9:       omp.loop.exit:6059// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86060// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 46061// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])6062// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 46063// CHECK9-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 06064// CHECK9-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]6065// CHECK9:       .omp.final.then:6066// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46067// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP33]], 06068// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 16069// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 16070// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]6071// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 46072// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]6073// CHECK9:       .omp.final.done:6074// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6075// CHECK9:       omp.precond.end:6076// CHECK9-NEXT:    ret void6077//6078//6079// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l4776080// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {6081// CHECK9-NEXT:  entry:6082// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 86083// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86084// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86085// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86086// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 86087// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86088// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86089// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86090// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])6091// CHECK9-NEXT:    ret void6092//6093//6094// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477.omp_outlined6095// 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]] {6096// CHECK9-NEXT:  entry:6097// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86098// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86099// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86100// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86101// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86102// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86103// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46104// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46105// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46106// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46107// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46108// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46109// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46110// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46111// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46112// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 46113// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86114// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86115// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86116// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86117// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86118// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86119// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 86120// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 86121// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 86122// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 86123// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 46124// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 46125// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46126// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 06127// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16128// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 16129// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 46130// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46131// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46132// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]6133// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6134// CHECK9:       omp.precond.then:6135// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46136// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46137// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 46138// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46139// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46140// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86141// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 46142// 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)6143// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46144// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46145// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]6146// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6147// CHECK9:       cond.true:6148// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46149// CHECK9-NEXT:    br label [[COND_END:%.*]]6150// CHECK9:       cond.false:6151// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46152// CHECK9-NEXT:    br label [[COND_END]]6153// CHECK9:       cond.end:6154// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]6155// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46156// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46157// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 46158// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6159// CHECK9:       omp.inner.for.cond:6160// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP38:![0-9]+]]6161// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP38]]6162// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]6163// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6164// CHECK9:       omp.inner.for.body:6165// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP38]]6166// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i646167// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP38]]6168// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i646169// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP38]]6170// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6171// CHECK9:       omp.inner.for.inc:6172// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP38]]6173// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP38]]6174// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]6175// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP38]]6176// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP39:![0-9]+]]6177// CHECK9:       omp.inner.for.end:6178// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6179// CHECK9:       omp.loop.exit:6180// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86181// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 46182// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])6183// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 46184// CHECK9-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 06185// CHECK9-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]6186// CHECK9:       .omp.final.then:6187// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46188// CHECK9-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 06189// CHECK9-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 16190// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 16191// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]6192// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 46193// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]6194// CHECK9:       .omp.final.done:6195// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6196// CHECK9:       omp.precond.end:6197// CHECK9-NEXT:    ret void6198//6199//6200// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477.omp_outlined.omp_outlined6201// 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]] {6202// CHECK9-NEXT:  entry:6203// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86204// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86205// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86206// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86207// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86208// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86209// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86210// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86211// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46212// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46213// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46214// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46215// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46216// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46217// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46218// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46219// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46220// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 46221// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86222// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86223// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86224// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86225// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86226// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86227// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86228// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86229// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 86230// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 86231// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 86232// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 86233// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 46234// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 46235// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46236// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 06237// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16238// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 16239// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 46240// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46241// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46242// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]6243// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6244// CHECK9:       omp.precond.then:6245// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46246// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46247// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 46248// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86249// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i326250// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86251// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i326252// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46253// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 46254// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46255// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46256// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86257// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 46258// 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)6259// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46260// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46261// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]6262// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6263// CHECK9:       cond.true:6264// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46265// CHECK9-NEXT:    br label [[COND_END:%.*]]6266// CHECK9:       cond.false:6267// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46268// CHECK9-NEXT:    br label [[COND_END]]6269// CHECK9:       cond.end:6270// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]6271// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 46272// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46273// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 46274// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6275// CHECK9:       omp.inner.for.cond:6276// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP41:![0-9]+]]6277// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP41]]6278// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]6279// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6280// CHECK9:       omp.inner.for.body:6281// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP41]]6282// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 16283// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6284// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP41]]6285// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP41]]6286// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP41]]6287// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i646288// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i64 [[IDXPROM]]6289// CHECK9-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP41]]6290// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP41]]6291// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP41]]6292// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i646293// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM7]]6294// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP41]]6295// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP22]], [[TMP25]]6296// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP41]]6297// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP41]]6298// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i646299// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM10]]6300// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP41]]6301// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6302// CHECK9:       omp.body.continue:6303// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6304// CHECK9:       omp.inner.for.inc:6305// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP41]]6306// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 16307// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP41]]6308// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP42:![0-9]+]]6309// CHECK9:       omp.inner.for.end:6310// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6311// CHECK9:       omp.loop.exit:6312// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86313// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 46314// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])6315// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 46316// CHECK9-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 06317// CHECK9-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]6318// CHECK9:       .omp.final.then:6319// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46320// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP33]], 06321// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 16322// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 16323// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]6324// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 46325// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]6326// CHECK9:       .omp.final.done:6327// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6328// CHECK9:       omp.precond.end:6329// CHECK9-NEXT:    ret void6330//6331//6332// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l5056333// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {6334// CHECK9-NEXT:  entry:6335// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 86336// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 86337// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86338// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86339// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86340// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 86341// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 86342// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86343// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86344// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86345// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])6346// CHECK9-NEXT:    ret void6347//6348//6349// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505.omp_outlined6350// 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]] {6351// CHECK9-NEXT:  entry:6352// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86353// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86354// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 86355// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86356// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86357// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86358// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86359// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46360// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46361// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46362// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46363// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 46364// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46365// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46366// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46367// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46368// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46369// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 46370// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 86371// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86372// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86373// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 86374// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86375// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86376// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86377// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86378// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 86379// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 86380// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 86381// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 86382// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 86383// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 46384// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 46385// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 46386// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 46387// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46388// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 06389// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16390// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 16391// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 46392// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46393// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46394// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]6395// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6396// CHECK9:       omp.precond.then:6397// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46398// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46399// CHECK9-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 46400// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46401// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46402// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86403// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 46404// 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)6405// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46406// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46407// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]6408// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6409// CHECK9:       cond.true:6410// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46411// CHECK9-NEXT:    br label [[COND_END:%.*]]6412// CHECK9:       cond.false:6413// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46414// CHECK9-NEXT:    br label [[COND_END]]6415// CHECK9:       cond.end:6416// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]6417// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46418// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46419// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 46420// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6421// CHECK9:       omp.inner.for.cond:6422// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP44:![0-9]+]]6423// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP44]]6424// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]6425// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6426// CHECK9:       omp.inner.for.body:6427// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP44]]6428// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i646429// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP44]]6430// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i646431// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP44]]6432// CHECK9-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP44]]6433// CHECK9-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 8, !llvm.access.group [[ACC_GRP44]]6434// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]]), !llvm.access.group [[ACC_GRP44]]6435// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6436// CHECK9:       omp.inner.for.inc:6437// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP44]]6438// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP44]]6439// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]6440// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP44]]6441// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP45:![0-9]+]]6442// CHECK9:       omp.inner.for.end:6443// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6444// CHECK9:       omp.loop.exit:6445// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86446// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 46447// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])6448// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 46449// CHECK9-NEXT:    [[TMP30:%.*]] = icmp ne i32 [[TMP29]], 06450// CHECK9-NEXT:    br i1 [[TMP30]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]6451// CHECK9:       .omp.final.then:6452// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46453// CHECK9-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP31]], 06454// CHECK9-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 16455// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 16456// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]6457// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 46458// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]6459// CHECK9:       .omp.final.done:6460// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6461// CHECK9:       omp.precond.end:6462// CHECK9-NEXT:    ret void6463//6464//6465// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505.omp_outlined.omp_outlined6466// 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]] {6467// CHECK9-NEXT:  entry:6468// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86469// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86470// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86471// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86472// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86473// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86474// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86475// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86476// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 86477// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46478// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46479// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46480// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 46481// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46482// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46483// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46484// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46485// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46486// CHECK9-NEXT:    [[I5:%.*]] = alloca i32, align 46487// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86488// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86489// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86490// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86491// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86492// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86493// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86494// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86495// CHECK9-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 86496// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 86497// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 86498// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 86499// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 86500// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 46501// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 46502// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46503// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 06504// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16505// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 16506// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 46507// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46508// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46509// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]6510// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6511// CHECK9:       omp.precond.then:6512// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46513// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46514// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 46515// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86516// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i326517// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86518// CHECK9-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i326519// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46520// CHECK9-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 46521// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46522// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46523// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 46524// CHECK9-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86525// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 46526// 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]])6527// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]6528// CHECK9:       omp.dispatch.cond:6529// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46530// CHECK9-NEXT:    [[TMP14:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86531// CHECK9-NEXT:    [[CONV6:%.*]] = trunc i64 [[TMP14]] to i326532// CHECK9-NEXT:    [[CMP7:%.*]] = icmp sgt i32 [[TMP13]], [[CONV6]]6533// CHECK9-NEXT:    br i1 [[CMP7]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6534// CHECK9:       cond.true:6535// CHECK9-NEXT:    [[TMP15:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86536// CHECK9-NEXT:    [[CONV8:%.*]] = trunc i64 [[TMP15]] to i326537// CHECK9-NEXT:    br label [[COND_END:%.*]]6538// CHECK9:       cond.false:6539// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46540// CHECK9-NEXT:    br label [[COND_END]]6541// CHECK9:       cond.end:6542// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[CONV8]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]6543// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 46544// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46545// CHECK9-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 46546// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 46547// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46548// CHECK9-NEXT:    [[CMP9:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]6549// CHECK9-NEXT:    br i1 [[CMP9]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]6550// CHECK9:       omp.dispatch.body:6551// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6552// CHECK9:       omp.inner.for.cond:6553// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP47:![0-9]+]]6554// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP47]]6555// CHECK9-NEXT:    [[CMP10:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]6556// CHECK9-NEXT:    br i1 [[CMP10]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6557// CHECK9:       omp.inner.for.body:6558// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP47]]6559// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 16560// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6561// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP47]]6562// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP47]]6563// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP47]]6564// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP24]] to i646565// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i64 [[IDXPROM]]6566// CHECK9-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP47]]6567// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP47]]6568// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP47]]6569// CHECK9-NEXT:    [[IDXPROM11:%.*]] = sext i32 [[TMP27]] to i646570// CHECK9-NEXT:    [[ARRAYIDX12:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i64 [[IDXPROM11]]6571// CHECK9-NEXT:    [[TMP28:%.*]] = load double, ptr [[ARRAYIDX12]], align 8, !llvm.access.group [[ACC_GRP47]]6572// CHECK9-NEXT:    [[ADD13:%.*]] = fadd double [[TMP25]], [[TMP28]]6573// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP47]]6574// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP47]]6575// CHECK9-NEXT:    [[IDXPROM14:%.*]] = sext i32 [[TMP30]] to i646576// CHECK9-NEXT:    [[ARRAYIDX15:%.*]] = getelementptr inbounds double, ptr [[TMP29]], i64 [[IDXPROM14]]6577// CHECK9-NEXT:    store double [[ADD13]], ptr [[ARRAYIDX15]], align 8, !llvm.access.group [[ACC_GRP47]]6578// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6579// CHECK9:       omp.body.continue:6580// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6581// CHECK9:       omp.inner.for.inc:6582// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP47]]6583// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 [[TMP31]], 16584// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP47]]6585// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP48:![0-9]+]]6586// CHECK9:       omp.inner.for.end:6587// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]6588// CHECK9:       omp.dispatch.inc:6589// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46590// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46591// CHECK9-NEXT:    [[ADD17:%.*]] = add nsw i32 [[TMP32]], [[TMP33]]6592// CHECK9-NEXT:    store i32 [[ADD17]], ptr [[DOTOMP_LB]], align 46593// CHECK9-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46594// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 46595// CHECK9-NEXT:    [[ADD18:%.*]] = add nsw i32 [[TMP34]], [[TMP35]]6596// CHECK9-NEXT:    store i32 [[ADD18]], ptr [[DOTOMP_UB]], align 46597// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]6598// CHECK9:       omp.dispatch.end:6599// CHECK9-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86600// CHECK9-NEXT:    [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 46601// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP37]])6602// CHECK9-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 46603// CHECK9-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 06604// CHECK9-NEXT:    br i1 [[TMP39]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]6605// CHECK9:       .omp.final.then:6606// CHECK9-NEXT:    [[TMP40:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46607// CHECK9-NEXT:    [[SUB19:%.*]] = sub nsw i32 [[TMP40]], 06608// CHECK9-NEXT:    [[DIV20:%.*]] = sdiv i32 [[SUB19]], 16609// CHECK9-NEXT:    [[MUL21:%.*]] = mul nsw i32 [[DIV20]], 16610// CHECK9-NEXT:    [[ADD22:%.*]] = add nsw i32 0, [[MUL21]]6611// CHECK9-NEXT:    store i32 [[ADD22]], ptr [[I5]], align 46612// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]6613// CHECK9:       .omp.final.done:6614// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6615// CHECK9:       omp.precond.end:6616// CHECK9-NEXT:    ret void6617//6618//6619// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l5356620// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {6621// CHECK9-NEXT:  entry:6622// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 86623// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86624// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86625// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86626// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 86627// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86628// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86629// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86630// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])6631// CHECK9-NEXT:    ret void6632//6633//6634// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535.omp_outlined6635// 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]] {6636// CHECK9-NEXT:  entry:6637// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86638// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86639// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86640// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86641// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86642// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86643// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46644// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46645// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46646// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46647// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46648// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46649// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46650// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46651// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46652// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 46653// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86654// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86655// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86656// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86657// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86658// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86659// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 86660// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 86661// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 86662// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 86663// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 46664// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 46665// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46666// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 06667// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16668// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 16669// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 46670// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46671// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46672// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]6673// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6674// CHECK9:       omp.precond.then:6675// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46676// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46677// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 46678// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46679// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46680// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86681// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 46682// 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)6683// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46684// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46685// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]6686// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6687// CHECK9:       cond.true:6688// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46689// CHECK9-NEXT:    br label [[COND_END:%.*]]6690// CHECK9:       cond.false:6691// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46692// CHECK9-NEXT:    br label [[COND_END]]6693// CHECK9:       cond.end:6694// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]6695// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46696// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46697// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 46698// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6699// CHECK9:       omp.inner.for.cond:6700// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP50:![0-9]+]]6701// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP50]]6702// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]6703// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6704// CHECK9:       omp.inner.for.body:6705// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP50]]6706// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i646707// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP50]]6708// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i646709// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP50]]6710// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6711// CHECK9:       omp.inner.for.inc:6712// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP50]]6713// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP50]]6714// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]6715// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP50]]6716// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP51:![0-9]+]]6717// CHECK9:       omp.inner.for.end:6718// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6719// CHECK9:       omp.loop.exit:6720// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86721// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 46722// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])6723// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 46724// CHECK9-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 06725// CHECK9-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]6726// CHECK9:       .omp.final.then:6727// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46728// CHECK9-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 06729// CHECK9-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 16730// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 16731// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]6732// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 46733// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]6734// CHECK9:       .omp.final.done:6735// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6736// CHECK9:       omp.precond.end:6737// CHECK9-NEXT:    ret void6738//6739//6740// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535.omp_outlined.omp_outlined6741// 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]] {6742// CHECK9-NEXT:  entry:6743// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86744// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86745// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 86746// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 86747// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86748// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86749// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86750// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86751// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46752// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46753// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46754// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46755// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46756// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 46757// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 46758// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46759// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46760// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 46761// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86762// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86763// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 86764// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 86765// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86766// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86767// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86768// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86769// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 86770// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 86771// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 86772// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 86773// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 46774// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 46775// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46776// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 06777// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16778// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 16779// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 46780// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46781// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46782// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]6783// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6784// CHECK9:       omp.precond.then:6785// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 46786// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46787// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 46788// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 86789// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i326790// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 86791// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i326792// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 46793// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 46794// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46795// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46796// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46797// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 46798// CHECK9-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86799// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 46800// CHECK9-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)6801// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]6802// CHECK9:       omp.dispatch.cond:6803// CHECK9-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86804// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 46805// 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]])6806// CHECK9-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 06807// CHECK9-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]6808// CHECK9:       omp.dispatch.body:6809// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 46810// CHECK9-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 46811// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6812// CHECK9:       omp.inner.for.cond:6813// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP53:![0-9]+]]6814// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP53]]6815// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]6816// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6817// CHECK9:       omp.inner.for.body:6818// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP53]]6819// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 16820// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]6821// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP53]]6822// CHECK9-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP53]]6823// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP53]]6824// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP22]] to i646825// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP21]], i64 [[IDXPROM]]6826// CHECK9-NEXT:    [[TMP23:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP53]]6827// CHECK9-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP53]]6828// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP53]]6829// CHECK9-NEXT:    [[IDXPROM6:%.*]] = sext i32 [[TMP25]] to i646830// CHECK9-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds double, ptr [[TMP24]], i64 [[IDXPROM6]]6831// CHECK9-NEXT:    [[TMP26:%.*]] = load double, ptr [[ARRAYIDX7]], align 8, !llvm.access.group [[ACC_GRP53]]6832// CHECK9-NEXT:    [[ADD8:%.*]] = fadd double [[TMP23]], [[TMP26]]6833// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP53]]6834// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP53]]6835// CHECK9-NEXT:    [[IDXPROM9:%.*]] = sext i32 [[TMP28]] to i646836// CHECK9-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds double, ptr [[TMP27]], i64 [[IDXPROM9]]6837// CHECK9-NEXT:    store double [[ADD8]], ptr [[ARRAYIDX10]], align 8, !llvm.access.group [[ACC_GRP53]]6838// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]6839// CHECK9:       omp.body.continue:6840// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6841// CHECK9:       omp.inner.for.inc:6842// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP53]]6843// CHECK9-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP29]], 16844// CHECK9-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP53]]6845// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP54:![0-9]+]]6846// CHECK9:       omp.inner.for.end:6847// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]6848// CHECK9:       omp.dispatch.inc:6849// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]6850// CHECK9:       omp.dispatch.end:6851// CHECK9-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86852// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[TMP30]], align 46853// CHECK9-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP31]])6854// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 46855// CHECK9-NEXT:    [[TMP33:%.*]] = icmp ne i32 [[TMP32]], 06856// CHECK9-NEXT:    br i1 [[TMP33]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]6857// CHECK9:       .omp.final.then:6858// CHECK9-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 46859// CHECK9-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[TMP34]], 06860// CHECK9-NEXT:    [[DIV13:%.*]] = sdiv i32 [[SUB12]], 16861// CHECK9-NEXT:    [[MUL14:%.*]] = mul nsw i32 [[DIV13]], 16862// CHECK9-NEXT:    [[ADD15:%.*]] = add nsw i32 0, [[MUL14]]6863// CHECK9-NEXT:    store i32 [[ADD15]], ptr [[I4]], align 46864// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]6865// CHECK9:       .omp.final.done:6866// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]6867// CHECK9:       omp.precond.end:6868// CHECK9-NEXT:    ret void6869//6870//6871// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l5616872// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {6873// CHECK9-NEXT:  entry:6874// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 86875// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 86876// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86877// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86878// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86879// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 86880// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 86881// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86882// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86883// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86884// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])6885// CHECK9-NEXT:    ret void6886//6887//6888// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561.omp_outlined6889// 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]] {6890// CHECK9-NEXT:  entry:6891// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 86892// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 86893// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 86894// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 86895// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 86896// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 86897// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 86898// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 46899// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 46900// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 46901// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 46902// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 46903// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 46904// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 46905// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 46906// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 46907// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 46908// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 46909// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 86910// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 86911// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 86912// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 86913// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 86914// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 86915// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 86916// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 86917// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 86918// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 86919// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 86920// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 86921// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 86922// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 46923// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 46924// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 46925// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 46926// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46927// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 06928// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 16929// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 16930// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 46931// CHECK9-NEXT:    store i32 0, ptr [[I]], align 46932// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46933// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]6934// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]6935// CHECK9:       omp.precond.then:6936// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 46937// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46938// CHECK9-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 46939// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 46940// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 46941// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86942// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 46943// 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)6944// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46945// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46946// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]6947// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]6948// CHECK9:       cond.true:6949// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 46950// CHECK9-NEXT:    br label [[COND_END:%.*]]6951// CHECK9:       cond.false:6952// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 46953// CHECK9-NEXT:    br label [[COND_END]]6954// CHECK9:       cond.end:6955// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]6956// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 46957// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 46958// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 46959// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]6960// CHECK9:       omp.inner.for.cond:6961// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP56:![0-9]+]]6962// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP56]]6963// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]6964// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]6965// CHECK9:       omp.inner.for.body:6966// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP56]]6967// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i646968// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP56]]6969// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i646970// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP56]]6971// CHECK9-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP56]]6972// CHECK9-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 8, !llvm.access.group [[ACC_GRP56]]6973// CHECK9-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]]), !llvm.access.group [[ACC_GRP56]]6974// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]6975// CHECK9:       omp.inner.for.inc:6976// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP56]]6977// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP56]]6978// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]6979// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP56]]6980// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP57:![0-9]+]]6981// CHECK9:       omp.inner.for.end:6982// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]6983// CHECK9:       omp.loop.exit:6984// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 86985// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 46986// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])6987// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 46988// CHECK9-NEXT:    [[TMP30:%.*]] = icmp ne i32 [[TMP29]], 06989// CHECK9-NEXT:    br i1 [[TMP30]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]6990// CHECK9:       .omp.final.then:6991// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 46992// CHECK9-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP31]], 06993// CHECK9-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 16994// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 16995// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]6996// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 46997// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]6998// CHECK9:       .omp.final.done:6999// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]7000// CHECK9:       omp.precond.end:7001// CHECK9-NEXT:    ret void7002//7003//7004// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561.omp_outlined.omp_outlined7005// 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]] {7006// CHECK9-NEXT:  entry:7007// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87008// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87009// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 87010// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 87011// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87012// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87013// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87014// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87015// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 87016// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47017// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47018// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47019// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 47020// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47021// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 47022// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 47023// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47024// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47025// CHECK9-NEXT:    [[I5:%.*]] = alloca i32, align 47026// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87027// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87028// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 87029// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 87030// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87031// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87032// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87033// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87034// CHECK9-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 87035// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 87036// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 87037// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 87038// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 87039// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 47040// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 47041// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47042// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 07043// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17044// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 17045// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 47046// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47047// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47048// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]7049// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7050// CHECK9:       omp.precond.then:7051// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 47052// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 47053// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 47054// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 87055// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i327056// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 87057// CHECK9-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i327058// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 47059// CHECK9-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 47060// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47061// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47062// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 47063// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 47064// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47065// CHECK9-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87066// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 47067// CHECK9-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])7068// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]7069// CHECK9:       omp.dispatch.cond:7070// CHECK9-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87071// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 47072// 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]])7073// CHECK9-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 07074// CHECK9-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]7075// CHECK9:       omp.dispatch.body:7076// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 47077// CHECK9-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 47078// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7079// CHECK9:       omp.inner.for.cond:7080// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP59:![0-9]+]]7081// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP59]]7082// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]7083// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7084// CHECK9:       omp.inner.for.body:7085// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP59]]7086// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 17087// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]7088// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP59]]7089// CHECK9-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP59]]7090// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP59]]7091// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP23]] to i647092// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP22]], i64 [[IDXPROM]]7093// CHECK9-NEXT:    [[TMP24:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !llvm.access.group [[ACC_GRP59]]7094// CHECK9-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP59]]7095// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP59]]7096// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP26]] to i647097// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP25]], i64 [[IDXPROM7]]7098// CHECK9-NEXT:    [[TMP27:%.*]] = load double, ptr [[ARRAYIDX8]], align 8, !llvm.access.group [[ACC_GRP59]]7099// CHECK9-NEXT:    [[ADD9:%.*]] = fadd double [[TMP24]], [[TMP27]]7100// CHECK9-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP59]]7101// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP59]]7102// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP29]] to i647103// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds double, ptr [[TMP28]], i64 [[IDXPROM10]]7104// CHECK9-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX11]], align 8, !llvm.access.group [[ACC_GRP59]]7105// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]7106// CHECK9:       omp.body.continue:7107// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7108// CHECK9:       omp.inner.for.inc:7109// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP59]]7110// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP30]], 17111// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP59]]7112// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP60:![0-9]+]]7113// CHECK9:       omp.inner.for.end:7114// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]7115// CHECK9:       omp.dispatch.inc:7116// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]7117// CHECK9:       omp.dispatch.end:7118// CHECK9-NEXT:    [[TMP31:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87119// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[TMP31]], align 47120// CHECK9-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP32]])7121// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 47122// CHECK9-NEXT:    [[TMP34:%.*]] = icmp ne i32 [[TMP33]], 07123// CHECK9-NEXT:    br i1 [[TMP34]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]7124// CHECK9:       .omp.final.then:7125// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47126// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP35]], 07127// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 17128// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 17129// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]7130// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I5]], align 47131// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]7132// CHECK9:       .omp.final.done:7133// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]7134// CHECK9:       omp.precond.end:7135// CHECK9-NEXT:    ret void7136//7137//7138// CHECK9-LABEL: define {{[^@]+}}@_Z5tmainIiET_v7139// CHECK9-SAME: () #[[ATTR3:[0-9]+]] comdat {7140// CHECK9-NEXT:  entry:7141// CHECK9-NEXT:    [[A:%.*]] = alloca ptr, align 87142// CHECK9-NEXT:    [[B:%.*]] = alloca ptr, align 87143// CHECK9-NEXT:    [[C:%.*]] = alloca ptr, align 87144// CHECK9-NEXT:    [[N:%.*]] = alloca i32, align 47145// CHECK9-NEXT:    [[CH:%.*]] = alloca i32, align 47146// CHECK9-NEXT:    [[N_CASTED:%.*]] = alloca i64, align 87147// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 87148// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 87149// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 87150// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47151// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47152// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47153// CHECK9-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 87154// CHECK9-NEXT:    [[N_CASTED3:%.*]] = alloca i64, align 87155// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS4:%.*]] = alloca [4 x ptr], align 87156// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS5:%.*]] = alloca [4 x ptr], align 87157// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS6:%.*]] = alloca [4 x ptr], align 87158// CHECK9-NEXT:    [[_TMP7:%.*]] = alloca i32, align 47159// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_8:%.*]] = alloca i32, align 47160// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 47161// CHECK9-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 87162// CHECK9-NEXT:    [[CH_CASTED:%.*]] = alloca i64, align 87163// CHECK9-NEXT:    [[N_CASTED17:%.*]] = alloca i64, align 87164// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS18:%.*]] = alloca [5 x ptr], align 87165// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS19:%.*]] = alloca [5 x ptr], align 87166// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS20:%.*]] = alloca [5 x ptr], align 87167// CHECK9-NEXT:    [[_TMP21:%.*]] = alloca i32, align 47168// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 47169// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_23:%.*]] = alloca i32, align 47170// CHECK9-NEXT:    [[KERNEL_ARGS28:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 87171// CHECK9-NEXT:    [[N_CASTED31:%.*]] = alloca i64, align 87172// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS32:%.*]] = alloca [4 x ptr], align 87173// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS33:%.*]] = alloca [4 x ptr], align 87174// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS34:%.*]] = alloca [4 x ptr], align 87175// CHECK9-NEXT:    [[_TMP35:%.*]] = alloca i32, align 47176// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_36:%.*]] = alloca i32, align 47177// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_37:%.*]] = alloca i32, align 47178// CHECK9-NEXT:    [[KERNEL_ARGS42:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 87179// CHECK9-NEXT:    [[CH_CASTED45:%.*]] = alloca i64, align 87180// CHECK9-NEXT:    [[N_CASTED46:%.*]] = alloca i64, align 87181// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS47:%.*]] = alloca [5 x ptr], align 87182// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS48:%.*]] = alloca [5 x ptr], align 87183// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS49:%.*]] = alloca [5 x ptr], align 87184// CHECK9-NEXT:    [[_TMP50:%.*]] = alloca i32, align 47185// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_51:%.*]] = alloca i32, align 47186// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_52:%.*]] = alloca i32, align 47187// CHECK9-NEXT:    [[KERNEL_ARGS57:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 87188// CHECK9-NEXT:    [[N_CASTED60:%.*]] = alloca i64, align 87189// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS61:%.*]] = alloca [4 x ptr], align 87190// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS62:%.*]] = alloca [4 x ptr], align 87191// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS63:%.*]] = alloca [4 x ptr], align 87192// CHECK9-NEXT:    [[_TMP64:%.*]] = alloca i32, align 47193// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_65:%.*]] = alloca i32, align 47194// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_66:%.*]] = alloca i32, align 47195// CHECK9-NEXT:    [[KERNEL_ARGS71:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 87196// CHECK9-NEXT:    [[CH_CASTED74:%.*]] = alloca i64, align 87197// CHECK9-NEXT:    [[N_CASTED75:%.*]] = alloca i64, align 87198// CHECK9-NEXT:    [[DOTOFFLOAD_BASEPTRS76:%.*]] = alloca [5 x ptr], align 87199// CHECK9-NEXT:    [[DOTOFFLOAD_PTRS77:%.*]] = alloca [5 x ptr], align 87200// CHECK9-NEXT:    [[DOTOFFLOAD_MAPPERS78:%.*]] = alloca [5 x ptr], align 87201// CHECK9-NEXT:    [[_TMP79:%.*]] = alloca i32, align 47202// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_80:%.*]] = alloca i32, align 47203// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_81:%.*]] = alloca i32, align 47204// CHECK9-NEXT:    [[KERNEL_ARGS86:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 87205// CHECK9-NEXT:    store i32 10000, ptr [[N]], align 47206// CHECK9-NEXT:    store i32 100, ptr [[CH]], align 47207// CHECK9-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 47208// CHECK9-NEXT:    store i32 [[TMP0]], ptr [[N_CASTED]], align 47209// CHECK9-NEXT:    [[TMP1:%.*]] = load i64, ptr [[N_CASTED]], align 87210// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A]], align 87211// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B]], align 87212// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C]], align 87213// CHECK9-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 07214// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP5]], align 87215// CHECK9-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 07216// CHECK9-NEXT:    store i64 [[TMP1]], ptr [[TMP6]], align 87217// CHECK9-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 07218// CHECK9-NEXT:    store ptr null, ptr [[TMP7]], align 87219// CHECK9-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 17220// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[TMP8]], align 87221// CHECK9-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 17222// CHECK9-NEXT:    store ptr [[TMP2]], ptr [[TMP9]], align 87223// CHECK9-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 17224// CHECK9-NEXT:    store ptr null, ptr [[TMP10]], align 87225// CHECK9-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 27226// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[TMP11]], align 87227// CHECK9-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 27228// CHECK9-NEXT:    store ptr [[TMP3]], ptr [[TMP12]], align 87229// CHECK9-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 27230// CHECK9-NEXT:    store ptr null, ptr [[TMP13]], align 87231// CHECK9-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 37232// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[TMP14]], align 87233// CHECK9-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 37234// CHECK9-NEXT:    store ptr [[TMP4]], ptr [[TMP15]], align 87235// CHECK9-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 37236// CHECK9-NEXT:    store ptr null, ptr [[TMP16]], align 87237// CHECK9-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 07238// CHECK9-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 07239// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 47240// CHECK9-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 47241// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47242// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 07243// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17244// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17245// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47246// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47247// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 17248// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i647249// CHECK9-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 07250// CHECK9-NEXT:    store i32 3, ptr [[TMP23]], align 47251// CHECK9-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 17252// CHECK9-NEXT:    store i32 4, ptr [[TMP24]], align 47253// CHECK9-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 27254// CHECK9-NEXT:    store ptr [[TMP17]], ptr [[TMP25]], align 87255// CHECK9-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 37256// CHECK9-NEXT:    store ptr [[TMP18]], ptr [[TMP26]], align 87257// CHECK9-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 47258// CHECK9-NEXT:    store ptr @.offload_sizes.13, ptr [[TMP27]], align 87259// CHECK9-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 57260// CHECK9-NEXT:    store ptr @.offload_maptypes.14, ptr [[TMP28]], align 87261// CHECK9-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 67262// CHECK9-NEXT:    store ptr null, ptr [[TMP29]], align 87263// CHECK9-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 77264// CHECK9-NEXT:    store ptr null, ptr [[TMP30]], align 87265// CHECK9-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 87266// CHECK9-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 87267// CHECK9-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 97268// CHECK9-NEXT:    store i64 0, ptr [[TMP32]], align 87269// CHECK9-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 107270// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 47271// CHECK9-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 117272// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 47273// CHECK9-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 127274// CHECK9-NEXT:    store i32 0, ptr [[TMP35]], align 47275// 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]])7276// CHECK9-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 07277// CHECK9-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]7278// CHECK9:       omp_offload.failed:7279// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42(i64 [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]) #[[ATTR2]]7280// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT]]7281// CHECK9:       omp_offload.cont:7282// CHECK9-NEXT:    [[TMP38:%.*]] = load i32, ptr [[N]], align 47283// CHECK9-NEXT:    store i32 [[TMP38]], ptr [[N_CASTED3]], align 47284// CHECK9-NEXT:    [[TMP39:%.*]] = load i64, ptr [[N_CASTED3]], align 87285// CHECK9-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[A]], align 87286// CHECK9-NEXT:    [[TMP41:%.*]] = load ptr, ptr [[B]], align 87287// CHECK9-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[C]], align 87288// CHECK9-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 07289// CHECK9-NEXT:    store i64 [[TMP39]], ptr [[TMP43]], align 87290// CHECK9-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 07291// CHECK9-NEXT:    store i64 [[TMP39]], ptr [[TMP44]], align 87292// CHECK9-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 07293// CHECK9-NEXT:    store ptr null, ptr [[TMP45]], align 87294// CHECK9-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 17295// CHECK9-NEXT:    store ptr [[TMP40]], ptr [[TMP46]], align 87296// CHECK9-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 17297// CHECK9-NEXT:    store ptr [[TMP40]], ptr [[TMP47]], align 87298// CHECK9-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 17299// CHECK9-NEXT:    store ptr null, ptr [[TMP48]], align 87300// CHECK9-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 27301// CHECK9-NEXT:    store ptr [[TMP41]], ptr [[TMP49]], align 87302// CHECK9-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 27303// CHECK9-NEXT:    store ptr [[TMP41]], ptr [[TMP50]], align 87304// CHECK9-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 27305// CHECK9-NEXT:    store ptr null, ptr [[TMP51]], align 87306// CHECK9-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 37307// CHECK9-NEXT:    store ptr [[TMP42]], ptr [[TMP52]], align 87308// CHECK9-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 37309// CHECK9-NEXT:    store ptr [[TMP42]], ptr [[TMP53]], align 87310// CHECK9-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i64 0, i64 37311// CHECK9-NEXT:    store ptr null, ptr [[TMP54]], align 87312// CHECK9-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 07313// CHECK9-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 07314// CHECK9-NEXT:    [[TMP57:%.*]] = load i32, ptr [[N]], align 47315// CHECK9-NEXT:    store i32 [[TMP57]], ptr [[DOTCAPTURE_EXPR_8]], align 47316// CHECK9-NEXT:    [[TMP58:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_8]], align 47317// CHECK9-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP58]], 07318// CHECK9-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 17319// CHECK9-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[DIV11]], 17320// CHECK9-NEXT:    store i32 [[SUB12]], ptr [[DOTCAPTURE_EXPR_9]], align 47321// CHECK9-NEXT:    [[TMP59:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 47322// CHECK9-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP59]], 17323// CHECK9-NEXT:    [[TMP60:%.*]] = zext i32 [[ADD13]] to i647324// CHECK9-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 07325// CHECK9-NEXT:    store i32 3, ptr [[TMP61]], align 47326// CHECK9-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 17327// CHECK9-NEXT:    store i32 4, ptr [[TMP62]], align 47328// CHECK9-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 27329// CHECK9-NEXT:    store ptr [[TMP55]], ptr [[TMP63]], align 87330// CHECK9-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 37331// CHECK9-NEXT:    store ptr [[TMP56]], ptr [[TMP64]], align 87332// CHECK9-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 47333// CHECK9-NEXT:    store ptr @.offload_sizes.15, ptr [[TMP65]], align 87334// CHECK9-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 57335// CHECK9-NEXT:    store ptr @.offload_maptypes.16, ptr [[TMP66]], align 87336// CHECK9-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 67337// CHECK9-NEXT:    store ptr null, ptr [[TMP67]], align 87338// CHECK9-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 77339// CHECK9-NEXT:    store ptr null, ptr [[TMP68]], align 87340// CHECK9-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 87341// CHECK9-NEXT:    store i64 [[TMP60]], ptr [[TMP69]], align 87342// CHECK9-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 97343// CHECK9-NEXT:    store i64 0, ptr [[TMP70]], align 87344// CHECK9-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 107345// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP71]], align 47346// CHECK9-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 117347// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP72]], align 47348// CHECK9-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 127349// CHECK9-NEXT:    store i32 0, ptr [[TMP73]], align 47350// 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_l50.region_id, ptr [[KERNEL_ARGS14]])7351// CHECK9-NEXT:    [[TMP75:%.*]] = icmp ne i32 [[TMP74]], 07352// CHECK9-NEXT:    br i1 [[TMP75]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]7353// CHECK9:       omp_offload.failed15:7354// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l50(i64 [[TMP39]], ptr [[TMP40]], ptr [[TMP41]], ptr [[TMP42]]) #[[ATTR2]]7355// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT16]]7356// CHECK9:       omp_offload.cont16:7357// CHECK9-NEXT:    [[TMP76:%.*]] = load i32, ptr [[CH]], align 47358// CHECK9-NEXT:    store i32 [[TMP76]], ptr [[CH_CASTED]], align 47359// CHECK9-NEXT:    [[TMP77:%.*]] = load i64, ptr [[CH_CASTED]], align 87360// CHECK9-NEXT:    [[TMP78:%.*]] = load i32, ptr [[N]], align 47361// CHECK9-NEXT:    store i32 [[TMP78]], ptr [[N_CASTED17]], align 47362// CHECK9-NEXT:    [[TMP79:%.*]] = load i64, ptr [[N_CASTED17]], align 87363// CHECK9-NEXT:    [[TMP80:%.*]] = load ptr, ptr [[A]], align 87364// CHECK9-NEXT:    [[TMP81:%.*]] = load ptr, ptr [[B]], align 87365// CHECK9-NEXT:    [[TMP82:%.*]] = load ptr, ptr [[C]], align 87366// CHECK9-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 07367// CHECK9-NEXT:    store i64 [[TMP77]], ptr [[TMP83]], align 87368// CHECK9-NEXT:    [[TMP84:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 07369// CHECK9-NEXT:    store i64 [[TMP77]], ptr [[TMP84]], align 87370// CHECK9-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 07371// CHECK9-NEXT:    store ptr null, ptr [[TMP85]], align 87372// CHECK9-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 17373// CHECK9-NEXT:    store i64 [[TMP79]], ptr [[TMP86]], align 87374// CHECK9-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 17375// CHECK9-NEXT:    store i64 [[TMP79]], ptr [[TMP87]], align 87376// CHECK9-NEXT:    [[TMP88:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 17377// CHECK9-NEXT:    store ptr null, ptr [[TMP88]], align 87378// CHECK9-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 27379// CHECK9-NEXT:    store ptr [[TMP80]], ptr [[TMP89]], align 87380// CHECK9-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 27381// CHECK9-NEXT:    store ptr [[TMP80]], ptr [[TMP90]], align 87382// CHECK9-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 27383// CHECK9-NEXT:    store ptr null, ptr [[TMP91]], align 87384// CHECK9-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 37385// CHECK9-NEXT:    store ptr [[TMP81]], ptr [[TMP92]], align 87386// CHECK9-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 37387// CHECK9-NEXT:    store ptr [[TMP81]], ptr [[TMP93]], align 87388// CHECK9-NEXT:    [[TMP94:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 37389// CHECK9-NEXT:    store ptr null, ptr [[TMP94]], align 87390// CHECK9-NEXT:    [[TMP95:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 47391// CHECK9-NEXT:    store ptr [[TMP82]], ptr [[TMP95]], align 87392// CHECK9-NEXT:    [[TMP96:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 47393// CHECK9-NEXT:    store ptr [[TMP82]], ptr [[TMP96]], align 87394// CHECK9-NEXT:    [[TMP97:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i64 0, i64 47395// CHECK9-NEXT:    store ptr null, ptr [[TMP97]], align 87396// CHECK9-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 07397// CHECK9-NEXT:    [[TMP99:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 07398// CHECK9-NEXT:    [[TMP100:%.*]] = load i32, ptr [[N]], align 47399// CHECK9-NEXT:    store i32 [[TMP100]], ptr [[DOTCAPTURE_EXPR_22]], align 47400// CHECK9-NEXT:    [[TMP101:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 47401// CHECK9-NEXT:    [[SUB24:%.*]] = sub nsw i32 [[TMP101]], 07402// CHECK9-NEXT:    [[DIV25:%.*]] = sdiv i32 [[SUB24]], 17403// CHECK9-NEXT:    [[SUB26:%.*]] = sub nsw i32 [[DIV25]], 17404// CHECK9-NEXT:    store i32 [[SUB26]], ptr [[DOTCAPTURE_EXPR_23]], align 47405// CHECK9-NEXT:    [[TMP102:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_23]], align 47406// CHECK9-NEXT:    [[ADD27:%.*]] = add nsw i32 [[TMP102]], 17407// CHECK9-NEXT:    [[TMP103:%.*]] = zext i32 [[ADD27]] to i647408// CHECK9-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 07409// CHECK9-NEXT:    store i32 3, ptr [[TMP104]], align 47410// CHECK9-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 17411// CHECK9-NEXT:    store i32 5, ptr [[TMP105]], align 47412// CHECK9-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 27413// CHECK9-NEXT:    store ptr [[TMP98]], ptr [[TMP106]], align 87414// CHECK9-NEXT:    [[TMP107:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 37415// CHECK9-NEXT:    store ptr [[TMP99]], ptr [[TMP107]], align 87416// CHECK9-NEXT:    [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 47417// CHECK9-NEXT:    store ptr @.offload_sizes.17, ptr [[TMP108]], align 87418// CHECK9-NEXT:    [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 57419// CHECK9-NEXT:    store ptr @.offload_maptypes.18, ptr [[TMP109]], align 87420// CHECK9-NEXT:    [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 67421// CHECK9-NEXT:    store ptr null, ptr [[TMP110]], align 87422// CHECK9-NEXT:    [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 77423// CHECK9-NEXT:    store ptr null, ptr [[TMP111]], align 87424// CHECK9-NEXT:    [[TMP112:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 87425// CHECK9-NEXT:    store i64 [[TMP103]], ptr [[TMP112]], align 87426// CHECK9-NEXT:    [[TMP113:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 97427// CHECK9-NEXT:    store i64 0, ptr [[TMP113]], align 87428// CHECK9-NEXT:    [[TMP114:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 107429// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP114]], align 47430// CHECK9-NEXT:    [[TMP115:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 117431// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP115]], align 47432// CHECK9-NEXT:    [[TMP116:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 127433// CHECK9-NEXT:    store i32 0, ptr [[TMP116]], align 47434// 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_l58.region_id, ptr [[KERNEL_ARGS28]])7435// CHECK9-NEXT:    [[TMP118:%.*]] = icmp ne i32 [[TMP117]], 07436// CHECK9-NEXT:    br i1 [[TMP118]], label [[OMP_OFFLOAD_FAILED29:%.*]], label [[OMP_OFFLOAD_CONT30:%.*]]7437// CHECK9:       omp_offload.failed29:7438// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l58(i64 [[TMP77]], i64 [[TMP79]], ptr [[TMP80]], ptr [[TMP81]], ptr [[TMP82]]) #[[ATTR2]]7439// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT30]]7440// CHECK9:       omp_offload.cont30:7441// CHECK9-NEXT:    [[TMP119:%.*]] = load i32, ptr [[N]], align 47442// CHECK9-NEXT:    store i32 [[TMP119]], ptr [[N_CASTED31]], align 47443// CHECK9-NEXT:    [[TMP120:%.*]] = load i64, ptr [[N_CASTED31]], align 87444// CHECK9-NEXT:    [[TMP121:%.*]] = load ptr, ptr [[A]], align 87445// CHECK9-NEXT:    [[TMP122:%.*]] = load ptr, ptr [[B]], align 87446// CHECK9-NEXT:    [[TMP123:%.*]] = load ptr, ptr [[C]], align 87447// CHECK9-NEXT:    [[TMP124:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 07448// CHECK9-NEXT:    store i64 [[TMP120]], ptr [[TMP124]], align 87449// CHECK9-NEXT:    [[TMP125:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 07450// CHECK9-NEXT:    store i64 [[TMP120]], ptr [[TMP125]], align 87451// CHECK9-NEXT:    [[TMP126:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 07452// CHECK9-NEXT:    store ptr null, ptr [[TMP126]], align 87453// CHECK9-NEXT:    [[TMP127:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 17454// CHECK9-NEXT:    store ptr [[TMP121]], ptr [[TMP127]], align 87455// CHECK9-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 17456// CHECK9-NEXT:    store ptr [[TMP121]], ptr [[TMP128]], align 87457// CHECK9-NEXT:    [[TMP129:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 17458// CHECK9-NEXT:    store ptr null, ptr [[TMP129]], align 87459// CHECK9-NEXT:    [[TMP130:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 27460// CHECK9-NEXT:    store ptr [[TMP122]], ptr [[TMP130]], align 87461// CHECK9-NEXT:    [[TMP131:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 27462// CHECK9-NEXT:    store ptr [[TMP122]], ptr [[TMP131]], align 87463// CHECK9-NEXT:    [[TMP132:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 27464// CHECK9-NEXT:    store ptr null, ptr [[TMP132]], align 87465// CHECK9-NEXT:    [[TMP133:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 37466// CHECK9-NEXT:    store ptr [[TMP123]], ptr [[TMP133]], align 87467// CHECK9-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 37468// CHECK9-NEXT:    store ptr [[TMP123]], ptr [[TMP134]], align 87469// CHECK9-NEXT:    [[TMP135:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i64 0, i64 37470// CHECK9-NEXT:    store ptr null, ptr [[TMP135]], align 87471// CHECK9-NEXT:    [[TMP136:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 07472// CHECK9-NEXT:    [[TMP137:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 07473// CHECK9-NEXT:    [[TMP138:%.*]] = load i32, ptr [[N]], align 47474// CHECK9-NEXT:    store i32 [[TMP138]], ptr [[DOTCAPTURE_EXPR_36]], align 47475// CHECK9-NEXT:    [[TMP139:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_36]], align 47476// CHECK9-NEXT:    [[SUB38:%.*]] = sub nsw i32 [[TMP139]], 07477// CHECK9-NEXT:    [[DIV39:%.*]] = sdiv i32 [[SUB38]], 17478// CHECK9-NEXT:    [[SUB40:%.*]] = sub nsw i32 [[DIV39]], 17479// CHECK9-NEXT:    store i32 [[SUB40]], ptr [[DOTCAPTURE_EXPR_37]], align 47480// CHECK9-NEXT:    [[TMP140:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_37]], align 47481// CHECK9-NEXT:    [[ADD41:%.*]] = add nsw i32 [[TMP140]], 17482// CHECK9-NEXT:    [[TMP141:%.*]] = zext i32 [[ADD41]] to i647483// CHECK9-NEXT:    [[TMP142:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 07484// CHECK9-NEXT:    store i32 3, ptr [[TMP142]], align 47485// CHECK9-NEXT:    [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 17486// CHECK9-NEXT:    store i32 4, ptr [[TMP143]], align 47487// CHECK9-NEXT:    [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 27488// CHECK9-NEXT:    store ptr [[TMP136]], ptr [[TMP144]], align 87489// CHECK9-NEXT:    [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 37490// CHECK9-NEXT:    store ptr [[TMP137]], ptr [[TMP145]], align 87491// CHECK9-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 47492// CHECK9-NEXT:    store ptr @.offload_sizes.19, ptr [[TMP146]], align 87493// CHECK9-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 57494// CHECK9-NEXT:    store ptr @.offload_maptypes.20, ptr [[TMP147]], align 87495// CHECK9-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 67496// CHECK9-NEXT:    store ptr null, ptr [[TMP148]], align 87497// CHECK9-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 77498// CHECK9-NEXT:    store ptr null, ptr [[TMP149]], align 87499// CHECK9-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 87500// CHECK9-NEXT:    store i64 [[TMP141]], ptr [[TMP150]], align 87501// CHECK9-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 97502// CHECK9-NEXT:    store i64 0, ptr [[TMP151]], align 87503// CHECK9-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 107504// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP152]], align 47505// CHECK9-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 117506// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP153]], align 47507// CHECK9-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 127508// CHECK9-NEXT:    store i32 0, ptr [[TMP154]], align 47509// 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_l66.region_id, ptr [[KERNEL_ARGS42]])7510// CHECK9-NEXT:    [[TMP156:%.*]] = icmp ne i32 [[TMP155]], 07511// CHECK9-NEXT:    br i1 [[TMP156]], label [[OMP_OFFLOAD_FAILED43:%.*]], label [[OMP_OFFLOAD_CONT44:%.*]]7512// CHECK9:       omp_offload.failed43:7513// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l66(i64 [[TMP120]], ptr [[TMP121]], ptr [[TMP122]], ptr [[TMP123]]) #[[ATTR2]]7514// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT44]]7515// CHECK9:       omp_offload.cont44:7516// CHECK9-NEXT:    [[TMP157:%.*]] = load i32, ptr [[CH]], align 47517// CHECK9-NEXT:    store i32 [[TMP157]], ptr [[CH_CASTED45]], align 47518// CHECK9-NEXT:    [[TMP158:%.*]] = load i64, ptr [[CH_CASTED45]], align 87519// CHECK9-NEXT:    [[TMP159:%.*]] = load i32, ptr [[N]], align 47520// CHECK9-NEXT:    store i32 [[TMP159]], ptr [[N_CASTED46]], align 47521// CHECK9-NEXT:    [[TMP160:%.*]] = load i64, ptr [[N_CASTED46]], align 87522// CHECK9-NEXT:    [[TMP161:%.*]] = load ptr, ptr [[A]], align 87523// CHECK9-NEXT:    [[TMP162:%.*]] = load ptr, ptr [[B]], align 87524// CHECK9-NEXT:    [[TMP163:%.*]] = load ptr, ptr [[C]], align 87525// CHECK9-NEXT:    [[TMP164:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 07526// CHECK9-NEXT:    store i64 [[TMP158]], ptr [[TMP164]], align 87527// CHECK9-NEXT:    [[TMP165:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 07528// CHECK9-NEXT:    store i64 [[TMP158]], ptr [[TMP165]], align 87529// CHECK9-NEXT:    [[TMP166:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 07530// CHECK9-NEXT:    store ptr null, ptr [[TMP166]], align 87531// CHECK9-NEXT:    [[TMP167:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 17532// CHECK9-NEXT:    store i64 [[TMP160]], ptr [[TMP167]], align 87533// CHECK9-NEXT:    [[TMP168:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 17534// CHECK9-NEXT:    store i64 [[TMP160]], ptr [[TMP168]], align 87535// CHECK9-NEXT:    [[TMP169:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 17536// CHECK9-NEXT:    store ptr null, ptr [[TMP169]], align 87537// CHECK9-NEXT:    [[TMP170:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 27538// CHECK9-NEXT:    store ptr [[TMP161]], ptr [[TMP170]], align 87539// CHECK9-NEXT:    [[TMP171:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 27540// CHECK9-NEXT:    store ptr [[TMP161]], ptr [[TMP171]], align 87541// CHECK9-NEXT:    [[TMP172:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 27542// CHECK9-NEXT:    store ptr null, ptr [[TMP172]], align 87543// CHECK9-NEXT:    [[TMP173:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 37544// CHECK9-NEXT:    store ptr [[TMP162]], ptr [[TMP173]], align 87545// CHECK9-NEXT:    [[TMP174:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 37546// CHECK9-NEXT:    store ptr [[TMP162]], ptr [[TMP174]], align 87547// CHECK9-NEXT:    [[TMP175:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 37548// CHECK9-NEXT:    store ptr null, ptr [[TMP175]], align 87549// CHECK9-NEXT:    [[TMP176:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 47550// CHECK9-NEXT:    store ptr [[TMP163]], ptr [[TMP176]], align 87551// CHECK9-NEXT:    [[TMP177:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 47552// CHECK9-NEXT:    store ptr [[TMP163]], ptr [[TMP177]], align 87553// CHECK9-NEXT:    [[TMP178:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i64 0, i64 47554// CHECK9-NEXT:    store ptr null, ptr [[TMP178]], align 87555// CHECK9-NEXT:    [[TMP179:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 07556// CHECK9-NEXT:    [[TMP180:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 07557// CHECK9-NEXT:    [[TMP181:%.*]] = load i32, ptr [[N]], align 47558// CHECK9-NEXT:    store i32 [[TMP181]], ptr [[DOTCAPTURE_EXPR_51]], align 47559// CHECK9-NEXT:    [[TMP182:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_51]], align 47560// CHECK9-NEXT:    [[SUB53:%.*]] = sub nsw i32 [[TMP182]], 07561// CHECK9-NEXT:    [[DIV54:%.*]] = sdiv i32 [[SUB53]], 17562// CHECK9-NEXT:    [[SUB55:%.*]] = sub nsw i32 [[DIV54]], 17563// CHECK9-NEXT:    store i32 [[SUB55]], ptr [[DOTCAPTURE_EXPR_52]], align 47564// CHECK9-NEXT:    [[TMP183:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_52]], align 47565// CHECK9-NEXT:    [[ADD56:%.*]] = add nsw i32 [[TMP183]], 17566// CHECK9-NEXT:    [[TMP184:%.*]] = zext i32 [[ADD56]] to i647567// CHECK9-NEXT:    [[TMP185:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 07568// CHECK9-NEXT:    store i32 3, ptr [[TMP185]], align 47569// CHECK9-NEXT:    [[TMP186:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 17570// CHECK9-NEXT:    store i32 5, ptr [[TMP186]], align 47571// CHECK9-NEXT:    [[TMP187:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 27572// CHECK9-NEXT:    store ptr [[TMP179]], ptr [[TMP187]], align 87573// CHECK9-NEXT:    [[TMP188:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 37574// CHECK9-NEXT:    store ptr [[TMP180]], ptr [[TMP188]], align 87575// CHECK9-NEXT:    [[TMP189:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 47576// CHECK9-NEXT:    store ptr @.offload_sizes.21, ptr [[TMP189]], align 87577// CHECK9-NEXT:    [[TMP190:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 57578// CHECK9-NEXT:    store ptr @.offload_maptypes.22, ptr [[TMP190]], align 87579// CHECK9-NEXT:    [[TMP191:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 67580// CHECK9-NEXT:    store ptr null, ptr [[TMP191]], align 87581// CHECK9-NEXT:    [[TMP192:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 77582// CHECK9-NEXT:    store ptr null, ptr [[TMP192]], align 87583// CHECK9-NEXT:    [[TMP193:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 87584// CHECK9-NEXT:    store i64 [[TMP184]], ptr [[TMP193]], align 87585// CHECK9-NEXT:    [[TMP194:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 97586// CHECK9-NEXT:    store i64 0, ptr [[TMP194]], align 87587// CHECK9-NEXT:    [[TMP195:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 107588// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP195]], align 47589// CHECK9-NEXT:    [[TMP196:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 117590// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP196]], align 47591// CHECK9-NEXT:    [[TMP197:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 127592// CHECK9-NEXT:    store i32 0, ptr [[TMP197]], align 47593// 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_l74.region_id, ptr [[KERNEL_ARGS57]])7594// CHECK9-NEXT:    [[TMP199:%.*]] = icmp ne i32 [[TMP198]], 07595// CHECK9-NEXT:    br i1 [[TMP199]], label [[OMP_OFFLOAD_FAILED58:%.*]], label [[OMP_OFFLOAD_CONT59:%.*]]7596// CHECK9:       omp_offload.failed58:7597// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l74(i64 [[TMP158]], i64 [[TMP160]], ptr [[TMP161]], ptr [[TMP162]], ptr [[TMP163]]) #[[ATTR2]]7598// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT59]]7599// CHECK9:       omp_offload.cont59:7600// CHECK9-NEXT:    [[TMP200:%.*]] = load i32, ptr [[N]], align 47601// CHECK9-NEXT:    store i32 [[TMP200]], ptr [[N_CASTED60]], align 47602// CHECK9-NEXT:    [[TMP201:%.*]] = load i64, ptr [[N_CASTED60]], align 87603// CHECK9-NEXT:    [[TMP202:%.*]] = load ptr, ptr [[A]], align 87604// CHECK9-NEXT:    [[TMP203:%.*]] = load ptr, ptr [[B]], align 87605// CHECK9-NEXT:    [[TMP204:%.*]] = load ptr, ptr [[C]], align 87606// CHECK9-NEXT:    [[TMP205:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 07607// CHECK9-NEXT:    store i64 [[TMP201]], ptr [[TMP205]], align 87608// CHECK9-NEXT:    [[TMP206:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 07609// CHECK9-NEXT:    store i64 [[TMP201]], ptr [[TMP206]], align 87610// CHECK9-NEXT:    [[TMP207:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 07611// CHECK9-NEXT:    store ptr null, ptr [[TMP207]], align 87612// CHECK9-NEXT:    [[TMP208:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 17613// CHECK9-NEXT:    store ptr [[TMP202]], ptr [[TMP208]], align 87614// CHECK9-NEXT:    [[TMP209:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 17615// CHECK9-NEXT:    store ptr [[TMP202]], ptr [[TMP209]], align 87616// CHECK9-NEXT:    [[TMP210:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 17617// CHECK9-NEXT:    store ptr null, ptr [[TMP210]], align 87618// CHECK9-NEXT:    [[TMP211:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 27619// CHECK9-NEXT:    store ptr [[TMP203]], ptr [[TMP211]], align 87620// CHECK9-NEXT:    [[TMP212:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 27621// CHECK9-NEXT:    store ptr [[TMP203]], ptr [[TMP212]], align 87622// CHECK9-NEXT:    [[TMP213:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 27623// CHECK9-NEXT:    store ptr null, ptr [[TMP213]], align 87624// CHECK9-NEXT:    [[TMP214:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 37625// CHECK9-NEXT:    store ptr [[TMP204]], ptr [[TMP214]], align 87626// CHECK9-NEXT:    [[TMP215:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 37627// CHECK9-NEXT:    store ptr [[TMP204]], ptr [[TMP215]], align 87628// CHECK9-NEXT:    [[TMP216:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i64 0, i64 37629// CHECK9-NEXT:    store ptr null, ptr [[TMP216]], align 87630// CHECK9-NEXT:    [[TMP217:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 07631// CHECK9-NEXT:    [[TMP218:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 07632// CHECK9-NEXT:    [[TMP219:%.*]] = load i32, ptr [[N]], align 47633// CHECK9-NEXT:    store i32 [[TMP219]], ptr [[DOTCAPTURE_EXPR_65]], align 47634// CHECK9-NEXT:    [[TMP220:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_65]], align 47635// CHECK9-NEXT:    [[SUB67:%.*]] = sub nsw i32 [[TMP220]], 07636// CHECK9-NEXT:    [[DIV68:%.*]] = sdiv i32 [[SUB67]], 17637// CHECK9-NEXT:    [[SUB69:%.*]] = sub nsw i32 [[DIV68]], 17638// CHECK9-NEXT:    store i32 [[SUB69]], ptr [[DOTCAPTURE_EXPR_66]], align 47639// CHECK9-NEXT:    [[TMP221:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_66]], align 47640// CHECK9-NEXT:    [[ADD70:%.*]] = add nsw i32 [[TMP221]], 17641// CHECK9-NEXT:    [[TMP222:%.*]] = zext i32 [[ADD70]] to i647642// CHECK9-NEXT:    [[TMP223:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 07643// CHECK9-NEXT:    store i32 3, ptr [[TMP223]], align 47644// CHECK9-NEXT:    [[TMP224:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 17645// CHECK9-NEXT:    store i32 4, ptr [[TMP224]], align 47646// CHECK9-NEXT:    [[TMP225:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 27647// CHECK9-NEXT:    store ptr [[TMP217]], ptr [[TMP225]], align 87648// CHECK9-NEXT:    [[TMP226:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 37649// CHECK9-NEXT:    store ptr [[TMP218]], ptr [[TMP226]], align 87650// CHECK9-NEXT:    [[TMP227:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 47651// CHECK9-NEXT:    store ptr @.offload_sizes.23, ptr [[TMP227]], align 87652// CHECK9-NEXT:    [[TMP228:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 57653// CHECK9-NEXT:    store ptr @.offload_maptypes.24, ptr [[TMP228]], align 87654// CHECK9-NEXT:    [[TMP229:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 67655// CHECK9-NEXT:    store ptr null, ptr [[TMP229]], align 87656// CHECK9-NEXT:    [[TMP230:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 77657// CHECK9-NEXT:    store ptr null, ptr [[TMP230]], align 87658// CHECK9-NEXT:    [[TMP231:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 87659// CHECK9-NEXT:    store i64 [[TMP222]], ptr [[TMP231]], align 87660// CHECK9-NEXT:    [[TMP232:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 97661// CHECK9-NEXT:    store i64 0, ptr [[TMP232]], align 87662// CHECK9-NEXT:    [[TMP233:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 107663// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP233]], align 47664// CHECK9-NEXT:    [[TMP234:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 117665// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP234]], align 47666// CHECK9-NEXT:    [[TMP235:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 127667// CHECK9-NEXT:    store i32 0, ptr [[TMP235]], align 47668// 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_l82.region_id, ptr [[KERNEL_ARGS71]])7669// CHECK9-NEXT:    [[TMP237:%.*]] = icmp ne i32 [[TMP236]], 07670// CHECK9-NEXT:    br i1 [[TMP237]], label [[OMP_OFFLOAD_FAILED72:%.*]], label [[OMP_OFFLOAD_CONT73:%.*]]7671// CHECK9:       omp_offload.failed72:7672// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l82(i64 [[TMP201]], ptr [[TMP202]], ptr [[TMP203]], ptr [[TMP204]]) #[[ATTR2]]7673// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT73]]7674// CHECK9:       omp_offload.cont73:7675// CHECK9-NEXT:    [[TMP238:%.*]] = load i32, ptr [[CH]], align 47676// CHECK9-NEXT:    store i32 [[TMP238]], ptr [[CH_CASTED74]], align 47677// CHECK9-NEXT:    [[TMP239:%.*]] = load i64, ptr [[CH_CASTED74]], align 87678// CHECK9-NEXT:    [[TMP240:%.*]] = load i32, ptr [[N]], align 47679// CHECK9-NEXT:    store i32 [[TMP240]], ptr [[N_CASTED75]], align 47680// CHECK9-NEXT:    [[TMP241:%.*]] = load i64, ptr [[N_CASTED75]], align 87681// CHECK9-NEXT:    [[TMP242:%.*]] = load ptr, ptr [[A]], align 87682// CHECK9-NEXT:    [[TMP243:%.*]] = load ptr, ptr [[B]], align 87683// CHECK9-NEXT:    [[TMP244:%.*]] = load ptr, ptr [[C]], align 87684// CHECK9-NEXT:    [[TMP245:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 07685// CHECK9-NEXT:    store i64 [[TMP239]], ptr [[TMP245]], align 87686// CHECK9-NEXT:    [[TMP246:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 07687// CHECK9-NEXT:    store i64 [[TMP239]], ptr [[TMP246]], align 87688// CHECK9-NEXT:    [[TMP247:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 07689// CHECK9-NEXT:    store ptr null, ptr [[TMP247]], align 87690// CHECK9-NEXT:    [[TMP248:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 17691// CHECK9-NEXT:    store i64 [[TMP241]], ptr [[TMP248]], align 87692// CHECK9-NEXT:    [[TMP249:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 17693// CHECK9-NEXT:    store i64 [[TMP241]], ptr [[TMP249]], align 87694// CHECK9-NEXT:    [[TMP250:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 17695// CHECK9-NEXT:    store ptr null, ptr [[TMP250]], align 87696// CHECK9-NEXT:    [[TMP251:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 27697// CHECK9-NEXT:    store ptr [[TMP242]], ptr [[TMP251]], align 87698// CHECK9-NEXT:    [[TMP252:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 27699// CHECK9-NEXT:    store ptr [[TMP242]], ptr [[TMP252]], align 87700// CHECK9-NEXT:    [[TMP253:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 27701// CHECK9-NEXT:    store ptr null, ptr [[TMP253]], align 87702// CHECK9-NEXT:    [[TMP254:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 37703// CHECK9-NEXT:    store ptr [[TMP243]], ptr [[TMP254]], align 87704// CHECK9-NEXT:    [[TMP255:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 37705// CHECK9-NEXT:    store ptr [[TMP243]], ptr [[TMP255]], align 87706// CHECK9-NEXT:    [[TMP256:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 37707// CHECK9-NEXT:    store ptr null, ptr [[TMP256]], align 87708// CHECK9-NEXT:    [[TMP257:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 47709// CHECK9-NEXT:    store ptr [[TMP244]], ptr [[TMP257]], align 87710// CHECK9-NEXT:    [[TMP258:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 47711// CHECK9-NEXT:    store ptr [[TMP244]], ptr [[TMP258]], align 87712// CHECK9-NEXT:    [[TMP259:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i64 0, i64 47713// CHECK9-NEXT:    store ptr null, ptr [[TMP259]], align 87714// CHECK9-NEXT:    [[TMP260:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 07715// CHECK9-NEXT:    [[TMP261:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 07716// CHECK9-NEXT:    [[TMP262:%.*]] = load i32, ptr [[N]], align 47717// CHECK9-NEXT:    store i32 [[TMP262]], ptr [[DOTCAPTURE_EXPR_80]], align 47718// CHECK9-NEXT:    [[TMP263:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_80]], align 47719// CHECK9-NEXT:    [[SUB82:%.*]] = sub nsw i32 [[TMP263]], 07720// CHECK9-NEXT:    [[DIV83:%.*]] = sdiv i32 [[SUB82]], 17721// CHECK9-NEXT:    [[SUB84:%.*]] = sub nsw i32 [[DIV83]], 17722// CHECK9-NEXT:    store i32 [[SUB84]], ptr [[DOTCAPTURE_EXPR_81]], align 47723// CHECK9-NEXT:    [[TMP264:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_81]], align 47724// CHECK9-NEXT:    [[ADD85:%.*]] = add nsw i32 [[TMP264]], 17725// CHECK9-NEXT:    [[TMP265:%.*]] = zext i32 [[ADD85]] to i647726// CHECK9-NEXT:    [[TMP266:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 07727// CHECK9-NEXT:    store i32 3, ptr [[TMP266]], align 47728// CHECK9-NEXT:    [[TMP267:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 17729// CHECK9-NEXT:    store i32 5, ptr [[TMP267]], align 47730// CHECK9-NEXT:    [[TMP268:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 27731// CHECK9-NEXT:    store ptr [[TMP260]], ptr [[TMP268]], align 87732// CHECK9-NEXT:    [[TMP269:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 37733// CHECK9-NEXT:    store ptr [[TMP261]], ptr [[TMP269]], align 87734// CHECK9-NEXT:    [[TMP270:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 47735// CHECK9-NEXT:    store ptr @.offload_sizes.25, ptr [[TMP270]], align 87736// CHECK9-NEXT:    [[TMP271:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 57737// CHECK9-NEXT:    store ptr @.offload_maptypes.26, ptr [[TMP271]], align 87738// CHECK9-NEXT:    [[TMP272:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 67739// CHECK9-NEXT:    store ptr null, ptr [[TMP272]], align 87740// CHECK9-NEXT:    [[TMP273:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 77741// CHECK9-NEXT:    store ptr null, ptr [[TMP273]], align 87742// CHECK9-NEXT:    [[TMP274:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 87743// CHECK9-NEXT:    store i64 [[TMP265]], ptr [[TMP274]], align 87744// CHECK9-NEXT:    [[TMP275:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 97745// CHECK9-NEXT:    store i64 0, ptr [[TMP275]], align 87746// CHECK9-NEXT:    [[TMP276:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 107747// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP276]], align 47748// CHECK9-NEXT:    [[TMP277:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 117749// CHECK9-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP277]], align 47750// CHECK9-NEXT:    [[TMP278:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 127751// CHECK9-NEXT:    store i32 0, ptr [[TMP278]], align 47752// 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_l90.region_id, ptr [[KERNEL_ARGS86]])7753// CHECK9-NEXT:    [[TMP280:%.*]] = icmp ne i32 [[TMP279]], 07754// CHECK9-NEXT:    br i1 [[TMP280]], label [[OMP_OFFLOAD_FAILED87:%.*]], label [[OMP_OFFLOAD_CONT88:%.*]]7755// CHECK9:       omp_offload.failed87:7756// CHECK9-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l90(i64 [[TMP239]], i64 [[TMP241]], ptr [[TMP242]], ptr [[TMP243]], ptr [[TMP244]]) #[[ATTR2]]7757// CHECK9-NEXT:    br label [[OMP_OFFLOAD_CONT88]]7758// CHECK9:       omp_offload.cont88:7759// CHECK9-NEXT:    ret i32 07760//7761//7762// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l427763// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {7764// CHECK9-NEXT:  entry:7765// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 87766// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87767// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87768// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87769// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 87770// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87771// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87772// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87773// 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]])7774// CHECK9-NEXT:    ret void7775//7776//7777// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined7778// 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]] {7779// CHECK9-NEXT:  entry:7780// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87781// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87782// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87783// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87784// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87785// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87786// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47787// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47788// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47789// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47790// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47791// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 47792// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 47793// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47794// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47795// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 47796// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87797// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87798// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87799// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87800// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87801// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87802// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 87803// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 87804// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 87805// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 87806// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 47807// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 47808// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47809// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 07810// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17811// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17812// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47813// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47814// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47815// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]7816// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7817// CHECK9:       omp.precond.then:7818// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 47819// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47820// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 47821// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47822// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47823// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87824// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 47825// 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)7826// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47827// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47828// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]7829// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7830// CHECK9:       cond.true:7831// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47832// CHECK9-NEXT:    br label [[COND_END:%.*]]7833// CHECK9:       cond.false:7834// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 47835// CHECK9-NEXT:    br label [[COND_END]]7836// CHECK9:       cond.end:7837// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]7838// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 47839// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 47840// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 47841// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7842// CHECK9:       omp.inner.for.cond:7843// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP62:![0-9]+]]7844// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP62]]7845// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]7846// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7847// CHECK9:       omp.inner.for.body:7848// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP62]]7849// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i647850// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP62]]7851// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i647852// 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]]), !llvm.access.group [[ACC_GRP62]]7853// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7854// CHECK9:       omp.inner.for.inc:7855// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP62]]7856// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP62]]7857// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]7858// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP62]]7859// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP63:![0-9]+]]7860// CHECK9:       omp.inner.for.end:7861// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7862// CHECK9:       omp.loop.exit:7863// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87864// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 47865// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])7866// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 47867// CHECK9-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 07868// CHECK9-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]7869// CHECK9:       .omp.final.then:7870// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47871// CHECK9-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 07872// CHECK9-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 17873// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 17874// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]7875// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 47876// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]7877// CHECK9:       .omp.final.done:7878// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]7879// CHECK9:       omp.precond.end:7880// CHECK9-NEXT:    ret void7881//7882//7883// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined.omp_outlined7884// 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]] {7885// CHECK9-NEXT:  entry:7886// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 87887// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 87888// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 87889// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 87890// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 87891// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 87892// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 87893// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 87894// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 47895// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 47896// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 47897// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 47898// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 47899// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 47900// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 47901// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 47902// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 47903// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 47904// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 87905// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 87906// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 87907// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 87908// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 87909// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 87910// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 87911// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 87912// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 87913// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 87914// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 87915// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 87916// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 47917// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 47918// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47919// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 07920// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 17921// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 17922// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 47923// CHECK9-NEXT:    store i32 0, ptr [[I]], align 47924// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 47925// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]7926// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]7927// CHECK9:       omp.precond.then:7928// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 47929// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47930// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 47931// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 87932// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i327933// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 87934// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i327935// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 47936// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 47937// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 47938// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 47939// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87940// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 47941// 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)7942// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47943// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47944// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]7945// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]7946// CHECK9:       cond.true:7947// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 47948// CHECK9-NEXT:    br label [[COND_END:%.*]]7949// CHECK9:       cond.false:7950// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 47951// CHECK9-NEXT:    br label [[COND_END]]7952// CHECK9:       cond.end:7953// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]7954// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 47955// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 47956// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 47957// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]7958// CHECK9:       omp.inner.for.cond:7959// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP65:![0-9]+]]7960// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP65]]7961// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]7962// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]7963// CHECK9:       omp.inner.for.body:7964// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP65]]7965// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 17966// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]7967// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP65]]7968// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP65]]7969// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP65]]7970// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i647971// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i64 [[IDXPROM]]7972// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP65]]7973// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP65]]7974// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP65]]7975// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i647976// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i64 [[IDXPROM7]]7977// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP65]]7978// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]7979// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP65]]7980// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP65]]7981// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i647982// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDXPROM10]]7983// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 4, !llvm.access.group [[ACC_GRP65]]7984// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]7985// CHECK9:       omp.body.continue:7986// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]7987// CHECK9:       omp.inner.for.inc:7988// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP65]]7989// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 17990// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP65]]7991// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP66:![0-9]+]]7992// CHECK9:       omp.inner.for.end:7993// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]7994// CHECK9:       omp.loop.exit:7995// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 87996// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 47997// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])7998// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 47999// CHECK9-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 08000// CHECK9-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]8001// CHECK9:       .omp.final.then:8002// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48003// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP33]], 08004// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 18005// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 18006// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]8007// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 48008// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]8009// CHECK9:       .omp.final.done:8010// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8011// CHECK9:       omp.precond.end:8012// CHECK9-NEXT:    ret void8013//8014//8015// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l508016// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {8017// CHECK9-NEXT:  entry:8018// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 88019// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88020// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88021// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88022// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 88023// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88024// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88025// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88026// 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_l50.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])8027// CHECK9-NEXT:    ret void8028//8029//8030// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l50.omp_outlined8031// 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]] {8032// CHECK9-NEXT:  entry:8033// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88034// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88035// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88036// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88037// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88038// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88039// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48040// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48041// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48042// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48043// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48044// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 48045// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 48046// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48047// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48048// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 48049// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88050// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88051// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88052// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88053// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88054// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88055// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88056// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88057// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88058// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88059// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48060// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 48061// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48062// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08063// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18064// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 18065// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 48066// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48067// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48068// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8069// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8070// CHECK9:       omp.precond.then:8071// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 48072// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48073// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 48074// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48075// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48076// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88077// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 48078// 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)8079// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48080// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48081// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]8082// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8083// CHECK9:       cond.true:8084// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48085// CHECK9-NEXT:    br label [[COND_END:%.*]]8086// CHECK9:       cond.false:8087// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48088// CHECK9-NEXT:    br label [[COND_END]]8089// CHECK9:       cond.end:8090// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]8091// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 48092// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48093// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 48094// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8095// CHECK9:       omp.inner.for.cond:8096// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP68:![0-9]+]]8097// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP68]]8098// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]8099// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8100// CHECK9:       omp.inner.for.body:8101// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP68]]8102// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i648103// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP68]]8104// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i648105// 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_l50.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP68]]8106// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8107// CHECK9:       omp.inner.for.inc:8108// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP68]]8109// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP68]]8110// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]8111// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP68]]8112// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP69:![0-9]+]]8113// CHECK9:       omp.inner.for.end:8114// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8115// CHECK9:       omp.loop.exit:8116// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88117// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 48118// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])8119// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 48120// CHECK9-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 08121// CHECK9-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]8122// CHECK9:       .omp.final.then:8123// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48124// CHECK9-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 08125// CHECK9-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 18126// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 18127// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]8128// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 48129// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]8130// CHECK9:       .omp.final.done:8131// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8132// CHECK9:       omp.precond.end:8133// CHECK9-NEXT:    ret void8134//8135//8136// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l50.omp_outlined.omp_outlined8137// 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]] {8138// CHECK9-NEXT:  entry:8139// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88140// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88141// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 88142// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 88143// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88144// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88145// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88146// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88147// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48148// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48149// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48150// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48151// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48152// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 48153// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 48154// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48155// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48156// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 48157// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88158// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88159// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 88160// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 88161// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88162// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88163// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88164// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88165// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88166// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88167// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88168// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88169// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48170// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 48171// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48172// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08173// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18174// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 18175// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 48176// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48177// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48178// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8179// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8180// CHECK9:       omp.precond.then:8181// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 48182// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48183// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 48184// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 88185// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i328186// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88187// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i328188// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 48189// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 48190// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48191// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48192// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88193// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 48194// 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)8195// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48196// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48197// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]8198// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8199// CHECK9:       cond.true:8200// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48201// CHECK9-NEXT:    br label [[COND_END:%.*]]8202// CHECK9:       cond.false:8203// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48204// CHECK9-NEXT:    br label [[COND_END]]8205// CHECK9:       cond.end:8206// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]8207// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 48208// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48209// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 48210// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8211// CHECK9:       omp.inner.for.cond:8212// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP71:![0-9]+]]8213// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP71]]8214// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]8215// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8216// CHECK9:       omp.inner.for.body:8217// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP71]]8218// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 18219// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]8220// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP71]]8221// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP71]]8222// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP71]]8223// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i648224// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i64 [[IDXPROM]]8225// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP71]]8226// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP71]]8227// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP71]]8228// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i648229// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i64 [[IDXPROM7]]8230// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP71]]8231// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]8232// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP71]]8233// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP71]]8234// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i648235// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDXPROM10]]8236// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 4, !llvm.access.group [[ACC_GRP71]]8237// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]8238// CHECK9:       omp.body.continue:8239// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8240// CHECK9:       omp.inner.for.inc:8241// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP71]]8242// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 18243// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP71]]8244// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP72:![0-9]+]]8245// CHECK9:       omp.inner.for.end:8246// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8247// CHECK9:       omp.loop.exit:8248// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88249// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 48250// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])8251// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 48252// CHECK9-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 08253// CHECK9-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]8254// CHECK9:       .omp.final.then:8255// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48256// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP33]], 08257// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 18258// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 18259// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]8260// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 48261// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]8262// CHECK9:       .omp.final.done:8263// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8264// CHECK9:       omp.precond.end:8265// CHECK9-NEXT:    ret void8266//8267//8268// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l588269// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {8270// CHECK9-NEXT:  entry:8271// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 88272// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 88273// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88274// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88275// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88276// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 88277// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 88278// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88279// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88280// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88281// 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_l58.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])8282// CHECK9-NEXT:    ret void8283//8284//8285// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l58.omp_outlined8286// 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]] {8287// CHECK9-NEXT:  entry:8288// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88289// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88290// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 88291// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88292// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88293// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88294// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88295// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48296// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48297// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48298// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48299// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48300// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 48301// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 48302// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48303// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48304// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 48305// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88306// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88307// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 88308// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88309// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88310// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88311// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88312// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 88313// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 88314// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 88315// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 88316// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 88317// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 48318// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 48319// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48320// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 08321// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18322// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 18323// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 48324// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48325// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48326// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]8327// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8328// CHECK9:       omp.precond.then:8329// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 48330// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48331// CHECK9-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 48332// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48333// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48334// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 48335// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88336// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 48337// 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]])8338// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48339// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48340// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]8341// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8342// CHECK9:       cond.true:8343// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48344// CHECK9-NEXT:    br label [[COND_END:%.*]]8345// CHECK9:       cond.false:8346// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48347// CHECK9-NEXT:    br label [[COND_END]]8348// CHECK9:       cond.end:8349// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]8350// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 48351// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48352// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 48353// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8354// CHECK9:       omp.inner.for.cond:8355// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP74:![0-9]+]]8356// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP74]]8357// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 18358// CHECK9-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]8359// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8360// CHECK9:       omp.inner.for.body:8361// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP74]]8362// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i648363// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP74]]8364// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i648365// 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_l58.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]), !llvm.access.group [[ACC_GRP74]]8366// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8367// CHECK9:       omp.inner.for.inc:8368// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP74]]8369// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP74]]8370// CHECK9-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]8371// CHECK9-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP74]]8372// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP74]]8373// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP74]]8374// CHECK9-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]8375// CHECK9-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP74]]8376// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP74]]8377// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP74]]8378// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP27]], [[TMP28]]8379// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP74]]8380// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP74]]8381// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP74]]8382// CHECK9-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP29]], [[TMP30]]8383// CHECK9-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]8384// CHECK9:       cond.true10:8385// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP74]]8386// CHECK9-NEXT:    br label [[COND_END12:%.*]]8387// CHECK9:       cond.false11:8388// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP74]]8389// CHECK9-NEXT:    br label [[COND_END12]]8390// CHECK9:       cond.end12:8391// CHECK9-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP31]], [[COND_TRUE10]] ], [ [[TMP32]], [[COND_FALSE11]] ]8392// CHECK9-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP74]]8393// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP74]]8394// CHECK9-NEXT:    store i32 [[TMP33]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP74]]8395// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP75:![0-9]+]]8396// CHECK9:       omp.inner.for.end:8397// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8398// CHECK9:       omp.loop.exit:8399// CHECK9-NEXT:    [[TMP34:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88400// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[TMP34]], align 48401// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP35]])8402// CHECK9-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 48403// CHECK9-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 08404// CHECK9-NEXT:    br i1 [[TMP37]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]8405// CHECK9:       .omp.final.then:8406// CHECK9-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48407// CHECK9-NEXT:    [[SUB14:%.*]] = sub nsw i32 [[TMP38]], 08408// CHECK9-NEXT:    [[DIV15:%.*]] = sdiv i32 [[SUB14]], 18409// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV15]], 18410// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL]]8411// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I3]], align 48412// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]8413// CHECK9:       .omp.final.done:8414// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8415// CHECK9:       omp.precond.end:8416// CHECK9-NEXT:    ret void8417//8418//8419// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l58.omp_outlined.omp_outlined8420// 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]] {8421// CHECK9-NEXT:  entry:8422// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88423// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88424// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 88425// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 88426// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88427// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88428// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88429// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88430// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48431// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48432// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48433// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48434// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48435// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 48436// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 48437// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48438// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48439// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 48440// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88441// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88442// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 88443// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 88444// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88445// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88446// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88447// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88448// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88449// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88450// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88451// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88452// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48453// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 48454// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48455// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08456// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18457// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 18458// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 48459// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48460// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48461// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8462// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8463// CHECK9:       omp.precond.then:8464// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 48465// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48466// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 48467// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 88468// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i328469// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88470// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i328471// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 48472// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 48473// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48474// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48475// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88476// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 48477// 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)8478// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48479// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48480// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]8481// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8482// CHECK9:       cond.true:8483// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48484// CHECK9-NEXT:    br label [[COND_END:%.*]]8485// CHECK9:       cond.false:8486// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48487// CHECK9-NEXT:    br label [[COND_END]]8488// CHECK9:       cond.end:8489// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]8490// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 48491// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48492// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 48493// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8494// CHECK9:       omp.inner.for.cond:8495// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP77:![0-9]+]]8496// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP77]]8497// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]8498// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8499// CHECK9:       omp.inner.for.body:8500// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP77]]8501// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 18502// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]8503// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP77]]8504// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP77]]8505// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP77]]8506// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i648507// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i64 [[IDXPROM]]8508// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP77]]8509// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP77]]8510// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP77]]8511// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i648512// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i64 [[IDXPROM7]]8513// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP77]]8514// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]8515// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP77]]8516// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP77]]8517// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i648518// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDXPROM10]]8519// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 4, !llvm.access.group [[ACC_GRP77]]8520// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]8521// CHECK9:       omp.body.continue:8522// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8523// CHECK9:       omp.inner.for.inc:8524// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP77]]8525// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 18526// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP77]]8527// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP78:![0-9]+]]8528// CHECK9:       omp.inner.for.end:8529// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8530// CHECK9:       omp.loop.exit:8531// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88532// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 48533// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])8534// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 48535// CHECK9-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 08536// CHECK9-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]8537// CHECK9:       .omp.final.then:8538// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48539// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP33]], 08540// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 18541// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 18542// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]8543// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 48544// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]8545// CHECK9:       .omp.final.done:8546// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8547// CHECK9:       omp.precond.end:8548// CHECK9-NEXT:    ret void8549//8550//8551// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l668552// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {8553// CHECK9-NEXT:  entry:8554// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 88555// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88556// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88557// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88558// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 88559// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88560// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88561// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88562// 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_l66.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])8563// CHECK9-NEXT:    ret void8564//8565//8566// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l66.omp_outlined8567// 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]] {8568// CHECK9-NEXT:  entry:8569// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88570// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88571// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88572// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88573// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88574// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88575// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48576// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48577// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48578// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48579// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48580// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 48581// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 48582// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48583// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48584// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 48585// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88586// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88587// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88588// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88589// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88590// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88591// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88592// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88593// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88594// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88595// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48596// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 48597// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48598// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08599// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18600// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 18601// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 48602// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48603// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48604// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8605// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8606// CHECK9:       omp.precond.then:8607// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 48608// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48609// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 48610// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48611// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48612// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88613// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 48614// 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)8615// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48616// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48617// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]8618// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8619// CHECK9:       cond.true:8620// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48621// CHECK9-NEXT:    br label [[COND_END:%.*]]8622// CHECK9:       cond.false:8623// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48624// CHECK9-NEXT:    br label [[COND_END]]8625// CHECK9:       cond.end:8626// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]8627// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 48628// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48629// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 48630// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8631// CHECK9:       omp.inner.for.cond:8632// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP80:![0-9]+]]8633// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP80]]8634// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]8635// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8636// CHECK9:       omp.inner.for.body:8637// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP80]]8638// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i648639// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP80]]8640// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i648641// 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_l66.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP80]]8642// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8643// CHECK9:       omp.inner.for.inc:8644// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP80]]8645// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP80]]8646// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]8647// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP80]]8648// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP81:![0-9]+]]8649// CHECK9:       omp.inner.for.end:8650// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8651// CHECK9:       omp.loop.exit:8652// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88653// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 48654// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])8655// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 48656// CHECK9-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 08657// CHECK9-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]8658// CHECK9:       .omp.final.then:8659// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48660// CHECK9-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 08661// CHECK9-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 18662// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 18663// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]8664// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 48665// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]8666// CHECK9:       .omp.final.done:8667// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8668// CHECK9:       omp.precond.end:8669// CHECK9-NEXT:    ret void8670//8671//8672// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l66.omp_outlined.omp_outlined8673// 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]] {8674// CHECK9-NEXT:  entry:8675// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88676// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88677// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 88678// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, 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:    [[DOTOMP_IV:%.*]] = alloca i32, align 48684// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48685// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48686// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48687// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48688// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 48689// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 48690// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48691// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48692// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 48693// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88694// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88695// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 88696// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 88697// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88698// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88699// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88700// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88701// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88702// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88703// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88704// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88705// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48706// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 48707// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48708// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08709// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18710// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 18711// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 48712// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48713// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48714// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8715// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8716// CHECK9:       omp.precond.then:8717// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 48718// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48719// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 48720// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 88721// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i328722// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88723// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i328724// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 48725// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 48726// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48727// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48728// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88729// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 48730// 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)8731// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48732// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48733// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]8734// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8735// CHECK9:       cond.true:8736// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48737// CHECK9-NEXT:    br label [[COND_END:%.*]]8738// CHECK9:       cond.false:8739// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 48740// CHECK9-NEXT:    br label [[COND_END]]8741// CHECK9:       cond.end:8742// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]8743// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 48744// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 48745// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 48746// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8747// CHECK9:       omp.inner.for.cond:8748// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP83:![0-9]+]]8749// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP83]]8750// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]8751// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8752// CHECK9:       omp.inner.for.body:8753// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP83]]8754// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 18755// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]8756// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP83]]8757// CHECK9-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP83]]8758// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP83]]8759// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP21]] to i648760// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i64 [[IDXPROM]]8761// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP83]]8762// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP83]]8763// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP83]]8764// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP24]] to i648765// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i64 [[IDXPROM7]]8766// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP83]]8767// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]8768// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP83]]8769// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP83]]8770// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP27]] to i648771// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDXPROM10]]8772// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 4, !llvm.access.group [[ACC_GRP83]]8773// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]8774// CHECK9:       omp.body.continue:8775// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8776// CHECK9:       omp.inner.for.inc:8777// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP83]]8778// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP28]], 18779// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP83]]8780// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP84:![0-9]+]]8781// CHECK9:       omp.inner.for.end:8782// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8783// CHECK9:       omp.loop.exit:8784// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88785// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 48786// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])8787// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 48788// CHECK9-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 08789// CHECK9-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]8790// CHECK9:       .omp.final.then:8791// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 48792// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP33]], 08793// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 18794// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 18795// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]8796// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I4]], align 48797// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]8798// CHECK9:       .omp.final.done:8799// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8800// CHECK9:       omp.precond.end:8801// CHECK9-NEXT:    ret void8802//8803//8804// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l748805// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {8806// CHECK9-NEXT:  entry:8807// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 88808// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 88809// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88810// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88811// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88812// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 88813// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 88814// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88815// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88816// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88817// 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_l74.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])8818// CHECK9-NEXT:    ret void8819//8820//8821// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l74.omp_outlined8822// 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]] {8823// CHECK9-NEXT:  entry:8824// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88825// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88826// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 88827// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88828// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88829// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88830// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88831// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 48832// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48833// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48834// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48835// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 48836// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48837// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 48838// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 48839// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48840// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48841// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 48842// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 88843// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88844// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88845// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 88846// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88847// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88848// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88849// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88850// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 88851// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 88852// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 88853// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 88854// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 88855// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 48856// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 48857// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 48858// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 48859// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48860// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 08861// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18862// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 18863// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 48864// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48865// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48866// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]8867// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8868// CHECK9:       omp.precond.then:8869// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 48870// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48871// CHECK9-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 48872// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48873// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48874// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88875// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 48876// 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)8877// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48878// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48879// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]8880// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]8881// CHECK9:       cond.true:8882// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48883// CHECK9-NEXT:    br label [[COND_END:%.*]]8884// CHECK9:       cond.false:8885// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 48886// CHECK9-NEXT:    br label [[COND_END]]8887// CHECK9:       cond.end:8888// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]8889// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 48890// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 48891// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 48892// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]8893// CHECK9:       omp.inner.for.cond:8894// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP86:![0-9]+]]8895// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP86]]8896// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]8897// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]8898// CHECK9:       omp.inner.for.body:8899// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP86]]8900// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i648901// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP86]]8902// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i648903// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP86]]8904// CHECK9-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP86]]8905// CHECK9-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 8, !llvm.access.group [[ACC_GRP86]]8906// 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_l74.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]]), !llvm.access.group [[ACC_GRP86]]8907// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]8908// CHECK9:       omp.inner.for.inc:8909// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP86]]8910// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP86]]8911// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]8912// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP86]]8913// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP87:![0-9]+]]8914// CHECK9:       omp.inner.for.end:8915// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]8916// CHECK9:       omp.loop.exit:8917// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88918// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 48919// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])8920// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 48921// CHECK9-NEXT:    [[TMP30:%.*]] = icmp ne i32 [[TMP29]], 08922// CHECK9-NEXT:    br i1 [[TMP30]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]8923// CHECK9:       .omp.final.then:8924// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48925// CHECK9-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP31]], 08926// CHECK9-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 18927// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 18928// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]8929// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 48930// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]8931// CHECK9:       .omp.final.done:8932// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]8933// CHECK9:       omp.precond.end:8934// CHECK9-NEXT:    ret void8935//8936//8937// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l74.omp_outlined.omp_outlined8938// 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]] {8939// CHECK9-NEXT:  entry:8940// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 88941// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 88942// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 88943// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 88944// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 88945// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 88946// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 88947// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 88948// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 88949// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 48950// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 48951// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 48952// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 48953// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 48954// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 48955// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 48956// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 48957// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 48958// CHECK9-NEXT:    [[I5:%.*]] = alloca i32, align 48959// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 88960// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 88961// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 88962// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 88963// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 88964// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 88965// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 88966// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 88967// CHECK9-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 88968// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 88969// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 88970// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 88971// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 88972// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 48973// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 48974// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48975// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 08976// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 18977// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 18978// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 48979// CHECK9-NEXT:    store i32 0, ptr [[I]], align 48980// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 48981// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]8982// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]8983// CHECK9:       omp.precond.then:8984// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 48985// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 48986// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 48987// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 88988// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i328989// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 88990// CHECK9-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i328991// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 48992// CHECK9-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 48993// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 48994// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 48995// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 48996// CHECK9-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 88997// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 48998// 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]])8999// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]9000// CHECK9:       omp.dispatch.cond:9001// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49002// CHECK9-NEXT:    [[TMP14:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 89003// CHECK9-NEXT:    [[CONV6:%.*]] = trunc i64 [[TMP14]] to i329004// CHECK9-NEXT:    [[CMP7:%.*]] = icmp sgt i32 [[TMP13]], [[CONV6]]9005// CHECK9-NEXT:    br i1 [[CMP7]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]9006// CHECK9:       cond.true:9007// CHECK9-NEXT:    [[TMP15:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 89008// CHECK9-NEXT:    [[CONV8:%.*]] = trunc i64 [[TMP15]] to i329009// CHECK9-NEXT:    br label [[COND_END:%.*]]9010// CHECK9:       cond.false:9011// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49012// CHECK9-NEXT:    br label [[COND_END]]9013// CHECK9:       cond.end:9014// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[CONV8]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]9015// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 49016// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 49017// CHECK9-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 49018// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 49019// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49020// CHECK9-NEXT:    [[CMP9:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]9021// CHECK9-NEXT:    br i1 [[CMP9]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]9022// CHECK9:       omp.dispatch.body:9023// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]9024// CHECK9:       omp.inner.for.cond:9025// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP89:![0-9]+]]9026// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP89]]9027// CHECK9-NEXT:    [[CMP10:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]9028// CHECK9-NEXT:    br i1 [[CMP10]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]9029// CHECK9:       omp.inner.for.body:9030// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP89]]9031// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 19032// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]9033// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP89]]9034// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP89]]9035// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP89]]9036// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP24]] to i649037// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i64 [[IDXPROM]]9038// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP89]]9039// CHECK9-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP89]]9040// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP89]]9041// CHECK9-NEXT:    [[IDXPROM11:%.*]] = sext i32 [[TMP27]] to i649042// CHECK9-NEXT:    [[ARRAYIDX12:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i64 [[IDXPROM11]]9043// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[ARRAYIDX12]], align 4, !llvm.access.group [[ACC_GRP89]]9044// CHECK9-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP25]], [[TMP28]]9045// CHECK9-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP89]]9046// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP89]]9047// CHECK9-NEXT:    [[IDXPROM14:%.*]] = sext i32 [[TMP30]] to i649048// CHECK9-NEXT:    [[ARRAYIDX15:%.*]] = getelementptr inbounds i32, ptr [[TMP29]], i64 [[IDXPROM14]]9049// CHECK9-NEXT:    store i32 [[ADD13]], ptr [[ARRAYIDX15]], align 4, !llvm.access.group [[ACC_GRP89]]9050// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]9051// CHECK9:       omp.body.continue:9052// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]9053// CHECK9:       omp.inner.for.inc:9054// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP89]]9055// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 [[TMP31]], 19056// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP89]]9057// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP90:![0-9]+]]9058// CHECK9:       omp.inner.for.end:9059// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]9060// CHECK9:       omp.dispatch.inc:9061// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_LB]], align 49062// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 49063// CHECK9-NEXT:    [[ADD17:%.*]] = add nsw i32 [[TMP32]], [[TMP33]]9064// CHECK9-NEXT:    store i32 [[ADD17]], ptr [[DOTOMP_LB]], align 49065// CHECK9-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49066// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 49067// CHECK9-NEXT:    [[ADD18:%.*]] = add nsw i32 [[TMP34]], [[TMP35]]9068// CHECK9-NEXT:    store i32 [[ADD18]], ptr [[DOTOMP_UB]], align 49069// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]9070// CHECK9:       omp.dispatch.end:9071// CHECK9-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89072// CHECK9-NEXT:    [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 49073// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP37]])9074// CHECK9-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 49075// CHECK9-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 09076// CHECK9-NEXT:    br i1 [[TMP39]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]9077// CHECK9:       .omp.final.then:9078// CHECK9-NEXT:    [[TMP40:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49079// CHECK9-NEXT:    [[SUB19:%.*]] = sub nsw i32 [[TMP40]], 09080// CHECK9-NEXT:    [[DIV20:%.*]] = sdiv i32 [[SUB19]], 19081// CHECK9-NEXT:    [[MUL21:%.*]] = mul nsw i32 [[DIV20]], 19082// CHECK9-NEXT:    [[ADD22:%.*]] = add nsw i32 0, [[MUL21]]9083// CHECK9-NEXT:    store i32 [[ADD22]], ptr [[I5]], align 49084// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]9085// CHECK9:       .omp.final.done:9086// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]9087// CHECK9:       omp.precond.end:9088// CHECK9-NEXT:    ret void9089//9090//9091// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l829092// CHECK9-SAME: (i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {9093// CHECK9-NEXT:  entry:9094// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 89095// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 89096// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 89097// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 89098// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 89099// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 89100// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 89101// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 89102// 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_l82.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])9103// CHECK9-NEXT:    ret void9104//9105//9106// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l82.omp_outlined9107// 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]] {9108// CHECK9-NEXT:  entry:9109// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 89110// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 89111// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 89112// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 89113// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 89114// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 89115// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 49116// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 49117// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 49118// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 49119// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 49120// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 49121// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 49122// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 49123// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 49124// CHECK9-NEXT:    [[I3:%.*]] = alloca i32, align 49125// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 89126// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 89127// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 89128// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 89129// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 89130// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 89131// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 89132// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 89133// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 89134// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 89135// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 49136// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 49137// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49138// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 09139// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19140// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 19141// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 49142// CHECK9-NEXT:    store i32 0, ptr [[I]], align 49143// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49144// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]9145// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]9146// CHECK9:       omp.precond.then:9147// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 49148// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49149// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 49150// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 49151// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 49152// CHECK9-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89153// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 49154// 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)9155// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49156// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49157// CHECK9-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]9158// CHECK9-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]9159// CHECK9:       cond.true:9160// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49161// CHECK9-NEXT:    br label [[COND_END:%.*]]9162// CHECK9:       cond.false:9163// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49164// CHECK9-NEXT:    br label [[COND_END]]9165// CHECK9:       cond.end:9166// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]9167// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 49168// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 49169// CHECK9-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 49170// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]9171// CHECK9:       omp.inner.for.cond:9172// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP92:![0-9]+]]9173// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP92]]9174// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]9175// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]9176// CHECK9:       omp.inner.for.body:9177// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP92]]9178// CHECK9-NEXT:    [[TMP18:%.*]] = zext i32 [[TMP17]] to i649179// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP92]]9180// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i649181// 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_l82.omp_outlined.omp_outlined, i64 [[TMP18]], i64 [[TMP20]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP92]]9182// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]9183// CHECK9:       omp.inner.for.inc:9184// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP92]]9185// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP92]]9186// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]9187// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP92]]9188// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP93:![0-9]+]]9189// CHECK9:       omp.inner.for.end:9190// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]9191// CHECK9:       omp.loop.exit:9192// CHECK9-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89193// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[TMP23]], align 49194// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP24]])9195// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 49196// CHECK9-NEXT:    [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 09197// CHECK9-NEXT:    br i1 [[TMP26]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]9198// CHECK9:       .omp.final.then:9199// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49200// CHECK9-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP27]], 09201// CHECK9-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 19202// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 19203// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]9204// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 49205// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]9206// CHECK9:       .omp.final.done:9207// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]9208// CHECK9:       omp.precond.end:9209// CHECK9-NEXT:    ret void9210//9211//9212// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l82.omp_outlined.omp_outlined9213// 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]] {9214// CHECK9-NEXT:  entry:9215// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 89216// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 89217// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 89218// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 89219// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 89220// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 89221// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 89222// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 89223// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 49224// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 49225// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 49226// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 49227// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 49228// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 49229// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 49230// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 49231// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 49232// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 49233// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 89234// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 89235// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 89236// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 89237// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 89238// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 89239// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 89240// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 89241// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 89242// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 89243// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 89244// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 89245// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 49246// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 49247// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49248// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 09249// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19250// CHECK9-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 19251// CHECK9-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 49252// CHECK9-NEXT:    store i32 0, ptr [[I]], align 49253// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49254// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]9255// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]9256// CHECK9:       omp.precond.then:9257// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 49258// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49259// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 49260// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 89261// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i329262// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 89263// CHECK9-NEXT:    [[CONV3:%.*]] = trunc i64 [[TMP9]] to i329264// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 49265// CHECK9-NEXT:    store i32 [[CONV3]], ptr [[DOTOMP_UB]], align 49266// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 49267// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 49268// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 49269// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49270// CHECK9-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89271// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 49272// CHECK9-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)9273// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]9274// CHECK9:       omp.dispatch.cond:9275// CHECK9-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89276// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 49277// 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]])9278// CHECK9-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 09279// CHECK9-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]9280// CHECK9:       omp.dispatch.body:9281// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 49282// CHECK9-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 49283// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]9284// CHECK9:       omp.inner.for.cond:9285// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP95:![0-9]+]]9286// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP95]]9287// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]9288// CHECK9-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]9289// CHECK9:       omp.inner.for.body:9290// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP95]]9291// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 19292// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]9293// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP95]]9294// CHECK9-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP95]]9295// CHECK9-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP95]]9296// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP22]] to i649297// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP21]], i64 [[IDXPROM]]9298// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP95]]9299// CHECK9-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP95]]9300// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP95]]9301// CHECK9-NEXT:    [[IDXPROM6:%.*]] = sext i32 [[TMP25]] to i649302// CHECK9-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds i32, ptr [[TMP24]], i64 [[IDXPROM6]]9303// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[ARRAYIDX7]], align 4, !llvm.access.group [[ACC_GRP95]]9304// CHECK9-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP23]], [[TMP26]]9305// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP95]]9306// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP95]]9307// CHECK9-NEXT:    [[IDXPROM9:%.*]] = sext i32 [[TMP28]] to i649308// CHECK9-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds i32, ptr [[TMP27]], i64 [[IDXPROM9]]9309// CHECK9-NEXT:    store i32 [[ADD8]], ptr [[ARRAYIDX10]], align 4, !llvm.access.group [[ACC_GRP95]]9310// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]9311// CHECK9:       omp.body.continue:9312// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]9313// CHECK9:       omp.inner.for.inc:9314// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP95]]9315// CHECK9-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP29]], 19316// CHECK9-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP95]]9317// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP96:![0-9]+]]9318// CHECK9:       omp.inner.for.end:9319// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]9320// CHECK9:       omp.dispatch.inc:9321// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]9322// CHECK9:       omp.dispatch.end:9323// CHECK9-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89324// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[TMP30]], align 49325// CHECK9-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP31]])9326// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 49327// CHECK9-NEXT:    [[TMP33:%.*]] = icmp ne i32 [[TMP32]], 09328// CHECK9-NEXT:    br i1 [[TMP33]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]9329// CHECK9:       .omp.final.then:9330// CHECK9-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49331// CHECK9-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[TMP34]], 09332// CHECK9-NEXT:    [[DIV13:%.*]] = sdiv i32 [[SUB12]], 19333// CHECK9-NEXT:    [[MUL14:%.*]] = mul nsw i32 [[DIV13]], 19334// CHECK9-NEXT:    [[ADD15:%.*]] = add nsw i32 0, [[MUL14]]9335// CHECK9-NEXT:    store i32 [[ADD15]], ptr [[I4]], align 49336// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]9337// CHECK9:       .omp.final.done:9338// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]9339// CHECK9:       omp.precond.end:9340// CHECK9-NEXT:    ret void9341//9342//9343// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l909344// CHECK9-SAME: (i64 noundef [[CH:%.*]], i64 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {9345// CHECK9-NEXT:  entry:9346// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca i64, align 89347// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca i64, align 89348// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 89349// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 89350// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 89351// CHECK9-NEXT:    store i64 [[CH]], ptr [[CH_ADDR]], align 89352// CHECK9-NEXT:    store i64 [[N]], ptr [[N_ADDR]], align 89353// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 89354// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 89355// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 89356// 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_l90.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])9357// CHECK9-NEXT:    ret void9358//9359//9360// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l90.omp_outlined9361// 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]] {9362// CHECK9-NEXT:  entry:9363// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 89364// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 89365// CHECK9-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 89366// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 89367// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 89368// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 89369// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 89370// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 49371// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 49372// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 49373// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 49374// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 49375// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 49376// CHECK9-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 49377// CHECK9-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 49378// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 49379// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 49380// CHECK9-NEXT:    [[I4:%.*]] = alloca i32, align 49381// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i64, align 89382// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 89383// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 89384// CHECK9-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 89385// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 89386// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 89387// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 89388// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 89389// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 89390// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 89391// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 89392// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 89393// CHECK9-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 89394// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 49395// CHECK9-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 49396// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 49397// CHECK9-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 49398// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49399// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 09400// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19401// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 19402// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 49403// CHECK9-NEXT:    store i32 0, ptr [[I]], align 49404// CHECK9-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49405// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]9406// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]9407// CHECK9:       omp.precond.then:9408// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 49409// CHECK9-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 49410// CHECK9-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 49411// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 49412// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 49413// CHECK9-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89414// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 49415// 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)9416// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49417// CHECK9-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 49418// CHECK9-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]9419// CHECK9-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]9420// CHECK9:       cond.true:9421// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 49422// CHECK9-NEXT:    br label [[COND_END:%.*]]9423// CHECK9:       cond.false:9424// CHECK9-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 49425// CHECK9-NEXT:    br label [[COND_END]]9426// CHECK9:       cond.end:9427// CHECK9-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]9428// CHECK9-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 49429// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 49430// CHECK9-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 49431// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]9432// CHECK9:       omp.inner.for.cond:9433// CHECK9-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP98:![0-9]+]]9434// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP98]]9435// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]9436// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]9437// CHECK9:       omp.inner.for.body:9438// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP98]]9439// CHECK9-NEXT:    [[TMP20:%.*]] = zext i32 [[TMP19]] to i649440// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP98]]9441// CHECK9-NEXT:    [[TMP22:%.*]] = zext i32 [[TMP21]] to i649442// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP98]]9443// CHECK9-NEXT:    store i32 [[TMP23]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP98]]9444// CHECK9-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR__CASTED]], align 8, !llvm.access.group [[ACC_GRP98]]9445// 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_l90.omp_outlined.omp_outlined, i64 [[TMP20]], i64 [[TMP22]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i64 [[TMP24]]), !llvm.access.group [[ACC_GRP98]]9446// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]9447// CHECK9:       omp.inner.for.inc:9448// CHECK9-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP98]]9449// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP98]]9450// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]9451// CHECK9-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP98]]9452// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP99:![0-9]+]]9453// CHECK9:       omp.inner.for.end:9454// CHECK9-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]9455// CHECK9:       omp.loop.exit:9456// CHECK9-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89457// CHECK9-NEXT:    [[TMP28:%.*]] = load i32, ptr [[TMP27]], align 49458// CHECK9-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP28]])9459// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 49460// CHECK9-NEXT:    [[TMP30:%.*]] = icmp ne i32 [[TMP29]], 09461// CHECK9-NEXT:    br i1 [[TMP30]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]9462// CHECK9:       .omp.final.then:9463// CHECK9-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49464// CHECK9-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP31]], 09465// CHECK9-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 19466// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 19467// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]9468// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 49469// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]9470// CHECK9:       .omp.final.done:9471// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]9472// CHECK9:       omp.precond.end:9473// CHECK9-NEXT:    ret void9474//9475//9476// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l90.omp_outlined.omp_outlined9477// 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]] {9478// CHECK9-NEXT:  entry:9479// CHECK9-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 89480// CHECK9-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 89481// CHECK9-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i64, align 89482// CHECK9-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i64, align 89483// CHECK9-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 89484// CHECK9-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 89485// CHECK9-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 89486// CHECK9-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 89487// CHECK9-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i64, align 89488// CHECK9-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 49489// CHECK9-NEXT:    [[TMP:%.*]] = alloca i32, align 49490// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 49491// CHECK9-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 49492// CHECK9-NEXT:    [[I:%.*]] = alloca i32, align 49493// CHECK9-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 49494// CHECK9-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 49495// CHECK9-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 49496// CHECK9-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 49497// CHECK9-NEXT:    [[I5:%.*]] = alloca i32, align 49498// CHECK9-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 89499// CHECK9-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 89500// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 89501// CHECK9-NEXT:    store i64 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 89502// CHECK9-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 89503// CHECK9-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 89504// CHECK9-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 89505// CHECK9-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 89506// CHECK9-NEXT:    store i64 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 89507// CHECK9-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 89508// CHECK9-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 89509// CHECK9-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 89510// CHECK9-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 89511// CHECK9-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 49512// CHECK9-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 49513// CHECK9-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49514// CHECK9-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 09515// CHECK9-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19516// CHECK9-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 19517// CHECK9-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 49518// CHECK9-NEXT:    store i32 0, ptr [[I]], align 49519// CHECK9-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49520// CHECK9-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]9521// CHECK9-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]9522// CHECK9:       omp.precond.then:9523// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 49524// CHECK9-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 49525// CHECK9-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 49526// CHECK9-NEXT:    [[TMP8:%.*]] = load i64, ptr [[DOTPREVIOUS_LB__ADDR]], align 89527// CHECK9-NEXT:    [[CONV:%.*]] = trunc i64 [[TMP8]] to i329528// CHECK9-NEXT:    [[TMP9:%.*]] = load i64, ptr [[DOTPREVIOUS_UB__ADDR]], align 89529// CHECK9-NEXT:    [[CONV4:%.*]] = trunc i64 [[TMP9]] to i329530// CHECK9-NEXT:    store i32 [[CONV]], ptr [[DOTOMP_LB]], align 49531// CHECK9-NEXT:    store i32 [[CONV4]], ptr [[DOTOMP_UB]], align 49532// CHECK9-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 49533// CHECK9-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 49534// CHECK9-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 49535// CHECK9-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 49536// CHECK9-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 49537// CHECK9-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89538// CHECK9-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 49539// CHECK9-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])9540// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]9541// CHECK9:       omp.dispatch.cond:9542// CHECK9-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89543// CHECK9-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 49544// 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]])9545// CHECK9-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 09546// CHECK9-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]9547// CHECK9:       omp.dispatch.body:9548// CHECK9-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 49549// CHECK9-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 49550// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]9551// CHECK9:       omp.inner.for.cond:9552// CHECK9-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP101:![0-9]+]]9553// CHECK9-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP101]]9554// CHECK9-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]9555// CHECK9-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]9556// CHECK9:       omp.inner.for.body:9557// CHECK9-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP101]]9558// CHECK9-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 19559// CHECK9-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]9560// CHECK9-NEXT:    store i32 [[ADD]], ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP101]]9561// CHECK9-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 8, !llvm.access.group [[ACC_GRP101]]9562// CHECK9-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP101]]9563// CHECK9-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP23]] to i649564// CHECK9-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP22]], i64 [[IDXPROM]]9565// CHECK9-NEXT:    [[TMP24:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP101]]9566// CHECK9-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 8, !llvm.access.group [[ACC_GRP101]]9567// CHECK9-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP101]]9568// CHECK9-NEXT:    [[IDXPROM7:%.*]] = sext i32 [[TMP26]] to i649569// CHECK9-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP25]], i64 [[IDXPROM7]]9570// CHECK9-NEXT:    [[TMP27:%.*]] = load i32, ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP101]]9571// CHECK9-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP24]], [[TMP27]]9572// CHECK9-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 8, !llvm.access.group [[ACC_GRP101]]9573// CHECK9-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I5]], align 4, !llvm.access.group [[ACC_GRP101]]9574// CHECK9-NEXT:    [[IDXPROM10:%.*]] = sext i32 [[TMP29]] to i649575// CHECK9-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds i32, ptr [[TMP28]], i64 [[IDXPROM10]]9576// CHECK9-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX11]], align 4, !llvm.access.group [[ACC_GRP101]]9577// CHECK9-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]9578// CHECK9:       omp.body.continue:9579// CHECK9-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]9580// CHECK9:       omp.inner.for.inc:9581// CHECK9-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP101]]9582// CHECK9-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP30]], 19583// CHECK9-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP101]]9584// CHECK9-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP102:![0-9]+]]9585// CHECK9:       omp.inner.for.end:9586// CHECK9-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]9587// CHECK9:       omp.dispatch.inc:9588// CHECK9-NEXT:    br label [[OMP_DISPATCH_COND]]9589// CHECK9:       omp.dispatch.end:9590// CHECK9-NEXT:    [[TMP31:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 89591// CHECK9-NEXT:    [[TMP32:%.*]] = load i32, ptr [[TMP31]], align 49592// CHECK9-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP32]])9593// CHECK9-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 49594// CHECK9-NEXT:    [[TMP34:%.*]] = icmp ne i32 [[TMP33]], 09595// CHECK9-NEXT:    br i1 [[TMP34]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]9596// CHECK9:       .omp.final.then:9597// CHECK9-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49598// CHECK9-NEXT:    [[SUB13:%.*]] = sub nsw i32 [[TMP35]], 09599// CHECK9-NEXT:    [[DIV14:%.*]] = sdiv i32 [[SUB13]], 19600// CHECK9-NEXT:    [[MUL15:%.*]] = mul nsw i32 [[DIV14]], 19601// CHECK9-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL15]]9602// CHECK9-NEXT:    store i32 [[ADD16]], ptr [[I5]], align 49603// CHECK9-NEXT:    br label [[DOTOMP_FINAL_DONE]]9604// CHECK9:       .omp.final.done:9605// CHECK9-NEXT:    br label [[OMP_PRECOND_END]]9606// CHECK9:       omp.precond.end:9607// CHECK9-NEXT:    ret void9608//9609//9610// CHECK11-LABEL: define {{[^@]+}}@main9611// CHECK11-SAME: () #[[ATTR0:[0-9]+]] {9612// CHECK11-NEXT:  entry:9613// CHECK11-NEXT:    [[RETVAL:%.*]] = alloca i32, align 49614// CHECK11-NEXT:    [[A:%.*]] = alloca ptr, align 49615// CHECK11-NEXT:    [[B:%.*]] = alloca ptr, align 49616// CHECK11-NEXT:    [[C:%.*]] = alloca ptr, align 49617// CHECK11-NEXT:    [[N:%.*]] = alloca i32, align 49618// CHECK11-NEXT:    [[CH:%.*]] = alloca i32, align 49619// CHECK11-NEXT:    [[N_CASTED:%.*]] = alloca i32, align 49620// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 49621// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 49622// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 49623// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 49624// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 49625// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 49626// CHECK11-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 89627// CHECK11-NEXT:    [[N_CASTED3:%.*]] = alloca i32, align 49628// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS4:%.*]] = alloca [4 x ptr], align 49629// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS5:%.*]] = alloca [4 x ptr], align 49630// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS6:%.*]] = alloca [4 x ptr], align 49631// CHECK11-NEXT:    [[_TMP7:%.*]] = alloca i32, align 49632// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_8:%.*]] = alloca i32, align 49633// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 49634// CHECK11-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 89635// CHECK11-NEXT:    [[CH_CASTED:%.*]] = alloca i32, align 49636// CHECK11-NEXT:    [[N_CASTED17:%.*]] = alloca i32, align 49637// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS18:%.*]] = alloca [5 x ptr], align 49638// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS19:%.*]] = alloca [5 x ptr], align 49639// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS20:%.*]] = alloca [5 x ptr], align 49640// CHECK11-NEXT:    [[_TMP21:%.*]] = alloca i32, align 49641// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 49642// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_23:%.*]] = alloca i32, align 49643// CHECK11-NEXT:    [[KERNEL_ARGS28:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 89644// CHECK11-NEXT:    [[N_CASTED31:%.*]] = alloca i32, align 49645// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS32:%.*]] = alloca [4 x ptr], align 49646// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS33:%.*]] = alloca [4 x ptr], align 49647// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS34:%.*]] = alloca [4 x ptr], align 49648// CHECK11-NEXT:    [[_TMP35:%.*]] = alloca i32, align 49649// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_36:%.*]] = alloca i32, align 49650// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_37:%.*]] = alloca i32, align 49651// CHECK11-NEXT:    [[KERNEL_ARGS42:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 89652// CHECK11-NEXT:    [[CH_CASTED45:%.*]] = alloca i32, align 49653// CHECK11-NEXT:    [[N_CASTED46:%.*]] = alloca i32, align 49654// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS47:%.*]] = alloca [5 x ptr], align 49655// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS48:%.*]] = alloca [5 x ptr], align 49656// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS49:%.*]] = alloca [5 x ptr], align 49657// CHECK11-NEXT:    [[_TMP50:%.*]] = alloca i32, align 49658// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_51:%.*]] = alloca i32, align 49659// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_52:%.*]] = alloca i32, align 49660// CHECK11-NEXT:    [[KERNEL_ARGS57:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 89661// CHECK11-NEXT:    [[N_CASTED60:%.*]] = alloca i32, align 49662// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS61:%.*]] = alloca [4 x ptr], align 49663// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS62:%.*]] = alloca [4 x ptr], align 49664// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS63:%.*]] = alloca [4 x ptr], align 49665// CHECK11-NEXT:    [[_TMP64:%.*]] = alloca i32, align 49666// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_65:%.*]] = alloca i32, align 49667// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_66:%.*]] = alloca i32, align 49668// CHECK11-NEXT:    [[KERNEL_ARGS71:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 89669// CHECK11-NEXT:    [[CH_CASTED74:%.*]] = alloca i32, align 49670// CHECK11-NEXT:    [[N_CASTED75:%.*]] = alloca i32, align 49671// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS76:%.*]] = alloca [5 x ptr], align 49672// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS77:%.*]] = alloca [5 x ptr], align 49673// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS78:%.*]] = alloca [5 x ptr], align 49674// CHECK11-NEXT:    [[_TMP79:%.*]] = alloca i32, align 49675// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_80:%.*]] = alloca i32, align 49676// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_81:%.*]] = alloca i32, align 49677// CHECK11-NEXT:    [[KERNEL_ARGS86:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 89678// CHECK11-NEXT:    store i32 0, ptr [[RETVAL]], align 49679// CHECK11-NEXT:    store i32 10000, ptr [[N]], align 49680// CHECK11-NEXT:    store i32 100, ptr [[CH]], align 49681// CHECK11-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 49682// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[N_CASTED]], align 49683// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[N_CASTED]], align 49684// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A]], align 49685// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B]], align 49686// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C]], align 49687// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 09688// CHECK11-NEXT:    store i32 [[TMP1]], ptr [[TMP5]], align 49689// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 09690// CHECK11-NEXT:    store i32 [[TMP1]], ptr [[TMP6]], align 49691// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 09692// CHECK11-NEXT:    store ptr null, ptr [[TMP7]], align 49693// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 19694// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[TMP8]], align 49695// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 19696// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[TMP9]], align 49697// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 19698// CHECK11-NEXT:    store ptr null, ptr [[TMP10]], align 49699// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 29700// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[TMP11]], align 49701// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 29702// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[TMP12]], align 49703// CHECK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 29704// CHECK11-NEXT:    store ptr null, ptr [[TMP13]], align 49705// CHECK11-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 39706// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[TMP14]], align 49707// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 39708// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[TMP15]], align 49709// CHECK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 39710// CHECK11-NEXT:    store ptr null, ptr [[TMP16]], align 49711// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 09712// CHECK11-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 09713// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 49714// CHECK11-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 49715// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 49716// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 09717// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 19718// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 19719// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 49720// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 49721// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 19722// CHECK11-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i649723// CHECK11-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 09724// CHECK11-NEXT:    store i32 3, ptr [[TMP23]], align 49725// CHECK11-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 19726// CHECK11-NEXT:    store i32 4, ptr [[TMP24]], align 49727// CHECK11-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 29728// CHECK11-NEXT:    store ptr [[TMP17]], ptr [[TMP25]], align 49729// CHECK11-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 39730// CHECK11-NEXT:    store ptr [[TMP18]], ptr [[TMP26]], align 49731// CHECK11-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 49732// CHECK11-NEXT:    store ptr @.offload_sizes, ptr [[TMP27]], align 49733// CHECK11-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 59734// CHECK11-NEXT:    store ptr @.offload_maptypes, ptr [[TMP28]], align 49735// CHECK11-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 69736// CHECK11-NEXT:    store ptr null, ptr [[TMP29]], align 49737// CHECK11-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 79738// CHECK11-NEXT:    store ptr null, ptr [[TMP30]], align 49739// CHECK11-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 89740// CHECK11-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 89741// CHECK11-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 99742// CHECK11-NEXT:    store i64 0, ptr [[TMP32]], align 89743// CHECK11-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 109744// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 49745// CHECK11-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 119746// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 49747// CHECK11-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 129748// CHECK11-NEXT:    store i32 0, ptr [[TMP35]], align 49749// 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_l368.region_id, ptr [[KERNEL_ARGS]])9750// CHECK11-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 09751// CHECK11-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]9752// CHECK11:       omp_offload.failed:9753// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368(i32 [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]) #[[ATTR2:[0-9]+]]9754// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT]]9755// CHECK11:       omp_offload.cont:9756// CHECK11-NEXT:    [[TMP38:%.*]] = load i32, ptr [[N]], align 49757// CHECK11-NEXT:    store i32 [[TMP38]], ptr [[N_CASTED3]], align 49758// CHECK11-NEXT:    [[TMP39:%.*]] = load i32, ptr [[N_CASTED3]], align 49759// CHECK11-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[A]], align 49760// CHECK11-NEXT:    [[TMP41:%.*]] = load ptr, ptr [[B]], align 49761// CHECK11-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[C]], align 49762// CHECK11-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 09763// CHECK11-NEXT:    store i32 [[TMP39]], ptr [[TMP43]], align 49764// CHECK11-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 09765// CHECK11-NEXT:    store i32 [[TMP39]], ptr [[TMP44]], align 49766// CHECK11-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 09767// CHECK11-NEXT:    store ptr null, ptr [[TMP45]], align 49768// CHECK11-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 19769// CHECK11-NEXT:    store ptr [[TMP40]], ptr [[TMP46]], align 49770// CHECK11-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 19771// CHECK11-NEXT:    store ptr [[TMP40]], ptr [[TMP47]], align 49772// CHECK11-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 19773// CHECK11-NEXT:    store ptr null, ptr [[TMP48]], align 49774// CHECK11-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 29775// CHECK11-NEXT:    store ptr [[TMP41]], ptr [[TMP49]], align 49776// CHECK11-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 29777// CHECK11-NEXT:    store ptr [[TMP41]], ptr [[TMP50]], align 49778// CHECK11-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 29779// CHECK11-NEXT:    store ptr null, ptr [[TMP51]], align 49780// CHECK11-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 39781// CHECK11-NEXT:    store ptr [[TMP42]], ptr [[TMP52]], align 49782// CHECK11-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 39783// CHECK11-NEXT:    store ptr [[TMP42]], ptr [[TMP53]], align 49784// CHECK11-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 39785// CHECK11-NEXT:    store ptr null, ptr [[TMP54]], align 49786// CHECK11-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 09787// CHECK11-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 09788// CHECK11-NEXT:    [[TMP57:%.*]] = load i32, ptr [[N]], align 49789// CHECK11-NEXT:    store i32 [[TMP57]], ptr [[DOTCAPTURE_EXPR_8]], align 49790// CHECK11-NEXT:    [[TMP58:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_8]], align 49791// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP58]], 09792// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 19793// CHECK11-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[DIV11]], 19794// CHECK11-NEXT:    store i32 [[SUB12]], ptr [[DOTCAPTURE_EXPR_9]], align 49795// CHECK11-NEXT:    [[TMP59:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 49796// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP59]], 19797// CHECK11-NEXT:    [[TMP60:%.*]] = zext i32 [[ADD13]] to i649798// CHECK11-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 09799// CHECK11-NEXT:    store i32 3, ptr [[TMP61]], align 49800// CHECK11-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 19801// CHECK11-NEXT:    store i32 4, ptr [[TMP62]], align 49802// CHECK11-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 29803// CHECK11-NEXT:    store ptr [[TMP55]], ptr [[TMP63]], align 49804// CHECK11-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 39805// CHECK11-NEXT:    store ptr [[TMP56]], ptr [[TMP64]], align 49806// CHECK11-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 49807// CHECK11-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP65]], align 49808// CHECK11-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 59809// CHECK11-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP66]], align 49810// CHECK11-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 69811// CHECK11-NEXT:    store ptr null, ptr [[TMP67]], align 49812// CHECK11-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 79813// CHECK11-NEXT:    store ptr null, ptr [[TMP68]], align 49814// CHECK11-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 89815// CHECK11-NEXT:    store i64 [[TMP60]], ptr [[TMP69]], align 89816// CHECK11-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 99817// CHECK11-NEXT:    store i64 0, ptr [[TMP70]], align 89818// CHECK11-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 109819// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP71]], align 49820// CHECK11-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 119821// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP72]], align 49822// CHECK11-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 129823// CHECK11-NEXT:    store i32 0, ptr [[TMP73]], align 49824// 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_l407.region_id, ptr [[KERNEL_ARGS14]])9825// CHECK11-NEXT:    [[TMP75:%.*]] = icmp ne i32 [[TMP74]], 09826// CHECK11-NEXT:    br i1 [[TMP75]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]9827// CHECK11:       omp_offload.failed15:9828// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407(i32 [[TMP39]], ptr [[TMP40]], ptr [[TMP41]], ptr [[TMP42]]) #[[ATTR2]]9829// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT16]]9830// CHECK11:       omp_offload.cont16:9831// CHECK11-NEXT:    [[TMP76:%.*]] = load i32, ptr [[CH]], align 49832// CHECK11-NEXT:    store i32 [[TMP76]], ptr [[CH_CASTED]], align 49833// CHECK11-NEXT:    [[TMP77:%.*]] = load i32, ptr [[CH_CASTED]], align 49834// CHECK11-NEXT:    [[TMP78:%.*]] = load i32, ptr [[N]], align 49835// CHECK11-NEXT:    store i32 [[TMP78]], ptr [[N_CASTED17]], align 49836// CHECK11-NEXT:    [[TMP79:%.*]] = load i32, ptr [[N_CASTED17]], align 49837// CHECK11-NEXT:    [[TMP80:%.*]] = load ptr, ptr [[A]], align 49838// CHECK11-NEXT:    [[TMP81:%.*]] = load ptr, ptr [[B]], align 49839// CHECK11-NEXT:    [[TMP82:%.*]] = load ptr, ptr [[C]], align 49840// CHECK11-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 09841// CHECK11-NEXT:    store i32 [[TMP77]], ptr [[TMP83]], align 49842// CHECK11-NEXT:    [[TMP84:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 09843// CHECK11-NEXT:    store i32 [[TMP77]], ptr [[TMP84]], align 49844// CHECK11-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 09845// CHECK11-NEXT:    store ptr null, ptr [[TMP85]], align 49846// CHECK11-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 19847// CHECK11-NEXT:    store i32 [[TMP79]], ptr [[TMP86]], align 49848// CHECK11-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 19849// CHECK11-NEXT:    store i32 [[TMP79]], ptr [[TMP87]], align 49850// CHECK11-NEXT:    [[TMP88:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 19851// CHECK11-NEXT:    store ptr null, ptr [[TMP88]], align 49852// CHECK11-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 29853// CHECK11-NEXT:    store ptr [[TMP80]], ptr [[TMP89]], align 49854// CHECK11-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 29855// CHECK11-NEXT:    store ptr [[TMP80]], ptr [[TMP90]], align 49856// CHECK11-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 29857// CHECK11-NEXT:    store ptr null, ptr [[TMP91]], align 49858// CHECK11-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 39859// CHECK11-NEXT:    store ptr [[TMP81]], ptr [[TMP92]], align 49860// CHECK11-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 39861// CHECK11-NEXT:    store ptr [[TMP81]], ptr [[TMP93]], align 49862// CHECK11-NEXT:    [[TMP94:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 39863// CHECK11-NEXT:    store ptr null, ptr [[TMP94]], align 49864// CHECK11-NEXT:    [[TMP95:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 49865// CHECK11-NEXT:    store ptr [[TMP82]], ptr [[TMP95]], align 49866// CHECK11-NEXT:    [[TMP96:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 49867// CHECK11-NEXT:    store ptr [[TMP82]], ptr [[TMP96]], align 49868// CHECK11-NEXT:    [[TMP97:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 49869// CHECK11-NEXT:    store ptr null, ptr [[TMP97]], align 49870// CHECK11-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 09871// CHECK11-NEXT:    [[TMP99:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 09872// CHECK11-NEXT:    [[TMP100:%.*]] = load i32, ptr [[N]], align 49873// CHECK11-NEXT:    store i32 [[TMP100]], ptr [[DOTCAPTURE_EXPR_22]], align 49874// CHECK11-NEXT:    [[TMP101:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 49875// CHECK11-NEXT:    [[SUB24:%.*]] = sub nsw i32 [[TMP101]], 09876// CHECK11-NEXT:    [[DIV25:%.*]] = sdiv i32 [[SUB24]], 19877// CHECK11-NEXT:    [[SUB26:%.*]] = sub nsw i32 [[DIV25]], 19878// CHECK11-NEXT:    store i32 [[SUB26]], ptr [[DOTCAPTURE_EXPR_23]], align 49879// CHECK11-NEXT:    [[TMP102:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_23]], align 49880// CHECK11-NEXT:    [[ADD27:%.*]] = add nsw i32 [[TMP102]], 19881// CHECK11-NEXT:    [[TMP103:%.*]] = zext i32 [[ADD27]] to i649882// CHECK11-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 09883// CHECK11-NEXT:    store i32 3, ptr [[TMP104]], align 49884// CHECK11-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 19885// CHECK11-NEXT:    store i32 5, ptr [[TMP105]], align 49886// CHECK11-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 29887// CHECK11-NEXT:    store ptr [[TMP98]], ptr [[TMP106]], align 49888// CHECK11-NEXT:    [[TMP107:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 39889// CHECK11-NEXT:    store ptr [[TMP99]], ptr [[TMP107]], align 49890// CHECK11-NEXT:    [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 49891// CHECK11-NEXT:    store ptr @.offload_sizes.3, ptr [[TMP108]], align 49892// CHECK11-NEXT:    [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 59893// CHECK11-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP109]], align 49894// CHECK11-NEXT:    [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 69895// CHECK11-NEXT:    store ptr null, ptr [[TMP110]], align 49896// CHECK11-NEXT:    [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 79897// CHECK11-NEXT:    store ptr null, ptr [[TMP111]], align 49898// CHECK11-NEXT:    [[TMP112:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 89899// CHECK11-NEXT:    store i64 [[TMP103]], ptr [[TMP112]], align 89900// CHECK11-NEXT:    [[TMP113:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 99901// CHECK11-NEXT:    store i64 0, ptr [[TMP113]], align 89902// CHECK11-NEXT:    [[TMP114:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 109903// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP114]], align 49904// CHECK11-NEXT:    [[TMP115:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 119905// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP115]], align 49906// CHECK11-NEXT:    [[TMP116:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 129907// CHECK11-NEXT:    store i32 0, ptr [[TMP116]], align 49908// 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_l446.region_id, ptr [[KERNEL_ARGS28]])9909// CHECK11-NEXT:    [[TMP118:%.*]] = icmp ne i32 [[TMP117]], 09910// CHECK11-NEXT:    br i1 [[TMP118]], label [[OMP_OFFLOAD_FAILED29:%.*]], label [[OMP_OFFLOAD_CONT30:%.*]]9911// CHECK11:       omp_offload.failed29:9912// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446(i32 [[TMP77]], i32 [[TMP79]], ptr [[TMP80]], ptr [[TMP81]], ptr [[TMP82]]) #[[ATTR2]]9913// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT30]]9914// CHECK11:       omp_offload.cont30:9915// CHECK11-NEXT:    [[TMP119:%.*]] = load i32, ptr [[N]], align 49916// CHECK11-NEXT:    store i32 [[TMP119]], ptr [[N_CASTED31]], align 49917// CHECK11-NEXT:    [[TMP120:%.*]] = load i32, ptr [[N_CASTED31]], align 49918// CHECK11-NEXT:    [[TMP121:%.*]] = load ptr, ptr [[A]], align 49919// CHECK11-NEXT:    [[TMP122:%.*]] = load ptr, ptr [[B]], align 49920// CHECK11-NEXT:    [[TMP123:%.*]] = load ptr, ptr [[C]], align 49921// CHECK11-NEXT:    [[TMP124:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 09922// CHECK11-NEXT:    store i32 [[TMP120]], ptr [[TMP124]], align 49923// CHECK11-NEXT:    [[TMP125:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 09924// CHECK11-NEXT:    store i32 [[TMP120]], ptr [[TMP125]], align 49925// CHECK11-NEXT:    [[TMP126:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 09926// CHECK11-NEXT:    store ptr null, ptr [[TMP126]], align 49927// CHECK11-NEXT:    [[TMP127:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 19928// CHECK11-NEXT:    store ptr [[TMP121]], ptr [[TMP127]], align 49929// CHECK11-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 19930// CHECK11-NEXT:    store ptr [[TMP121]], ptr [[TMP128]], align 49931// CHECK11-NEXT:    [[TMP129:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 19932// CHECK11-NEXT:    store ptr null, ptr [[TMP129]], align 49933// CHECK11-NEXT:    [[TMP130:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 29934// CHECK11-NEXT:    store ptr [[TMP122]], ptr [[TMP130]], align 49935// CHECK11-NEXT:    [[TMP131:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 29936// CHECK11-NEXT:    store ptr [[TMP122]], ptr [[TMP131]], align 49937// CHECK11-NEXT:    [[TMP132:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 29938// CHECK11-NEXT:    store ptr null, ptr [[TMP132]], align 49939// CHECK11-NEXT:    [[TMP133:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 39940// CHECK11-NEXT:    store ptr [[TMP123]], ptr [[TMP133]], align 49941// CHECK11-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 39942// CHECK11-NEXT:    store ptr [[TMP123]], ptr [[TMP134]], align 49943// CHECK11-NEXT:    [[TMP135:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 39944// CHECK11-NEXT:    store ptr null, ptr [[TMP135]], align 49945// CHECK11-NEXT:    [[TMP136:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 09946// CHECK11-NEXT:    [[TMP137:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 09947// CHECK11-NEXT:    [[TMP138:%.*]] = load i32, ptr [[N]], align 49948// CHECK11-NEXT:    store i32 [[TMP138]], ptr [[DOTCAPTURE_EXPR_36]], align 49949// CHECK11-NEXT:    [[TMP139:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_36]], align 49950// CHECK11-NEXT:    [[SUB38:%.*]] = sub nsw i32 [[TMP139]], 09951// CHECK11-NEXT:    [[DIV39:%.*]] = sdiv i32 [[SUB38]], 19952// CHECK11-NEXT:    [[SUB40:%.*]] = sub nsw i32 [[DIV39]], 19953// CHECK11-NEXT:    store i32 [[SUB40]], ptr [[DOTCAPTURE_EXPR_37]], align 49954// CHECK11-NEXT:    [[TMP140:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_37]], align 49955// CHECK11-NEXT:    [[ADD41:%.*]] = add nsw i32 [[TMP140]], 19956// CHECK11-NEXT:    [[TMP141:%.*]] = zext i32 [[ADD41]] to i649957// CHECK11-NEXT:    [[TMP142:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 09958// CHECK11-NEXT:    store i32 3, ptr [[TMP142]], align 49959// CHECK11-NEXT:    [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 19960// CHECK11-NEXT:    store i32 4, ptr [[TMP143]], align 49961// CHECK11-NEXT:    [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 29962// CHECK11-NEXT:    store ptr [[TMP136]], ptr [[TMP144]], align 49963// CHECK11-NEXT:    [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 39964// CHECK11-NEXT:    store ptr [[TMP137]], ptr [[TMP145]], align 49965// CHECK11-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 49966// CHECK11-NEXT:    store ptr @.offload_sizes.5, ptr [[TMP146]], align 49967// CHECK11-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 59968// CHECK11-NEXT:    store ptr @.offload_maptypes.6, ptr [[TMP147]], align 49969// CHECK11-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 69970// CHECK11-NEXT:    store ptr null, ptr [[TMP148]], align 49971// CHECK11-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 79972// CHECK11-NEXT:    store ptr null, ptr [[TMP149]], align 49973// CHECK11-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 89974// CHECK11-NEXT:    store i64 [[TMP141]], ptr [[TMP150]], align 89975// CHECK11-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 99976// CHECK11-NEXT:    store i64 0, ptr [[TMP151]], align 89977// CHECK11-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 109978// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP152]], align 49979// CHECK11-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 119980// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP153]], align 49981// CHECK11-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 129982// CHECK11-NEXT:    store i32 0, ptr [[TMP154]], align 49983// 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_l477.region_id, ptr [[KERNEL_ARGS42]])9984// CHECK11-NEXT:    [[TMP156:%.*]] = icmp ne i32 [[TMP155]], 09985// CHECK11-NEXT:    br i1 [[TMP156]], label [[OMP_OFFLOAD_FAILED43:%.*]], label [[OMP_OFFLOAD_CONT44:%.*]]9986// CHECK11:       omp_offload.failed43:9987// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477(i32 [[TMP120]], ptr [[TMP121]], ptr [[TMP122]], ptr [[TMP123]]) #[[ATTR2]]9988// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT44]]9989// CHECK11:       omp_offload.cont44:9990// CHECK11-NEXT:    [[TMP157:%.*]] = load i32, ptr [[CH]], align 49991// CHECK11-NEXT:    store i32 [[TMP157]], ptr [[CH_CASTED45]], align 49992// CHECK11-NEXT:    [[TMP158:%.*]] = load i32, ptr [[CH_CASTED45]], align 49993// CHECK11-NEXT:    [[TMP159:%.*]] = load i32, ptr [[N]], align 49994// CHECK11-NEXT:    store i32 [[TMP159]], ptr [[N_CASTED46]], align 49995// CHECK11-NEXT:    [[TMP160:%.*]] = load i32, ptr [[N_CASTED46]], align 49996// CHECK11-NEXT:    [[TMP161:%.*]] = load ptr, ptr [[A]], align 49997// CHECK11-NEXT:    [[TMP162:%.*]] = load ptr, ptr [[B]], align 49998// CHECK11-NEXT:    [[TMP163:%.*]] = load ptr, ptr [[C]], align 49999// CHECK11-NEXT:    [[TMP164:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 010000// CHECK11-NEXT:    store i32 [[TMP158]], ptr [[TMP164]], align 410001// CHECK11-NEXT:    [[TMP165:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 010002// CHECK11-NEXT:    store i32 [[TMP158]], ptr [[TMP165]], align 410003// CHECK11-NEXT:    [[TMP166:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 010004// CHECK11-NEXT:    store ptr null, ptr [[TMP166]], align 410005// CHECK11-NEXT:    [[TMP167:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 110006// CHECK11-NEXT:    store i32 [[TMP160]], ptr [[TMP167]], align 410007// CHECK11-NEXT:    [[TMP168:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 110008// CHECK11-NEXT:    store i32 [[TMP160]], ptr [[TMP168]], align 410009// CHECK11-NEXT:    [[TMP169:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 110010// CHECK11-NEXT:    store ptr null, ptr [[TMP169]], align 410011// CHECK11-NEXT:    [[TMP170:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 210012// CHECK11-NEXT:    store ptr [[TMP161]], ptr [[TMP170]], align 410013// CHECK11-NEXT:    [[TMP171:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 210014// CHECK11-NEXT:    store ptr [[TMP161]], ptr [[TMP171]], align 410015// CHECK11-NEXT:    [[TMP172:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 210016// CHECK11-NEXT:    store ptr null, ptr [[TMP172]], align 410017// CHECK11-NEXT:    [[TMP173:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 310018// CHECK11-NEXT:    store ptr [[TMP162]], ptr [[TMP173]], align 410019// CHECK11-NEXT:    [[TMP174:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 310020// CHECK11-NEXT:    store ptr [[TMP162]], ptr [[TMP174]], align 410021// CHECK11-NEXT:    [[TMP175:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 310022// CHECK11-NEXT:    store ptr null, ptr [[TMP175]], align 410023// CHECK11-NEXT:    [[TMP176:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 410024// CHECK11-NEXT:    store ptr [[TMP163]], ptr [[TMP176]], align 410025// CHECK11-NEXT:    [[TMP177:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 410026// CHECK11-NEXT:    store ptr [[TMP163]], ptr [[TMP177]], align 410027// CHECK11-NEXT:    [[TMP178:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 410028// CHECK11-NEXT:    store ptr null, ptr [[TMP178]], align 410029// CHECK11-NEXT:    [[TMP179:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 010030// CHECK11-NEXT:    [[TMP180:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 010031// CHECK11-NEXT:    [[TMP181:%.*]] = load i32, ptr [[N]], align 410032// CHECK11-NEXT:    store i32 [[TMP181]], ptr [[DOTCAPTURE_EXPR_51]], align 410033// CHECK11-NEXT:    [[TMP182:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_51]], align 410034// CHECK11-NEXT:    [[SUB53:%.*]] = sub nsw i32 [[TMP182]], 010035// CHECK11-NEXT:    [[DIV54:%.*]] = sdiv i32 [[SUB53]], 110036// CHECK11-NEXT:    [[SUB55:%.*]] = sub nsw i32 [[DIV54]], 110037// CHECK11-NEXT:    store i32 [[SUB55]], ptr [[DOTCAPTURE_EXPR_52]], align 410038// CHECK11-NEXT:    [[TMP183:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_52]], align 410039// CHECK11-NEXT:    [[ADD56:%.*]] = add nsw i32 [[TMP183]], 110040// CHECK11-NEXT:    [[TMP184:%.*]] = zext i32 [[ADD56]] to i6410041// CHECK11-NEXT:    [[TMP185:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 010042// CHECK11-NEXT:    store i32 3, ptr [[TMP185]], align 410043// CHECK11-NEXT:    [[TMP186:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 110044// CHECK11-NEXT:    store i32 5, ptr [[TMP186]], align 410045// CHECK11-NEXT:    [[TMP187:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 210046// CHECK11-NEXT:    store ptr [[TMP179]], ptr [[TMP187]], align 410047// CHECK11-NEXT:    [[TMP188:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 310048// CHECK11-NEXT:    store ptr [[TMP180]], ptr [[TMP188]], align 410049// CHECK11-NEXT:    [[TMP189:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 410050// CHECK11-NEXT:    store ptr @.offload_sizes.7, ptr [[TMP189]], align 410051// CHECK11-NEXT:    [[TMP190:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 510052// CHECK11-NEXT:    store ptr @.offload_maptypes.8, ptr [[TMP190]], align 410053// CHECK11-NEXT:    [[TMP191:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 610054// CHECK11-NEXT:    store ptr null, ptr [[TMP191]], align 410055// CHECK11-NEXT:    [[TMP192:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 710056// CHECK11-NEXT:    store ptr null, ptr [[TMP192]], align 410057// CHECK11-NEXT:    [[TMP193:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 810058// CHECK11-NEXT:    store i64 [[TMP184]], ptr [[TMP193]], align 810059// CHECK11-NEXT:    [[TMP194:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 910060// CHECK11-NEXT:    store i64 0, ptr [[TMP194]], align 810061// CHECK11-NEXT:    [[TMP195:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 1010062// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP195]], align 410063// CHECK11-NEXT:    [[TMP196:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 1110064// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP196]], align 410065// CHECK11-NEXT:    [[TMP197:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 1210066// CHECK11-NEXT:    store i32 0, ptr [[TMP197]], align 410067// 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_l505.region_id, ptr [[KERNEL_ARGS57]])10068// CHECK11-NEXT:    [[TMP199:%.*]] = icmp ne i32 [[TMP198]], 010069// CHECK11-NEXT:    br i1 [[TMP199]], label [[OMP_OFFLOAD_FAILED58:%.*]], label [[OMP_OFFLOAD_CONT59:%.*]]10070// CHECK11:       omp_offload.failed58:10071// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505(i32 [[TMP158]], i32 [[TMP160]], ptr [[TMP161]], ptr [[TMP162]], ptr [[TMP163]]) #[[ATTR2]]10072// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT59]]10073// CHECK11:       omp_offload.cont59:10074// CHECK11-NEXT:    [[TMP200:%.*]] = load i32, ptr [[N]], align 410075// CHECK11-NEXT:    store i32 [[TMP200]], ptr [[N_CASTED60]], align 410076// CHECK11-NEXT:    [[TMP201:%.*]] = load i32, ptr [[N_CASTED60]], align 410077// CHECK11-NEXT:    [[TMP202:%.*]] = load ptr, ptr [[A]], align 410078// CHECK11-NEXT:    [[TMP203:%.*]] = load ptr, ptr [[B]], align 410079// CHECK11-NEXT:    [[TMP204:%.*]] = load ptr, ptr [[C]], align 410080// CHECK11-NEXT:    [[TMP205:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 010081// CHECK11-NEXT:    store i32 [[TMP201]], ptr [[TMP205]], align 410082// CHECK11-NEXT:    [[TMP206:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 010083// CHECK11-NEXT:    store i32 [[TMP201]], ptr [[TMP206]], align 410084// CHECK11-NEXT:    [[TMP207:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 010085// CHECK11-NEXT:    store ptr null, ptr [[TMP207]], align 410086// CHECK11-NEXT:    [[TMP208:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 110087// CHECK11-NEXT:    store ptr [[TMP202]], ptr [[TMP208]], align 410088// CHECK11-NEXT:    [[TMP209:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 110089// CHECK11-NEXT:    store ptr [[TMP202]], ptr [[TMP209]], align 410090// CHECK11-NEXT:    [[TMP210:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 110091// CHECK11-NEXT:    store ptr null, ptr [[TMP210]], align 410092// CHECK11-NEXT:    [[TMP211:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 210093// CHECK11-NEXT:    store ptr [[TMP203]], ptr [[TMP211]], align 410094// CHECK11-NEXT:    [[TMP212:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 210095// CHECK11-NEXT:    store ptr [[TMP203]], ptr [[TMP212]], align 410096// CHECK11-NEXT:    [[TMP213:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 210097// CHECK11-NEXT:    store ptr null, ptr [[TMP213]], align 410098// CHECK11-NEXT:    [[TMP214:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 310099// CHECK11-NEXT:    store ptr [[TMP204]], ptr [[TMP214]], align 410100// CHECK11-NEXT:    [[TMP215:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 310101// CHECK11-NEXT:    store ptr [[TMP204]], ptr [[TMP215]], align 410102// CHECK11-NEXT:    [[TMP216:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 310103// CHECK11-NEXT:    store ptr null, ptr [[TMP216]], align 410104// CHECK11-NEXT:    [[TMP217:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 010105// CHECK11-NEXT:    [[TMP218:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 010106// CHECK11-NEXT:    [[TMP219:%.*]] = load i32, ptr [[N]], align 410107// CHECK11-NEXT:    store i32 [[TMP219]], ptr [[DOTCAPTURE_EXPR_65]], align 410108// CHECK11-NEXT:    [[TMP220:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_65]], align 410109// CHECK11-NEXT:    [[SUB67:%.*]] = sub nsw i32 [[TMP220]], 010110// CHECK11-NEXT:    [[DIV68:%.*]] = sdiv i32 [[SUB67]], 110111// CHECK11-NEXT:    [[SUB69:%.*]] = sub nsw i32 [[DIV68]], 110112// CHECK11-NEXT:    store i32 [[SUB69]], ptr [[DOTCAPTURE_EXPR_66]], align 410113// CHECK11-NEXT:    [[TMP221:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_66]], align 410114// CHECK11-NEXT:    [[ADD70:%.*]] = add nsw i32 [[TMP221]], 110115// CHECK11-NEXT:    [[TMP222:%.*]] = zext i32 [[ADD70]] to i6410116// CHECK11-NEXT:    [[TMP223:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 010117// CHECK11-NEXT:    store i32 3, ptr [[TMP223]], align 410118// CHECK11-NEXT:    [[TMP224:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 110119// CHECK11-NEXT:    store i32 4, ptr [[TMP224]], align 410120// CHECK11-NEXT:    [[TMP225:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 210121// CHECK11-NEXT:    store ptr [[TMP217]], ptr [[TMP225]], align 410122// CHECK11-NEXT:    [[TMP226:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 310123// CHECK11-NEXT:    store ptr [[TMP218]], ptr [[TMP226]], align 410124// CHECK11-NEXT:    [[TMP227:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 410125// CHECK11-NEXT:    store ptr @.offload_sizes.9, ptr [[TMP227]], align 410126// CHECK11-NEXT:    [[TMP228:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 510127// CHECK11-NEXT:    store ptr @.offload_maptypes.10, ptr [[TMP228]], align 410128// CHECK11-NEXT:    [[TMP229:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 610129// CHECK11-NEXT:    store ptr null, ptr [[TMP229]], align 410130// CHECK11-NEXT:    [[TMP230:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 710131// CHECK11-NEXT:    store ptr null, ptr [[TMP230]], align 410132// CHECK11-NEXT:    [[TMP231:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 810133// CHECK11-NEXT:    store i64 [[TMP222]], ptr [[TMP231]], align 810134// CHECK11-NEXT:    [[TMP232:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 910135// CHECK11-NEXT:    store i64 0, ptr [[TMP232]], align 810136// CHECK11-NEXT:    [[TMP233:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 1010137// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP233]], align 410138// CHECK11-NEXT:    [[TMP234:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 1110139// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP234]], align 410140// CHECK11-NEXT:    [[TMP235:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 1210141// CHECK11-NEXT:    store i32 0, ptr [[TMP235]], align 410142// 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_l535.region_id, ptr [[KERNEL_ARGS71]])10143// CHECK11-NEXT:    [[TMP237:%.*]] = icmp ne i32 [[TMP236]], 010144// CHECK11-NEXT:    br i1 [[TMP237]], label [[OMP_OFFLOAD_FAILED72:%.*]], label [[OMP_OFFLOAD_CONT73:%.*]]10145// CHECK11:       omp_offload.failed72:10146// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535(i32 [[TMP201]], ptr [[TMP202]], ptr [[TMP203]], ptr [[TMP204]]) #[[ATTR2]]10147// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT73]]10148// CHECK11:       omp_offload.cont73:10149// CHECK11-NEXT:    [[TMP238:%.*]] = load i32, ptr [[CH]], align 410150// CHECK11-NEXT:    store i32 [[TMP238]], ptr [[CH_CASTED74]], align 410151// CHECK11-NEXT:    [[TMP239:%.*]] = load i32, ptr [[CH_CASTED74]], align 410152// CHECK11-NEXT:    [[TMP240:%.*]] = load i32, ptr [[N]], align 410153// CHECK11-NEXT:    store i32 [[TMP240]], ptr [[N_CASTED75]], align 410154// CHECK11-NEXT:    [[TMP241:%.*]] = load i32, ptr [[N_CASTED75]], align 410155// CHECK11-NEXT:    [[TMP242:%.*]] = load ptr, ptr [[A]], align 410156// CHECK11-NEXT:    [[TMP243:%.*]] = load ptr, ptr [[B]], align 410157// CHECK11-NEXT:    [[TMP244:%.*]] = load ptr, ptr [[C]], align 410158// CHECK11-NEXT:    [[TMP245:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 010159// CHECK11-NEXT:    store i32 [[TMP239]], ptr [[TMP245]], align 410160// CHECK11-NEXT:    [[TMP246:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 010161// CHECK11-NEXT:    store i32 [[TMP239]], ptr [[TMP246]], align 410162// CHECK11-NEXT:    [[TMP247:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 010163// CHECK11-NEXT:    store ptr null, ptr [[TMP247]], align 410164// CHECK11-NEXT:    [[TMP248:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 110165// CHECK11-NEXT:    store i32 [[TMP241]], ptr [[TMP248]], align 410166// CHECK11-NEXT:    [[TMP249:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 110167// CHECK11-NEXT:    store i32 [[TMP241]], ptr [[TMP249]], align 410168// CHECK11-NEXT:    [[TMP250:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 110169// CHECK11-NEXT:    store ptr null, ptr [[TMP250]], align 410170// CHECK11-NEXT:    [[TMP251:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 210171// CHECK11-NEXT:    store ptr [[TMP242]], ptr [[TMP251]], align 410172// CHECK11-NEXT:    [[TMP252:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 210173// CHECK11-NEXT:    store ptr [[TMP242]], ptr [[TMP252]], align 410174// CHECK11-NEXT:    [[TMP253:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 210175// CHECK11-NEXT:    store ptr null, ptr [[TMP253]], align 410176// CHECK11-NEXT:    [[TMP254:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 310177// CHECK11-NEXT:    store ptr [[TMP243]], ptr [[TMP254]], align 410178// CHECK11-NEXT:    [[TMP255:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 310179// CHECK11-NEXT:    store ptr [[TMP243]], ptr [[TMP255]], align 410180// CHECK11-NEXT:    [[TMP256:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 310181// CHECK11-NEXT:    store ptr null, ptr [[TMP256]], align 410182// CHECK11-NEXT:    [[TMP257:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 410183// CHECK11-NEXT:    store ptr [[TMP244]], ptr [[TMP257]], align 410184// CHECK11-NEXT:    [[TMP258:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 410185// CHECK11-NEXT:    store ptr [[TMP244]], ptr [[TMP258]], align 410186// CHECK11-NEXT:    [[TMP259:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 410187// CHECK11-NEXT:    store ptr null, ptr [[TMP259]], align 410188// CHECK11-NEXT:    [[TMP260:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 010189// CHECK11-NEXT:    [[TMP261:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 010190// CHECK11-NEXT:    [[TMP262:%.*]] = load i32, ptr [[N]], align 410191// CHECK11-NEXT:    store i32 [[TMP262]], ptr [[DOTCAPTURE_EXPR_80]], align 410192// CHECK11-NEXT:    [[TMP263:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_80]], align 410193// CHECK11-NEXT:    [[SUB82:%.*]] = sub nsw i32 [[TMP263]], 010194// CHECK11-NEXT:    [[DIV83:%.*]] = sdiv i32 [[SUB82]], 110195// CHECK11-NEXT:    [[SUB84:%.*]] = sub nsw i32 [[DIV83]], 110196// CHECK11-NEXT:    store i32 [[SUB84]], ptr [[DOTCAPTURE_EXPR_81]], align 410197// CHECK11-NEXT:    [[TMP264:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_81]], align 410198// CHECK11-NEXT:    [[ADD85:%.*]] = add nsw i32 [[TMP264]], 110199// CHECK11-NEXT:    [[TMP265:%.*]] = zext i32 [[ADD85]] to i6410200// CHECK11-NEXT:    [[TMP266:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 010201// CHECK11-NEXT:    store i32 3, ptr [[TMP266]], align 410202// CHECK11-NEXT:    [[TMP267:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 110203// CHECK11-NEXT:    store i32 5, ptr [[TMP267]], align 410204// CHECK11-NEXT:    [[TMP268:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 210205// CHECK11-NEXT:    store ptr [[TMP260]], ptr [[TMP268]], align 410206// CHECK11-NEXT:    [[TMP269:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 310207// CHECK11-NEXT:    store ptr [[TMP261]], ptr [[TMP269]], align 410208// CHECK11-NEXT:    [[TMP270:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 410209// CHECK11-NEXT:    store ptr @.offload_sizes.11, ptr [[TMP270]], align 410210// CHECK11-NEXT:    [[TMP271:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 510211// CHECK11-NEXT:    store ptr @.offload_maptypes.12, ptr [[TMP271]], align 410212// CHECK11-NEXT:    [[TMP272:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 610213// CHECK11-NEXT:    store ptr null, ptr [[TMP272]], align 410214// CHECK11-NEXT:    [[TMP273:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 710215// CHECK11-NEXT:    store ptr null, ptr [[TMP273]], align 410216// CHECK11-NEXT:    [[TMP274:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 810217// CHECK11-NEXT:    store i64 [[TMP265]], ptr [[TMP274]], align 810218// CHECK11-NEXT:    [[TMP275:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 910219// CHECK11-NEXT:    store i64 0, ptr [[TMP275]], align 810220// CHECK11-NEXT:    [[TMP276:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 1010221// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP276]], align 410222// CHECK11-NEXT:    [[TMP277:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 1110223// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP277]], align 410224// CHECK11-NEXT:    [[TMP278:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 1210225// CHECK11-NEXT:    store i32 0, ptr [[TMP278]], align 410226// 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_l561.region_id, ptr [[KERNEL_ARGS86]])10227// CHECK11-NEXT:    [[TMP280:%.*]] = icmp ne i32 [[TMP279]], 010228// CHECK11-NEXT:    br i1 [[TMP280]], label [[OMP_OFFLOAD_FAILED87:%.*]], label [[OMP_OFFLOAD_CONT88:%.*]]10229// CHECK11:       omp_offload.failed87:10230// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561(i32 [[TMP239]], i32 [[TMP241]], ptr [[TMP242]], ptr [[TMP243]], ptr [[TMP244]]) #[[ATTR2]]10231// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT88]]10232// CHECK11:       omp_offload.cont88:10233// CHECK11-NEXT:    [[CALL:%.*]] = call noundef i32 @_Z5tmainIiET_v()10234// CHECK11-NEXT:    ret i32 [[CALL]]10235//10236//10237// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l36810238// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1:[0-9]+]] {10239// CHECK11-NEXT:  entry:10240// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 410241// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410242// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410243// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410244// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 410245// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410246// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410247// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410248// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])10249// CHECK11-NEXT:    ret void10250//10251//10252// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368.omp_outlined10253// 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]] {10254// CHECK11-NEXT:  entry:10255// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410256// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410257// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410258// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410259// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410260// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410261// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410262// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410263// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410264// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410265// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410266// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 410267// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 410268// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410269// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410270// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410271// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410272// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410273// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410274// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410275// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410276// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410277// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410278// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410279// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410280// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410281// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410282// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410283// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410284// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010285// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110286// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110287// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410288// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410289// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410290// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10291// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10292// CHECK11:       omp.precond.then:10293// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 410294// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410295// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 410296// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410297// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410298// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410299// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 410300// 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)10301// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410302// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410303// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]10304// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10305// CHECK11:       cond.true:10306// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410307// CHECK11-NEXT:    br label [[COND_END:%.*]]10308// CHECK11:       cond.false:10309// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410310// CHECK11-NEXT:    br label [[COND_END]]10311// CHECK11:       cond.end:10312// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]10313// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 410314// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410315// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 410316// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10317// CHECK11:       omp.inner.for.cond:10318// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP18:![0-9]+]]10319// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP18]]10320// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]10321// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10322// CHECK11:       omp.inner.for.body:10323// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP18]]10324// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP18]]10325// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP18]]10326// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10327// CHECK11:       omp.inner.for.inc:10328// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP18]]10329// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP18]]10330// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]10331// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP18]]10332// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP19:![0-9]+]]10333// CHECK11:       omp.inner.for.end:10334// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10335// CHECK11:       omp.loop.exit:10336// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410337// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 410338// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])10339// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 410340// CHECK11-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 010341// CHECK11-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]10342// CHECK11:       .omp.final.then:10343// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410344// CHECK11-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 010345// CHECK11-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 110346// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 110347// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]10348// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 410349// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]10350// CHECK11:       .omp.final.done:10351// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10352// CHECK11:       omp.precond.end:10353// CHECK11-NEXT:    ret void10354//10355//10356// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l368.omp_outlined.omp_outlined10357// 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]] {10358// CHECK11-NEXT:  entry:10359// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410360// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410361// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 410362// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 410363// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410364// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410365// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410366// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410367// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410368// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410369// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410370// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410371// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410372// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 410373// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 410374// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410375// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410376// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410377// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410378// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410379// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 410380// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 410381// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410382// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410383// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410384// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410385// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410386// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410387// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410388// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410389// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410390// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410391// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410392// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010393// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110394// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110395// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410396// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410397// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410398// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10399// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10400// CHECK11:       omp.precond.then:10401// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 410402// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410403// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 410404// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 410405// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 410406// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 410407// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 410408// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410409// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410410// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410411// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 410412// 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)10413// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410414// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410415// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]10416// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10417// CHECK11:       cond.true:10418// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410419// CHECK11-NEXT:    br label [[COND_END:%.*]]10420// CHECK11:       cond.false:10421// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410422// CHECK11-NEXT:    br label [[COND_END]]10423// CHECK11:       cond.end:10424// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]10425// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 410426// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 410427// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 410428// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10429// CHECK11:       omp.inner.for.cond:10430// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22:![0-9]+]]10431// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP22]]10432// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]10433// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10434// CHECK11:       omp.inner.for.body:10435// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22]]10436// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 110437// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]10438// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP22]]10439// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP22]]10440// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP22]]10441// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]10442// CHECK11-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP22]]10443// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP22]]10444// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP22]]10445// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]10446// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP22]]10447// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]10448// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP22]]10449// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP22]]10450// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]10451// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP22]]10452// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]10453// CHECK11:       omp.body.continue:10454// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10455// CHECK11:       omp.inner.for.inc:10456// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22]]10457// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 110458// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP22]]10459// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP23:![0-9]+]]10460// CHECK11:       omp.inner.for.end:10461// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10462// CHECK11:       omp.loop.exit:10463// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410464// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 410465// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])10466// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 410467// CHECK11-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 010468// CHECK11-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]10469// CHECK11:       .omp.final.then:10470// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410471// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP33]], 010472// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 110473// CHECK11-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 110474// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]10475// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 410476// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]10477// CHECK11:       .omp.final.done:10478// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10479// CHECK11:       omp.precond.end:10480// CHECK11-NEXT:    ret void10481//10482//10483// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l40710484// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {10485// CHECK11-NEXT:  entry:10486// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 410487// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410488// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410489// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410490// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 410491// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410492// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410493// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410494// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])10495// CHECK11-NEXT:    ret void10496//10497//10498// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407.omp_outlined10499// 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]] {10500// CHECK11-NEXT:  entry:10501// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410502// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410503// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410504// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410505// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410506// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410507// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410508// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410509// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410510// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410511// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410512// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 410513// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 410514// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410515// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410516// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410517// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410518// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410519// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410520// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410521// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410522// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410523// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410524// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410525// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410526// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410527// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410528// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410529// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410530// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010531// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110532// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110533// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410534// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410535// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410536// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10537// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10538// CHECK11:       omp.precond.then:10539// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 410540// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410541// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 410542// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410543// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410544// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410545// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 410546// 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)10547// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410548// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410549// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]10550// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10551// CHECK11:       cond.true:10552// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410553// CHECK11-NEXT:    br label [[COND_END:%.*]]10554// CHECK11:       cond.false:10555// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410556// CHECK11-NEXT:    br label [[COND_END]]10557// CHECK11:       cond.end:10558// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]10559// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 410560// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410561// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 410562// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10563// CHECK11:       omp.inner.for.cond:10564// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP27:![0-9]+]]10565// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP27]]10566// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]10567// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10568// CHECK11:       omp.inner.for.body:10569// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP27]]10570// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP27]]10571// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP27]]10572// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10573// CHECK11:       omp.inner.for.inc:10574// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP27]]10575// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP27]]10576// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]10577// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP27]]10578// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP28:![0-9]+]]10579// CHECK11:       omp.inner.for.end:10580// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10581// CHECK11:       omp.loop.exit:10582// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410583// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 410584// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])10585// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 410586// CHECK11-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 010587// CHECK11-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]10588// CHECK11:       .omp.final.then:10589// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410590// CHECK11-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 010591// CHECK11-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 110592// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 110593// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]10594// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 410595// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]10596// CHECK11:       .omp.final.done:10597// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10598// CHECK11:       omp.precond.end:10599// CHECK11-NEXT:    ret void10600//10601//10602// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l407.omp_outlined.omp_outlined10603// 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]] {10604// CHECK11-NEXT:  entry:10605// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410606// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410607// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 410608// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 410609// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410610// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410611// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410612// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410613// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410614// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410615// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410616// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410617// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410618// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 410619// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 410620// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410621// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410622// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410623// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410624// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410625// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 410626// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 410627// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410628// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410629// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410630// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410631// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410632// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410633// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410634// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410635// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410636// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410637// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410638// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010639// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110640// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110641// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410642// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410643// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410644// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10645// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10646// CHECK11:       omp.precond.then:10647// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 410648// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410649// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 410650// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 410651// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 410652// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 410653// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 410654// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410655// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410656// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410657// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 410658// 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)10659// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410660// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410661// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]10662// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10663// CHECK11:       cond.true:10664// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410665// CHECK11-NEXT:    br label [[COND_END:%.*]]10666// CHECK11:       cond.false:10667// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410668// CHECK11-NEXT:    br label [[COND_END]]10669// CHECK11:       cond.end:10670// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]10671// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 410672// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 410673// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 410674// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10675// CHECK11:       omp.inner.for.cond:10676// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP30:![0-9]+]]10677// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP30]]10678// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]10679// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10680// CHECK11:       omp.inner.for.body:10681// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP30]]10682// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 110683// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]10684// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP30]]10685// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP30]]10686// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP30]]10687// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]10688// CHECK11-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP30]]10689// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP30]]10690// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP30]]10691// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]10692// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP30]]10693// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]10694// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP30]]10695// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP30]]10696// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]10697// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP30]]10698// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]10699// CHECK11:       omp.body.continue:10700// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10701// CHECK11:       omp.inner.for.inc:10702// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP30]]10703// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 110704// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP30]]10705// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP31:![0-9]+]]10706// CHECK11:       omp.inner.for.end:10707// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10708// CHECK11:       omp.loop.exit:10709// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410710// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 410711// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])10712// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 410713// CHECK11-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 010714// CHECK11-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]10715// CHECK11:       .omp.final.then:10716// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410717// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP33]], 010718// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 110719// CHECK11-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 110720// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]10721// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 410722// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]10723// CHECK11:       .omp.final.done:10724// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10725// CHECK11:       omp.precond.end:10726// CHECK11-NEXT:    ret void10727//10728//10729// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l44610730// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {10731// CHECK11-NEXT:  entry:10732// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 410733// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 410734// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410735// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410736// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410737// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 410738// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 410739// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410740// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410741// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410742// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])10743// CHECK11-NEXT:    ret void10744//10745//10746// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446.omp_outlined10747// 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]] {10748// CHECK11-NEXT:  entry:10749// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410750// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410751// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 410752// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410753// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410754// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410755// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410756// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410757// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410758// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410759// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410760// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410761// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 410762// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 410763// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410764// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410765// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410766// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410767// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410768// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 410769// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410770// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410771// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410772// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410773// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 410774// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 410775// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 410776// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 410777// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 410778// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 410779// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 410780// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410781// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 010782// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110783// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110784// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410785// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410786// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410787// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]10788// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10789// CHECK11:       omp.precond.then:10790// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 410791// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410792// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 410793// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410794// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410795// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 410796// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410797// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 410798// 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]])10799// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410800// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410801// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]10802// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10803// CHECK11:       cond.true:10804// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410805// CHECK11-NEXT:    br label [[COND_END:%.*]]10806// CHECK11:       cond.false:10807// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 410808// CHECK11-NEXT:    br label [[COND_END]]10809// CHECK11:       cond.end:10810// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]10811// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 410812// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 410813// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 410814// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10815// CHECK11:       omp.inner.for.cond:10816// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP33:![0-9]+]]10817// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP33]]10818// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 110819// CHECK11-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]10820// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10821// CHECK11:       omp.inner.for.body:10822// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP33]]10823// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP33]]10824// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]), !llvm.access.group [[ACC_GRP33]]10825// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10826// CHECK11:       omp.inner.for.inc:10827// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP33]]10828// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP33]]10829// CHECK11-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]10830// CHECK11-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP33]]10831// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP33]]10832// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP33]]10833// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]10834// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP33]]10835// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP33]]10836// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP33]]10837// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]10838// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP33]]10839// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP33]]10840// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP33]]10841// CHECK11-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP27]], [[TMP28]]10842// CHECK11-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]10843// CHECK11:       cond.true10:10844// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP33]]10845// CHECK11-NEXT:    br label [[COND_END12:%.*]]10846// CHECK11:       cond.false11:10847// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP33]]10848// CHECK11-NEXT:    br label [[COND_END12]]10849// CHECK11:       cond.end12:10850// CHECK11-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP29]], [[COND_TRUE10]] ], [ [[TMP30]], [[COND_FALSE11]] ]10851// CHECK11-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP33]]10852// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP33]]10853// CHECK11-NEXT:    store i32 [[TMP31]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP33]]10854// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP34:![0-9]+]]10855// CHECK11:       omp.inner.for.end:10856// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10857// CHECK11:       omp.loop.exit:10858// CHECK11-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410859// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 410860// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP33]])10861// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 410862// CHECK11-NEXT:    [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 010863// CHECK11-NEXT:    br i1 [[TMP35]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]10864// CHECK11:       .omp.final.then:10865// CHECK11-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410866// CHECK11-NEXT:    [[SUB14:%.*]] = sub nsw i32 [[TMP36]], 010867// CHECK11-NEXT:    [[DIV15:%.*]] = sdiv i32 [[SUB14]], 110868// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV15]], 110869// CHECK11-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL]]10870// CHECK11-NEXT:    store i32 [[ADD16]], ptr [[I3]], align 410871// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]10872// CHECK11:       .omp.final.done:10873// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]10874// CHECK11:       omp.precond.end:10875// CHECK11-NEXT:    ret void10876//10877//10878// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l446.omp_outlined.omp_outlined10879// 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]] {10880// CHECK11-NEXT:  entry:10881// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 410882// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 410883// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 410884// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 410885// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 410886// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 410887// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 410888// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 410889// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 410890// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 410891// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 410892// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 410893// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 410894// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 410895// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 410896// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 410897// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 410898// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 410899// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 410900// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 410901// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 410902// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 410903// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 410904// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 410905// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 410906// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 410907// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 410908// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 410909// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 410910// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 410911// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 410912// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 410913// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410914// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 010915// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 110916// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 110917// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 410918// CHECK11-NEXT:    store i32 0, ptr [[I]], align 410919// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410920// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]10921// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]10922// CHECK11:       omp.precond.then:10923// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 410924// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410925// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 410926// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 410927// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 410928// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 410929// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 410930// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 410931// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 410932// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410933// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 410934// 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)10935// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410936// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410937// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]10938// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10939// CHECK11:       cond.true:10940// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 410941// CHECK11-NEXT:    br label [[COND_END:%.*]]10942// CHECK11:       cond.false:10943// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 410944// CHECK11-NEXT:    br label [[COND_END]]10945// CHECK11:       cond.end:10946// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]10947// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 410948// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 410949// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 410950// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]10951// CHECK11:       omp.inner.for.cond:10952// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP36:![0-9]+]]10953// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP36]]10954// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]10955// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]10956// CHECK11:       omp.inner.for.body:10957// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP36]]10958// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 110959// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]10960// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP36]]10961// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP36]]10962// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP36]]10963// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]10964// CHECK11-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP36]]10965// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP36]]10966// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP36]]10967// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]10968// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP36]]10969// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]10970// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP36]]10971// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP36]]10972// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]10973// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP36]]10974// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]10975// CHECK11:       omp.body.continue:10976// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]10977// CHECK11:       omp.inner.for.inc:10978// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP36]]10979// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 110980// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP36]]10981// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP37:![0-9]+]]10982// CHECK11:       omp.inner.for.end:10983// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]10984// CHECK11:       omp.loop.exit:10985// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 410986// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 410987// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])10988// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 410989// CHECK11-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 010990// CHECK11-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]10991// CHECK11:       .omp.final.then:10992// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 410993// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP33]], 010994// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 110995// CHECK11-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 110996// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]10997// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 410998// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]10999// CHECK11:       .omp.final.done:11000// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11001// CHECK11:       omp.precond.end:11002// CHECK11-NEXT:    ret void11003//11004//11005// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l47711006// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {11007// CHECK11-NEXT:  entry:11008// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 411009// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411010// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411011// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411012// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 411013// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411014// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411015// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411016// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])11017// CHECK11-NEXT:    ret void11018//11019//11020// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477.omp_outlined11021// 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]] {11022// CHECK11-NEXT:  entry:11023// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411024// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411025// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411026// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411027// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411028// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411029// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411030// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411031// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 411032// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411033// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411034// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 411035// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 411036// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411037// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411038// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 411039// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411040// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411041// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411042// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411043// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411044// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411045// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 411046// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 411047// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 411048// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 411049// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 411050// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 411051// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411052// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 011053// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111054// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 111055// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 411056// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411057// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411058// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]11059// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11060// CHECK11:       omp.precond.then:11061// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 411062// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411063// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 411064// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411065// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411066// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411067// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 411068// 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)11069// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411070// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411071// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]11072// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]11073// CHECK11:       cond.true:11074// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411075// CHECK11-NEXT:    br label [[COND_END:%.*]]11076// CHECK11:       cond.false:11077// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411078// CHECK11-NEXT:    br label [[COND_END]]11079// CHECK11:       cond.end:11080// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]11081// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 411082// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 411083// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 411084// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11085// CHECK11:       omp.inner.for.cond:11086// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP39:![0-9]+]]11087// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP39]]11088// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]11089// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11090// CHECK11:       omp.inner.for.body:11091// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP39]]11092// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP39]]11093// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP39]]11094// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11095// CHECK11:       omp.inner.for.inc:11096// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP39]]11097// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP39]]11098// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]11099// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP39]]11100// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP40:![0-9]+]]11101// CHECK11:       omp.inner.for.end:11102// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]11103// CHECK11:       omp.loop.exit:11104// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411105// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 411106// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])11107// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 411108// CHECK11-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 011109// CHECK11-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]11110// CHECK11:       .omp.final.then:11111// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411112// CHECK11-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 011113// CHECK11-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 111114// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 111115// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]11116// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 411117// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]11118// CHECK11:       .omp.final.done:11119// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11120// CHECK11:       omp.precond.end:11121// CHECK11-NEXT:    ret void11122//11123//11124// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l477.omp_outlined.omp_outlined11125// 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]] {11126// CHECK11-NEXT:  entry:11127// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411128// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411129// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 411130// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 411131// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411132// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411133// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411134// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411135// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411136// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411137// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 411138// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411139// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411140// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 411141// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 411142// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411143// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411144// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 411145// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411146// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411147// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 411148// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 411149// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411150// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411151// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411152// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411153// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 411154// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 411155// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 411156// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 411157// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 411158// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 411159// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411160// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 011161// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111162// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 111163// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 411164// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411165// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411166// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]11167// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11168// CHECK11:       omp.precond.then:11169// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 411170// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411171// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 411172// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 411173// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 411174// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 411175// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 411176// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411177// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411178// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411179// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 411180// 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)11181// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411182// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411183// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]11184// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]11185// CHECK11:       cond.true:11186// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411187// CHECK11-NEXT:    br label [[COND_END:%.*]]11188// CHECK11:       cond.false:11189// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411190// CHECK11-NEXT:    br label [[COND_END]]11191// CHECK11:       cond.end:11192// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]11193// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 411194// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411195// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 411196// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11197// CHECK11:       omp.inner.for.cond:11198// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP42:![0-9]+]]11199// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP42]]11200// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]11201// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11202// CHECK11:       omp.inner.for.body:11203// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP42]]11204// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 111205// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]11206// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP42]]11207// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP42]]11208// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP42]]11209// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP20]], i32 [[TMP21]]11210// CHECK11-NEXT:    [[TMP22:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP42]]11211// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP42]]11212// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP42]]11213// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]11214// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP42]]11215// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP22]], [[TMP25]]11216// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP42]]11217// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP42]]11218// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]11219// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP42]]11220// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]11221// CHECK11:       omp.body.continue:11222// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11223// CHECK11:       omp.inner.for.inc:11224// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP42]]11225// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 111226// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP42]]11227// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP43:![0-9]+]]11228// CHECK11:       omp.inner.for.end:11229// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]11230// CHECK11:       omp.loop.exit:11231// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411232// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 411233// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])11234// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 411235// CHECK11-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 011236// CHECK11-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]11237// CHECK11:       .omp.final.then:11238// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411239// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP33]], 011240// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 111241// CHECK11-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 111242// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]11243// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 411244// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]11245// CHECK11:       .omp.final.done:11246// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11247// CHECK11:       omp.precond.end:11248// CHECK11-NEXT:    ret void11249//11250//11251// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l50511252// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {11253// CHECK11-NEXT:  entry:11254// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 411255// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 411256// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411257// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411258// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411259// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 411260// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 411261// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411262// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411263// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411264// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])11265// CHECK11-NEXT:    ret void11266//11267//11268// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505.omp_outlined11269// 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]] {11270// CHECK11-NEXT:  entry:11271// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411272// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411273// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 411274// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411275// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411276// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411277// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411278// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 411279// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411280// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411281// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411282// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 411283// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411284// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 411285// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 411286// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411287// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411288// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 411289// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 411290// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411291// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411292// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 411293// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411294// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411295// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411296// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411297// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 411298// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 411299// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 411300// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 411301// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 411302// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 411303// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 411304// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 411305// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 411306// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411307// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 011308// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111309// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 111310// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 411311// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411312// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411313// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]11314// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11315// CHECK11:       omp.precond.then:11316// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 411317// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 411318// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 411319// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411320// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411321// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411322// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 411323// 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)11324// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411325// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 411326// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]11327// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]11328// CHECK11:       cond.true:11329// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 411330// CHECK11-NEXT:    br label [[COND_END:%.*]]11331// CHECK11:       cond.false:11332// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411333// CHECK11-NEXT:    br label [[COND_END]]11334// CHECK11:       cond.end:11335// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]11336// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 411337// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 411338// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 411339// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11340// CHECK11:       omp.inner.for.cond:11341// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP45:![0-9]+]]11342// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP45]]11343// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]11344// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11345// CHECK11:       omp.inner.for.body:11346// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP45]]11347// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP45]]11348// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP45]]11349// CHECK11-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP45]]11350// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP45]]11351// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]]), !llvm.access.group [[ACC_GRP45]]11352// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11353// CHECK11:       omp.inner.for.inc:11354// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP45]]11355// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP45]]11356// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]11357// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP45]]11358// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP46:![0-9]+]]11359// CHECK11:       omp.inner.for.end:11360// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]11361// CHECK11:       omp.loop.exit:11362// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411363// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 411364// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])11365// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 411366// CHECK11-NEXT:    [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 011367// CHECK11-NEXT:    br i1 [[TMP28]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]11368// CHECK11:       .omp.final.then:11369// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411370// CHECK11-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP29]], 011371// CHECK11-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 111372// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 111373// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]11374// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 411375// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]11376// CHECK11:       .omp.final.done:11377// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11378// CHECK11:       omp.precond.end:11379// CHECK11-NEXT:    ret void11380//11381//11382// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l505.omp_outlined.omp_outlined11383// 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]] {11384// CHECK11-NEXT:  entry:11385// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411386// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411387// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 411388// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 411389// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411390// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411391// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411392// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411393// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 411394// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411395// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411396// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411397// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 411398// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411399// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 411400// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 411401// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411402// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411403// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 411404// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411405// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411406// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 411407// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 411408// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411409// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411410// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411411// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411412// CHECK11-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 411413// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 411414// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 411415// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 411416// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 411417// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 411418// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 411419// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411420// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 011421// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111422// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 111423// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 411424// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411425// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411426// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]11427// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11428// CHECK11:       omp.precond.then:11429// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 411430// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 411431// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 411432// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 411433// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 411434// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 411435// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 411436// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411437// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411438// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 411439// CHECK11-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411440// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 411441// 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]])11442// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]11443// CHECK11:       omp.dispatch.cond:11444// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411445// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 411446// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP13]], [[TMP14]]11447// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]11448// CHECK11:       cond.true:11449// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 411450// CHECK11-NEXT:    br label [[COND_END:%.*]]11451// CHECK11:       cond.false:11452// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411453// CHECK11-NEXT:    br label [[COND_END]]11454// CHECK11:       cond.end:11455// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP15]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]11456// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 411457// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411458// CHECK11-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 411459// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 411460// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411461// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]11462// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]11463// CHECK11:       omp.dispatch.body:11464// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11465// CHECK11:       omp.inner.for.cond:11466// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP48:![0-9]+]]11467// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP48]]11468// CHECK11-NEXT:    [[CMP7:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]11469// CHECK11-NEXT:    br i1 [[CMP7]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11470// CHECK11:       omp.inner.for.body:11471// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP48]]11472// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 111473// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]11474// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP48]]11475// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP48]]11476// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP48]]11477// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP23]], i32 [[TMP24]]11478// CHECK11-NEXT:    [[TMP25:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP48]]11479// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP48]]11480// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP48]]11481// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP26]], i32 [[TMP27]]11482// CHECK11-NEXT:    [[TMP28:%.*]] = load double, ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP48]]11483// CHECK11-NEXT:    [[ADD9:%.*]] = fadd double [[TMP25]], [[TMP28]]11484// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP48]]11485// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP48]]11486// CHECK11-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds double, ptr [[TMP29]], i32 [[TMP30]]11487// CHECK11-NEXT:    store double [[ADD9]], ptr [[ARRAYIDX10]], align 4, !llvm.access.group [[ACC_GRP48]]11488// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]11489// CHECK11:       omp.body.continue:11490// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11491// CHECK11:       omp.inner.for.inc:11492// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP48]]11493// CHECK11-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP31]], 111494// CHECK11-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP48]]11495// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP49:![0-9]+]]11496// CHECK11:       omp.inner.for.end:11497// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]11498// CHECK11:       omp.dispatch.inc:11499// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411500// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 411501// CHECK11-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], [[TMP33]]11502// CHECK11-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_LB]], align 411503// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411504// CHECK11-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 411505// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP34]], [[TMP35]]11506// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[DOTOMP_UB]], align 411507// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]11508// CHECK11:       omp.dispatch.end:11509// CHECK11-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411510// CHECK11-NEXT:    [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 411511// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP37]])11512// CHECK11-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 411513// CHECK11-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 011514// CHECK11-NEXT:    br i1 [[TMP39]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]11515// CHECK11:       .omp.final.then:11516// CHECK11-NEXT:    [[TMP40:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411517// CHECK11-NEXT:    [[SUB14:%.*]] = sub nsw i32 [[TMP40]], 011518// CHECK11-NEXT:    [[DIV15:%.*]] = sdiv i32 [[SUB14]], 111519// CHECK11-NEXT:    [[MUL16:%.*]] = mul nsw i32 [[DIV15]], 111520// CHECK11-NEXT:    [[ADD17:%.*]] = add nsw i32 0, [[MUL16]]11521// CHECK11-NEXT:    store i32 [[ADD17]], ptr [[I4]], align 411522// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]11523// CHECK11:       .omp.final.done:11524// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11525// CHECK11:       omp.precond.end:11526// CHECK11-NEXT:    ret void11527//11528//11529// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l53511530// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {11531// CHECK11-NEXT:  entry:11532// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 411533// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411534// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411535// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411536// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 411537// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411538// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411539// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411540// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 4, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])11541// CHECK11-NEXT:    ret void11542//11543//11544// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535.omp_outlined11545// 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]] {11546// CHECK11-NEXT:  entry:11547// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411548// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411549// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411550// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411551// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411552// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411553// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411554// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411555// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 411556// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411557// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411558// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 411559// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 411560// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411561// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411562// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 411563// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411564// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411565// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411566// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411567// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411568// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411569// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 411570// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 411571// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 411572// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 411573// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 411574// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 411575// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411576// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 011577// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111578// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 111579// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 411580// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411581// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411582// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]11583// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11584// CHECK11:       omp.precond.then:11585// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 411586// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411587// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 411588// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411589// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411590// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411591// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 411592// 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)11593// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411594// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411595// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]11596// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]11597// CHECK11:       cond.true:11598// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411599// CHECK11-NEXT:    br label [[COND_END:%.*]]11600// CHECK11:       cond.false:11601// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411602// CHECK11-NEXT:    br label [[COND_END]]11603// CHECK11:       cond.end:11604// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]11605// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 411606// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 411607// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 411608// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11609// CHECK11:       omp.inner.for.cond:11610// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP51:![0-9]+]]11611// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP51]]11612// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]11613// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11614// CHECK11:       omp.inner.for.body:11615// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP51]]11616// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP51]]11617// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 6, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP51]]11618// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11619// CHECK11:       omp.inner.for.inc:11620// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP51]]11621// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP51]]11622// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]11623// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP51]]11624// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP52:![0-9]+]]11625// CHECK11:       omp.inner.for.end:11626// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]11627// CHECK11:       omp.loop.exit:11628// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411629// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 411630// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])11631// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 411632// CHECK11-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 011633// CHECK11-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]11634// CHECK11:       .omp.final.then:11635// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411636// CHECK11-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 011637// CHECK11-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 111638// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 111639// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]11640// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 411641// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]11642// CHECK11:       .omp.final.done:11643// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11644// CHECK11:       omp.precond.end:11645// CHECK11-NEXT:    ret void11646//11647//11648// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l535.omp_outlined.omp_outlined11649// 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]] {11650// CHECK11-NEXT:  entry:11651// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411652// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411653// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 411654// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 411655// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411656// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411657// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411658// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411659// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411660// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411661// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 411662// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411663// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411664// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 411665// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 411666// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411667// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411668// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 411669// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411670// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411671// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 411672// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 411673// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411674// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411675// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411676// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411677// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 411678// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 411679// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 411680// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 411681// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 411682// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 411683// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411684// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 011685// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111686// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 111687// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 411688// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411689// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411690// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]11691// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11692// CHECK11:       omp.precond.then:11693// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 411694// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411695// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 411696// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 411697// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 411698// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 411699// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 411700// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411701// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411702// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411703// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411704// CHECK11-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411705// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[TMP12]], align 411706// CHECK11-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP13]], i32 35, i32 [[TMP10]], i32 [[TMP11]], i32 1, i32 1)11707// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]11708// CHECK11:       omp.dispatch.cond:11709// CHECK11-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411710// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 411711// 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]])11712// CHECK11-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP16]], 011713// CHECK11-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]11714// CHECK11:       omp.dispatch.body:11715// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411716// CHECK11-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 411717// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11718// CHECK11:       omp.inner.for.cond:11719// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP54:![0-9]+]]11720// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP54]]11721// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]11722// CHECK11-NEXT:    br i1 [[CMP4]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11723// CHECK11:       omp.inner.for.body:11724// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP54]]11725// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP20]], 111726// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]11727// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP54]]11728// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP54]]11729// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP54]]11730// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP21]], i32 [[TMP22]]11731// CHECK11-NEXT:    [[TMP23:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP54]]11732// CHECK11-NEXT:    [[TMP24:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP54]]11733// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP54]]11734// CHECK11-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds double, ptr [[TMP24]], i32 [[TMP25]]11735// CHECK11-NEXT:    [[TMP26:%.*]] = load double, ptr [[ARRAYIDX5]], align 4, !llvm.access.group [[ACC_GRP54]]11736// CHECK11-NEXT:    [[ADD6:%.*]] = fadd double [[TMP23]], [[TMP26]]11737// CHECK11-NEXT:    [[TMP27:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP54]]11738// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP54]]11739// CHECK11-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds double, ptr [[TMP27]], i32 [[TMP28]]11740// CHECK11-NEXT:    store double [[ADD6]], ptr [[ARRAYIDX7]], align 4, !llvm.access.group [[ACC_GRP54]]11741// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]11742// CHECK11:       omp.body.continue:11743// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11744// CHECK11:       omp.inner.for.inc:11745// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP54]]11746// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP29]], 111747// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP54]]11748// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP55:![0-9]+]]11749// CHECK11:       omp.inner.for.end:11750// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]11751// CHECK11:       omp.dispatch.inc:11752// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]11753// CHECK11:       omp.dispatch.end:11754// CHECK11-NEXT:    [[TMP30:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411755// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[TMP30]], align 411756// CHECK11-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP31]])11757// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 411758// CHECK11-NEXT:    [[TMP33:%.*]] = icmp ne i32 [[TMP32]], 011759// CHECK11-NEXT:    br i1 [[TMP33]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]11760// CHECK11:       .omp.final.then:11761// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 411762// CHECK11-NEXT:    [[SUB9:%.*]] = sub nsw i32 [[TMP34]], 011763// CHECK11-NEXT:    [[DIV10:%.*]] = sdiv i32 [[SUB9]], 111764// CHECK11-NEXT:    [[MUL11:%.*]] = mul nsw i32 [[DIV10]], 111765// CHECK11-NEXT:    [[ADD12:%.*]] = add nsw i32 0, [[MUL11]]11766// CHECK11-NEXT:    store i32 [[ADD12]], ptr [[I3]], align 411767// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]11768// CHECK11:       .omp.final.done:11769// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11770// CHECK11:       omp.precond.end:11771// CHECK11-NEXT:    ret void11772//11773//11774// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l56111775// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {11776// CHECK11-NEXT:  entry:11777// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 411778// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 411779// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411780// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411781// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411782// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 411783// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 411784// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411785// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411786// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411787// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_teams(ptr @[[GLOB3]], i32 5, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])11788// CHECK11-NEXT:    ret void11789//11790//11791// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561.omp_outlined11792// 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]] {11793// CHECK11-NEXT:  entry:11794// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411795// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411796// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 411797// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411798// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411799// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411800// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411801// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 411802// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411803// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411804// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411805// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 411806// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411807// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 411808// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 411809// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411810// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411811// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 411812// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = 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 [[CH]], ptr [[CH_ADDR]], align 411816// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411817// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411818// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411819// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411820// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 411821// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 411822// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 411823// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 411824// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 411825// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 411826// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 411827// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 411828// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 411829// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411830// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 011831// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111832// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 111833// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 411834// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411835// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411836// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]11837// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11838// CHECK11:       omp.precond.then:11839// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 411840// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 411841// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 411842// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411843// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411844// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411845// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 411846// 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)11847// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411848// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 411849// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]11850// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]11851// CHECK11:       cond.true:11852// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 411853// CHECK11-NEXT:    br label [[COND_END:%.*]]11854// CHECK11:       cond.false:11855// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 411856// CHECK11-NEXT:    br label [[COND_END]]11857// CHECK11:       cond.end:11858// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]11859// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 411860// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 411861// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 411862// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11863// CHECK11:       omp.inner.for.cond:11864// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP57:![0-9]+]]11865// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP57]]11866// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]11867// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11868// CHECK11:       omp.inner.for.body:11869// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP57]]11870// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP57]]11871// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP57]]11872// CHECK11-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP57]]11873// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP57]]11874// CHECK11-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB3]], i32 7, ptr @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]]), !llvm.access.group [[ACC_GRP57]]11875// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]11876// CHECK11:       omp.inner.for.inc:11877// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP57]]11878// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP57]]11879// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]11880// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP57]]11881// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP58:![0-9]+]]11882// CHECK11:       omp.inner.for.end:11883// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]11884// CHECK11:       omp.loop.exit:11885// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411886// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 411887// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])11888// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 411889// CHECK11-NEXT:    [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 011890// CHECK11-NEXT:    br i1 [[TMP28]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]11891// CHECK11:       .omp.final.then:11892// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411893// CHECK11-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP29]], 011894// CHECK11-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 111895// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 111896// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]11897// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 411898// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]11899// CHECK11:       .omp.final.done:11900// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]11901// CHECK11:       omp.precond.end:11902// CHECK11-NEXT:    ret void11903//11904//11905// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}_main_l561.omp_outlined.omp_outlined11906// 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]] {11907// CHECK11-NEXT:  entry:11908// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 411909// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 411910// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 411911// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 411912// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 411913// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 411914// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 411915// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 411916// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 411917// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 411918// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 411919// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 411920// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 411921// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 411922// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 411923// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 411924// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 411925// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 411926// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 411927// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 411928// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 411929// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 411930// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 411931// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 411932// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 411933// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 411934// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 411935// CHECK11-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 411936// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 411937// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 411938// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 411939// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 411940// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 411941// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 411942// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411943// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 011944// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 111945// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 111946// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 411947// CHECK11-NEXT:    store i32 0, ptr [[I]], align 411948// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 411949// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]11950// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]11951// CHECK11:       omp.precond.then:11952// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 411953// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 411954// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 411955// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 411956// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 411957// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 411958// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 411959// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 411960// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 411961// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 411962// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411963// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 411964// CHECK11-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411965// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[TMP13]], align 411966// CHECK11-NEXT:    call void @__kmpc_dispatch_init_4(ptr @[[GLOB3]], i32 [[TMP14]], i32 35, i32 [[TMP11]], i32 [[TMP12]], i32 1, i32 [[TMP10]])11967// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]11968// CHECK11:       omp.dispatch.cond:11969// CHECK11-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 411970// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[TMP15]], align 411971// 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]])11972// CHECK11-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP17]], 011973// CHECK11-NEXT:    br i1 [[TOBOOL]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]11974// CHECK11:       omp.dispatch.body:11975// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_LB]], align 411976// CHECK11-NEXT:    store i32 [[TMP18]], ptr [[DOTOMP_IV]], align 411977// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]11978// CHECK11:       omp.inner.for.cond:11979// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP60:![0-9]+]]11980// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP60]]11981// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP19]], [[TMP20]]11982// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]11983// CHECK11:       omp.inner.for.body:11984// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP60]]11985// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP21]], 111986// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]11987// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP60]]11988// CHECK11-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP60]]11989// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP60]]11990// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[TMP22]], i32 [[TMP23]]11991// CHECK11-NEXT:    [[TMP24:%.*]] = load double, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP60]]11992// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP60]]11993// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP60]]11994// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds double, ptr [[TMP25]], i32 [[TMP26]]11995// CHECK11-NEXT:    [[TMP27:%.*]] = load double, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP60]]11996// CHECK11-NEXT:    [[ADD7:%.*]] = fadd double [[TMP24]], [[TMP27]]11997// CHECK11-NEXT:    [[TMP28:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP60]]11998// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP60]]11999// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds double, ptr [[TMP28]], i32 [[TMP29]]12000// CHECK11-NEXT:    store double [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP60]]12001// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]12002// CHECK11:       omp.body.continue:12003// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12004// CHECK11:       omp.inner.for.inc:12005// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP60]]12006// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP30]], 112007// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP60]]12008// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP61:![0-9]+]]12009// CHECK11:       omp.inner.for.end:12010// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]12011// CHECK11:       omp.dispatch.inc:12012// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]12013// CHECK11:       omp.dispatch.end:12014// CHECK11-NEXT:    [[TMP31:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412015// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[TMP31]], align 412016// CHECK11-NEXT:    call void @__kmpc_dispatch_deinit(ptr @[[GLOB3]], i32 [[TMP32]])12017// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 412018// CHECK11-NEXT:    [[TMP34:%.*]] = icmp ne i32 [[TMP33]], 012019// CHECK11-NEXT:    br i1 [[TMP34]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]12020// CHECK11:       .omp.final.then:12021// CHECK11-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412022// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP35]], 012023// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 112024// CHECK11-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 112025// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]12026// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[I4]], align 412027// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]12028// CHECK11:       .omp.final.done:12029// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12030// CHECK11:       omp.precond.end:12031// CHECK11-NEXT:    ret void12032//12033//12034// CHECK11-LABEL: define {{[^@]+}}@_Z5tmainIiET_v12035// CHECK11-SAME: () #[[ATTR3:[0-9]+]] comdat {12036// CHECK11-NEXT:  entry:12037// CHECK11-NEXT:    [[A:%.*]] = alloca ptr, align 412038// CHECK11-NEXT:    [[B:%.*]] = alloca ptr, align 412039// CHECK11-NEXT:    [[C:%.*]] = alloca ptr, align 412040// CHECK11-NEXT:    [[N:%.*]] = alloca i32, align 412041// CHECK11-NEXT:    [[CH:%.*]] = alloca i32, align 412042// CHECK11-NEXT:    [[N_CASTED:%.*]] = alloca i32, align 412043// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [4 x ptr], align 412044// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [4 x ptr], align 412045// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [4 x ptr], align 412046// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412047// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412048// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412049// CHECK11-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 812050// CHECK11-NEXT:    [[N_CASTED3:%.*]] = alloca i32, align 412051// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS4:%.*]] = alloca [4 x ptr], align 412052// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS5:%.*]] = alloca [4 x ptr], align 412053// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS6:%.*]] = alloca [4 x ptr], align 412054// CHECK11-NEXT:    [[_TMP7:%.*]] = alloca i32, align 412055// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_8:%.*]] = alloca i32, align 412056// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 412057// CHECK11-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 812058// CHECK11-NEXT:    [[CH_CASTED:%.*]] = alloca i32, align 412059// CHECK11-NEXT:    [[N_CASTED17:%.*]] = alloca i32, align 412060// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS18:%.*]] = alloca [5 x ptr], align 412061// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS19:%.*]] = alloca [5 x ptr], align 412062// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS20:%.*]] = alloca [5 x ptr], align 412063// CHECK11-NEXT:    [[_TMP21:%.*]] = alloca i32, align 412064// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 412065// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_23:%.*]] = alloca i32, align 412066// CHECK11-NEXT:    [[KERNEL_ARGS28:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 812067// CHECK11-NEXT:    [[N_CASTED31:%.*]] = alloca i32, align 412068// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS32:%.*]] = alloca [4 x ptr], align 412069// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS33:%.*]] = alloca [4 x ptr], align 412070// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS34:%.*]] = alloca [4 x ptr], align 412071// CHECK11-NEXT:    [[_TMP35:%.*]] = alloca i32, align 412072// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_36:%.*]] = alloca i32, align 412073// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_37:%.*]] = alloca i32, align 412074// CHECK11-NEXT:    [[KERNEL_ARGS42:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 812075// CHECK11-NEXT:    [[CH_CASTED45:%.*]] = alloca i32, align 412076// CHECK11-NEXT:    [[N_CASTED46:%.*]] = alloca i32, align 412077// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS47:%.*]] = alloca [5 x ptr], align 412078// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS48:%.*]] = alloca [5 x ptr], align 412079// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS49:%.*]] = alloca [5 x ptr], align 412080// CHECK11-NEXT:    [[_TMP50:%.*]] = alloca i32, align 412081// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_51:%.*]] = alloca i32, align 412082// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_52:%.*]] = alloca i32, align 412083// CHECK11-NEXT:    [[KERNEL_ARGS57:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 812084// CHECK11-NEXT:    [[N_CASTED60:%.*]] = alloca i32, align 412085// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS61:%.*]] = alloca [4 x ptr], align 412086// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS62:%.*]] = alloca [4 x ptr], align 412087// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS63:%.*]] = alloca [4 x ptr], align 412088// CHECK11-NEXT:    [[_TMP64:%.*]] = alloca i32, align 412089// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_65:%.*]] = alloca i32, align 412090// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_66:%.*]] = alloca i32, align 412091// CHECK11-NEXT:    [[KERNEL_ARGS71:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 812092// CHECK11-NEXT:    [[CH_CASTED74:%.*]] = alloca i32, align 412093// CHECK11-NEXT:    [[N_CASTED75:%.*]] = alloca i32, align 412094// CHECK11-NEXT:    [[DOTOFFLOAD_BASEPTRS76:%.*]] = alloca [5 x ptr], align 412095// CHECK11-NEXT:    [[DOTOFFLOAD_PTRS77:%.*]] = alloca [5 x ptr], align 412096// CHECK11-NEXT:    [[DOTOFFLOAD_MAPPERS78:%.*]] = alloca [5 x ptr], align 412097// CHECK11-NEXT:    [[_TMP79:%.*]] = alloca i32, align 412098// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_80:%.*]] = alloca i32, align 412099// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_81:%.*]] = alloca i32, align 412100// CHECK11-NEXT:    [[KERNEL_ARGS86:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 812101// CHECK11-NEXT:    store i32 10000, ptr [[N]], align 412102// CHECK11-NEXT:    store i32 100, ptr [[CH]], align 412103// CHECK11-NEXT:    [[TMP0:%.*]] = load i32, ptr [[N]], align 412104// CHECK11-NEXT:    store i32 [[TMP0]], ptr [[N_CASTED]], align 412105// CHECK11-NEXT:    [[TMP1:%.*]] = load i32, ptr [[N_CASTED]], align 412106// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A]], align 412107// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B]], align 412108// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C]], align 412109// CHECK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 012110// CHECK11-NEXT:    store i32 [[TMP1]], ptr [[TMP5]], align 412111// CHECK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 012112// CHECK11-NEXT:    store i32 [[TMP1]], ptr [[TMP6]], align 412113// CHECK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 012114// CHECK11-NEXT:    store ptr null, ptr [[TMP7]], align 412115// CHECK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 112116// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[TMP8]], align 412117// CHECK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 112118// CHECK11-NEXT:    store ptr [[TMP2]], ptr [[TMP9]], align 412119// CHECK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 112120// CHECK11-NEXT:    store ptr null, ptr [[TMP10]], align 412121// CHECK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 212122// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[TMP11]], align 412123// CHECK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 212124// CHECK11-NEXT:    store ptr [[TMP3]], ptr [[TMP12]], align 412125// CHECK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 212126// CHECK11-NEXT:    store ptr null, ptr [[TMP13]], align 412127// CHECK11-NEXT:    [[TMP14:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 312128// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[TMP14]], align 412129// CHECK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 312130// CHECK11-NEXT:    store ptr [[TMP4]], ptr [[TMP15]], align 412131// CHECK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 312132// CHECK11-NEXT:    store ptr null, ptr [[TMP16]], align 412133// CHECK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 012134// CHECK11-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 012135// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[N]], align 412136// CHECK11-NEXT:    store i32 [[TMP19]], ptr [[DOTCAPTURE_EXPR_]], align 412137// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412138// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP20]], 012139// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112140// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112141// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412142// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412143// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP21]], 112144// CHECK11-NEXT:    [[TMP22:%.*]] = zext i32 [[ADD]] to i6412145// CHECK11-NEXT:    [[TMP23:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 012146// CHECK11-NEXT:    store i32 3, ptr [[TMP23]], align 412147// CHECK11-NEXT:    [[TMP24:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 112148// CHECK11-NEXT:    store i32 4, ptr [[TMP24]], align 412149// CHECK11-NEXT:    [[TMP25:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 212150// CHECK11-NEXT:    store ptr [[TMP17]], ptr [[TMP25]], align 412151// CHECK11-NEXT:    [[TMP26:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 312152// CHECK11-NEXT:    store ptr [[TMP18]], ptr [[TMP26]], align 412153// CHECK11-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 412154// CHECK11-NEXT:    store ptr @.offload_sizes.13, ptr [[TMP27]], align 412155// CHECK11-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 512156// CHECK11-NEXT:    store ptr @.offload_maptypes.14, ptr [[TMP28]], align 412157// CHECK11-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 612158// CHECK11-NEXT:    store ptr null, ptr [[TMP29]], align 412159// CHECK11-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 712160// CHECK11-NEXT:    store ptr null, ptr [[TMP30]], align 412161// CHECK11-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 812162// CHECK11-NEXT:    store i64 [[TMP22]], ptr [[TMP31]], align 812163// CHECK11-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 912164// CHECK11-NEXT:    store i64 0, ptr [[TMP32]], align 812165// CHECK11-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1012166// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP33]], align 412167// CHECK11-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1112168// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP34]], align 412169// CHECK11-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1212170// CHECK11-NEXT:    store i32 0, ptr [[TMP35]], align 412171// 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]])12172// CHECK11-NEXT:    [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 012173// CHECK11-NEXT:    br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]12174// CHECK11:       omp_offload.failed:12175// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42(i32 [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]) #[[ATTR2]]12176// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT]]12177// CHECK11:       omp_offload.cont:12178// CHECK11-NEXT:    [[TMP38:%.*]] = load i32, ptr [[N]], align 412179// CHECK11-NEXT:    store i32 [[TMP38]], ptr [[N_CASTED3]], align 412180// CHECK11-NEXT:    [[TMP39:%.*]] = load i32, ptr [[N_CASTED3]], align 412181// CHECK11-NEXT:    [[TMP40:%.*]] = load ptr, ptr [[A]], align 412182// CHECK11-NEXT:    [[TMP41:%.*]] = load ptr, ptr [[B]], align 412183// CHECK11-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[C]], align 412184// CHECK11-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 012185// CHECK11-NEXT:    store i32 [[TMP39]], ptr [[TMP43]], align 412186// CHECK11-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 012187// CHECK11-NEXT:    store i32 [[TMP39]], ptr [[TMP44]], align 412188// CHECK11-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 012189// CHECK11-NEXT:    store ptr null, ptr [[TMP45]], align 412190// CHECK11-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 112191// CHECK11-NEXT:    store ptr [[TMP40]], ptr [[TMP46]], align 412192// CHECK11-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 112193// CHECK11-NEXT:    store ptr [[TMP40]], ptr [[TMP47]], align 412194// CHECK11-NEXT:    [[TMP48:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 112195// CHECK11-NEXT:    store ptr null, ptr [[TMP48]], align 412196// CHECK11-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 212197// CHECK11-NEXT:    store ptr [[TMP41]], ptr [[TMP49]], align 412198// CHECK11-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 212199// CHECK11-NEXT:    store ptr [[TMP41]], ptr [[TMP50]], align 412200// CHECK11-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 212201// CHECK11-NEXT:    store ptr null, ptr [[TMP51]], align 412202// CHECK11-NEXT:    [[TMP52:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 312203// CHECK11-NEXT:    store ptr [[TMP42]], ptr [[TMP52]], align 412204// CHECK11-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 312205// CHECK11-NEXT:    store ptr [[TMP42]], ptr [[TMP53]], align 412206// CHECK11-NEXT:    [[TMP54:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS6]], i32 0, i32 312207// CHECK11-NEXT:    store ptr null, ptr [[TMP54]], align 412208// CHECK11-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS4]], i32 0, i32 012209// CHECK11-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS5]], i32 0, i32 012210// CHECK11-NEXT:    [[TMP57:%.*]] = load i32, ptr [[N]], align 412211// CHECK11-NEXT:    store i32 [[TMP57]], ptr [[DOTCAPTURE_EXPR_8]], align 412212// CHECK11-NEXT:    [[TMP58:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_8]], align 412213// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP58]], 012214// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 112215// CHECK11-NEXT:    [[SUB12:%.*]] = sub nsw i32 [[DIV11]], 112216// CHECK11-NEXT:    store i32 [[SUB12]], ptr [[DOTCAPTURE_EXPR_9]], align 412217// CHECK11-NEXT:    [[TMP59:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 412218// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP59]], 112219// CHECK11-NEXT:    [[TMP60:%.*]] = zext i32 [[ADD13]] to i6412220// CHECK11-NEXT:    [[TMP61:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 012221// CHECK11-NEXT:    store i32 3, ptr [[TMP61]], align 412222// CHECK11-NEXT:    [[TMP62:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 112223// CHECK11-NEXT:    store i32 4, ptr [[TMP62]], align 412224// CHECK11-NEXT:    [[TMP63:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 212225// CHECK11-NEXT:    store ptr [[TMP55]], ptr [[TMP63]], align 412226// CHECK11-NEXT:    [[TMP64:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 312227// CHECK11-NEXT:    store ptr [[TMP56]], ptr [[TMP64]], align 412228// CHECK11-NEXT:    [[TMP65:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 412229// CHECK11-NEXT:    store ptr @.offload_sizes.15, ptr [[TMP65]], align 412230// CHECK11-NEXT:    [[TMP66:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 512231// CHECK11-NEXT:    store ptr @.offload_maptypes.16, ptr [[TMP66]], align 412232// CHECK11-NEXT:    [[TMP67:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 612233// CHECK11-NEXT:    store ptr null, ptr [[TMP67]], align 412234// CHECK11-NEXT:    [[TMP68:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 712235// CHECK11-NEXT:    store ptr null, ptr [[TMP68]], align 412236// CHECK11-NEXT:    [[TMP69:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 812237// CHECK11-NEXT:    store i64 [[TMP60]], ptr [[TMP69]], align 812238// CHECK11-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 912239// CHECK11-NEXT:    store i64 0, ptr [[TMP70]], align 812240// CHECK11-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1012241// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP71]], align 412242// CHECK11-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1112243// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP72]], align 412244// CHECK11-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1212245// CHECK11-NEXT:    store i32 0, ptr [[TMP73]], align 412246// 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_l50.region_id, ptr [[KERNEL_ARGS14]])12247// CHECK11-NEXT:    [[TMP75:%.*]] = icmp ne i32 [[TMP74]], 012248// CHECK11-NEXT:    br i1 [[TMP75]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]12249// CHECK11:       omp_offload.failed15:12250// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l50(i32 [[TMP39]], ptr [[TMP40]], ptr [[TMP41]], ptr [[TMP42]]) #[[ATTR2]]12251// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT16]]12252// CHECK11:       omp_offload.cont16:12253// CHECK11-NEXT:    [[TMP76:%.*]] = load i32, ptr [[CH]], align 412254// CHECK11-NEXT:    store i32 [[TMP76]], ptr [[CH_CASTED]], align 412255// CHECK11-NEXT:    [[TMP77:%.*]] = load i32, ptr [[CH_CASTED]], align 412256// CHECK11-NEXT:    [[TMP78:%.*]] = load i32, ptr [[N]], align 412257// CHECK11-NEXT:    store i32 [[TMP78]], ptr [[N_CASTED17]], align 412258// CHECK11-NEXT:    [[TMP79:%.*]] = load i32, ptr [[N_CASTED17]], align 412259// CHECK11-NEXT:    [[TMP80:%.*]] = load ptr, ptr [[A]], align 412260// CHECK11-NEXT:    [[TMP81:%.*]] = load ptr, ptr [[B]], align 412261// CHECK11-NEXT:    [[TMP82:%.*]] = load ptr, ptr [[C]], align 412262// CHECK11-NEXT:    [[TMP83:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 012263// CHECK11-NEXT:    store i32 [[TMP77]], ptr [[TMP83]], align 412264// CHECK11-NEXT:    [[TMP84:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 012265// CHECK11-NEXT:    store i32 [[TMP77]], ptr [[TMP84]], align 412266// CHECK11-NEXT:    [[TMP85:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 012267// CHECK11-NEXT:    store ptr null, ptr [[TMP85]], align 412268// CHECK11-NEXT:    [[TMP86:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 112269// CHECK11-NEXT:    store i32 [[TMP79]], ptr [[TMP86]], align 412270// CHECK11-NEXT:    [[TMP87:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 112271// CHECK11-NEXT:    store i32 [[TMP79]], ptr [[TMP87]], align 412272// CHECK11-NEXT:    [[TMP88:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 112273// CHECK11-NEXT:    store ptr null, ptr [[TMP88]], align 412274// CHECK11-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 212275// CHECK11-NEXT:    store ptr [[TMP80]], ptr [[TMP89]], align 412276// CHECK11-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 212277// CHECK11-NEXT:    store ptr [[TMP80]], ptr [[TMP90]], align 412278// CHECK11-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 212279// CHECK11-NEXT:    store ptr null, ptr [[TMP91]], align 412280// CHECK11-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 312281// CHECK11-NEXT:    store ptr [[TMP81]], ptr [[TMP92]], align 412282// CHECK11-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 312283// CHECK11-NEXT:    store ptr [[TMP81]], ptr [[TMP93]], align 412284// CHECK11-NEXT:    [[TMP94:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 312285// CHECK11-NEXT:    store ptr null, ptr [[TMP94]], align 412286// CHECK11-NEXT:    [[TMP95:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 412287// CHECK11-NEXT:    store ptr [[TMP82]], ptr [[TMP95]], align 412288// CHECK11-NEXT:    [[TMP96:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 412289// CHECK11-NEXT:    store ptr [[TMP82]], ptr [[TMP96]], align 412290// CHECK11-NEXT:    [[TMP97:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS20]], i32 0, i32 412291// CHECK11-NEXT:    store ptr null, ptr [[TMP97]], align 412292// CHECK11-NEXT:    [[TMP98:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS18]], i32 0, i32 012293// CHECK11-NEXT:    [[TMP99:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS19]], i32 0, i32 012294// CHECK11-NEXT:    [[TMP100:%.*]] = load i32, ptr [[N]], align 412295// CHECK11-NEXT:    store i32 [[TMP100]], ptr [[DOTCAPTURE_EXPR_22]], align 412296// CHECK11-NEXT:    [[TMP101:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 412297// CHECK11-NEXT:    [[SUB24:%.*]] = sub nsw i32 [[TMP101]], 012298// CHECK11-NEXT:    [[DIV25:%.*]] = sdiv i32 [[SUB24]], 112299// CHECK11-NEXT:    [[SUB26:%.*]] = sub nsw i32 [[DIV25]], 112300// CHECK11-NEXT:    store i32 [[SUB26]], ptr [[DOTCAPTURE_EXPR_23]], align 412301// CHECK11-NEXT:    [[TMP102:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_23]], align 412302// CHECK11-NEXT:    [[ADD27:%.*]] = add nsw i32 [[TMP102]], 112303// CHECK11-NEXT:    [[TMP103:%.*]] = zext i32 [[ADD27]] to i6412304// CHECK11-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 012305// CHECK11-NEXT:    store i32 3, ptr [[TMP104]], align 412306// CHECK11-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 112307// CHECK11-NEXT:    store i32 5, ptr [[TMP105]], align 412308// CHECK11-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 212309// CHECK11-NEXT:    store ptr [[TMP98]], ptr [[TMP106]], align 412310// CHECK11-NEXT:    [[TMP107:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 312311// CHECK11-NEXT:    store ptr [[TMP99]], ptr [[TMP107]], align 412312// CHECK11-NEXT:    [[TMP108:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 412313// CHECK11-NEXT:    store ptr @.offload_sizes.17, ptr [[TMP108]], align 412314// CHECK11-NEXT:    [[TMP109:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 512315// CHECK11-NEXT:    store ptr @.offload_maptypes.18, ptr [[TMP109]], align 412316// CHECK11-NEXT:    [[TMP110:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 612317// CHECK11-NEXT:    store ptr null, ptr [[TMP110]], align 412318// CHECK11-NEXT:    [[TMP111:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 712319// CHECK11-NEXT:    store ptr null, ptr [[TMP111]], align 412320// CHECK11-NEXT:    [[TMP112:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 812321// CHECK11-NEXT:    store i64 [[TMP103]], ptr [[TMP112]], align 812322// CHECK11-NEXT:    [[TMP113:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 912323// CHECK11-NEXT:    store i64 0, ptr [[TMP113]], align 812324// CHECK11-NEXT:    [[TMP114:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 1012325// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP114]], align 412326// CHECK11-NEXT:    [[TMP115:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 1112327// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP115]], align 412328// CHECK11-NEXT:    [[TMP116:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS28]], i32 0, i32 1212329// CHECK11-NEXT:    store i32 0, ptr [[TMP116]], align 412330// 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_l58.region_id, ptr [[KERNEL_ARGS28]])12331// CHECK11-NEXT:    [[TMP118:%.*]] = icmp ne i32 [[TMP117]], 012332// CHECK11-NEXT:    br i1 [[TMP118]], label [[OMP_OFFLOAD_FAILED29:%.*]], label [[OMP_OFFLOAD_CONT30:%.*]]12333// CHECK11:       omp_offload.failed29:12334// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l58(i32 [[TMP77]], i32 [[TMP79]], ptr [[TMP80]], ptr [[TMP81]], ptr [[TMP82]]) #[[ATTR2]]12335// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT30]]12336// CHECK11:       omp_offload.cont30:12337// CHECK11-NEXT:    [[TMP119:%.*]] = load i32, ptr [[N]], align 412338// CHECK11-NEXT:    store i32 [[TMP119]], ptr [[N_CASTED31]], align 412339// CHECK11-NEXT:    [[TMP120:%.*]] = load i32, ptr [[N_CASTED31]], align 412340// CHECK11-NEXT:    [[TMP121:%.*]] = load ptr, ptr [[A]], align 412341// CHECK11-NEXT:    [[TMP122:%.*]] = load ptr, ptr [[B]], align 412342// CHECK11-NEXT:    [[TMP123:%.*]] = load ptr, ptr [[C]], align 412343// CHECK11-NEXT:    [[TMP124:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 012344// CHECK11-NEXT:    store i32 [[TMP120]], ptr [[TMP124]], align 412345// CHECK11-NEXT:    [[TMP125:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 012346// CHECK11-NEXT:    store i32 [[TMP120]], ptr [[TMP125]], align 412347// CHECK11-NEXT:    [[TMP126:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 012348// CHECK11-NEXT:    store ptr null, ptr [[TMP126]], align 412349// CHECK11-NEXT:    [[TMP127:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 112350// CHECK11-NEXT:    store ptr [[TMP121]], ptr [[TMP127]], align 412351// CHECK11-NEXT:    [[TMP128:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 112352// CHECK11-NEXT:    store ptr [[TMP121]], ptr [[TMP128]], align 412353// CHECK11-NEXT:    [[TMP129:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 112354// CHECK11-NEXT:    store ptr null, ptr [[TMP129]], align 412355// CHECK11-NEXT:    [[TMP130:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 212356// CHECK11-NEXT:    store ptr [[TMP122]], ptr [[TMP130]], align 412357// CHECK11-NEXT:    [[TMP131:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 212358// CHECK11-NEXT:    store ptr [[TMP122]], ptr [[TMP131]], align 412359// CHECK11-NEXT:    [[TMP132:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 212360// CHECK11-NEXT:    store ptr null, ptr [[TMP132]], align 412361// CHECK11-NEXT:    [[TMP133:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 312362// CHECK11-NEXT:    store ptr [[TMP123]], ptr [[TMP133]], align 412363// CHECK11-NEXT:    [[TMP134:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 312364// CHECK11-NEXT:    store ptr [[TMP123]], ptr [[TMP134]], align 412365// CHECK11-NEXT:    [[TMP135:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS34]], i32 0, i32 312366// CHECK11-NEXT:    store ptr null, ptr [[TMP135]], align 412367// CHECK11-NEXT:    [[TMP136:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS32]], i32 0, i32 012368// CHECK11-NEXT:    [[TMP137:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS33]], i32 0, i32 012369// CHECK11-NEXT:    [[TMP138:%.*]] = load i32, ptr [[N]], align 412370// CHECK11-NEXT:    store i32 [[TMP138]], ptr [[DOTCAPTURE_EXPR_36]], align 412371// CHECK11-NEXT:    [[TMP139:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_36]], align 412372// CHECK11-NEXT:    [[SUB38:%.*]] = sub nsw i32 [[TMP139]], 012373// CHECK11-NEXT:    [[DIV39:%.*]] = sdiv i32 [[SUB38]], 112374// CHECK11-NEXT:    [[SUB40:%.*]] = sub nsw i32 [[DIV39]], 112375// CHECK11-NEXT:    store i32 [[SUB40]], ptr [[DOTCAPTURE_EXPR_37]], align 412376// CHECK11-NEXT:    [[TMP140:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_37]], align 412377// CHECK11-NEXT:    [[ADD41:%.*]] = add nsw i32 [[TMP140]], 112378// CHECK11-NEXT:    [[TMP141:%.*]] = zext i32 [[ADD41]] to i6412379// CHECK11-NEXT:    [[TMP142:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 012380// CHECK11-NEXT:    store i32 3, ptr [[TMP142]], align 412381// CHECK11-NEXT:    [[TMP143:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 112382// CHECK11-NEXT:    store i32 4, ptr [[TMP143]], align 412383// CHECK11-NEXT:    [[TMP144:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 212384// CHECK11-NEXT:    store ptr [[TMP136]], ptr [[TMP144]], align 412385// CHECK11-NEXT:    [[TMP145:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 312386// CHECK11-NEXT:    store ptr [[TMP137]], ptr [[TMP145]], align 412387// CHECK11-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 412388// CHECK11-NEXT:    store ptr @.offload_sizes.19, ptr [[TMP146]], align 412389// CHECK11-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 512390// CHECK11-NEXT:    store ptr @.offload_maptypes.20, ptr [[TMP147]], align 412391// CHECK11-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 612392// CHECK11-NEXT:    store ptr null, ptr [[TMP148]], align 412393// CHECK11-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 712394// CHECK11-NEXT:    store ptr null, ptr [[TMP149]], align 412395// CHECK11-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 812396// CHECK11-NEXT:    store i64 [[TMP141]], ptr [[TMP150]], align 812397// CHECK11-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 912398// CHECK11-NEXT:    store i64 0, ptr [[TMP151]], align 812399// CHECK11-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 1012400// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP152]], align 412401// CHECK11-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 1112402// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP153]], align 412403// CHECK11-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS42]], i32 0, i32 1212404// CHECK11-NEXT:    store i32 0, ptr [[TMP154]], align 412405// 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_l66.region_id, ptr [[KERNEL_ARGS42]])12406// CHECK11-NEXT:    [[TMP156:%.*]] = icmp ne i32 [[TMP155]], 012407// CHECK11-NEXT:    br i1 [[TMP156]], label [[OMP_OFFLOAD_FAILED43:%.*]], label [[OMP_OFFLOAD_CONT44:%.*]]12408// CHECK11:       omp_offload.failed43:12409// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l66(i32 [[TMP120]], ptr [[TMP121]], ptr [[TMP122]], ptr [[TMP123]]) #[[ATTR2]]12410// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT44]]12411// CHECK11:       omp_offload.cont44:12412// CHECK11-NEXT:    [[TMP157:%.*]] = load i32, ptr [[CH]], align 412413// CHECK11-NEXT:    store i32 [[TMP157]], ptr [[CH_CASTED45]], align 412414// CHECK11-NEXT:    [[TMP158:%.*]] = load i32, ptr [[CH_CASTED45]], align 412415// CHECK11-NEXT:    [[TMP159:%.*]] = load i32, ptr [[N]], align 412416// CHECK11-NEXT:    store i32 [[TMP159]], ptr [[N_CASTED46]], align 412417// CHECK11-NEXT:    [[TMP160:%.*]] = load i32, ptr [[N_CASTED46]], align 412418// CHECK11-NEXT:    [[TMP161:%.*]] = load ptr, ptr [[A]], align 412419// CHECK11-NEXT:    [[TMP162:%.*]] = load ptr, ptr [[B]], align 412420// CHECK11-NEXT:    [[TMP163:%.*]] = load ptr, ptr [[C]], align 412421// CHECK11-NEXT:    [[TMP164:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 012422// CHECK11-NEXT:    store i32 [[TMP158]], ptr [[TMP164]], align 412423// CHECK11-NEXT:    [[TMP165:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 012424// CHECK11-NEXT:    store i32 [[TMP158]], ptr [[TMP165]], align 412425// CHECK11-NEXT:    [[TMP166:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 012426// CHECK11-NEXT:    store ptr null, ptr [[TMP166]], align 412427// CHECK11-NEXT:    [[TMP167:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 112428// CHECK11-NEXT:    store i32 [[TMP160]], ptr [[TMP167]], align 412429// CHECK11-NEXT:    [[TMP168:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 112430// CHECK11-NEXT:    store i32 [[TMP160]], ptr [[TMP168]], align 412431// CHECK11-NEXT:    [[TMP169:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 112432// CHECK11-NEXT:    store ptr null, ptr [[TMP169]], align 412433// CHECK11-NEXT:    [[TMP170:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 212434// CHECK11-NEXT:    store ptr [[TMP161]], ptr [[TMP170]], align 412435// CHECK11-NEXT:    [[TMP171:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 212436// CHECK11-NEXT:    store ptr [[TMP161]], ptr [[TMP171]], align 412437// CHECK11-NEXT:    [[TMP172:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 212438// CHECK11-NEXT:    store ptr null, ptr [[TMP172]], align 412439// CHECK11-NEXT:    [[TMP173:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 312440// CHECK11-NEXT:    store ptr [[TMP162]], ptr [[TMP173]], align 412441// CHECK11-NEXT:    [[TMP174:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 312442// CHECK11-NEXT:    store ptr [[TMP162]], ptr [[TMP174]], align 412443// CHECK11-NEXT:    [[TMP175:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 312444// CHECK11-NEXT:    store ptr null, ptr [[TMP175]], align 412445// CHECK11-NEXT:    [[TMP176:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 412446// CHECK11-NEXT:    store ptr [[TMP163]], ptr [[TMP176]], align 412447// CHECK11-NEXT:    [[TMP177:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 412448// CHECK11-NEXT:    store ptr [[TMP163]], ptr [[TMP177]], align 412449// CHECK11-NEXT:    [[TMP178:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS49]], i32 0, i32 412450// CHECK11-NEXT:    store ptr null, ptr [[TMP178]], align 412451// CHECK11-NEXT:    [[TMP179:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS47]], i32 0, i32 012452// CHECK11-NEXT:    [[TMP180:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS48]], i32 0, i32 012453// CHECK11-NEXT:    [[TMP181:%.*]] = load i32, ptr [[N]], align 412454// CHECK11-NEXT:    store i32 [[TMP181]], ptr [[DOTCAPTURE_EXPR_51]], align 412455// CHECK11-NEXT:    [[TMP182:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_51]], align 412456// CHECK11-NEXT:    [[SUB53:%.*]] = sub nsw i32 [[TMP182]], 012457// CHECK11-NEXT:    [[DIV54:%.*]] = sdiv i32 [[SUB53]], 112458// CHECK11-NEXT:    [[SUB55:%.*]] = sub nsw i32 [[DIV54]], 112459// CHECK11-NEXT:    store i32 [[SUB55]], ptr [[DOTCAPTURE_EXPR_52]], align 412460// CHECK11-NEXT:    [[TMP183:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_52]], align 412461// CHECK11-NEXT:    [[ADD56:%.*]] = add nsw i32 [[TMP183]], 112462// CHECK11-NEXT:    [[TMP184:%.*]] = zext i32 [[ADD56]] to i6412463// CHECK11-NEXT:    [[TMP185:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 012464// CHECK11-NEXT:    store i32 3, ptr [[TMP185]], align 412465// CHECK11-NEXT:    [[TMP186:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 112466// CHECK11-NEXT:    store i32 5, ptr [[TMP186]], align 412467// CHECK11-NEXT:    [[TMP187:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 212468// CHECK11-NEXT:    store ptr [[TMP179]], ptr [[TMP187]], align 412469// CHECK11-NEXT:    [[TMP188:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 312470// CHECK11-NEXT:    store ptr [[TMP180]], ptr [[TMP188]], align 412471// CHECK11-NEXT:    [[TMP189:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 412472// CHECK11-NEXT:    store ptr @.offload_sizes.21, ptr [[TMP189]], align 412473// CHECK11-NEXT:    [[TMP190:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 512474// CHECK11-NEXT:    store ptr @.offload_maptypes.22, ptr [[TMP190]], align 412475// CHECK11-NEXT:    [[TMP191:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 612476// CHECK11-NEXT:    store ptr null, ptr [[TMP191]], align 412477// CHECK11-NEXT:    [[TMP192:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 712478// CHECK11-NEXT:    store ptr null, ptr [[TMP192]], align 412479// CHECK11-NEXT:    [[TMP193:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 812480// CHECK11-NEXT:    store i64 [[TMP184]], ptr [[TMP193]], align 812481// CHECK11-NEXT:    [[TMP194:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 912482// CHECK11-NEXT:    store i64 0, ptr [[TMP194]], align 812483// CHECK11-NEXT:    [[TMP195:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 1012484// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP195]], align 412485// CHECK11-NEXT:    [[TMP196:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 1112486// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP196]], align 412487// CHECK11-NEXT:    [[TMP197:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS57]], i32 0, i32 1212488// CHECK11-NEXT:    store i32 0, ptr [[TMP197]], align 412489// 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_l74.region_id, ptr [[KERNEL_ARGS57]])12490// CHECK11-NEXT:    [[TMP199:%.*]] = icmp ne i32 [[TMP198]], 012491// CHECK11-NEXT:    br i1 [[TMP199]], label [[OMP_OFFLOAD_FAILED58:%.*]], label [[OMP_OFFLOAD_CONT59:%.*]]12492// CHECK11:       omp_offload.failed58:12493// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l74(i32 [[TMP158]], i32 [[TMP160]], ptr [[TMP161]], ptr [[TMP162]], ptr [[TMP163]]) #[[ATTR2]]12494// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT59]]12495// CHECK11:       omp_offload.cont59:12496// CHECK11-NEXT:    [[TMP200:%.*]] = load i32, ptr [[N]], align 412497// CHECK11-NEXT:    store i32 [[TMP200]], ptr [[N_CASTED60]], align 412498// CHECK11-NEXT:    [[TMP201:%.*]] = load i32, ptr [[N_CASTED60]], align 412499// CHECK11-NEXT:    [[TMP202:%.*]] = load ptr, ptr [[A]], align 412500// CHECK11-NEXT:    [[TMP203:%.*]] = load ptr, ptr [[B]], align 412501// CHECK11-NEXT:    [[TMP204:%.*]] = load ptr, ptr [[C]], align 412502// CHECK11-NEXT:    [[TMP205:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 012503// CHECK11-NEXT:    store i32 [[TMP201]], ptr [[TMP205]], align 412504// CHECK11-NEXT:    [[TMP206:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 012505// CHECK11-NEXT:    store i32 [[TMP201]], ptr [[TMP206]], align 412506// CHECK11-NEXT:    [[TMP207:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 012507// CHECK11-NEXT:    store ptr null, ptr [[TMP207]], align 412508// CHECK11-NEXT:    [[TMP208:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 112509// CHECK11-NEXT:    store ptr [[TMP202]], ptr [[TMP208]], align 412510// CHECK11-NEXT:    [[TMP209:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 112511// CHECK11-NEXT:    store ptr [[TMP202]], ptr [[TMP209]], align 412512// CHECK11-NEXT:    [[TMP210:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 112513// CHECK11-NEXT:    store ptr null, ptr [[TMP210]], align 412514// CHECK11-NEXT:    [[TMP211:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 212515// CHECK11-NEXT:    store ptr [[TMP203]], ptr [[TMP211]], align 412516// CHECK11-NEXT:    [[TMP212:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 212517// CHECK11-NEXT:    store ptr [[TMP203]], ptr [[TMP212]], align 412518// CHECK11-NEXT:    [[TMP213:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 212519// CHECK11-NEXT:    store ptr null, ptr [[TMP213]], align 412520// CHECK11-NEXT:    [[TMP214:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 312521// CHECK11-NEXT:    store ptr [[TMP204]], ptr [[TMP214]], align 412522// CHECK11-NEXT:    [[TMP215:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 312523// CHECK11-NEXT:    store ptr [[TMP204]], ptr [[TMP215]], align 412524// CHECK11-NEXT:    [[TMP216:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_MAPPERS63]], i32 0, i32 312525// CHECK11-NEXT:    store ptr null, ptr [[TMP216]], align 412526// CHECK11-NEXT:    [[TMP217:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_BASEPTRS61]], i32 0, i32 012527// CHECK11-NEXT:    [[TMP218:%.*]] = getelementptr inbounds [4 x ptr], ptr [[DOTOFFLOAD_PTRS62]], i32 0, i32 012528// CHECK11-NEXT:    [[TMP219:%.*]] = load i32, ptr [[N]], align 412529// CHECK11-NEXT:    store i32 [[TMP219]], ptr [[DOTCAPTURE_EXPR_65]], align 412530// CHECK11-NEXT:    [[TMP220:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_65]], align 412531// CHECK11-NEXT:    [[SUB67:%.*]] = sub nsw i32 [[TMP220]], 012532// CHECK11-NEXT:    [[DIV68:%.*]] = sdiv i32 [[SUB67]], 112533// CHECK11-NEXT:    [[SUB69:%.*]] = sub nsw i32 [[DIV68]], 112534// CHECK11-NEXT:    store i32 [[SUB69]], ptr [[DOTCAPTURE_EXPR_66]], align 412535// CHECK11-NEXT:    [[TMP221:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_66]], align 412536// CHECK11-NEXT:    [[ADD70:%.*]] = add nsw i32 [[TMP221]], 112537// CHECK11-NEXT:    [[TMP222:%.*]] = zext i32 [[ADD70]] to i6412538// CHECK11-NEXT:    [[TMP223:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 012539// CHECK11-NEXT:    store i32 3, ptr [[TMP223]], align 412540// CHECK11-NEXT:    [[TMP224:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 112541// CHECK11-NEXT:    store i32 4, ptr [[TMP224]], align 412542// CHECK11-NEXT:    [[TMP225:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 212543// CHECK11-NEXT:    store ptr [[TMP217]], ptr [[TMP225]], align 412544// CHECK11-NEXT:    [[TMP226:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 312545// CHECK11-NEXT:    store ptr [[TMP218]], ptr [[TMP226]], align 412546// CHECK11-NEXT:    [[TMP227:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 412547// CHECK11-NEXT:    store ptr @.offload_sizes.23, ptr [[TMP227]], align 412548// CHECK11-NEXT:    [[TMP228:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 512549// CHECK11-NEXT:    store ptr @.offload_maptypes.24, ptr [[TMP228]], align 412550// CHECK11-NEXT:    [[TMP229:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 612551// CHECK11-NEXT:    store ptr null, ptr [[TMP229]], align 412552// CHECK11-NEXT:    [[TMP230:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 712553// CHECK11-NEXT:    store ptr null, ptr [[TMP230]], align 412554// CHECK11-NEXT:    [[TMP231:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 812555// CHECK11-NEXT:    store i64 [[TMP222]], ptr [[TMP231]], align 812556// CHECK11-NEXT:    [[TMP232:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 912557// CHECK11-NEXT:    store i64 0, ptr [[TMP232]], align 812558// CHECK11-NEXT:    [[TMP233:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 1012559// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP233]], align 412560// CHECK11-NEXT:    [[TMP234:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 1112561// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP234]], align 412562// CHECK11-NEXT:    [[TMP235:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS71]], i32 0, i32 1212563// CHECK11-NEXT:    store i32 0, ptr [[TMP235]], align 412564// 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_l82.region_id, ptr [[KERNEL_ARGS71]])12565// CHECK11-NEXT:    [[TMP237:%.*]] = icmp ne i32 [[TMP236]], 012566// CHECK11-NEXT:    br i1 [[TMP237]], label [[OMP_OFFLOAD_FAILED72:%.*]], label [[OMP_OFFLOAD_CONT73:%.*]]12567// CHECK11:       omp_offload.failed72:12568// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l82(i32 [[TMP201]], ptr [[TMP202]], ptr [[TMP203]], ptr [[TMP204]]) #[[ATTR2]]12569// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT73]]12570// CHECK11:       omp_offload.cont73:12571// CHECK11-NEXT:    [[TMP238:%.*]] = load i32, ptr [[CH]], align 412572// CHECK11-NEXT:    store i32 [[TMP238]], ptr [[CH_CASTED74]], align 412573// CHECK11-NEXT:    [[TMP239:%.*]] = load i32, ptr [[CH_CASTED74]], align 412574// CHECK11-NEXT:    [[TMP240:%.*]] = load i32, ptr [[N]], align 412575// CHECK11-NEXT:    store i32 [[TMP240]], ptr [[N_CASTED75]], align 412576// CHECK11-NEXT:    [[TMP241:%.*]] = load i32, ptr [[N_CASTED75]], align 412577// CHECK11-NEXT:    [[TMP242:%.*]] = load ptr, ptr [[A]], align 412578// CHECK11-NEXT:    [[TMP243:%.*]] = load ptr, ptr [[B]], align 412579// CHECK11-NEXT:    [[TMP244:%.*]] = load ptr, ptr [[C]], align 412580// CHECK11-NEXT:    [[TMP245:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 012581// CHECK11-NEXT:    store i32 [[TMP239]], ptr [[TMP245]], align 412582// CHECK11-NEXT:    [[TMP246:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 012583// CHECK11-NEXT:    store i32 [[TMP239]], ptr [[TMP246]], align 412584// CHECK11-NEXT:    [[TMP247:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 012585// CHECK11-NEXT:    store ptr null, ptr [[TMP247]], align 412586// CHECK11-NEXT:    [[TMP248:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 112587// CHECK11-NEXT:    store i32 [[TMP241]], ptr [[TMP248]], align 412588// CHECK11-NEXT:    [[TMP249:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 112589// CHECK11-NEXT:    store i32 [[TMP241]], ptr [[TMP249]], align 412590// CHECK11-NEXT:    [[TMP250:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 112591// CHECK11-NEXT:    store ptr null, ptr [[TMP250]], align 412592// CHECK11-NEXT:    [[TMP251:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 212593// CHECK11-NEXT:    store ptr [[TMP242]], ptr [[TMP251]], align 412594// CHECK11-NEXT:    [[TMP252:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 212595// CHECK11-NEXT:    store ptr [[TMP242]], ptr [[TMP252]], align 412596// CHECK11-NEXT:    [[TMP253:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 212597// CHECK11-NEXT:    store ptr null, ptr [[TMP253]], align 412598// CHECK11-NEXT:    [[TMP254:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 312599// CHECK11-NEXT:    store ptr [[TMP243]], ptr [[TMP254]], align 412600// CHECK11-NEXT:    [[TMP255:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 312601// CHECK11-NEXT:    store ptr [[TMP243]], ptr [[TMP255]], align 412602// CHECK11-NEXT:    [[TMP256:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 312603// CHECK11-NEXT:    store ptr null, ptr [[TMP256]], align 412604// CHECK11-NEXT:    [[TMP257:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 412605// CHECK11-NEXT:    store ptr [[TMP244]], ptr [[TMP257]], align 412606// CHECK11-NEXT:    [[TMP258:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 412607// CHECK11-NEXT:    store ptr [[TMP244]], ptr [[TMP258]], align 412608// CHECK11-NEXT:    [[TMP259:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_MAPPERS78]], i32 0, i32 412609// CHECK11-NEXT:    store ptr null, ptr [[TMP259]], align 412610// CHECK11-NEXT:    [[TMP260:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_BASEPTRS76]], i32 0, i32 012611// CHECK11-NEXT:    [[TMP261:%.*]] = getelementptr inbounds [5 x ptr], ptr [[DOTOFFLOAD_PTRS77]], i32 0, i32 012612// CHECK11-NEXT:    [[TMP262:%.*]] = load i32, ptr [[N]], align 412613// CHECK11-NEXT:    store i32 [[TMP262]], ptr [[DOTCAPTURE_EXPR_80]], align 412614// CHECK11-NEXT:    [[TMP263:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_80]], align 412615// CHECK11-NEXT:    [[SUB82:%.*]] = sub nsw i32 [[TMP263]], 012616// CHECK11-NEXT:    [[DIV83:%.*]] = sdiv i32 [[SUB82]], 112617// CHECK11-NEXT:    [[SUB84:%.*]] = sub nsw i32 [[DIV83]], 112618// CHECK11-NEXT:    store i32 [[SUB84]], ptr [[DOTCAPTURE_EXPR_81]], align 412619// CHECK11-NEXT:    [[TMP264:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_81]], align 412620// CHECK11-NEXT:    [[ADD85:%.*]] = add nsw i32 [[TMP264]], 112621// CHECK11-NEXT:    [[TMP265:%.*]] = zext i32 [[ADD85]] to i6412622// CHECK11-NEXT:    [[TMP266:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 012623// CHECK11-NEXT:    store i32 3, ptr [[TMP266]], align 412624// CHECK11-NEXT:    [[TMP267:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 112625// CHECK11-NEXT:    store i32 5, ptr [[TMP267]], align 412626// CHECK11-NEXT:    [[TMP268:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 212627// CHECK11-NEXT:    store ptr [[TMP260]], ptr [[TMP268]], align 412628// CHECK11-NEXT:    [[TMP269:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 312629// CHECK11-NEXT:    store ptr [[TMP261]], ptr [[TMP269]], align 412630// CHECK11-NEXT:    [[TMP270:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 412631// CHECK11-NEXT:    store ptr @.offload_sizes.25, ptr [[TMP270]], align 412632// CHECK11-NEXT:    [[TMP271:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 512633// CHECK11-NEXT:    store ptr @.offload_maptypes.26, ptr [[TMP271]], align 412634// CHECK11-NEXT:    [[TMP272:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 612635// CHECK11-NEXT:    store ptr null, ptr [[TMP272]], align 412636// CHECK11-NEXT:    [[TMP273:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 712637// CHECK11-NEXT:    store ptr null, ptr [[TMP273]], align 412638// CHECK11-NEXT:    [[TMP274:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 812639// CHECK11-NEXT:    store i64 [[TMP265]], ptr [[TMP274]], align 812640// CHECK11-NEXT:    [[TMP275:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 912641// CHECK11-NEXT:    store i64 0, ptr [[TMP275]], align 812642// CHECK11-NEXT:    [[TMP276:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 1012643// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP276]], align 412644// CHECK11-NEXT:    [[TMP277:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 1112645// CHECK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP277]], align 412646// CHECK11-NEXT:    [[TMP278:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS86]], i32 0, i32 1212647// CHECK11-NEXT:    store i32 0, ptr [[TMP278]], align 412648// 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_l90.region_id, ptr [[KERNEL_ARGS86]])12649// CHECK11-NEXT:    [[TMP280:%.*]] = icmp ne i32 [[TMP279]], 012650// CHECK11-NEXT:    br i1 [[TMP280]], label [[OMP_OFFLOAD_FAILED87:%.*]], label [[OMP_OFFLOAD_CONT88:%.*]]12651// CHECK11:       omp_offload.failed87:12652// CHECK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l90(i32 [[TMP239]], i32 [[TMP241]], ptr [[TMP242]], ptr [[TMP243]], ptr [[TMP244]]) #[[ATTR2]]12653// CHECK11-NEXT:    br label [[OMP_OFFLOAD_CONT88]]12654// CHECK11:       omp_offload.cont88:12655// CHECK11-NEXT:    ret i32 012656//12657//12658// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l4212659// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {12660// CHECK11-NEXT:  entry:12661// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 412662// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412663// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412664// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412665// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 412666// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412667// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412668// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412669// 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]])12670// CHECK11-NEXT:    ret void12671//12672//12673// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined12674// 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]] {12675// CHECK11-NEXT:  entry:12676// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412677// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412678// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412679// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412680// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412681// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412682// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412683// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412684// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412685// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412686// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412687// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 412688// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 412689// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412690// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412691// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 412692// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412693// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412694// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412695// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412696// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412697// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412698// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 412699// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 412700// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 412701// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 412702// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 412703// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 412704// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412705// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 012706// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112707// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112708// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412709// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412710// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412711// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]12712// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12713// CHECK11:       omp.precond.then:12714// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 412715// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412716// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 412717// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412718// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412719// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412720// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 412721// 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)12722// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412723// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412724// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]12725// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12726// CHECK11:       cond.true:12727// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412728// CHECK11-NEXT:    br label [[COND_END:%.*]]12729// CHECK11:       cond.false:12730// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412731// CHECK11-NEXT:    br label [[COND_END]]12732// CHECK11:       cond.end:12733// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]12734// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 412735// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412736// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 412737// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12738// CHECK11:       omp.inner.for.cond:12739// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP63:![0-9]+]]12740// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP63]]12741// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]12742// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12743// CHECK11:       omp.inner.for.body:12744// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP63]]12745// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP63]]12746// 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]]), !llvm.access.group [[ACC_GRP63]]12747// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12748// CHECK11:       omp.inner.for.inc:12749// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP63]]12750// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP63]]12751// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]12752// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP63]]12753// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP64:![0-9]+]]12754// CHECK11:       omp.inner.for.end:12755// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12756// CHECK11:       omp.loop.exit:12757// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412758// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 412759// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])12760// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 412761// CHECK11-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 012762// CHECK11-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]12763// CHECK11:       .omp.final.then:12764// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412765// CHECK11-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 012766// CHECK11-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 112767// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 112768// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]12769// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 412770// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]12771// CHECK11:       .omp.final.done:12772// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12773// CHECK11:       omp.precond.end:12774// CHECK11-NEXT:    ret void12775//12776//12777// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l42.omp_outlined.omp_outlined12778// 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]] {12779// CHECK11-NEXT:  entry:12780// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412781// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412782// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 412783// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 412784// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412785// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412786// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412787// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412788// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412789// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412790// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412791// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412792// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412793// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 412794// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 412795// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412796// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412797// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 412798// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412799// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412800// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 412801// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 412802// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412803// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412804// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412805// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412806// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 412807// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 412808// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 412809// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 412810// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 412811// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 412812// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412813// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 012814// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112815// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112816// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412817// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412818// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412819// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]12820// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12821// CHECK11:       omp.precond.then:12822// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 412823// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412824// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 412825// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 412826// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 412827// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 412828// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 412829// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412830// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412831// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412832// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 412833// 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)12834// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412835// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412836// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]12837// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12838// CHECK11:       cond.true:12839// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412840// CHECK11-NEXT:    br label [[COND_END:%.*]]12841// CHECK11:       cond.false:12842// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 412843// CHECK11-NEXT:    br label [[COND_END]]12844// CHECK11:       cond.end:12845// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]12846// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 412847// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 412848// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 412849// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12850// CHECK11:       omp.inner.for.cond:12851// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP66:![0-9]+]]12852// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP66]]12853// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]12854// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12855// CHECK11:       omp.inner.for.body:12856// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP66]]12857// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 112858// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]12859// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP66]]12860// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP66]]12861// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP66]]12862// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 [[TMP21]]12863// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP66]]12864// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP66]]12865// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP66]]12866// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 [[TMP24]]12867// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP66]]12868// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]12869// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP66]]12870// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP66]]12871// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i32 [[TMP27]]12872// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP66]]12873// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]12874// CHECK11:       omp.body.continue:12875// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12876// CHECK11:       omp.inner.for.inc:12877// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP66]]12878// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 112879// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP66]]12880// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP67:![0-9]+]]12881// CHECK11:       omp.inner.for.end:12882// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]12883// CHECK11:       omp.loop.exit:12884// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412885// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 412886// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])12887// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 412888// CHECK11-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 012889// CHECK11-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]12890// CHECK11:       .omp.final.then:12891// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412892// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP33]], 012893// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 112894// CHECK11-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 112895// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]12896// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 412897// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]12898// CHECK11:       .omp.final.done:12899// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]12900// CHECK11:       omp.precond.end:12901// CHECK11-NEXT:    ret void12902//12903//12904// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l5012905// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {12906// CHECK11-NEXT:  entry:12907// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 412908// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412909// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412910// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412911// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 412912// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412913// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412914// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412915// 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_l50.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])12916// CHECK11-NEXT:    ret void12917//12918//12919// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l50.omp_outlined12920// 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]] {12921// CHECK11-NEXT:  entry:12922// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 412923// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 412924// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 412925// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 412926// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 412927// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 412928// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 412929// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 412930// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 412931// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 412932// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 412933// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 412934// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 412935// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 412936// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 412937// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 412938// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 412939// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 412940// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 412941// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 412942// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 412943// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 412944// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 412945// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 412946// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 412947// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 412948// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 412949// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 412950// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412951// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 012952// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 112953// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 112954// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 412955// CHECK11-NEXT:    store i32 0, ptr [[I]], align 412956// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 412957// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]12958// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]12959// CHECK11:       omp.precond.then:12960// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 412961// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412962// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 412963// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 412964// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 412965// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 412966// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 412967// 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)12968// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412969// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412970// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]12971// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]12972// CHECK11:       cond.true:12973// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 412974// CHECK11-NEXT:    br label [[COND_END:%.*]]12975// CHECK11:       cond.false:12976// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 412977// CHECK11-NEXT:    br label [[COND_END]]12978// CHECK11:       cond.end:12979// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]12980// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 412981// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 412982// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 412983// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]12984// CHECK11:       omp.inner.for.cond:12985// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP69:![0-9]+]]12986// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP69]]12987// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]12988// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]12989// CHECK11:       omp.inner.for.body:12990// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP69]]12991// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP69]]12992// 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_l50.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP69]]12993// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]12994// CHECK11:       omp.inner.for.inc:12995// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP69]]12996// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP69]]12997// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]12998// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP69]]12999// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP70:![0-9]+]]13000// CHECK11:       omp.inner.for.end:13001// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]13002// CHECK11:       omp.loop.exit:13003// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413004// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 413005// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])13006// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 413007// CHECK11-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 013008// CHECK11-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]13009// CHECK11:       .omp.final.then:13010// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413011// CHECK11-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 013012// CHECK11-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 113013// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 113014// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]13015// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 413016// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]13017// CHECK11:       .omp.final.done:13018// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13019// CHECK11:       omp.precond.end:13020// CHECK11-NEXT:    ret void13021//13022//13023// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l50.omp_outlined.omp_outlined13024// 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]] {13025// CHECK11-NEXT:  entry:13026// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413027// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413028// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 413029// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 413030// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413031// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413032// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413033// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413034// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413035// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413036// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 413037// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413038// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413039// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 413040// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 413041// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413042// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413043// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 413044// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413045// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413046// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 413047// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 413048// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413049// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413050// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413051// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413052// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 413053// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 413054// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 413055// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 413056// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 413057// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 413058// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413059// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 013060// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113061// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 113062// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 413063// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413064// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413065// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]13066// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13067// CHECK11:       omp.precond.then:13068// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 413069// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413070// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 413071// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 413072// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 413073// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 413074// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 413075// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413076// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413077// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413078// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 413079// 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)13080// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413081// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413082// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]13083// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]13084// CHECK11:       cond.true:13085// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413086// CHECK11-NEXT:    br label [[COND_END:%.*]]13087// CHECK11:       cond.false:13088// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413089// CHECK11-NEXT:    br label [[COND_END]]13090// CHECK11:       cond.end:13091// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]13092// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 413093// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 413094// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 413095// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13096// CHECK11:       omp.inner.for.cond:13097// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP72:![0-9]+]]13098// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP72]]13099// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]13100// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13101// CHECK11:       omp.inner.for.body:13102// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP72]]13103// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 113104// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]13105// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP72]]13106// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP72]]13107// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP72]]13108// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 [[TMP21]]13109// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP72]]13110// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP72]]13111// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP72]]13112// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 [[TMP24]]13113// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP72]]13114// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]13115// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP72]]13116// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP72]]13117// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i32 [[TMP27]]13118// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP72]]13119// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]13120// CHECK11:       omp.body.continue:13121// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13122// CHECK11:       omp.inner.for.inc:13123// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP72]]13124// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 113125// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP72]]13126// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP73:![0-9]+]]13127// CHECK11:       omp.inner.for.end:13128// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]13129// CHECK11:       omp.loop.exit:13130// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413131// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 413132// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])13133// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 413134// CHECK11-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 013135// CHECK11-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]13136// CHECK11:       .omp.final.then:13137// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413138// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP33]], 013139// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 113140// CHECK11-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 113141// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]13142// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 413143// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]13144// CHECK11:       .omp.final.done:13145// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13146// CHECK11:       omp.precond.end:13147// CHECK11-NEXT:    ret void13148//13149//13150// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l5813151// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {13152// CHECK11-NEXT:  entry:13153// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 413154// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 413155// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413156// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413157// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413158// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 413159// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 413160// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413161// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413162// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413163// 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_l58.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])13164// CHECK11-NEXT:    ret void13165//13166//13167// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l58.omp_outlined13168// 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]] {13169// CHECK11-NEXT:  entry:13170// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413171// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413172// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 413173// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413174// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413175// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413176// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413177// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413178// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413179// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 413180// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413181// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413182// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 413183// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 413184// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413185// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413186// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 413187// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413188// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413189// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 413190// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413191// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413192// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413193// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413194// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 413195// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 413196// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 413197// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 413198// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 413199// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP1]], align 413200// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 413201// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413202// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP6]], 013203// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113204// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 113205// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 413206// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413207// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413208// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP7]]13209// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13210// CHECK11:       omp.precond.then:13211// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 413212// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413213// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_COMB_UB]], align 413214// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413215// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413216// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP0]], align 413217// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413218// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 413219// 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]])13220// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413221// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413222// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]13223// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]13224// CHECK11:       cond.true:13225// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413226// CHECK11-NEXT:    br label [[COND_END:%.*]]13227// CHECK11:       cond.false:13228// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413229// CHECK11-NEXT:    br label [[COND_END]]13230// CHECK11:       cond.end:13231// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]13232// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 413233// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 413234// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 413235// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13236// CHECK11:       omp.inner.for.cond:13237// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP75:![0-9]+]]13238// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP75]]13239// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP18]], 113240// CHECK11-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP17]], [[ADD]]13241// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13242// CHECK11:       omp.inner.for.body:13243// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP75]]13244// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP75]]13245// 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_l58.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]]), !llvm.access.group [[ACC_GRP75]]13246// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13247// CHECK11:       omp.inner.for.inc:13248// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP75]]13249// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP75]]13250// CHECK11-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP21]], [[TMP22]]13251// CHECK11-NEXT:    store i32 [[ADD6]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP75]]13252// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP75]]13253// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP75]]13254// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]13255// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP75]]13256// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP75]]13257// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP75]]13258// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 [[TMP25]], [[TMP26]]13259// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP75]]13260// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP75]]13261// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP75]]13262// CHECK11-NEXT:    [[CMP9:%.*]] = icmp sgt i32 [[TMP27]], [[TMP28]]13263// CHECK11-NEXT:    br i1 [[CMP9]], label [[COND_TRUE10:%.*]], label [[COND_FALSE11:%.*]]13264// CHECK11:       cond.true10:13265// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4, !llvm.access.group [[ACC_GRP75]]13266// CHECK11-NEXT:    br label [[COND_END12:%.*]]13267// CHECK11:       cond.false11:13268// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP75]]13269// CHECK11-NEXT:    br label [[COND_END12]]13270// CHECK11:       cond.end12:13271// CHECK11-NEXT:    [[COND13:%.*]] = phi i32 [ [[TMP29]], [[COND_TRUE10]] ], [ [[TMP30]], [[COND_FALSE11]] ]13272// CHECK11-NEXT:    store i32 [[COND13]], ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP75]]13273// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP75]]13274// CHECK11-NEXT:    store i32 [[TMP31]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP75]]13275// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP76:![0-9]+]]13276// CHECK11:       omp.inner.for.end:13277// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]13278// CHECK11:       omp.loop.exit:13279// CHECK11-NEXT:    [[TMP32:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413280// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[TMP32]], align 413281// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP33]])13282// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 413283// CHECK11-NEXT:    [[TMP35:%.*]] = icmp ne i32 [[TMP34]], 013284// CHECK11-NEXT:    br i1 [[TMP35]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]13285// CHECK11:       .omp.final.then:13286// CHECK11-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413287// CHECK11-NEXT:    [[SUB14:%.*]] = sub nsw i32 [[TMP36]], 013288// CHECK11-NEXT:    [[DIV15:%.*]] = sdiv i32 [[SUB14]], 113289// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV15]], 113290// CHECK11-NEXT:    [[ADD16:%.*]] = add nsw i32 0, [[MUL]]13291// CHECK11-NEXT:    store i32 [[ADD16]], ptr [[I3]], align 413292// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]13293// CHECK11:       .omp.final.done:13294// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13295// CHECK11:       omp.precond.end:13296// CHECK11-NEXT:    ret void13297//13298//13299// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l58.omp_outlined.omp_outlined13300// 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]] {13301// CHECK11-NEXT:  entry:13302// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413303// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413304// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 413305// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 413306// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413307// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413308// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413309// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413310// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413311// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413312// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 413313// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413314// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413315// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 413316// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 413317// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413318// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413319// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 413320// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413321// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413322// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 413323// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 413324// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413325// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413326// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413327// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413328// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 413329// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 413330// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 413331// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 413332// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 413333// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 413334// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413335// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 013336// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113337// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 113338// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 413339// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413340// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413341// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]13342// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13343// CHECK11:       omp.precond.then:13344// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 413345// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413346// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 413347// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 413348// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 413349// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 413350// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 413351// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413352// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413353// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413354// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 413355// 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)13356// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413357// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413358// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]13359// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]13360// CHECK11:       cond.true:13361// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413362// CHECK11-NEXT:    br label [[COND_END:%.*]]13363// CHECK11:       cond.false:13364// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413365// CHECK11-NEXT:    br label [[COND_END]]13366// CHECK11:       cond.end:13367// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]13368// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 413369// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 413370// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 413371// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13372// CHECK11:       omp.inner.for.cond:13373// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP78:![0-9]+]]13374// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP78]]13375// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]13376// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13377// CHECK11:       omp.inner.for.body:13378// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP78]]13379// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 113380// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]13381// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP78]]13382// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP78]]13383// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP78]]13384// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 [[TMP21]]13385// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP78]]13386// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP78]]13387// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP78]]13388// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 [[TMP24]]13389// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP78]]13390// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]13391// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP78]]13392// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP78]]13393// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i32 [[TMP27]]13394// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP78]]13395// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]13396// CHECK11:       omp.body.continue:13397// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13398// CHECK11:       omp.inner.for.inc:13399// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP78]]13400// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 113401// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP78]]13402// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP79:![0-9]+]]13403// CHECK11:       omp.inner.for.end:13404// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]13405// CHECK11:       omp.loop.exit:13406// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413407// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 413408// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])13409// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 413410// CHECK11-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 013411// CHECK11-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]13412// CHECK11:       .omp.final.then:13413// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413414// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP33]], 013415// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 113416// CHECK11-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 113417// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]13418// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 413419// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]13420// CHECK11:       .omp.final.done:13421// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13422// CHECK11:       omp.precond.end:13423// CHECK11-NEXT:    ret void13424//13425//13426// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l6613427// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {13428// CHECK11-NEXT:  entry:13429// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 413430// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413431// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413432// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413433// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 413434// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413435// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413436// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413437// 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_l66.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])13438// CHECK11-NEXT:    ret void13439//13440//13441// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l66.omp_outlined13442// 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]] {13443// CHECK11-NEXT:  entry:13444// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413445// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413446// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413447// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413448// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413449// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413450// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413451// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413452// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 413453// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413454// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413455// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 413456// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 413457// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413458// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413459// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 413460// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413461// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413462// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413463// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413464// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413465// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413466// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 413467// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 413468// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 413469// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 413470// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 413471// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 413472// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413473// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 013474// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113475// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 113476// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 413477// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413478// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413479// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]13480// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13481// CHECK11:       omp.precond.then:13482// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 413483// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413484// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_COMB_UB]], align 413485// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413486// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413487// CHECK11-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413488// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP8]], align 413489// 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)13490// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413491// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413492// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP10]], [[TMP11]]13493// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]13494// CHECK11:       cond.true:13495// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413496// CHECK11-NEXT:    br label [[COND_END:%.*]]13497// CHECK11:       cond.false:13498// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413499// CHECK11-NEXT:    br label [[COND_END]]13500// CHECK11:       cond.end:13501// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP12]], [[COND_TRUE]] ], [ [[TMP13]], [[COND_FALSE]] ]13502// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 413503// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 413504// CHECK11-NEXT:    store i32 [[TMP14]], ptr [[DOTOMP_IV]], align 413505// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13506// CHECK11:       omp.inner.for.cond:13507// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP81:![0-9]+]]13508// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP81]]13509// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP15]], [[TMP16]]13510// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13511// CHECK11:       omp.inner.for.body:13512// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP81]]13513// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP81]]13514// 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_l66.omp_outlined.omp_outlined, i32 [[TMP17]], i32 [[TMP18]], ptr [[TMP0]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]]), !llvm.access.group [[ACC_GRP81]]13515// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13516// CHECK11:       omp.inner.for.inc:13517// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP81]]13518// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP81]]13519// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP19]], [[TMP20]]13520// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP81]]13521// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP82:![0-9]+]]13522// CHECK11:       omp.inner.for.end:13523// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]13524// CHECK11:       omp.loop.exit:13525// CHECK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413526// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 413527// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP22]])13528// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 413529// CHECK11-NEXT:    [[TMP24:%.*]] = icmp ne i32 [[TMP23]], 013530// CHECK11-NEXT:    br i1 [[TMP24]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]13531// CHECK11:       .omp.final.then:13532// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413533// CHECK11-NEXT:    [[SUB6:%.*]] = sub nsw i32 [[TMP25]], 013534// CHECK11-NEXT:    [[DIV7:%.*]] = sdiv i32 [[SUB6]], 113535// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV7]], 113536// CHECK11-NEXT:    [[ADD8:%.*]] = add nsw i32 0, [[MUL]]13537// CHECK11-NEXT:    store i32 [[ADD8]], ptr [[I3]], align 413538// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]13539// CHECK11:       .omp.final.done:13540// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13541// CHECK11:       omp.precond.end:13542// CHECK11-NEXT:    ret void13543//13544//13545// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l66.omp_outlined.omp_outlined13546// 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]] {13547// CHECK11-NEXT:  entry:13548// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413549// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413550// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 413551// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 413552// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413553// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413554// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413555// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413556// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413557// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413558// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 413559// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413560// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413561// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 413562// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 413563// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413564// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413565// CHECK11-NEXT:    [[I3:%.*]] = alloca i32, align 413566// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413567// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413568// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 413569// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 413570// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413571// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413572// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413573// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413574// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 413575// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 413576// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 413577// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 413578// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 413579// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_]], align 413580// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413581// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 013582// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113583// CHECK11-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 113584// CHECK11-NEXT:    store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 413585// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413586// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413587// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]13588// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13589// CHECK11:       omp.precond.then:13590// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 413591// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413592// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 413593// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 413594// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 413595// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 413596// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 413597// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413598// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413599// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413600// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 413601// 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)13602// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413603// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413604// CHECK11-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]13605// CHECK11-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]13606// CHECK11:       cond.true:13607// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413608// CHECK11-NEXT:    br label [[COND_END:%.*]]13609// CHECK11:       cond.false:13610// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413611// CHECK11-NEXT:    br label [[COND_END]]13612// CHECK11:       cond.end:13613// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]13614// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 413615// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_LB]], align 413616// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 413617// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13618// CHECK11:       omp.inner.for.cond:13619// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP84:![0-9]+]]13620// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP84]]13621// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]13622// CHECK11-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13623// CHECK11:       omp.inner.for.body:13624// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP84]]13625// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP19]], 113626// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]13627// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP84]]13628// CHECK11-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP84]]13629// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP84]]13630// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 [[TMP21]]13631// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP84]]13632// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP84]]13633// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP84]]13634// CHECK11-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 [[TMP24]]13635// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX6]], align 4, !llvm.access.group [[ACC_GRP84]]13636// CHECK11-NEXT:    [[ADD7:%.*]] = add nsw i32 [[TMP22]], [[TMP25]]13637// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP84]]13638// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I3]], align 4, !llvm.access.group [[ACC_GRP84]]13639// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i32 [[TMP27]]13640// CHECK11-NEXT:    store i32 [[ADD7]], ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP84]]13641// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]13642// CHECK11:       omp.body.continue:13643// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13644// CHECK11:       omp.inner.for.inc:13645// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP84]]13646// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP28]], 113647// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP84]]13648// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP85:![0-9]+]]13649// CHECK11:       omp.inner.for.end:13650// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]13651// CHECK11:       omp.loop.exit:13652// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413653// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[TMP29]], align 413654// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP30]])13655// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 413656// CHECK11-NEXT:    [[TMP32:%.*]] = icmp ne i32 [[TMP31]], 013657// CHECK11-NEXT:    br i1 [[TMP32]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]13658// CHECK11:       .omp.final.then:13659// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 413660// CHECK11-NEXT:    [[SUB10:%.*]] = sub nsw i32 [[TMP33]], 013661// CHECK11-NEXT:    [[DIV11:%.*]] = sdiv i32 [[SUB10]], 113662// CHECK11-NEXT:    [[MUL12:%.*]] = mul nsw i32 [[DIV11]], 113663// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]13664// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[I3]], align 413665// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]13666// CHECK11:       .omp.final.done:13667// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13668// CHECK11:       omp.precond.end:13669// CHECK11-NEXT:    ret void13670//13671//13672// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l7413673// CHECK11-SAME: (i32 noundef [[CH:%.*]], i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {13674// CHECK11-NEXT:  entry:13675// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca i32, align 413676// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 413677// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413678// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413679// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413680// CHECK11-NEXT:    store i32 [[CH]], ptr [[CH_ADDR]], align 413681// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 413682// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413683// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413684// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413685// 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_l74.omp_outlined, ptr [[CH_ADDR]], ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])13686// CHECK11-NEXT:    ret void13687//13688//13689// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l74.omp_outlined13690// 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]] {13691// CHECK11-NEXT:  entry:13692// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413693// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413694// CHECK11-NEXT:    [[CH_ADDR:%.*]] = alloca ptr, align 413695// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413696// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413697// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413698// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413699// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 413700// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413701// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413702// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413703// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 413704// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413705// CHECK11-NEXT:    [[DOTOMP_COMB_LB:%.*]] = alloca i32, align 413706// CHECK11-NEXT:    [[DOTOMP_COMB_UB:%.*]] = alloca i32, align 413707// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413708// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413709// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 413710// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__CASTED:%.*]] = alloca i32, align 413711// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413712// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413713// CHECK11-NEXT:    store ptr [[CH]], ptr [[CH_ADDR]], align 413714// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413715// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413716// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413717// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413718// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[CH_ADDR]], align 413719// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[N_ADDR]], align 413720// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[A_ADDR]], align 413721// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[B_ADDR]], align 413722// CHECK11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[C_ADDR]], align 413723// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 413724// CHECK11-NEXT:    store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 413725// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP1]], align 413726// CHECK11-NEXT:    store i32 [[TMP6]], ptr [[DOTCAPTURE_EXPR_1]], align 413727// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413728// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP7]], 013729// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113730// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 113731// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 413732// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413733// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413734// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP8]]13735// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13736// CHECK11:       omp.precond.then:13737// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_COMB_LB]], align 413738// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 413739// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_COMB_UB]], align 413740// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413741// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413742// CHECK11-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413743// CHECK11-NEXT:    [[TMP11:%.*]] = load i32, ptr [[TMP10]], align 413744// 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)13745// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413746// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 413747// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP12]], [[TMP13]]13748// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]13749// CHECK11:       cond.true:13750// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 413751// CHECK11-NEXT:    br label [[COND_END:%.*]]13752// CHECK11:       cond.false:13753// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 413754// CHECK11-NEXT:    br label [[COND_END]]13755// CHECK11:       cond.end:13756// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP14]], [[COND_TRUE]] ], [ [[TMP15]], [[COND_FALSE]] ]13757// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_COMB_UB]], align 413758// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 413759// CHECK11-NEXT:    store i32 [[TMP16]], ptr [[DOTOMP_IV]], align 413760// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13761// CHECK11:       omp.inner.for.cond:13762// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP87:![0-9]+]]13763// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP87]]13764// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP17]], [[TMP18]]13765// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13766// CHECK11:       omp.inner.for.body:13767// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_COMB_LB]], align 4, !llvm.access.group [[ACC_GRP87]]13768// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_COMB_UB]], align 4, !llvm.access.group [[ACC_GRP87]]13769// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4, !llvm.access.group [[ACC_GRP87]]13770// CHECK11-NEXT:    store i32 [[TMP21]], ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP87]]13771// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__CASTED]], align 4, !llvm.access.group [[ACC_GRP87]]13772// 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_l74.omp_outlined.omp_outlined, i32 [[TMP19]], i32 [[TMP20]], ptr [[TMP1]], ptr [[TMP2]], ptr [[TMP3]], ptr [[TMP4]], i32 [[TMP22]]), !llvm.access.group [[ACC_GRP87]]13773// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13774// CHECK11:       omp.inner.for.inc:13775// CHECK11-NEXT:    [[TMP23:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP87]]13776// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 4, !llvm.access.group [[ACC_GRP87]]13777// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP23]], [[TMP24]]13778// CHECK11-NEXT:    store i32 [[ADD]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP87]]13779// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP88:![0-9]+]]13780// CHECK11:       omp.inner.for.end:13781// CHECK11-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]13782// CHECK11:       omp.loop.exit:13783// CHECK11-NEXT:    [[TMP25:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413784// CHECK11-NEXT:    [[TMP26:%.*]] = load i32, ptr [[TMP25]], align 413785// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP26]])13786// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 413787// CHECK11-NEXT:    [[TMP28:%.*]] = icmp ne i32 [[TMP27]], 013788// CHECK11-NEXT:    br i1 [[TMP28]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]13789// CHECK11:       .omp.final.then:13790// CHECK11-NEXT:    [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413791// CHECK11-NEXT:    [[SUB7:%.*]] = sub nsw i32 [[TMP29]], 013792// CHECK11-NEXT:    [[DIV8:%.*]] = sdiv i32 [[SUB7]], 113793// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV8]], 113794// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 0, [[MUL]]13795// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[I4]], align 413796// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]13797// CHECK11:       .omp.final.done:13798// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13799// CHECK11:       omp.precond.end:13800// CHECK11-NEXT:    ret void13801//13802//13803// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l74.omp_outlined.omp_outlined13804// 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]] {13805// CHECK11-NEXT:  entry:13806// CHECK11-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 413807// CHECK11-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 413808// CHECK11-NEXT:    [[DOTPREVIOUS_LB__ADDR:%.*]] = alloca i32, align 413809// CHECK11-NEXT:    [[DOTPREVIOUS_UB__ADDR:%.*]] = alloca i32, align 413810// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca ptr, align 413811// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413812// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413813// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413814// CHECK11-NEXT:    [[DOTCAPTURE_EXPR__ADDR:%.*]] = alloca i32, align 413815// CHECK11-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 413816// CHECK11-NEXT:    [[TMP:%.*]] = alloca i32, align 413817// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 413818// CHECK11-NEXT:    [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 413819// CHECK11-NEXT:    [[I:%.*]] = alloca i32, align 413820// CHECK11-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 413821// CHECK11-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 413822// CHECK11-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 413823// CHECK11-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 413824// CHECK11-NEXT:    [[I4:%.*]] = alloca i32, align 413825// CHECK11-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 413826// CHECK11-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 413827// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_LB_]], ptr [[DOTPREVIOUS_LB__ADDR]], align 413828// CHECK11-NEXT:    store i32 [[DOTPREVIOUS_UB_]], ptr [[DOTPREVIOUS_UB__ADDR]], align 413829// CHECK11-NEXT:    store ptr [[N]], ptr [[N_ADDR]], align 413830// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413831// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413832// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413833// CHECK11-NEXT:    store i32 [[DOTCAPTURE_EXPR_]], ptr [[DOTCAPTURE_EXPR__ADDR]], align 413834// CHECK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[N_ADDR]], align 413835// CHECK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A_ADDR]], align 413836// CHECK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B_ADDR]], align 413837// CHECK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[C_ADDR]], align 413838// CHECK11-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP0]], align 413839// CHECK11-NEXT:    store i32 [[TMP4]], ptr [[DOTCAPTURE_EXPR_1]], align 413840// CHECK11-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413841// CHECK11-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP5]], 013842// CHECK11-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 113843// CHECK11-NEXT:    [[SUB3:%.*]] = sub nsw i32 [[DIV]], 113844// CHECK11-NEXT:    store i32 [[SUB3]], ptr [[DOTCAPTURE_EXPR_2]], align 413845// CHECK11-NEXT:    store i32 0, ptr [[I]], align 413846// CHECK11-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413847// CHECK11-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP6]]13848// CHECK11-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]13849// CHECK11:       omp.precond.then:13850// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_LB]], align 413851// CHECK11-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 413852// CHECK11-NEXT:    store i32 [[TMP7]], ptr [[DOTOMP_UB]], align 413853// CHECK11-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTPREVIOUS_LB__ADDR]], align 413854// CHECK11-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 413855// CHECK11-NEXT:    store i32 [[TMP8]], ptr [[DOTOMP_LB]], align 413856// CHECK11-NEXT:    store i32 [[TMP9]], ptr [[DOTOMP_UB]], align 413857// CHECK11-NEXT:    store i32 1, ptr [[DOTOMP_STRIDE]], align 413858// CHECK11-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 413859// CHECK11-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR__ADDR]], align 413860// CHECK11-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413861// CHECK11-NEXT:    [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 413862// 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]])13863// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND:%.*]]13864// CHECK11:       omp.dispatch.cond:13865// CHECK11-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413866// CHECK11-NEXT:    [[TMP14:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 413867// CHECK11-NEXT:    [[CMP5:%.*]] = icmp sgt i32 [[TMP13]], [[TMP14]]13868// CHECK11-NEXT:    br i1 [[CMP5]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]13869// CHECK11:       cond.true:13870// CHECK11-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTPREVIOUS_UB__ADDR]], align 413871// CHECK11-NEXT:    br label [[COND_END:%.*]]13872// CHECK11:       cond.false:13873// CHECK11-NEXT:    [[TMP16:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413874// CHECK11-NEXT:    br label [[COND_END]]13875// CHECK11:       cond.end:13876// CHECK11-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP15]], [[COND_TRUE]] ], [ [[TMP16]], [[COND_FALSE]] ]13877// CHECK11-NEXT:    store i32 [[COND]], ptr [[DOTOMP_UB]], align 413878// CHECK11-NEXT:    [[TMP17:%.*]] = load i32, ptr [[DOTOMP_LB]], align 413879// CHECK11-NEXT:    store i32 [[TMP17]], ptr [[DOTOMP_IV]], align 413880// CHECK11-NEXT:    [[TMP18:%.*]] = load i32, ptr [[DOTOMP_IV]], align 413881// CHECK11-NEXT:    [[TMP19:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413882// CHECK11-NEXT:    [[CMP6:%.*]] = icmp sle i32 [[TMP18]], [[TMP19]]13883// CHECK11-NEXT:    br i1 [[CMP6]], label [[OMP_DISPATCH_BODY:%.*]], label [[OMP_DISPATCH_END:%.*]]13884// CHECK11:       omp.dispatch.body:13885// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]13886// CHECK11:       omp.inner.for.cond:13887// CHECK11-NEXT:    [[TMP20:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP90:![0-9]+]]13888// CHECK11-NEXT:    [[TMP21:%.*]] = load i32, ptr [[DOTOMP_UB]], align 4, !llvm.access.group [[ACC_GRP90]]13889// CHECK11-NEXT:    [[CMP7:%.*]] = icmp sle i32 [[TMP20]], [[TMP21]]13890// CHECK11-NEXT:    br i1 [[CMP7]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]13891// CHECK11:       omp.inner.for.body:13892// CHECK11-NEXT:    [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP90]]13893// CHECK11-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP22]], 113894// CHECK11-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]13895// CHECK11-NEXT:    store i32 [[ADD]], ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP90]]13896// CHECK11-NEXT:    [[TMP23:%.*]] = load ptr, ptr [[TMP2]], align 4, !llvm.access.group [[ACC_GRP90]]13897// CHECK11-NEXT:    [[TMP24:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP90]]13898// CHECK11-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 [[TMP24]]13899// CHECK11-NEXT:    [[TMP25:%.*]] = load i32, ptr [[ARRAYIDX]], align 4, !llvm.access.group [[ACC_GRP90]]13900// CHECK11-NEXT:    [[TMP26:%.*]] = load ptr, ptr [[TMP3]], align 4, !llvm.access.group [[ACC_GRP90]]13901// CHECK11-NEXT:    [[TMP27:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP90]]13902// CHECK11-NEXT:    [[ARRAYIDX8:%.*]] = getelementptr inbounds i32, ptr [[TMP26]], i32 [[TMP27]]13903// CHECK11-NEXT:    [[TMP28:%.*]] = load i32, ptr [[ARRAYIDX8]], align 4, !llvm.access.group [[ACC_GRP90]]13904// CHECK11-NEXT:    [[ADD9:%.*]] = add nsw i32 [[TMP25]], [[TMP28]]13905// CHECK11-NEXT:    [[TMP29:%.*]] = load ptr, ptr [[TMP1]], align 4, !llvm.access.group [[ACC_GRP90]]13906// CHECK11-NEXT:    [[TMP30:%.*]] = load i32, ptr [[I4]], align 4, !llvm.access.group [[ACC_GRP90]]13907// CHECK11-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds i32, ptr [[TMP29]], i32 [[TMP30]]13908// CHECK11-NEXT:    store i32 [[ADD9]], ptr [[ARRAYIDX10]], align 4, !llvm.access.group [[ACC_GRP90]]13909// CHECK11-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]]13910// CHECK11:       omp.body.continue:13911// CHECK11-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]13912// CHECK11:       omp.inner.for.inc:13913// CHECK11-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP90]]13914// CHECK11-NEXT:    [[ADD11:%.*]] = add nsw i32 [[TMP31]], 113915// CHECK11-NEXT:    store i32 [[ADD11]], ptr [[DOTOMP_IV]], align 4, !llvm.access.group [[ACC_GRP90]]13916// CHECK11-NEXT:    br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP91:![0-9]+]]13917// CHECK11:       omp.inner.for.end:13918// CHECK11-NEXT:    br label [[OMP_DISPATCH_INC:%.*]]13919// CHECK11:       omp.dispatch.inc:13920// CHECK11-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTOMP_LB]], align 413921// CHECK11-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 413922// CHECK11-NEXT:    [[ADD12:%.*]] = add nsw i32 [[TMP32]], [[TMP33]]13923// CHECK11-NEXT:    store i32 [[ADD12]], ptr [[DOTOMP_LB]], align 413924// CHECK11-NEXT:    [[TMP34:%.*]] = load i32, ptr [[DOTOMP_UB]], align 413925// CHECK11-NEXT:    [[TMP35:%.*]] = load i32, ptr [[DOTOMP_STRIDE]], align 413926// CHECK11-NEXT:    [[ADD13:%.*]] = add nsw i32 [[TMP34]], [[TMP35]]13927// CHECK11-NEXT:    store i32 [[ADD13]], ptr [[DOTOMP_UB]], align 413928// CHECK11-NEXT:    br label [[OMP_DISPATCH_COND]]13929// CHECK11:       omp.dispatch.end:13930// CHECK11-NEXT:    [[TMP36:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 413931// CHECK11-NEXT:    [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 413932// CHECK11-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB2]], i32 [[TMP37]])13933// CHECK11-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTOMP_IS_LAST]], align 413934// CHECK11-NEXT:    [[TMP39:%.*]] = icmp ne i32 [[TMP38]], 013935// CHECK11-NEXT:    br i1 [[TMP39]], label [[DOTOMP_FINAL_THEN:%.*]], label [[DOTOMP_FINAL_DONE:%.*]]13936// CHECK11:       .omp.final.then:13937// CHECK11-NEXT:    [[TMP40:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 413938// CHECK11-NEXT:    [[SUB14:%.*]] = sub nsw i32 [[TMP40]], 013939// CHECK11-NEXT:    [[DIV15:%.*]] = sdiv i32 [[SUB14]], 113940// CHECK11-NEXT:    [[MUL16:%.*]] = mul nsw i32 [[DIV15]], 113941// CHECK11-NEXT:    [[ADD17:%.*]] = add nsw i32 0, [[MUL16]]13942// CHECK11-NEXT:    store i32 [[ADD17]], ptr [[I4]], align 413943// CHECK11-NEXT:    br label [[DOTOMP_FINAL_DONE]]13944// CHECK11:       .omp.final.done:13945// CHECK11-NEXT:    br label [[OMP_PRECOND_END]]13946// CHECK11:       omp.precond.end:13947// CHECK11-NEXT:    ret void13948//13949//13950// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l8213951// CHECK11-SAME: (i32 noundef [[N:%.*]], ptr noundef [[A:%.*]], ptr noundef [[B:%.*]], ptr noundef [[C:%.*]]) #[[ATTR1]] {13952// CHECK11-NEXT:  entry:13953// CHECK11-NEXT:    [[N_ADDR:%.*]] = alloca i32, align 413954// CHECK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 413955// CHECK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 413956// CHECK11-NEXT:    [[C_ADDR:%.*]] = alloca ptr, align 413957// CHECK11-NEXT:    store i32 [[N]], ptr [[N_ADDR]], align 413958// CHECK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 413959// CHECK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 413960// CHECK11-NEXT:    store ptr [[C]], ptr [[C_ADDR]], align 413961// 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_l82.omp_outlined, ptr [[N_ADDR]], ptr [[A_ADDR]], ptr [[B_ADDR]], ptr [[C_ADDR]])13962// CHECK11-NEXT:    ret void13963//13964//13965// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z5tmainIiET_v_l82.omp_outlined13966// 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]

File truncated to the first 1 MiB.