brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.0 KiB · 48dd37f Raw
314 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _2// RUN: %clang_cc1 -verify -fopenmp -x c -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s3// RUN: %clang_cc1 -fopenmp -x c -triple x86_64-unknown-unknown -emit-pch -o %t %s4// RUN: %clang_cc1 -fopenmp -x c -triple x86_64-unknown-unknown -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s5 6// RUN: %clang_cc1 -verify -fopenmp-simd -x c -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s7// RUN: %clang_cc1 -fopenmp-simd -x c -triple x86_64-unknown-unknown -emit-pch -o %t %s8// RUN: %clang_cc1 -fopenmp-simd -x c -triple x86_64-unknown-unknown -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s9// expected-no-diagnostics10#ifndef HEADER11#define HEADER12 13void collapsed(int mp) {14#pragma omp for collapse(3)15  for (int j = 0; j < mp; ++j) {16    for (int i = j; i < mp; ++i) {17      for (int i0 = 0; i0 < 10; ++i0) {18        ;19      }20    }21  }22}23 24#endif // HEADER25// CHECK-LABEL: define {{[^@]+}}@collapsed26// CHECK-SAME: (i32 noundef [[MP:%.*]]) #[[ATTR0:[0-9]+]] {27// CHECK-NEXT:  entry:28// CHECK-NEXT:    [[MP_ADDR:%.*]] = alloca i32, align 429// CHECK-NEXT:    [[DOTOMP_IV:%.*]] = alloca i64, align 830// CHECK-NEXT:    [[TMP:%.*]] = alloca i32, align 431// CHECK-NEXT:    [[_TMP1:%.*]] = alloca i32, align 432// CHECK-NEXT:    [[_TMP2:%.*]] = alloca i32, align 433// CHECK-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 434// CHECK-NEXT:    [[DOTLB_MIN:%.*]] = alloca i32, align 435// CHECK-NEXT:    [[DOTLB_MAX:%.*]] = alloca i32, align 436// CHECK-NEXT:    [[DOTMIN_LESS_MAX:%.*]] = alloca i32, align 437// CHECK-NEXT:    [[DOTUPPER:%.*]] = alloca i32, align 438// CHECK-NEXT:    [[DOTLOWER:%.*]] = alloca i32, align 439// CHECK-NEXT:    [[DOTCAPTURE_EXPR_3:%.*]] = alloca i64, align 840// CHECK-NEXT:    [[J:%.*]] = alloca i32, align 441// CHECK-NEXT:    [[I:%.*]] = alloca i32, align 442// CHECK-NEXT:    [[I0:%.*]] = alloca i32, align 443// CHECK-NEXT:    [[_TMP15:%.*]] = alloca i32, align 444// CHECK-NEXT:    [[DOTOMP_LB:%.*]] = alloca i64, align 845// CHECK-NEXT:    [[DOTOMP_UB:%.*]] = alloca i64, align 846// CHECK-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i64, align 847// CHECK-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 448// CHECK-NEXT:    [[J19:%.*]] = alloca i32, align 449// CHECK-NEXT:    [[I20:%.*]] = alloca i32, align 450// CHECK-NEXT:    [[I021:%.*]] = alloca i32, align 451// CHECK-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2:[0-9]+]])52// CHECK-NEXT:    store i32 [[MP]], ptr [[MP_ADDR]], align 453// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[MP_ADDR]], align 454// CHECK-NEXT:    store i32 [[TMP1]], ptr [[DOTCAPTURE_EXPR_]], align 455// CHECK-NEXT:    store i32 0, ptr [[TMP]], align 456// CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP]], align 457// CHECK-NEXT:    store i32 [[TMP2]], ptr [[DOTLB_MIN]], align 458// CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 459// CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP3]], 160// CHECK-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 161// CHECK-NEXT:    [[MUL:%.*]] = mul nsw i32 [[DIV]], 162// CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]]63// CHECK-NEXT:    store i32 [[ADD]], ptr [[TMP]], align 464// CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP]], align 465// CHECK-NEXT:    store i32 [[TMP4]], ptr [[DOTLB_MAX]], align 466// CHECK-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTLB_MIN]], align 467// CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTLB_MAX]], align 468// CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[TMP5]], [[TMP6]]69// CHECK-NEXT:    [[CONV:%.*]] = zext i1 [[CMP]] to i3270// CHECK-NEXT:    store i32 [[CONV]], ptr [[DOTMIN_LESS_MAX]], align 471// CHECK-NEXT:    [[TMP7:%.*]] = load i32, ptr [[MP_ADDR]], align 472// CHECK-NEXT:    store i32 [[TMP7]], ptr [[DOTUPPER]], align 473// CHECK-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTMIN_LESS_MAX]], align 474// CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne i32 [[TMP8]], 075// CHECK-NEXT:    br i1 [[TOBOOL]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]76// CHECK:       cond.true:77// CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTLB_MIN]], align 478// CHECK-NEXT:    br label [[COND_END:%.*]]79// CHECK:       cond.false:80// CHECK-NEXT:    [[TMP10:%.*]] = load i32, ptr [[DOTLB_MAX]], align 481// CHECK-NEXT:    br label [[COND_END]]82// CHECK:       cond.end:83// CHECK-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP9]], [[COND_TRUE]] ], [ [[TMP10]], [[COND_FALSE]] ]84// CHECK-NEXT:    store i32 [[COND]], ptr [[TMP]], align 485// CHECK-NEXT:    store i32 [[COND]], ptr [[DOTLOWER]], align 486// CHECK-NEXT:    [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 487// CHECK-NEXT:    [[SUB4:%.*]] = sub nsw i32 [[TMP11]], 088// CHECK-NEXT:    [[DIV5:%.*]] = sdiv i32 [[SUB4]], 189// CHECK-NEXT:    [[CONV6:%.*]] = sext i32 [[DIV5]] to i6490// CHECK-NEXT:    [[TMP12:%.*]] = load i32, ptr [[DOTUPPER]], align 491// CHECK-NEXT:    [[TMP13:%.*]] = load i32, ptr [[DOTLOWER]], align 492// CHECK-NEXT:    [[SUB7:%.*]] = sub i32 [[TMP12]], [[TMP13]]93// CHECK-NEXT:    [[SUB8:%.*]] = sub i32 [[SUB7]], 194// CHECK-NEXT:    [[ADD9:%.*]] = add i32 [[SUB8]], 195// CHECK-NEXT:    [[DIV10:%.*]] = udiv i32 [[ADD9]], 196// CHECK-NEXT:    [[CONV11:%.*]] = zext i32 [[DIV10]] to i6497// CHECK-NEXT:    [[MUL12:%.*]] = mul nsw i64 [[CONV6]], [[CONV11]]98// CHECK-NEXT:    [[MUL13:%.*]] = mul nsw i64 [[MUL12]], 1099// CHECK-NEXT:    [[SUB14:%.*]] = sub nsw i64 [[MUL13]], 1100// CHECK-NEXT:    store i64 [[SUB14]], ptr [[DOTCAPTURE_EXPR_3]], align 8101// CHECK-NEXT:    store i32 0, ptr [[J]], align 4102// CHECK-NEXT:    [[TMP14:%.*]] = load i32, ptr [[J]], align 4103// CHECK-NEXT:    store i32 [[TMP14]], ptr [[I]], align 4104// CHECK-NEXT:    store i32 0, ptr [[I0]], align 4105// CHECK-NEXT:    store i32 0, ptr [[_TMP15]], align 4106// CHECK-NEXT:    [[TMP15:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4107// CHECK-NEXT:    [[CMP16:%.*]] = icmp slt i32 0, [[TMP15]]108// CHECK-NEXT:    br i1 [[CMP16]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]]109// CHECK:       omp.precond.then:110// CHECK-NEXT:    store i64 0, ptr [[DOTOMP_LB]], align 8111// CHECK-NEXT:    [[TMP16:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_3]], align 8112// CHECK-NEXT:    store i64 [[TMP16]], ptr [[DOTOMP_UB]], align 8113// CHECK-NEXT:    store i64 1, ptr [[DOTOMP_STRIDE]], align 8114// CHECK-NEXT:    store i32 0, ptr [[DOTOMP_IS_LAST]], align 4115// CHECK-NEXT:    call void @__kmpc_for_static_init_8(ptr @[[GLOB1:[0-9]+]], i32 [[TMP0]], i32 34, ptr [[DOTOMP_IS_LAST]], ptr [[DOTOMP_LB]], ptr [[DOTOMP_UB]], ptr [[DOTOMP_STRIDE]], i64 1, i64 1)116// CHECK-NEXT:    [[TMP17:%.*]] = load i64, ptr [[DOTOMP_UB]], align 8117// CHECK-NEXT:    [[TMP18:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_3]], align 8118// CHECK-NEXT:    [[CMP22:%.*]] = icmp sgt i64 [[TMP17]], [[TMP18]]119// CHECK-NEXT:    br i1 [[CMP22]], label [[COND_TRUE24:%.*]], label [[COND_FALSE25:%.*]]120// CHECK:       cond.true24:121// CHECK-NEXT:    [[TMP19:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_3]], align 8122// CHECK-NEXT:    br label [[COND_END26:%.*]]123// CHECK:       cond.false25:124// CHECK-NEXT:    [[TMP20:%.*]] = load i64, ptr [[DOTOMP_UB]], align 8125// CHECK-NEXT:    br label [[COND_END26]]126// CHECK:       cond.end26:127// CHECK-NEXT:    [[COND27:%.*]] = phi i64 [ [[TMP19]], [[COND_TRUE24]] ], [ [[TMP20]], [[COND_FALSE25]] ]128// CHECK-NEXT:    store i64 [[COND27]], ptr [[DOTOMP_UB]], align 8129// CHECK-NEXT:    [[TMP21:%.*]] = load i64, ptr [[DOTOMP_LB]], align 8130// CHECK-NEXT:    store i64 [[TMP21]], ptr [[DOTOMP_IV]], align 8131// CHECK-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]132// CHECK:       omp.inner.for.cond:133// CHECK-NEXT:    [[TMP22:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8134// CHECK-NEXT:    [[TMP23:%.*]] = load i64, ptr [[DOTOMP_UB]], align 8135// CHECK-NEXT:    [[CMP28:%.*]] = icmp sle i64 [[TMP22]], [[TMP23]]136// CHECK-NEXT:    br i1 [[CMP28]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]137// CHECK:       omp.inner.for.body:138// CHECK-NEXT:    [[TMP24:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8139// CHECK-NEXT:    [[TMP25:%.*]] = load i32, ptr [[DOTUPPER]], align 4140// CHECK-NEXT:    [[TMP26:%.*]] = load i32, ptr [[DOTLOWER]], align 4141// CHECK-NEXT:    [[SUB30:%.*]] = sub i32 [[TMP25]], [[TMP26]]142// CHECK-NEXT:    [[SUB31:%.*]] = sub i32 [[SUB30]], 1143// CHECK-NEXT:    [[ADD32:%.*]] = add i32 [[SUB31]], 1144// CHECK-NEXT:    [[DIV33:%.*]] = udiv i32 [[ADD32]], 1145// CHECK-NEXT:    [[MUL34:%.*]] = mul i32 1, [[DIV33]]146// CHECK-NEXT:    [[MUL35:%.*]] = mul i32 [[MUL34]], 10147// CHECK-NEXT:    [[CONV36:%.*]] = zext i32 [[MUL35]] to i64148// CHECK-NEXT:    [[DIV37:%.*]] = sdiv i64 [[TMP24]], [[CONV36]]149// CHECK-NEXT:    [[MUL38:%.*]] = mul nsw i64 [[DIV37]], 1150// CHECK-NEXT:    [[ADD39:%.*]] = add nsw i64 0, [[MUL38]]151// CHECK-NEXT:    [[CONV40:%.*]] = trunc i64 [[ADD39]] to i32152// CHECK-NEXT:    store i32 [[CONV40]], ptr [[J19]], align 4153// CHECK-NEXT:    [[TMP27:%.*]] = load i32, ptr [[J19]], align 4154// CHECK-NEXT:    [[CONV41:%.*]] = sext i32 [[TMP27]] to i64155// CHECK-NEXT:    [[TMP28:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8156// CHECK-NEXT:    [[TMP29:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8157// CHECK-NEXT:    [[TMP30:%.*]] = load i32, ptr [[DOTUPPER]], align 4158// CHECK-NEXT:    [[TMP31:%.*]] = load i32, ptr [[DOTLOWER]], align 4159// CHECK-NEXT:    [[SUB42:%.*]] = sub i32 [[TMP30]], [[TMP31]]160// CHECK-NEXT:    [[SUB43:%.*]] = sub i32 [[SUB42]], 1161// CHECK-NEXT:    [[ADD44:%.*]] = add i32 [[SUB43]], 1162// CHECK-NEXT:    [[DIV45:%.*]] = udiv i32 [[ADD44]], 1163// CHECK-NEXT:    [[MUL46:%.*]] = mul i32 1, [[DIV45]]164// CHECK-NEXT:    [[MUL47:%.*]] = mul i32 [[MUL46]], 10165// CHECK-NEXT:    [[CONV48:%.*]] = zext i32 [[MUL47]] to i64166// CHECK-NEXT:    [[DIV49:%.*]] = sdiv i64 [[TMP29]], [[CONV48]]167// CHECK-NEXT:    [[TMP32:%.*]] = load i32, ptr [[DOTUPPER]], align 4168// CHECK-NEXT:    [[TMP33:%.*]] = load i32, ptr [[DOTLOWER]], align 4169// CHECK-NEXT:    [[SUB50:%.*]] = sub i32 [[TMP32]], [[TMP33]]170// CHECK-NEXT:    [[SUB51:%.*]] = sub i32 [[SUB50]], 1171// CHECK-NEXT:    [[ADD52:%.*]] = add i32 [[SUB51]], 1172// CHECK-NEXT:    [[DIV53:%.*]] = udiv i32 [[ADD52]], 1173// CHECK-NEXT:    [[MUL54:%.*]] = mul i32 1, [[DIV53]]174// CHECK-NEXT:    [[MUL55:%.*]] = mul i32 [[MUL54]], 10175// CHECK-NEXT:    [[CONV56:%.*]] = zext i32 [[MUL55]] to i64176// CHECK-NEXT:    [[MUL57:%.*]] = mul nsw i64 [[DIV49]], [[CONV56]]177// CHECK-NEXT:    [[SUB58:%.*]] = sub nsw i64 [[TMP28]], [[MUL57]]178// CHECK-NEXT:    [[DIV59:%.*]] = sdiv i64 [[SUB58]], 10179// CHECK-NEXT:    [[MUL60:%.*]] = mul nsw i64 [[DIV59]], 1180// CHECK-NEXT:    [[ADD61:%.*]] = add nsw i64 [[CONV41]], [[MUL60]]181// CHECK-NEXT:    [[CONV62:%.*]] = trunc i64 [[ADD61]] to i32182// CHECK-NEXT:    store i32 [[CONV62]], ptr [[I20]], align 4183// CHECK-NEXT:    [[TMP34:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8184// CHECK-NEXT:    [[TMP35:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8185// CHECK-NEXT:    [[TMP36:%.*]] = load i32, ptr [[DOTUPPER]], align 4186// CHECK-NEXT:    [[TMP37:%.*]] = load i32, ptr [[DOTLOWER]], align 4187// CHECK-NEXT:    [[SUB63:%.*]] = sub i32 [[TMP36]], [[TMP37]]188// CHECK-NEXT:    [[SUB64:%.*]] = sub i32 [[SUB63]], 1189// CHECK-NEXT:    [[ADD65:%.*]] = add i32 [[SUB64]], 1190// CHECK-NEXT:    [[DIV66:%.*]] = udiv i32 [[ADD65]], 1191// CHECK-NEXT:    [[MUL67:%.*]] = mul i32 1, [[DIV66]]192// CHECK-NEXT:    [[MUL68:%.*]] = mul i32 [[MUL67]], 10193// CHECK-NEXT:    [[CONV69:%.*]] = zext i32 [[MUL68]] to i64194// CHECK-NEXT:    [[DIV70:%.*]] = sdiv i64 [[TMP35]], [[CONV69]]195// CHECK-NEXT:    [[TMP38:%.*]] = load i32, ptr [[DOTUPPER]], align 4196// CHECK-NEXT:    [[TMP39:%.*]] = load i32, ptr [[DOTLOWER]], align 4197// CHECK-NEXT:    [[SUB71:%.*]] = sub i32 [[TMP38]], [[TMP39]]198// CHECK-NEXT:    [[SUB72:%.*]] = sub i32 [[SUB71]], 1199// CHECK-NEXT:    [[ADD73:%.*]] = add i32 [[SUB72]], 1200// CHECK-NEXT:    [[DIV74:%.*]] = udiv i32 [[ADD73]], 1201// CHECK-NEXT:    [[MUL75:%.*]] = mul i32 1, [[DIV74]]202// CHECK-NEXT:    [[MUL76:%.*]] = mul i32 [[MUL75]], 10203// CHECK-NEXT:    [[CONV77:%.*]] = zext i32 [[MUL76]] to i64204// CHECK-NEXT:    [[MUL78:%.*]] = mul nsw i64 [[DIV70]], [[CONV77]]205// CHECK-NEXT:    [[SUB79:%.*]] = sub nsw i64 [[TMP34]], [[MUL78]]206// CHECK-NEXT:    [[TMP40:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8207// CHECK-NEXT:    [[TMP41:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8208// CHECK-NEXT:    [[TMP42:%.*]] = load i32, ptr [[DOTUPPER]], align 4209// CHECK-NEXT:    [[TMP43:%.*]] = load i32, ptr [[DOTLOWER]], align 4210// CHECK-NEXT:    [[SUB80:%.*]] = sub i32 [[TMP42]], [[TMP43]]211// CHECK-NEXT:    [[SUB81:%.*]] = sub i32 [[SUB80]], 1212// CHECK-NEXT:    [[ADD82:%.*]] = add i32 [[SUB81]], 1213// CHECK-NEXT:    [[DIV83:%.*]] = udiv i32 [[ADD82]], 1214// CHECK-NEXT:    [[MUL84:%.*]] = mul i32 1, [[DIV83]]215// CHECK-NEXT:    [[MUL85:%.*]] = mul i32 [[MUL84]], 10216// CHECK-NEXT:    [[CONV86:%.*]] = zext i32 [[MUL85]] to i64217// CHECK-NEXT:    [[DIV87:%.*]] = sdiv i64 [[TMP41]], [[CONV86]]218// CHECK-NEXT:    [[TMP44:%.*]] = load i32, ptr [[DOTUPPER]], align 4219// CHECK-NEXT:    [[TMP45:%.*]] = load i32, ptr [[DOTLOWER]], align 4220// CHECK-NEXT:    [[SUB88:%.*]] = sub i32 [[TMP44]], [[TMP45]]221// CHECK-NEXT:    [[SUB89:%.*]] = sub i32 [[SUB88]], 1222// CHECK-NEXT:    [[ADD90:%.*]] = add i32 [[SUB89]], 1223// CHECK-NEXT:    [[DIV91:%.*]] = udiv i32 [[ADD90]], 1224// CHECK-NEXT:    [[MUL92:%.*]] = mul i32 1, [[DIV91]]225// CHECK-NEXT:    [[MUL93:%.*]] = mul i32 [[MUL92]], 10226// CHECK-NEXT:    [[CONV94:%.*]] = zext i32 [[MUL93]] to i64227// CHECK-NEXT:    [[MUL95:%.*]] = mul nsw i64 [[DIV87]], [[CONV94]]228// CHECK-NEXT:    [[SUB96:%.*]] = sub nsw i64 [[TMP40]], [[MUL95]]229// CHECK-NEXT:    [[DIV97:%.*]] = sdiv i64 [[SUB96]], 10230// CHECK-NEXT:    [[MUL98:%.*]] = mul nsw i64 [[DIV97]], 10231// CHECK-NEXT:    [[SUB99:%.*]] = sub nsw i64 [[SUB79]], [[MUL98]]232// CHECK-NEXT:    [[MUL100:%.*]] = mul nsw i64 [[SUB99]], 1233// CHECK-NEXT:    [[ADD101:%.*]] = add nsw i64 0, [[MUL100]]234// CHECK-NEXT:    [[CONV102:%.*]] = trunc i64 [[ADD101]] to i32235// CHECK-NEXT:    store i32 [[CONV102]], ptr [[I021]], align 4236// CHECK-NEXT:    [[TMP46:%.*]] = load i32, ptr [[I20]], align 4237// CHECK-NEXT:    [[TMP47:%.*]] = load i32, ptr [[MP_ADDR]], align 4238// CHECK-NEXT:    [[CMP103:%.*]] = icmp slt i32 [[TMP46]], [[TMP47]]239// CHECK-NEXT:    br i1 [[CMP103]], label [[OMP_BODY_NEXT:%.*]], label [[OMP_BODY_CONTINUE:%.*]]240// CHECK:       omp.body.next:241// CHECK-NEXT:    br label [[OMP_BODY_CONTINUE]]242// CHECK:       omp.body.continue:243// CHECK-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]244// CHECK:       omp.inner.for.inc:245// CHECK-NEXT:    [[TMP48:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8246// CHECK-NEXT:    [[ADD105:%.*]] = add nsw i64 [[TMP48]], 1247// CHECK-NEXT:    store i64 [[ADD105]], ptr [[DOTOMP_IV]], align 8248// CHECK-NEXT:    br label [[OMP_INNER_FOR_COND]]249// CHECK:       omp.inner.for.end:250// CHECK-NEXT:    br label [[OMP_LOOP_EXIT:%.*]]251// CHECK:       omp.loop.exit:252// CHECK-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP0]])253// CHECK-NEXT:    br label [[OMP_PRECOND_END]]254// CHECK:       omp.precond.end:255// CHECK-NEXT:    call void @__kmpc_barrier(ptr @[[GLOB3:[0-9]+]], i32 [[TMP0]])256// CHECK-NEXT:    ret void257//258//259// SIMD-ONLY0-LABEL: define {{[^@]+}}@collapsed260// SIMD-ONLY0-SAME: (i32 noundef [[MP:%.*]]) #[[ATTR0:[0-9]+]] {261// SIMD-ONLY0-NEXT:  entry:262// SIMD-ONLY0-NEXT:    [[MP_ADDR:%.*]] = alloca i32, align 4263// SIMD-ONLY0-NEXT:    [[J:%.*]] = alloca i32, align 4264// SIMD-ONLY0-NEXT:    [[I:%.*]] = alloca i32, align 4265// SIMD-ONLY0-NEXT:    [[I0:%.*]] = alloca i32, align 4266// SIMD-ONLY0-NEXT:    store i32 [[MP]], ptr [[MP_ADDR]], align 4267// SIMD-ONLY0-NEXT:    store i32 0, ptr [[J]], align 4268// SIMD-ONLY0-NEXT:    br label [[FOR_COND:%.*]]269// SIMD-ONLY0:       for.cond:270// SIMD-ONLY0-NEXT:    [[TMP0:%.*]] = load i32, ptr [[J]], align 4271// SIMD-ONLY0-NEXT:    [[TMP1:%.*]] = load i32, ptr [[MP_ADDR]], align 4272// SIMD-ONLY0-NEXT:    [[CMP:%.*]] = icmp slt i32 [[TMP0]], [[TMP1]]273// SIMD-ONLY0-NEXT:    br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END12:%.*]]274// SIMD-ONLY0:       for.body:275// SIMD-ONLY0-NEXT:    [[TMP2:%.*]] = load i32, ptr [[J]], align 4276// SIMD-ONLY0-NEXT:    store i32 [[TMP2]], ptr [[I]], align 4277// SIMD-ONLY0-NEXT:    br label [[FOR_COND1:%.*]]278// SIMD-ONLY0:       for.cond1:279// SIMD-ONLY0-NEXT:    [[TMP3:%.*]] = load i32, ptr [[I]], align 4280// SIMD-ONLY0-NEXT:    [[TMP4:%.*]] = load i32, ptr [[MP_ADDR]], align 4281// SIMD-ONLY0-NEXT:    [[CMP2:%.*]] = icmp slt i32 [[TMP3]], [[TMP4]]282// SIMD-ONLY0-NEXT:    br i1 [[CMP2]], label [[FOR_BODY3:%.*]], label [[FOR_END9:%.*]]283// SIMD-ONLY0:       for.body3:284// SIMD-ONLY0-NEXT:    store i32 0, ptr [[I0]], align 4285// SIMD-ONLY0-NEXT:    br label [[FOR_COND4:%.*]]286// SIMD-ONLY0:       for.cond4:287// SIMD-ONLY0-NEXT:    [[TMP5:%.*]] = load i32, ptr [[I0]], align 4288// SIMD-ONLY0-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[TMP5]], 10289// SIMD-ONLY0-NEXT:    br i1 [[CMP5]], label [[FOR_BODY6:%.*]], label [[FOR_END:%.*]]290// SIMD-ONLY0:       for.body6:291// SIMD-ONLY0-NEXT:    br label [[FOR_INC:%.*]]292// SIMD-ONLY0:       for.inc:293// SIMD-ONLY0-NEXT:    [[TMP6:%.*]] = load i32, ptr [[I0]], align 4294// SIMD-ONLY0-NEXT:    [[INC:%.*]] = add nsw i32 [[TMP6]], 1295// SIMD-ONLY0-NEXT:    store i32 [[INC]], ptr [[I0]], align 4296// SIMD-ONLY0-NEXT:    br label [[FOR_COND4]], !llvm.loop [[LOOP2:![0-9]+]]297// SIMD-ONLY0:       for.end:298// SIMD-ONLY0-NEXT:    br label [[FOR_INC7:%.*]]299// SIMD-ONLY0:       for.inc7:300// SIMD-ONLY0-NEXT:    [[TMP7:%.*]] = load i32, ptr [[I]], align 4301// SIMD-ONLY0-NEXT:    [[INC8:%.*]] = add nsw i32 [[TMP7]], 1302// SIMD-ONLY0-NEXT:    store i32 [[INC8]], ptr [[I]], align 4303// SIMD-ONLY0-NEXT:    br label [[FOR_COND1]], !llvm.loop [[LOOP4:![0-9]+]]304// SIMD-ONLY0:       for.end9:305// SIMD-ONLY0-NEXT:    br label [[FOR_INC10:%.*]]306// SIMD-ONLY0:       for.inc10:307// SIMD-ONLY0-NEXT:    [[TMP8:%.*]] = load i32, ptr [[J]], align 4308// SIMD-ONLY0-NEXT:    [[INC11:%.*]] = add nsw i32 [[TMP8]], 1309// SIMD-ONLY0-NEXT:    store i32 [[INC11]], ptr [[J]], align 4310// SIMD-ONLY0-NEXT:    br label [[FOR_COND]], !llvm.loop [[LOOP5:![0-9]+]]311// SIMD-ONLY0:       for.end12:312// SIMD-ONLY0-NEXT:    ret void313//314