2329 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --include-generated-funcs --replace-value-regex "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _ --version 52// expected-no-diagnostics3 4// Check code generation5// RUN: %clang_cc1 -verify -triple x86_64-pc-linux-gnu -std=c++20 -fclang-abi-compat=latest -fopenmp -fopenmp-version=60 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK16 7// Check same results after serialization round-trip8// RUN: %clang_cc1 -verify -triple x86_64-pc-linux-gnu -std=c++20 -fclang-abi-compat=latest -fopenmp -fopenmp-version=60 -emit-pch -o %t %s9// RUN: %clang_cc1 -verify -triple x86_64-pc-linux-gnu -std=c++20 -fclang-abi-compat=latest -fopenmp -fopenmp-version=60 -include-pch %t -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK210 11#ifndef HEADER12#define HEADER13 14//placeholder for loop body code.15extern "C" void body(...) {}16 17extern "C" void foo1(int start1, int end1, int step1, int start2, int end2, int step2) {18 int i,j;19 #pragma omp fuse20 {21 for(i = start1; i < end1; i += step1) body(i);22 for(j = start2; j < end2; j += step2) body(j);23 }24 25}26 27template <typename T>28void foo2(T start, T end, T step){29 T i,j,k;30 #pragma omp fuse31 {32 for(i = start; i < end; i += step) body(i);33 for(j = end; j > start; j -= step) body(j);34 for(k = start+step; k < end+step; k += step) body(k);35 }36}37 38extern "C" void tfoo2() {39 foo2<int>(0, 64, 4);40}41 42extern "C" void foo3() {43 double arr[256];44 #pragma omp fuse45 {46 #pragma omp fuse47 {48 for(int i = 0; i < 128; ++i) body(i);49 for(int j = 0; j < 256; j+=2) body(j);50 }51 for(int c = 42; auto &&v: arr) body(c,v);52 for(int cc = 37; auto &&vv: arr) body(cc, vv);53 }54}55 56extern "C" void foo4() {57 double arr[256];58 59 #pragma omp fuse looprange(2,2)60 {61 for(int i = 0; i < 128; ++i) body(i);62 for(int j = 0; j < 256; j+=2) body(j);63 for(int k = 0; k < 64; ++k) body(k);64 for(int c = 42; auto &&v: arr) body(c,v);65 }66}67 68// This exemplifies the usage of loop transformations that generate69// more than top level canonical loop nests (e.g split, loopranged fuse...)70extern "C" void foo5() {71 double arr[256];72 #pragma omp fuse looprange(2,2)73 {74 #pragma omp fuse looprange(2,2)75 {76 for(int i = 0; i < 128; ++i) body(i);77 for(int j = 0; j < 256; j+=2) body(j);78 for(int k = 0; k < 512; ++k) body(k);79 }80 for(int c = 42; auto &&v: arr) body(c,v);81 for(int cc = 37; auto &&vv: arr) body(cc, vv);82 }83}84 85 86#endif87// CHECK1-LABEL: define dso_local void @body(88// CHECK1-SAME: ...) #[[ATTR0:[0-9]+]] {89// CHECK1-NEXT: [[ENTRY:.*:]]90// CHECK1-NEXT: ret void91//92//93// CHECK1-LABEL: define dso_local void @foo1(94// CHECK1-SAME: i32 noundef [[START1:%.*]], i32 noundef [[END1:%.*]], i32 noundef [[STEP1:%.*]], i32 noundef [[START2:%.*]], i32 noundef [[END2:%.*]], i32 noundef [[STEP2:%.*]]) #[[ATTR0]] {95// CHECK1-NEXT: [[ENTRY:.*:]]96// CHECK1-NEXT: [[START1_ADDR:%.*]] = alloca i32, align 497// CHECK1-NEXT: [[END1_ADDR:%.*]] = alloca i32, align 498// CHECK1-NEXT: [[STEP1_ADDR:%.*]] = alloca i32, align 499// CHECK1-NEXT: [[START2_ADDR:%.*]] = alloca i32, align 4100// CHECK1-NEXT: [[END2_ADDR:%.*]] = alloca i32, align 4101// CHECK1-NEXT: [[STEP2_ADDR:%.*]] = alloca i32, align 4102// CHECK1-NEXT: [[I:%.*]] = alloca i32, align 4103// CHECK1-NEXT: [[J:%.*]] = alloca i32, align 4104// CHECK1-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4105// CHECK1-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4106// CHECK1-NEXT: [[DOTNEW_STEP:%.*]] = alloca i32, align 4107// CHECK1-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 4108// CHECK1-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 4109// CHECK1-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 4110// CHECK1-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 4111// CHECK1-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 4112// CHECK1-NEXT: [[DOTCAPTURE_EXPR_6:%.*]] = alloca i32, align 4113// CHECK1-NEXT: [[DOTCAPTURE_EXPR_7:%.*]] = alloca i32, align 4114// CHECK1-NEXT: [[DOTNEW_STEP8:%.*]] = alloca i32, align 4115// CHECK1-NEXT: [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 4116// CHECK1-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 4117// CHECK1-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 4118// CHECK1-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 4119// CHECK1-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 4120// CHECK1-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 4121// CHECK1-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 4122// CHECK1-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 4123// CHECK1-NEXT: store i32 [[START1]], ptr [[START1_ADDR]], align 4124// CHECK1-NEXT: store i32 [[END1]], ptr [[END1_ADDR]], align 4125// CHECK1-NEXT: store i32 [[STEP1]], ptr [[STEP1_ADDR]], align 4126// CHECK1-NEXT: store i32 [[START2]], ptr [[START2_ADDR]], align 4127// CHECK1-NEXT: store i32 [[END2]], ptr [[END2_ADDR]], align 4128// CHECK1-NEXT: store i32 [[STEP2]], ptr [[STEP2_ADDR]], align 4129// CHECK1-NEXT: [[TMP0:%.*]] = load i32, ptr [[START1_ADDR]], align 4130// CHECK1-NEXT: store i32 [[TMP0]], ptr [[I]], align 4131// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[START1_ADDR]], align 4132// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTCAPTURE_EXPR_]], align 4133// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[END1_ADDR]], align 4134// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_1]], align 4135// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[STEP1_ADDR]], align 4136// CHECK1-NEXT: store i32 [[TMP3]], ptr [[DOTNEW_STEP]], align 4137// CHECK1-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4138// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4139// CHECK1-NEXT: [[SUB:%.*]] = sub i32 [[TMP4]], [[TMP5]]140// CHECK1-NEXT: [[SUB3:%.*]] = sub i32 [[SUB]], 1141// CHECK1-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 4142// CHECK1-NEXT: [[ADD:%.*]] = add i32 [[SUB3]], [[TMP6]]143// CHECK1-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 4144// CHECK1-NEXT: [[DIV:%.*]] = udiv i32 [[ADD]], [[TMP7]]145// CHECK1-NEXT: [[SUB4:%.*]] = sub i32 [[DIV]], 1146// CHECK1-NEXT: store i32 [[SUB4]], ptr [[DOTCAPTURE_EXPR_2]], align 4147// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 4148// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 4149// CHECK1-NEXT: [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4150// CHECK1-NEXT: [[ADD5:%.*]] = add i32 [[TMP8]], 1151// CHECK1-NEXT: store i32 [[ADD5]], ptr [[DOTOMP_NI0]], align 4152// CHECK1-NEXT: [[TMP9:%.*]] = load i32, ptr [[START2_ADDR]], align 4153// CHECK1-NEXT: store i32 [[TMP9]], ptr [[J]], align 4154// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[START2_ADDR]], align 4155// CHECK1-NEXT: store i32 [[TMP10]], ptr [[DOTCAPTURE_EXPR_6]], align 4156// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[END2_ADDR]], align 4157// CHECK1-NEXT: store i32 [[TMP11]], ptr [[DOTCAPTURE_EXPR_7]], align 4158// CHECK1-NEXT: [[TMP12:%.*]] = load i32, ptr [[STEP2_ADDR]], align 4159// CHECK1-NEXT: store i32 [[TMP12]], ptr [[DOTNEW_STEP8]], align 4160// CHECK1-NEXT: [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_7]], align 4161// CHECK1-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_6]], align 4162// CHECK1-NEXT: [[SUB10:%.*]] = sub i32 [[TMP13]], [[TMP14]]163// CHECK1-NEXT: [[SUB11:%.*]] = sub i32 [[SUB10]], 1164// CHECK1-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 4165// CHECK1-NEXT: [[ADD12:%.*]] = add i32 [[SUB11]], [[TMP15]]166// CHECK1-NEXT: [[TMP16:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 4167// CHECK1-NEXT: [[DIV13:%.*]] = udiv i32 [[ADD12]], [[TMP16]]168// CHECK1-NEXT: [[SUB14:%.*]] = sub i32 [[DIV13]], 1169// CHECK1-NEXT: store i32 [[SUB14]], ptr [[DOTCAPTURE_EXPR_9]], align 4170// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 4171// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 4172// CHECK1-NEXT: [[TMP17:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 4173// CHECK1-NEXT: [[ADD15:%.*]] = add i32 [[TMP17]], 1174// CHECK1-NEXT: store i32 [[ADD15]], ptr [[DOTOMP_NI1]], align 4175// CHECK1-NEXT: [[TMP18:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 4176// CHECK1-NEXT: store i32 [[TMP18]], ptr [[DOTOMP_TEMP_1]], align 4177// CHECK1-NEXT: [[TMP19:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4178// CHECK1-NEXT: [[TMP20:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4179// CHECK1-NEXT: [[CMP:%.*]] = icmp ugt i32 [[TMP19]], [[TMP20]]180// CHECK1-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]181// CHECK1: [[COND_TRUE]]:182// CHECK1-NEXT: [[TMP21:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4183// CHECK1-NEXT: br label %[[COND_END:.*]]184// CHECK1: [[COND_FALSE]]:185// CHECK1-NEXT: [[TMP22:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4186// CHECK1-NEXT: br label %[[COND_END]]187// CHECK1: [[COND_END]]:188// CHECK1-NEXT: [[COND:%.*]] = phi i32 [ [[TMP21]], %[[COND_TRUE]] ], [ [[TMP22]], %[[COND_FALSE]] ]189// CHECK1-NEXT: store i32 [[COND]], ptr [[DOTOMP_FUSE_MAX]], align 4190// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 4191// CHECK1-NEXT: br label %[[FOR_COND:.*]]192// CHECK1: [[FOR_COND]]:193// CHECK1-NEXT: [[TMP23:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4194// CHECK1-NEXT: [[TMP24:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 4195// CHECK1-NEXT: [[CMP16:%.*]] = icmp ult i32 [[TMP23]], [[TMP24]]196// CHECK1-NEXT: br i1 [[CMP16]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]197// CHECK1: [[FOR_BODY]]:198// CHECK1-NEXT: [[TMP25:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4199// CHECK1-NEXT: [[TMP26:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 4200// CHECK1-NEXT: [[CMP17:%.*]] = icmp ult i32 [[TMP25]], [[TMP26]]201// CHECK1-NEXT: br i1 [[CMP17]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]202// CHECK1: [[IF_THEN]]:203// CHECK1-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 4204// CHECK1-NEXT: [[TMP28:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 4205// CHECK1-NEXT: [[TMP29:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4206// CHECK1-NEXT: [[MUL:%.*]] = mul i32 [[TMP28]], [[TMP29]]207// CHECK1-NEXT: [[ADD18:%.*]] = add i32 [[TMP27]], [[MUL]]208// CHECK1-NEXT: store i32 [[ADD18]], ptr [[DOTOMP_IV0]], align 4209// CHECK1-NEXT: [[TMP30:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4210// CHECK1-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 4211// CHECK1-NEXT: [[TMP32:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 4212// CHECK1-NEXT: [[MUL19:%.*]] = mul i32 [[TMP31]], [[TMP32]]213// CHECK1-NEXT: [[ADD20:%.*]] = add i32 [[TMP30]], [[MUL19]]214// CHECK1-NEXT: store i32 [[ADD20]], ptr [[I]], align 4215// CHECK1-NEXT: [[TMP33:%.*]] = load i32, ptr [[I]], align 4216// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP33]])217// CHECK1-NEXT: br label %[[IF_END]]218// CHECK1: [[IF_END]]:219// CHECK1-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4220// CHECK1-NEXT: [[TMP35:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4221// CHECK1-NEXT: [[CMP21:%.*]] = icmp ult i32 [[TMP34]], [[TMP35]]222// CHECK1-NEXT: br i1 [[CMP21]], label %[[IF_THEN22:.*]], label %[[IF_END27:.*]]223// CHECK1: [[IF_THEN22]]:224// CHECK1-NEXT: [[TMP36:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 4225// CHECK1-NEXT: [[TMP37:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 4226// CHECK1-NEXT: [[TMP38:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4227// CHECK1-NEXT: [[MUL23:%.*]] = mul i32 [[TMP37]], [[TMP38]]228// CHECK1-NEXT: [[ADD24:%.*]] = add i32 [[TMP36]], [[MUL23]]229// CHECK1-NEXT: store i32 [[ADD24]], ptr [[DOTOMP_IV1]], align 4230// CHECK1-NEXT: [[TMP39:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_6]], align 4231// CHECK1-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 4232// CHECK1-NEXT: [[TMP41:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 4233// CHECK1-NEXT: [[MUL25:%.*]] = mul i32 [[TMP40]], [[TMP41]]234// CHECK1-NEXT: [[ADD26:%.*]] = add i32 [[TMP39]], [[MUL25]]235// CHECK1-NEXT: store i32 [[ADD26]], ptr [[J]], align 4236// CHECK1-NEXT: [[TMP42:%.*]] = load i32, ptr [[J]], align 4237// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP42]])238// CHECK1-NEXT: br label %[[IF_END27]]239// CHECK1: [[IF_END27]]:240// CHECK1-NEXT: br label %[[FOR_INC:.*]]241// CHECK1: [[FOR_INC]]:242// CHECK1-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4243// CHECK1-NEXT: [[INC:%.*]] = add i32 [[TMP43]], 1244// CHECK1-NEXT: store i32 [[INC]], ptr [[DOTOMP_FUSE_INDEX]], align 4245// CHECK1-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP3:![0-9]+]]246// CHECK1: [[FOR_END]]:247// CHECK1-NEXT: ret void248//249//250// CHECK1-LABEL: define dso_local void @tfoo2(251// CHECK1-SAME: ) #[[ATTR0]] {252// CHECK1-NEXT: [[ENTRY:.*:]]253// CHECK1-NEXT: call void @_Z4foo2IiEvT_S0_S0_(i32 noundef 0, i32 noundef 64, i32 noundef 4)254// CHECK1-NEXT: ret void255//256//257// CHECK1-LABEL: define linkonce_odr void @_Z4foo2IiEvT_S0_S0_(258// CHECK1-SAME: i32 noundef [[START:%.*]], i32 noundef [[END:%.*]], i32 noundef [[STEP:%.*]]) #[[ATTR0]] comdat {259// CHECK1-NEXT: [[ENTRY:.*:]]260// CHECK1-NEXT: [[START_ADDR:%.*]] = alloca i32, align 4261// CHECK1-NEXT: [[END_ADDR:%.*]] = alloca i32, align 4262// CHECK1-NEXT: [[STEP_ADDR:%.*]] = alloca i32, align 4263// CHECK1-NEXT: [[I:%.*]] = alloca i32, align 4264// CHECK1-NEXT: [[J:%.*]] = alloca i32, align 4265// CHECK1-NEXT: [[K:%.*]] = alloca i32, align 4266// CHECK1-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4267// CHECK1-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4268// CHECK1-NEXT: [[DOTNEW_STEP:%.*]] = alloca i32, align 4269// CHECK1-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 4270// CHECK1-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 4271// CHECK1-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 4272// CHECK1-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 4273// CHECK1-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 4274// CHECK1-NEXT: [[DOTCAPTURE_EXPR_6:%.*]] = alloca i32, align 4275// CHECK1-NEXT: [[DOTCAPTURE_EXPR_7:%.*]] = alloca i32, align 4276// CHECK1-NEXT: [[DOTNEW_STEP8:%.*]] = alloca i32, align 4277// CHECK1-NEXT: [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 4278// CHECK1-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 4279// CHECK1-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 4280// CHECK1-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 4281// CHECK1-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 4282// CHECK1-NEXT: [[DOTCAPTURE_EXPR_17:%.*]] = alloca i32, align 4283// CHECK1-NEXT: [[DOTCAPTURE_EXPR_19:%.*]] = alloca i32, align 4284// CHECK1-NEXT: [[DOTNEW_STEP21:%.*]] = alloca i32, align 4285// CHECK1-NEXT: [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 4286// CHECK1-NEXT: [[DOTOMP_LB2:%.*]] = alloca i32, align 4287// CHECK1-NEXT: [[DOTOMP_ST2:%.*]] = alloca i32, align 4288// CHECK1-NEXT: [[DOTOMP_NI2:%.*]] = alloca i32, align 4289// CHECK1-NEXT: [[DOTOMP_IV2:%.*]] = alloca i32, align 4290// CHECK1-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 4291// CHECK1-NEXT: [[DOTOMP_TEMP_2:%.*]] = alloca i32, align 4292// CHECK1-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 4293// CHECK1-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 4294// CHECK1-NEXT: store i32 [[START]], ptr [[START_ADDR]], align 4295// CHECK1-NEXT: store i32 [[END]], ptr [[END_ADDR]], align 4296// CHECK1-NEXT: store i32 [[STEP]], ptr [[STEP_ADDR]], align 4297// CHECK1-NEXT: [[TMP0:%.*]] = load i32, ptr [[START_ADDR]], align 4298// CHECK1-NEXT: store i32 [[TMP0]], ptr [[I]], align 4299// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[START_ADDR]], align 4300// CHECK1-NEXT: store i32 [[TMP1]], ptr [[DOTCAPTURE_EXPR_]], align 4301// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[END_ADDR]], align 4302// CHECK1-NEXT: store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_1]], align 4303// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[STEP_ADDR]], align 4304// CHECK1-NEXT: store i32 [[TMP3]], ptr [[DOTNEW_STEP]], align 4305// CHECK1-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4306// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4307// CHECK1-NEXT: [[SUB:%.*]] = sub i32 [[TMP4]], [[TMP5]]308// CHECK1-NEXT: [[SUB3:%.*]] = sub i32 [[SUB]], 1309// CHECK1-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 4310// CHECK1-NEXT: [[ADD:%.*]] = add i32 [[SUB3]], [[TMP6]]311// CHECK1-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 4312// CHECK1-NEXT: [[DIV:%.*]] = udiv i32 [[ADD]], [[TMP7]]313// CHECK1-NEXT: [[SUB4:%.*]] = sub i32 [[DIV]], 1314// CHECK1-NEXT: store i32 [[SUB4]], ptr [[DOTCAPTURE_EXPR_2]], align 4315// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 4316// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 4317// CHECK1-NEXT: [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4318// CHECK1-NEXT: [[ADD5:%.*]] = add i32 [[TMP8]], 1319// CHECK1-NEXT: store i32 [[ADD5]], ptr [[DOTOMP_NI0]], align 4320// CHECK1-NEXT: [[TMP9:%.*]] = load i32, ptr [[END_ADDR]], align 4321// CHECK1-NEXT: store i32 [[TMP9]], ptr [[J]], align 4322// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[END_ADDR]], align 4323// CHECK1-NEXT: store i32 [[TMP10]], ptr [[DOTCAPTURE_EXPR_6]], align 4324// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[START_ADDR]], align 4325// CHECK1-NEXT: store i32 [[TMP11]], ptr [[DOTCAPTURE_EXPR_7]], align 4326// CHECK1-NEXT: [[TMP12:%.*]] = load i32, ptr [[STEP_ADDR]], align 4327// CHECK1-NEXT: store i32 [[TMP12]], ptr [[DOTNEW_STEP8]], align 4328// CHECK1-NEXT: [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_6]], align 4329// CHECK1-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_7]], align 4330// CHECK1-NEXT: [[SUB10:%.*]] = sub i32 [[TMP13]], [[TMP14]]331// CHECK1-NEXT: [[SUB11:%.*]] = sub i32 [[SUB10]], 1332// CHECK1-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 4333// CHECK1-NEXT: [[ADD12:%.*]] = add i32 [[SUB11]], [[TMP15]]334// CHECK1-NEXT: [[TMP16:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 4335// CHECK1-NEXT: [[DIV13:%.*]] = udiv i32 [[ADD12]], [[TMP16]]336// CHECK1-NEXT: [[SUB14:%.*]] = sub i32 [[DIV13]], 1337// CHECK1-NEXT: store i32 [[SUB14]], ptr [[DOTCAPTURE_EXPR_9]], align 4338// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 4339// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 4340// CHECK1-NEXT: [[TMP17:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 4341// CHECK1-NEXT: [[ADD15:%.*]] = add i32 [[TMP17]], 1342// CHECK1-NEXT: store i32 [[ADD15]], ptr [[DOTOMP_NI1]], align 4343// CHECK1-NEXT: [[TMP18:%.*]] = load i32, ptr [[START_ADDR]], align 4344// CHECK1-NEXT: [[TMP19:%.*]] = load i32, ptr [[STEP_ADDR]], align 4345// CHECK1-NEXT: [[ADD16:%.*]] = add nsw i32 [[TMP18]], [[TMP19]]346// CHECK1-NEXT: store i32 [[ADD16]], ptr [[K]], align 4347// CHECK1-NEXT: [[TMP20:%.*]] = load i32, ptr [[START_ADDR]], align 4348// CHECK1-NEXT: [[TMP21:%.*]] = load i32, ptr [[STEP_ADDR]], align 4349// CHECK1-NEXT: [[ADD18:%.*]] = add nsw i32 [[TMP20]], [[TMP21]]350// CHECK1-NEXT: store i32 [[ADD18]], ptr [[DOTCAPTURE_EXPR_17]], align 4351// CHECK1-NEXT: [[TMP22:%.*]] = load i32, ptr [[END_ADDR]], align 4352// CHECK1-NEXT: [[TMP23:%.*]] = load i32, ptr [[STEP_ADDR]], align 4353// CHECK1-NEXT: [[ADD20:%.*]] = add nsw i32 [[TMP22]], [[TMP23]]354// CHECK1-NEXT: store i32 [[ADD20]], ptr [[DOTCAPTURE_EXPR_19]], align 4355// CHECK1-NEXT: [[TMP24:%.*]] = load i32, ptr [[STEP_ADDR]], align 4356// CHECK1-NEXT: store i32 [[TMP24]], ptr [[DOTNEW_STEP21]], align 4357// CHECK1-NEXT: [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_19]], align 4358// CHECK1-NEXT: [[TMP26:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_17]], align 4359// CHECK1-NEXT: [[SUB23:%.*]] = sub i32 [[TMP25]], [[TMP26]]360// CHECK1-NEXT: [[SUB24:%.*]] = sub i32 [[SUB23]], 1361// CHECK1-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTNEW_STEP21]], align 4362// CHECK1-NEXT: [[ADD25:%.*]] = add i32 [[SUB24]], [[TMP27]]363// CHECK1-NEXT: [[TMP28:%.*]] = load i32, ptr [[DOTNEW_STEP21]], align 4364// CHECK1-NEXT: [[DIV26:%.*]] = udiv i32 [[ADD25]], [[TMP28]]365// CHECK1-NEXT: [[SUB27:%.*]] = sub i32 [[DIV26]], 1366// CHECK1-NEXT: store i32 [[SUB27]], ptr [[DOTCAPTURE_EXPR_22]], align 4367// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB2]], align 4368// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST2]], align 4369// CHECK1-NEXT: [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 4370// CHECK1-NEXT: [[ADD28:%.*]] = add i32 [[TMP29]], 1371// CHECK1-NEXT: store i32 [[ADD28]], ptr [[DOTOMP_NI2]], align 4372// CHECK1-NEXT: [[TMP30:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 4373// CHECK1-NEXT: store i32 [[TMP30]], ptr [[DOTOMP_TEMP_1]], align 4374// CHECK1-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4375// CHECK1-NEXT: [[TMP32:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4376// CHECK1-NEXT: [[CMP:%.*]] = icmp ugt i32 [[TMP31]], [[TMP32]]377// CHECK1-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]378// CHECK1: [[COND_TRUE]]:379// CHECK1-NEXT: [[TMP33:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4380// CHECK1-NEXT: br label %[[COND_END:.*]]381// CHECK1: [[COND_FALSE]]:382// CHECK1-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4383// CHECK1-NEXT: br label %[[COND_END]]384// CHECK1: [[COND_END]]:385// CHECK1-NEXT: [[COND:%.*]] = phi i32 [ [[TMP33]], %[[COND_TRUE]] ], [ [[TMP34]], %[[COND_FALSE]] ]386// CHECK1-NEXT: store i32 [[COND]], ptr [[DOTOMP_TEMP_2]], align 4387// CHECK1-NEXT: [[TMP35:%.*]] = load i32, ptr [[DOTOMP_TEMP_2]], align 4388// CHECK1-NEXT: [[TMP36:%.*]] = load i32, ptr [[DOTOMP_NI2]], align 4389// CHECK1-NEXT: [[CMP29:%.*]] = icmp ugt i32 [[TMP35]], [[TMP36]]390// CHECK1-NEXT: br i1 [[CMP29]], label %[[COND_TRUE30:.*]], label %[[COND_FALSE31:.*]]391// CHECK1: [[COND_TRUE30]]:392// CHECK1-NEXT: [[TMP37:%.*]] = load i32, ptr [[DOTOMP_TEMP_2]], align 4393// CHECK1-NEXT: br label %[[COND_END32:.*]]394// CHECK1: [[COND_FALSE31]]:395// CHECK1-NEXT: [[TMP38:%.*]] = load i32, ptr [[DOTOMP_NI2]], align 4396// CHECK1-NEXT: br label %[[COND_END32]]397// CHECK1: [[COND_END32]]:398// CHECK1-NEXT: [[COND33:%.*]] = phi i32 [ [[TMP37]], %[[COND_TRUE30]] ], [ [[TMP38]], %[[COND_FALSE31]] ]399// CHECK1-NEXT: store i32 [[COND33]], ptr [[DOTOMP_FUSE_MAX]], align 4400// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 4401// CHECK1-NEXT: br label %[[FOR_COND:.*]]402// CHECK1: [[FOR_COND]]:403// CHECK1-NEXT: [[TMP39:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4404// CHECK1-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 4405// CHECK1-NEXT: [[CMP34:%.*]] = icmp ult i32 [[TMP39]], [[TMP40]]406// CHECK1-NEXT: br i1 [[CMP34]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]407// CHECK1: [[FOR_BODY]]:408// CHECK1-NEXT: [[TMP41:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4409// CHECK1-NEXT: [[TMP42:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 4410// CHECK1-NEXT: [[CMP35:%.*]] = icmp ult i32 [[TMP41]], [[TMP42]]411// CHECK1-NEXT: br i1 [[CMP35]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]412// CHECK1: [[IF_THEN]]:413// CHECK1-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 4414// CHECK1-NEXT: [[TMP44:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 4415// CHECK1-NEXT: [[TMP45:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4416// CHECK1-NEXT: [[MUL:%.*]] = mul i32 [[TMP44]], [[TMP45]]417// CHECK1-NEXT: [[ADD36:%.*]] = add i32 [[TMP43]], [[MUL]]418// CHECK1-NEXT: store i32 [[ADD36]], ptr [[DOTOMP_IV0]], align 4419// CHECK1-NEXT: [[TMP46:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4420// CHECK1-NEXT: [[TMP47:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 4421// CHECK1-NEXT: [[TMP48:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 4422// CHECK1-NEXT: [[MUL37:%.*]] = mul i32 [[TMP47]], [[TMP48]]423// CHECK1-NEXT: [[ADD38:%.*]] = add i32 [[TMP46]], [[MUL37]]424// CHECK1-NEXT: store i32 [[ADD38]], ptr [[I]], align 4425// CHECK1-NEXT: [[TMP49:%.*]] = load i32, ptr [[I]], align 4426// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP49]])427// CHECK1-NEXT: br label %[[IF_END]]428// CHECK1: [[IF_END]]:429// CHECK1-NEXT: [[TMP50:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4430// CHECK1-NEXT: [[TMP51:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4431// CHECK1-NEXT: [[CMP39:%.*]] = icmp ult i32 [[TMP50]], [[TMP51]]432// CHECK1-NEXT: br i1 [[CMP39]], label %[[IF_THEN40:.*]], label %[[IF_END45:.*]]433// CHECK1: [[IF_THEN40]]:434// CHECK1-NEXT: [[TMP52:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 4435// CHECK1-NEXT: [[TMP53:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 4436// CHECK1-NEXT: [[TMP54:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4437// CHECK1-NEXT: [[MUL41:%.*]] = mul i32 [[TMP53]], [[TMP54]]438// CHECK1-NEXT: [[ADD42:%.*]] = add i32 [[TMP52]], [[MUL41]]439// CHECK1-NEXT: store i32 [[ADD42]], ptr [[DOTOMP_IV1]], align 4440// CHECK1-NEXT: [[TMP55:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_6]], align 4441// CHECK1-NEXT: [[TMP56:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 4442// CHECK1-NEXT: [[TMP57:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 4443// CHECK1-NEXT: [[MUL43:%.*]] = mul i32 [[TMP56]], [[TMP57]]444// CHECK1-NEXT: [[SUB44:%.*]] = sub i32 [[TMP55]], [[MUL43]]445// CHECK1-NEXT: store i32 [[SUB44]], ptr [[J]], align 4446// CHECK1-NEXT: [[TMP58:%.*]] = load i32, ptr [[J]], align 4447// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP58]])448// CHECK1-NEXT: br label %[[IF_END45]]449// CHECK1: [[IF_END45]]:450// CHECK1-NEXT: [[TMP59:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4451// CHECK1-NEXT: [[TMP60:%.*]] = load i32, ptr [[DOTOMP_NI2]], align 4452// CHECK1-NEXT: [[CMP46:%.*]] = icmp ult i32 [[TMP59]], [[TMP60]]453// CHECK1-NEXT: br i1 [[CMP46]], label %[[IF_THEN47:.*]], label %[[IF_END52:.*]]454// CHECK1: [[IF_THEN47]]:455// CHECK1-NEXT: [[TMP61:%.*]] = load i32, ptr [[DOTOMP_LB2]], align 4456// CHECK1-NEXT: [[TMP62:%.*]] = load i32, ptr [[DOTOMP_ST2]], align 4457// CHECK1-NEXT: [[TMP63:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4458// CHECK1-NEXT: [[MUL48:%.*]] = mul i32 [[TMP62]], [[TMP63]]459// CHECK1-NEXT: [[ADD49:%.*]] = add i32 [[TMP61]], [[MUL48]]460// CHECK1-NEXT: store i32 [[ADD49]], ptr [[DOTOMP_IV2]], align 4461// CHECK1-NEXT: [[TMP64:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_17]], align 4462// CHECK1-NEXT: [[TMP65:%.*]] = load i32, ptr [[DOTOMP_IV2]], align 4463// CHECK1-NEXT: [[TMP66:%.*]] = load i32, ptr [[DOTNEW_STEP21]], align 4464// CHECK1-NEXT: [[MUL50:%.*]] = mul i32 [[TMP65]], [[TMP66]]465// CHECK1-NEXT: [[ADD51:%.*]] = add i32 [[TMP64]], [[MUL50]]466// CHECK1-NEXT: store i32 [[ADD51]], ptr [[K]], align 4467// CHECK1-NEXT: [[TMP67:%.*]] = load i32, ptr [[K]], align 4468// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP67]])469// CHECK1-NEXT: br label %[[IF_END52]]470// CHECK1: [[IF_END52]]:471// CHECK1-NEXT: br label %[[FOR_INC:.*]]472// CHECK1: [[FOR_INC]]:473// CHECK1-NEXT: [[TMP68:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4474// CHECK1-NEXT: [[INC:%.*]] = add i32 [[TMP68]], 1475// CHECK1-NEXT: store i32 [[INC]], ptr [[DOTOMP_FUSE_INDEX]], align 4476// CHECK1-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP5:![0-9]+]]477// CHECK1: [[FOR_END]]:478// CHECK1-NEXT: ret void479//480//481// CHECK1-LABEL: define dso_local void @foo3(482// CHECK1-SAME: ) #[[ATTR0]] {483// CHECK1-NEXT: [[ENTRY:.*:]]484// CHECK1-NEXT: [[ARR:%.*]] = alloca [256 x double], align 16485// CHECK1-NEXT: [[I:%.*]] = alloca i32, align 4486// CHECK1-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 4487// CHECK1-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 4488// CHECK1-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 4489// CHECK1-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 4490// CHECK1-NEXT: [[J:%.*]] = alloca i32, align 4491// CHECK1-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 4492// CHECK1-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 4493// CHECK1-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 4494// CHECK1-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 4495// CHECK1-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 4496// CHECK1-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 4497// CHECK1-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 4498// CHECK1-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4499// CHECK1-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4500// CHECK1-NEXT: [[DOTOMP_LB03:%.*]] = alloca i32, align 4501// CHECK1-NEXT: [[DOTOMP_ST04:%.*]] = alloca i32, align 4502// CHECK1-NEXT: [[DOTOMP_NI05:%.*]] = alloca i64, align 8503// CHECK1-NEXT: [[DOTOMP_IV06:%.*]] = alloca i32, align 4504// CHECK1-NEXT: [[C:%.*]] = alloca i32, align 4505// CHECK1-NEXT: [[__RANGE2:%.*]] = alloca ptr, align 8506// CHECK1-NEXT: [[__END2:%.*]] = alloca ptr, align 8507// CHECK1-NEXT: [[__BEGIN2:%.*]] = alloca ptr, align 8508// CHECK1-NEXT: [[DOTCAPTURE_EXPR_8:%.*]] = alloca ptr, align 8509// CHECK1-NEXT: [[DOTCAPTURE_EXPR_10:%.*]] = alloca ptr, align 8510// CHECK1-NEXT: [[DOTCAPTURE_EXPR_11:%.*]] = alloca i64, align 8511// CHECK1-NEXT: [[DOTOMP_LB116:%.*]] = alloca i64, align 8512// CHECK1-NEXT: [[DOTOMP_ST117:%.*]] = alloca i64, align 8513// CHECK1-NEXT: [[DOTOMP_NI118:%.*]] = alloca i64, align 8514// CHECK1-NEXT: [[DOTOMP_IV120:%.*]] = alloca i64, align 8515// CHECK1-NEXT: [[CC:%.*]] = alloca i32, align 4516// CHECK1-NEXT: [[__RANGE221:%.*]] = alloca ptr, align 8517// CHECK1-NEXT: [[__END222:%.*]] = alloca ptr, align 8518// CHECK1-NEXT: [[__BEGIN225:%.*]] = alloca ptr, align 8519// CHECK1-NEXT: [[DOTCAPTURE_EXPR_27:%.*]] = alloca ptr, align 8520// CHECK1-NEXT: [[DOTCAPTURE_EXPR_29:%.*]] = alloca ptr, align 8521// CHECK1-NEXT: [[DOTCAPTURE_EXPR_30:%.*]] = alloca i64, align 8522// CHECK1-NEXT: [[DOTOMP_LB2:%.*]] = alloca i64, align 8523// CHECK1-NEXT: [[DOTOMP_ST2:%.*]] = alloca i64, align 8524// CHECK1-NEXT: [[DOTOMP_NI2:%.*]] = alloca i64, align 8525// CHECK1-NEXT: [[DOTOMP_IV2:%.*]] = alloca i64, align 8526// CHECK1-NEXT: [[DOTOMP_TEMP_140:%.*]] = alloca i64, align 8527// CHECK1-NEXT: [[DOTOMP_TEMP_2:%.*]] = alloca i64, align 8528// CHECK1-NEXT: [[DOTOMP_FUSE_MAX46:%.*]] = alloca i64, align 8529// CHECK1-NEXT: [[DOTOMP_FUSE_INDEX52:%.*]] = alloca i64, align 8530// CHECK1-NEXT: [[V:%.*]] = alloca ptr, align 8531// CHECK1-NEXT: [[VV:%.*]] = alloca ptr, align 8532// CHECK1-NEXT: store i32 0, ptr [[I]], align 4533// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 4534// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 4535// CHECK1-NEXT: store i32 128, ptr [[DOTOMP_NI0]], align 4536// CHECK1-NEXT: store i32 0, ptr [[J]], align 4537// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 4538// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 4539// CHECK1-NEXT: store i32 128, ptr [[DOTOMP_NI1]], align 4540// CHECK1-NEXT: [[TMP0:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 4541// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTOMP_TEMP_1]], align 4542// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4543// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4544// CHECK1-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP1]], [[TMP2]]545// CHECK1-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]546// CHECK1: [[COND_TRUE]]:547// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4548// CHECK1-NEXT: br label %[[COND_END:.*]]549// CHECK1: [[COND_FALSE]]:550// CHECK1-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4551// CHECK1-NEXT: br label %[[COND_END]]552// CHECK1: [[COND_END]]:553// CHECK1-NEXT: [[COND:%.*]] = phi i32 [ [[TMP3]], %[[COND_TRUE]] ], [ [[TMP4]], %[[COND_FALSE]] ]554// CHECK1-NEXT: store i32 [[COND]], ptr [[DOTOMP_FUSE_MAX]], align 4555// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 4556// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 4557// CHECK1-NEXT: store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 4558// CHECK1-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4559// CHECK1-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP6]], 0560// CHECK1-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1561// CHECK1-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1562// CHECK1-NEXT: store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 4563// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB03]], align 4564// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST04]], align 4565// CHECK1-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 4566// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP7]], 1567// CHECK1-NEXT: [[CONV:%.*]] = sext i32 [[ADD]] to i64568// CHECK1-NEXT: store i64 [[CONV]], ptr [[DOTOMP_NI05]], align 8569// CHECK1-NEXT: store i32 42, ptr [[C]], align 4570// CHECK1-NEXT: store ptr [[ARR]], ptr [[__RANGE2]], align 8571// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__RANGE2]], align 8572// CHECK1-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP8]], i64 0, i64 0573// CHECK1-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY]], i64 256574// CHECK1-NEXT: store ptr [[ADD_PTR]], ptr [[__END2]], align 8575// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__RANGE2]], align 8576// CHECK1-NEXT: [[ARRAYDECAY7:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP9]], i64 0, i64 0577// CHECK1-NEXT: store ptr [[ARRAYDECAY7]], ptr [[__BEGIN2]], align 8578// CHECK1-NEXT: [[TMP10:%.*]] = load ptr, ptr [[__RANGE2]], align 8579// CHECK1-NEXT: [[ARRAYDECAY9:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP10]], i64 0, i64 0580// CHECK1-NEXT: store ptr [[ARRAYDECAY9]], ptr [[DOTCAPTURE_EXPR_8]], align 8581// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[__END2]], align 8582// CHECK1-NEXT: store ptr [[TMP11]], ptr [[DOTCAPTURE_EXPR_10]], align 8583// CHECK1-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_10]], align 8584// CHECK1-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_8]], align 8585// CHECK1-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[TMP12]] to i64586// CHECK1-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[TMP13]] to i64587// CHECK1-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]]588// CHECK1-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 8589// CHECK1-NEXT: [[SUB12:%.*]] = sub nsw i64 [[SUB_PTR_DIV]], 1590// CHECK1-NEXT: [[ADD13:%.*]] = add nsw i64 [[SUB12]], 1591// CHECK1-NEXT: [[DIV14:%.*]] = sdiv i64 [[ADD13]], 1592// CHECK1-NEXT: [[SUB15:%.*]] = sub nsw i64 [[DIV14]], 1593// CHECK1-NEXT: store i64 [[SUB15]], ptr [[DOTCAPTURE_EXPR_11]], align 8594// CHECK1-NEXT: store i64 0, ptr [[DOTOMP_LB116]], align 8595// CHECK1-NEXT: store i64 1, ptr [[DOTOMP_ST117]], align 8596// CHECK1-NEXT: [[TMP14:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_11]], align 8597// CHECK1-NEXT: [[ADD19:%.*]] = add nsw i64 [[TMP14]], 1598// CHECK1-NEXT: store i64 [[ADD19]], ptr [[DOTOMP_NI118]], align 8599// CHECK1-NEXT: store i32 37, ptr [[CC]], align 4600// CHECK1-NEXT: store ptr [[ARR]], ptr [[__RANGE221]], align 8601// CHECK1-NEXT: [[TMP15:%.*]] = load ptr, ptr [[__RANGE221]], align 8602// CHECK1-NEXT: [[ARRAYDECAY23:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP15]], i64 0, i64 0603// CHECK1-NEXT: [[ADD_PTR24:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY23]], i64 256604// CHECK1-NEXT: store ptr [[ADD_PTR24]], ptr [[__END222]], align 8605// CHECK1-NEXT: [[TMP16:%.*]] = load ptr, ptr [[__RANGE221]], align 8606// CHECK1-NEXT: [[ARRAYDECAY26:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP16]], i64 0, i64 0607// CHECK1-NEXT: store ptr [[ARRAYDECAY26]], ptr [[__BEGIN225]], align 8608// CHECK1-NEXT: [[TMP17:%.*]] = load ptr, ptr [[__RANGE221]], align 8609// CHECK1-NEXT: [[ARRAYDECAY28:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP17]], i64 0, i64 0610// CHECK1-NEXT: store ptr [[ARRAYDECAY28]], ptr [[DOTCAPTURE_EXPR_27]], align 8611// CHECK1-NEXT: [[TMP18:%.*]] = load ptr, ptr [[__END222]], align 8612// CHECK1-NEXT: store ptr [[TMP18]], ptr [[DOTCAPTURE_EXPR_29]], align 8613// CHECK1-NEXT: [[TMP19:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_29]], align 8614// CHECK1-NEXT: [[TMP20:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_27]], align 8615// CHECK1-NEXT: [[SUB_PTR_LHS_CAST31:%.*]] = ptrtoint ptr [[TMP19]] to i64616// CHECK1-NEXT: [[SUB_PTR_RHS_CAST32:%.*]] = ptrtoint ptr [[TMP20]] to i64617// CHECK1-NEXT: [[SUB_PTR_SUB33:%.*]] = sub i64 [[SUB_PTR_LHS_CAST31]], [[SUB_PTR_RHS_CAST32]]618// CHECK1-NEXT: [[SUB_PTR_DIV34:%.*]] = sdiv exact i64 [[SUB_PTR_SUB33]], 8619// CHECK1-NEXT: [[SUB35:%.*]] = sub nsw i64 [[SUB_PTR_DIV34]], 1620// CHECK1-NEXT: [[ADD36:%.*]] = add nsw i64 [[SUB35]], 1621// CHECK1-NEXT: [[DIV37:%.*]] = sdiv i64 [[ADD36]], 1622// CHECK1-NEXT: [[SUB38:%.*]] = sub nsw i64 [[DIV37]], 1623// CHECK1-NEXT: store i64 [[SUB38]], ptr [[DOTCAPTURE_EXPR_30]], align 8624// CHECK1-NEXT: store i64 0, ptr [[DOTOMP_LB2]], align 8625// CHECK1-NEXT: store i64 1, ptr [[DOTOMP_ST2]], align 8626// CHECK1-NEXT: [[TMP21:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_30]], align 8627// CHECK1-NEXT: [[ADD39:%.*]] = add nsw i64 [[TMP21]], 1628// CHECK1-NEXT: store i64 [[ADD39]], ptr [[DOTOMP_NI2]], align 8629// CHECK1-NEXT: [[TMP22:%.*]] = load i64, ptr [[DOTOMP_NI05]], align 8630// CHECK1-NEXT: store i64 [[TMP22]], ptr [[DOTOMP_TEMP_140]], align 8631// CHECK1-NEXT: [[TMP23:%.*]] = load i64, ptr [[DOTOMP_TEMP_140]], align 8632// CHECK1-NEXT: [[TMP24:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 8633// CHECK1-NEXT: [[CMP41:%.*]] = icmp sgt i64 [[TMP23]], [[TMP24]]634// CHECK1-NEXT: br i1 [[CMP41]], label %[[COND_TRUE42:.*]], label %[[COND_FALSE43:.*]]635// CHECK1: [[COND_TRUE42]]:636// CHECK1-NEXT: [[TMP25:%.*]] = load i64, ptr [[DOTOMP_TEMP_140]], align 8637// CHECK1-NEXT: br label %[[COND_END44:.*]]638// CHECK1: [[COND_FALSE43]]:639// CHECK1-NEXT: [[TMP26:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 8640// CHECK1-NEXT: br label %[[COND_END44]]641// CHECK1: [[COND_END44]]:642// CHECK1-NEXT: [[COND45:%.*]] = phi i64 [ [[TMP25]], %[[COND_TRUE42]] ], [ [[TMP26]], %[[COND_FALSE43]] ]643// CHECK1-NEXT: store i64 [[COND45]], ptr [[DOTOMP_TEMP_2]], align 8644// CHECK1-NEXT: [[TMP27:%.*]] = load i64, ptr [[DOTOMP_TEMP_2]], align 8645// CHECK1-NEXT: [[TMP28:%.*]] = load i64, ptr [[DOTOMP_NI2]], align 8646// CHECK1-NEXT: [[CMP47:%.*]] = icmp sgt i64 [[TMP27]], [[TMP28]]647// CHECK1-NEXT: br i1 [[CMP47]], label %[[COND_TRUE48:.*]], label %[[COND_FALSE49:.*]]648// CHECK1: [[COND_TRUE48]]:649// CHECK1-NEXT: [[TMP29:%.*]] = load i64, ptr [[DOTOMP_TEMP_2]], align 8650// CHECK1-NEXT: br label %[[COND_END50:.*]]651// CHECK1: [[COND_FALSE49]]:652// CHECK1-NEXT: [[TMP30:%.*]] = load i64, ptr [[DOTOMP_NI2]], align 8653// CHECK1-NEXT: br label %[[COND_END50]]654// CHECK1: [[COND_END50]]:655// CHECK1-NEXT: [[COND51:%.*]] = phi i64 [ [[TMP29]], %[[COND_TRUE48]] ], [ [[TMP30]], %[[COND_FALSE49]] ]656// CHECK1-NEXT: store i64 [[COND51]], ptr [[DOTOMP_FUSE_MAX46]], align 8657// CHECK1-NEXT: store i64 0, ptr [[DOTOMP_FUSE_INDEX52]], align 8658// CHECK1-NEXT: br label %[[FOR_COND:.*]]659// CHECK1: [[FOR_COND]]:660// CHECK1-NEXT: [[TMP31:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 8661// CHECK1-NEXT: [[TMP32:%.*]] = load i64, ptr [[DOTOMP_FUSE_MAX46]], align 8662// CHECK1-NEXT: [[CMP53:%.*]] = icmp slt i64 [[TMP31]], [[TMP32]]663// CHECK1-NEXT: br i1 [[CMP53]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]664// CHECK1: [[FOR_BODY]]:665// CHECK1-NEXT: [[TMP33:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 8666// CHECK1-NEXT: [[TMP34:%.*]] = load i64, ptr [[DOTOMP_NI05]], align 8667// CHECK1-NEXT: [[CMP54:%.*]] = icmp slt i64 [[TMP33]], [[TMP34]]668// CHECK1-NEXT: br i1 [[CMP54]], label %[[IF_THEN:.*]], label %[[IF_END74:.*]]669// CHECK1: [[IF_THEN]]:670// CHECK1-NEXT: [[TMP35:%.*]] = load i32, ptr [[DOTOMP_LB03]], align 4671// CHECK1-NEXT: [[CONV55:%.*]] = sext i32 [[TMP35]] to i64672// CHECK1-NEXT: [[TMP36:%.*]] = load i32, ptr [[DOTOMP_ST04]], align 4673// CHECK1-NEXT: [[CONV56:%.*]] = sext i32 [[TMP36]] to i64674// CHECK1-NEXT: [[TMP37:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 8675// CHECK1-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV56]], [[TMP37]]676// CHECK1-NEXT: [[ADD57:%.*]] = add nsw i64 [[CONV55]], [[MUL]]677// CHECK1-NEXT: [[CONV58:%.*]] = trunc i64 [[ADD57]] to i32678// CHECK1-NEXT: store i32 [[CONV58]], ptr [[DOTOMP_IV06]], align 4679// CHECK1-NEXT: [[TMP38:%.*]] = load i32, ptr [[DOTOMP_IV06]], align 4680// CHECK1-NEXT: [[MUL59:%.*]] = mul nsw i32 [[TMP38]], 1681// CHECK1-NEXT: [[ADD60:%.*]] = add nsw i32 0, [[MUL59]]682// CHECK1-NEXT: store i32 [[ADD60]], ptr [[DOTOMP_FUSE_INDEX]], align 4683// CHECK1-NEXT: [[TMP39:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4684// CHECK1-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 4685// CHECK1-NEXT: [[CMP61:%.*]] = icmp slt i32 [[TMP39]], [[TMP40]]686// CHECK1-NEXT: br i1 [[CMP61]], label %[[IF_THEN62:.*]], label %[[IF_END:.*]]687// CHECK1: [[IF_THEN62]]:688// CHECK1-NEXT: [[TMP41:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 4689// CHECK1-NEXT: [[TMP42:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 4690// CHECK1-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4691// CHECK1-NEXT: [[MUL63:%.*]] = mul nsw i32 [[TMP42]], [[TMP43]]692// CHECK1-NEXT: [[ADD64:%.*]] = add nsw i32 [[TMP41]], [[MUL63]]693// CHECK1-NEXT: store i32 [[ADD64]], ptr [[DOTOMP_IV0]], align 4694// CHECK1-NEXT: [[TMP44:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 4695// CHECK1-NEXT: [[MUL65:%.*]] = mul nsw i32 [[TMP44]], 1696// CHECK1-NEXT: [[ADD66:%.*]] = add nsw i32 0, [[MUL65]]697// CHECK1-NEXT: store i32 [[ADD66]], ptr [[I]], align 4698// CHECK1-NEXT: [[TMP45:%.*]] = load i32, ptr [[I]], align 4699// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP45]])700// CHECK1-NEXT: br label %[[IF_END]]701// CHECK1: [[IF_END]]:702// CHECK1-NEXT: [[TMP46:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4703// CHECK1-NEXT: [[TMP47:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4704// CHECK1-NEXT: [[CMP67:%.*]] = icmp slt i32 [[TMP46]], [[TMP47]]705// CHECK1-NEXT: br i1 [[CMP67]], label %[[IF_THEN68:.*]], label %[[IF_END73:.*]]706// CHECK1: [[IF_THEN68]]:707// CHECK1-NEXT: [[TMP48:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 4708// CHECK1-NEXT: [[TMP49:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 4709// CHECK1-NEXT: [[TMP50:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4710// CHECK1-NEXT: [[MUL69:%.*]] = mul nsw i32 [[TMP49]], [[TMP50]]711// CHECK1-NEXT: [[ADD70:%.*]] = add nsw i32 [[TMP48]], [[MUL69]]712// CHECK1-NEXT: store i32 [[ADD70]], ptr [[DOTOMP_IV1]], align 4713// CHECK1-NEXT: [[TMP51:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 4714// CHECK1-NEXT: [[MUL71:%.*]] = mul nsw i32 [[TMP51]], 2715// CHECK1-NEXT: [[ADD72:%.*]] = add nsw i32 0, [[MUL71]]716// CHECK1-NEXT: store i32 [[ADD72]], ptr [[J]], align 4717// CHECK1-NEXT: [[TMP52:%.*]] = load i32, ptr [[J]], align 4718// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP52]])719// CHECK1-NEXT: br label %[[IF_END73]]720// CHECK1: [[IF_END73]]:721// CHECK1-NEXT: br label %[[IF_END74]]722// CHECK1: [[IF_END74]]:723// CHECK1-NEXT: [[TMP53:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 8724// CHECK1-NEXT: [[TMP54:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 8725// CHECK1-NEXT: [[CMP75:%.*]] = icmp slt i64 [[TMP53]], [[TMP54]]726// CHECK1-NEXT: br i1 [[CMP75]], label %[[IF_THEN76:.*]], label %[[IF_END81:.*]]727// CHECK1: [[IF_THEN76]]:728// CHECK1-NEXT: [[TMP55:%.*]] = load i64, ptr [[DOTOMP_LB116]], align 8729// CHECK1-NEXT: [[TMP56:%.*]] = load i64, ptr [[DOTOMP_ST117]], align 8730// CHECK1-NEXT: [[TMP57:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 8731// CHECK1-NEXT: [[MUL77:%.*]] = mul nsw i64 [[TMP56]], [[TMP57]]732// CHECK1-NEXT: [[ADD78:%.*]] = add nsw i64 [[TMP55]], [[MUL77]]733// CHECK1-NEXT: store i64 [[ADD78]], ptr [[DOTOMP_IV120]], align 8734// CHECK1-NEXT: [[TMP58:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_8]], align 8735// CHECK1-NEXT: [[TMP59:%.*]] = load i64, ptr [[DOTOMP_IV120]], align 8736// CHECK1-NEXT: [[MUL79:%.*]] = mul nsw i64 [[TMP59]], 1737// CHECK1-NEXT: [[ADD_PTR80:%.*]] = getelementptr inbounds double, ptr [[TMP58]], i64 [[MUL79]]738// CHECK1-NEXT: store ptr [[ADD_PTR80]], ptr [[__BEGIN2]], align 8739// CHECK1-NEXT: [[TMP60:%.*]] = load ptr, ptr [[__BEGIN2]], align 8740// CHECK1-NEXT: store ptr [[TMP60]], ptr [[V]], align 8741// CHECK1-NEXT: [[TMP61:%.*]] = load i32, ptr [[C]], align 4742// CHECK1-NEXT: [[TMP62:%.*]] = load ptr, ptr [[V]], align 8743// CHECK1-NEXT: [[TMP63:%.*]] = load double, ptr [[TMP62]], align 8744// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP61]], double noundef [[TMP63]])745// CHECK1-NEXT: br label %[[IF_END81]]746// CHECK1: [[IF_END81]]:747// CHECK1-NEXT: [[TMP64:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 8748// CHECK1-NEXT: [[TMP65:%.*]] = load i64, ptr [[DOTOMP_NI2]], align 8749// CHECK1-NEXT: [[CMP82:%.*]] = icmp slt i64 [[TMP64]], [[TMP65]]750// CHECK1-NEXT: br i1 [[CMP82]], label %[[IF_THEN83:.*]], label %[[IF_END88:.*]]751// CHECK1: [[IF_THEN83]]:752// CHECK1-NEXT: [[TMP66:%.*]] = load i64, ptr [[DOTOMP_LB2]], align 8753// CHECK1-NEXT: [[TMP67:%.*]] = load i64, ptr [[DOTOMP_ST2]], align 8754// CHECK1-NEXT: [[TMP68:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 8755// CHECK1-NEXT: [[MUL84:%.*]] = mul nsw i64 [[TMP67]], [[TMP68]]756// CHECK1-NEXT: [[ADD85:%.*]] = add nsw i64 [[TMP66]], [[MUL84]]757// CHECK1-NEXT: store i64 [[ADD85]], ptr [[DOTOMP_IV2]], align 8758// CHECK1-NEXT: [[TMP69:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_27]], align 8759// CHECK1-NEXT: [[TMP70:%.*]] = load i64, ptr [[DOTOMP_IV2]], align 8760// CHECK1-NEXT: [[MUL86:%.*]] = mul nsw i64 [[TMP70]], 1761// CHECK1-NEXT: [[ADD_PTR87:%.*]] = getelementptr inbounds double, ptr [[TMP69]], i64 [[MUL86]]762// CHECK1-NEXT: store ptr [[ADD_PTR87]], ptr [[__BEGIN225]], align 8763// CHECK1-NEXT: [[TMP71:%.*]] = load ptr, ptr [[__BEGIN225]], align 8764// CHECK1-NEXT: store ptr [[TMP71]], ptr [[VV]], align 8765// CHECK1-NEXT: [[TMP72:%.*]] = load i32, ptr [[CC]], align 4766// CHECK1-NEXT: [[TMP73:%.*]] = load ptr, ptr [[VV]], align 8767// CHECK1-NEXT: [[TMP74:%.*]] = load double, ptr [[TMP73]], align 8768// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP72]], double noundef [[TMP74]])769// CHECK1-NEXT: br label %[[IF_END88]]770// CHECK1: [[IF_END88]]:771// CHECK1-NEXT: br label %[[FOR_INC:.*]]772// CHECK1: [[FOR_INC]]:773// CHECK1-NEXT: [[TMP75:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 8774// CHECK1-NEXT: [[INC:%.*]] = add nsw i64 [[TMP75]], 1775// CHECK1-NEXT: store i64 [[INC]], ptr [[DOTOMP_FUSE_INDEX52]], align 8776// CHECK1-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP6:![0-9]+]]777// CHECK1: [[FOR_END]]:778// CHECK1-NEXT: ret void779//780//781// CHECK1-LABEL: define dso_local void @foo4(782// CHECK1-SAME: ) #[[ATTR0]] {783// CHECK1-NEXT: [[ENTRY:.*:]]784// CHECK1-NEXT: [[ARR:%.*]] = alloca [256 x double], align 16785// CHECK1-NEXT: [[J:%.*]] = alloca i32, align 4786// CHECK1-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 4787// CHECK1-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 4788// CHECK1-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 4789// CHECK1-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 4790// CHECK1-NEXT: [[K:%.*]] = alloca i32, align 4791// CHECK1-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 4792// CHECK1-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 4793// CHECK1-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 4794// CHECK1-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 4795// CHECK1-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 4796// CHECK1-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 4797// CHECK1-NEXT: [[I:%.*]] = alloca i32, align 4798// CHECK1-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 4799// CHECK1-NEXT: [[C:%.*]] = alloca i32, align 4800// CHECK1-NEXT: [[__RANGE2:%.*]] = alloca ptr, align 8801// CHECK1-NEXT: [[__BEGIN2:%.*]] = alloca ptr, align 8802// CHECK1-NEXT: [[__END2:%.*]] = alloca ptr, align 8803// CHECK1-NEXT: [[V:%.*]] = alloca ptr, align 8804// CHECK1-NEXT: store i32 0, ptr [[J]], align 4805// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 4806// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 4807// CHECK1-NEXT: store i32 128, ptr [[DOTOMP_NI0]], align 4808// CHECK1-NEXT: store i32 0, ptr [[K]], align 4809// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 4810// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 4811// CHECK1-NEXT: store i32 64, ptr [[DOTOMP_NI1]], align 4812// CHECK1-NEXT: [[TMP0:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 4813// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTOMP_TEMP_1]], align 4814// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4815// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4816// CHECK1-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP1]], [[TMP2]]817// CHECK1-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]818// CHECK1: [[COND_TRUE]]:819// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4820// CHECK1-NEXT: br label %[[COND_END:.*]]821// CHECK1: [[COND_FALSE]]:822// CHECK1-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4823// CHECK1-NEXT: br label %[[COND_END]]824// CHECK1: [[COND_END]]:825// CHECK1-NEXT: [[COND:%.*]] = phi i32 [ [[TMP3]], %[[COND_TRUE]] ], [ [[TMP4]], %[[COND_FALSE]] ]826// CHECK1-NEXT: store i32 [[COND]], ptr [[DOTOMP_FUSE_MAX]], align 4827// CHECK1-NEXT: store i32 0, ptr [[I]], align 4828// CHECK1-NEXT: br label %[[FOR_COND:.*]]829// CHECK1: [[FOR_COND]]:830// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[I]], align 4831// CHECK1-NEXT: [[CMP1:%.*]] = icmp slt i32 [[TMP5]], 128832// CHECK1-NEXT: br i1 [[CMP1]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]833// CHECK1: [[FOR_BODY]]:834// CHECK1-NEXT: [[TMP6:%.*]] = load i32, ptr [[I]], align 4835// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP6]])836// CHECK1-NEXT: br label %[[FOR_INC:.*]]837// CHECK1: [[FOR_INC]]:838// CHECK1-NEXT: [[TMP7:%.*]] = load i32, ptr [[I]], align 4839// CHECK1-NEXT: [[INC:%.*]] = add nsw i32 [[TMP7]], 1840// CHECK1-NEXT: store i32 [[INC]], ptr [[I]], align 4841// CHECK1-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP7:![0-9]+]]842// CHECK1: [[FOR_END]]:843// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 4844// CHECK1-NEXT: br label %[[FOR_COND2:.*]]845// CHECK1: [[FOR_COND2]]:846// CHECK1-NEXT: [[TMP8:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4847// CHECK1-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 4848// CHECK1-NEXT: [[CMP3:%.*]] = icmp slt i32 [[TMP8]], [[TMP9]]849// CHECK1-NEXT: br i1 [[CMP3]], label %[[FOR_BODY4:.*]], label %[[FOR_END17:.*]]850// CHECK1: [[FOR_BODY4]]:851// CHECK1-NEXT: [[TMP10:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4852// CHECK1-NEXT: [[TMP11:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 4853// CHECK1-NEXT: [[CMP5:%.*]] = icmp slt i32 [[TMP10]], [[TMP11]]854// CHECK1-NEXT: br i1 [[CMP5]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]855// CHECK1: [[IF_THEN]]:856// CHECK1-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 4857// CHECK1-NEXT: [[TMP13:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 4858// CHECK1-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4859// CHECK1-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP13]], [[TMP14]]860// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[MUL]]861// CHECK1-NEXT: store i32 [[ADD]], ptr [[DOTOMP_IV0]], align 4862// CHECK1-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 4863// CHECK1-NEXT: [[MUL6:%.*]] = mul nsw i32 [[TMP15]], 2864// CHECK1-NEXT: [[ADD7:%.*]] = add nsw i32 0, [[MUL6]]865// CHECK1-NEXT: store i32 [[ADD7]], ptr [[J]], align 4866// CHECK1-NEXT: [[TMP16:%.*]] = load i32, ptr [[J]], align 4867// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP16]])868// CHECK1-NEXT: br label %[[IF_END]]869// CHECK1: [[IF_END]]:870// CHECK1-NEXT: [[TMP17:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4871// CHECK1-NEXT: [[TMP18:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4872// CHECK1-NEXT: [[CMP8:%.*]] = icmp slt i32 [[TMP17]], [[TMP18]]873// CHECK1-NEXT: br i1 [[CMP8]], label %[[IF_THEN9:.*]], label %[[IF_END14:.*]]874// CHECK1: [[IF_THEN9]]:875// CHECK1-NEXT: [[TMP19:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 4876// CHECK1-NEXT: [[TMP20:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 4877// CHECK1-NEXT: [[TMP21:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4878// CHECK1-NEXT: [[MUL10:%.*]] = mul nsw i32 [[TMP20]], [[TMP21]]879// CHECK1-NEXT: [[ADD11:%.*]] = add nsw i32 [[TMP19]], [[MUL10]]880// CHECK1-NEXT: store i32 [[ADD11]], ptr [[DOTOMP_IV1]], align 4881// CHECK1-NEXT: [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 4882// CHECK1-NEXT: [[MUL12:%.*]] = mul nsw i32 [[TMP22]], 1883// CHECK1-NEXT: [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]884// CHECK1-NEXT: store i32 [[ADD13]], ptr [[K]], align 4885// CHECK1-NEXT: [[TMP23:%.*]] = load i32, ptr [[K]], align 4886// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP23]])887// CHECK1-NEXT: br label %[[IF_END14]]888// CHECK1: [[IF_END14]]:889// CHECK1-NEXT: br label %[[FOR_INC15:.*]]890// CHECK1: [[FOR_INC15]]:891// CHECK1-NEXT: [[TMP24:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 4892// CHECK1-NEXT: [[INC16:%.*]] = add nsw i32 [[TMP24]], 1893// CHECK1-NEXT: store i32 [[INC16]], ptr [[DOTOMP_FUSE_INDEX]], align 4894// CHECK1-NEXT: br label %[[FOR_COND2]], !llvm.loop [[LOOP8:![0-9]+]]895// CHECK1: [[FOR_END17]]:896// CHECK1-NEXT: store i32 42, ptr [[C]], align 4897// CHECK1-NEXT: store ptr [[ARR]], ptr [[__RANGE2]], align 8898// CHECK1-NEXT: [[TMP25:%.*]] = load ptr, ptr [[__RANGE2]], align 8899// CHECK1-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP25]], i64 0, i64 0900// CHECK1-NEXT: store ptr [[ARRAYDECAY]], ptr [[__BEGIN2]], align 8901// CHECK1-NEXT: [[TMP26:%.*]] = load ptr, ptr [[__RANGE2]], align 8902// CHECK1-NEXT: [[ARRAYDECAY18:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP26]], i64 0, i64 0903// CHECK1-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY18]], i64 256904// CHECK1-NEXT: store ptr [[ADD_PTR]], ptr [[__END2]], align 8905// CHECK1-NEXT: br label %[[FOR_COND19:.*]]906// CHECK1: [[FOR_COND19]]:907// CHECK1-NEXT: [[TMP27:%.*]] = load ptr, ptr [[__BEGIN2]], align 8908// CHECK1-NEXT: [[TMP28:%.*]] = load ptr, ptr [[__END2]], align 8909// CHECK1-NEXT: [[CMP20:%.*]] = icmp ne ptr [[TMP27]], [[TMP28]]910// CHECK1-NEXT: br i1 [[CMP20]], label %[[FOR_BODY21:.*]], label %[[FOR_END23:.*]]911// CHECK1: [[FOR_BODY21]]:912// CHECK1-NEXT: [[TMP29:%.*]] = load ptr, ptr [[__BEGIN2]], align 8913// CHECK1-NEXT: store ptr [[TMP29]], ptr [[V]], align 8914// CHECK1-NEXT: [[TMP30:%.*]] = load i32, ptr [[C]], align 4915// CHECK1-NEXT: [[TMP31:%.*]] = load ptr, ptr [[V]], align 8916// CHECK1-NEXT: [[TMP32:%.*]] = load double, ptr [[TMP31]], align 8917// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP30]], double noundef [[TMP32]])918// CHECK1-NEXT: br label %[[FOR_INC22:.*]]919// CHECK1: [[FOR_INC22]]:920// CHECK1-NEXT: [[TMP33:%.*]] = load ptr, ptr [[__BEGIN2]], align 8921// CHECK1-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP33]], i32 1922// CHECK1-NEXT: store ptr [[INCDEC_PTR]], ptr [[__BEGIN2]], align 8923// CHECK1-NEXT: br label %[[FOR_COND19]]924// CHECK1: [[FOR_END23]]:925// CHECK1-NEXT: ret void926//927//928// CHECK1-LABEL: define dso_local void @foo5(929// CHECK1-SAME: ) #[[ATTR0]] {930// CHECK1-NEXT: [[ENTRY:.*:]]931// CHECK1-NEXT: [[ARR:%.*]] = alloca [256 x double], align 16932// CHECK1-NEXT: [[J:%.*]] = alloca i32, align 4933// CHECK1-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 4934// CHECK1-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 4935// CHECK1-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 4936// CHECK1-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 4937// CHECK1-NEXT: [[K:%.*]] = alloca i32, align 4938// CHECK1-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 4939// CHECK1-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 4940// CHECK1-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 4941// CHECK1-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 4942// CHECK1-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 4943// CHECK1-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 4944// CHECK1-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 4945// CHECK1-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4946// CHECK1-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4947// CHECK1-NEXT: [[DOTOMP_LB03:%.*]] = alloca i32, align 4948// CHECK1-NEXT: [[DOTOMP_ST04:%.*]] = alloca i32, align 4949// CHECK1-NEXT: [[DOTOMP_NI05:%.*]] = alloca i64, align 8950// CHECK1-NEXT: [[DOTOMP_IV06:%.*]] = alloca i32, align 4951// CHECK1-NEXT: [[C:%.*]] = alloca i32, align 4952// CHECK1-NEXT: [[__RANGE2:%.*]] = alloca ptr, align 8953// CHECK1-NEXT: [[__END2:%.*]] = alloca ptr, align 8954// CHECK1-NEXT: [[__BEGIN2:%.*]] = alloca ptr, align 8955// CHECK1-NEXT: [[DOTCAPTURE_EXPR_8:%.*]] = alloca ptr, align 8956// CHECK1-NEXT: [[DOTCAPTURE_EXPR_10:%.*]] = alloca ptr, align 8957// CHECK1-NEXT: [[DOTCAPTURE_EXPR_11:%.*]] = alloca i64, align 8958// CHECK1-NEXT: [[DOTOMP_LB116:%.*]] = alloca i64, align 8959// CHECK1-NEXT: [[DOTOMP_ST117:%.*]] = alloca i64, align 8960// CHECK1-NEXT: [[DOTOMP_NI118:%.*]] = alloca i64, align 8961// CHECK1-NEXT: [[DOTOMP_IV120:%.*]] = alloca i64, align 8962// CHECK1-NEXT: [[DOTOMP_TEMP_121:%.*]] = alloca i64, align 8963// CHECK1-NEXT: [[DOTOMP_FUSE_MAX22:%.*]] = alloca i64, align 8964// CHECK1-NEXT: [[I:%.*]] = alloca i32, align 4965// CHECK1-NEXT: [[DOTOMP_FUSE_INDEX29:%.*]] = alloca i64, align 8966// CHECK1-NEXT: [[V:%.*]] = alloca ptr, align 8967// CHECK1-NEXT: [[CC:%.*]] = alloca i32, align 4968// CHECK1-NEXT: [[__RANGE264:%.*]] = alloca ptr, align 8969// CHECK1-NEXT: [[__BEGIN265:%.*]] = alloca ptr, align 8970// CHECK1-NEXT: [[__END267:%.*]] = alloca ptr, align 8971// CHECK1-NEXT: [[VV:%.*]] = alloca ptr, align 8972// CHECK1-NEXT: store i32 0, ptr [[J]], align 4973// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 4974// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 4975// CHECK1-NEXT: store i32 128, ptr [[DOTOMP_NI0]], align 4976// CHECK1-NEXT: store i32 0, ptr [[K]], align 4977// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 4978// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 4979// CHECK1-NEXT: store i32 512, ptr [[DOTOMP_NI1]], align 4980// CHECK1-NEXT: [[TMP0:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 4981// CHECK1-NEXT: store i32 [[TMP0]], ptr [[DOTOMP_TEMP_1]], align 4982// CHECK1-NEXT: [[TMP1:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4983// CHECK1-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4984// CHECK1-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP1]], [[TMP2]]985// CHECK1-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]986// CHECK1: [[COND_TRUE]]:987// CHECK1-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 4988// CHECK1-NEXT: br label %[[COND_END:.*]]989// CHECK1: [[COND_FALSE]]:990// CHECK1-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 4991// CHECK1-NEXT: br label %[[COND_END]]992// CHECK1: [[COND_END]]:993// CHECK1-NEXT: [[COND:%.*]] = phi i32 [ [[TMP3]], %[[COND_TRUE]] ], [ [[TMP4]], %[[COND_FALSE]] ]994// CHECK1-NEXT: store i32 [[COND]], ptr [[DOTOMP_FUSE_MAX]], align 4995// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 4996// CHECK1-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 4997// CHECK1-NEXT: store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 4998// CHECK1-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4999// CHECK1-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP6]], 01000// CHECK1-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 11001// CHECK1-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11002// CHECK1-NEXT: store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41003// CHECK1-NEXT: store i32 0, ptr [[DOTOMP_LB03]], align 41004// CHECK1-NEXT: store i32 1, ptr [[DOTOMP_ST04]], align 41005// CHECK1-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41006// CHECK1-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP7]], 11007// CHECK1-NEXT: [[CONV:%.*]] = sext i32 [[ADD]] to i641008// CHECK1-NEXT: store i64 [[CONV]], ptr [[DOTOMP_NI05]], align 81009// CHECK1-NEXT: store i32 42, ptr [[C]], align 41010// CHECK1-NEXT: store ptr [[ARR]], ptr [[__RANGE2]], align 81011// CHECK1-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__RANGE2]], align 81012// CHECK1-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP8]], i64 0, i64 01013// CHECK1-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY]], i64 2561014// CHECK1-NEXT: store ptr [[ADD_PTR]], ptr [[__END2]], align 81015// CHECK1-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__RANGE2]], align 81016// CHECK1-NEXT: [[ARRAYDECAY7:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP9]], i64 0, i64 01017// CHECK1-NEXT: store ptr [[ARRAYDECAY7]], ptr [[__BEGIN2]], align 81018// CHECK1-NEXT: [[TMP10:%.*]] = load ptr, ptr [[__RANGE2]], align 81019// CHECK1-NEXT: [[ARRAYDECAY9:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP10]], i64 0, i64 01020// CHECK1-NEXT: store ptr [[ARRAYDECAY9]], ptr [[DOTCAPTURE_EXPR_8]], align 81021// CHECK1-NEXT: [[TMP11:%.*]] = load ptr, ptr [[__END2]], align 81022// CHECK1-NEXT: store ptr [[TMP11]], ptr [[DOTCAPTURE_EXPR_10]], align 81023// CHECK1-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_10]], align 81024// CHECK1-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_8]], align 81025// CHECK1-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[TMP12]] to i641026// CHECK1-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[TMP13]] to i641027// CHECK1-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]]1028// CHECK1-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 81029// CHECK1-NEXT: [[SUB12:%.*]] = sub nsw i64 [[SUB_PTR_DIV]], 11030// CHECK1-NEXT: [[ADD13:%.*]] = add nsw i64 [[SUB12]], 11031// CHECK1-NEXT: [[DIV14:%.*]] = sdiv i64 [[ADD13]], 11032// CHECK1-NEXT: [[SUB15:%.*]] = sub nsw i64 [[DIV14]], 11033// CHECK1-NEXT: store i64 [[SUB15]], ptr [[DOTCAPTURE_EXPR_11]], align 81034// CHECK1-NEXT: store i64 0, ptr [[DOTOMP_LB116]], align 81035// CHECK1-NEXT: store i64 1, ptr [[DOTOMP_ST117]], align 81036// CHECK1-NEXT: [[TMP14:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_11]], align 81037// CHECK1-NEXT: [[ADD19:%.*]] = add nsw i64 [[TMP14]], 11038// CHECK1-NEXT: store i64 [[ADD19]], ptr [[DOTOMP_NI118]], align 81039// CHECK1-NEXT: [[TMP15:%.*]] = load i64, ptr [[DOTOMP_NI05]], align 81040// CHECK1-NEXT: store i64 [[TMP15]], ptr [[DOTOMP_TEMP_121]], align 81041// CHECK1-NEXT: [[TMP16:%.*]] = load i64, ptr [[DOTOMP_TEMP_121]], align 81042// CHECK1-NEXT: [[TMP17:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 81043// CHECK1-NEXT: [[CMP23:%.*]] = icmp sgt i64 [[TMP16]], [[TMP17]]1044// CHECK1-NEXT: br i1 [[CMP23]], label %[[COND_TRUE24:.*]], label %[[COND_FALSE25:.*]]1045// CHECK1: [[COND_TRUE24]]:1046// CHECK1-NEXT: [[TMP18:%.*]] = load i64, ptr [[DOTOMP_TEMP_121]], align 81047// CHECK1-NEXT: br label %[[COND_END26:.*]]1048// CHECK1: [[COND_FALSE25]]:1049// CHECK1-NEXT: [[TMP19:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 81050// CHECK1-NEXT: br label %[[COND_END26]]1051// CHECK1: [[COND_END26]]:1052// CHECK1-NEXT: [[COND27:%.*]] = phi i64 [ [[TMP18]], %[[COND_TRUE24]] ], [ [[TMP19]], %[[COND_FALSE25]] ]1053// CHECK1-NEXT: store i64 [[COND27]], ptr [[DOTOMP_FUSE_MAX22]], align 81054// CHECK1-NEXT: store i32 0, ptr [[I]], align 41055// CHECK1-NEXT: br label %[[FOR_COND:.*]]1056// CHECK1: [[FOR_COND]]:1057// CHECK1-NEXT: [[TMP20:%.*]] = load i32, ptr [[I]], align 41058// CHECK1-NEXT: [[CMP28:%.*]] = icmp slt i32 [[TMP20]], 1281059// CHECK1-NEXT: br i1 [[CMP28]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]1060// CHECK1: [[FOR_BODY]]:1061// CHECK1-NEXT: [[TMP21:%.*]] = load i32, ptr [[I]], align 41062// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP21]])1063// CHECK1-NEXT: br label %[[FOR_INC:.*]]1064// CHECK1: [[FOR_INC]]:1065// CHECK1-NEXT: [[TMP22:%.*]] = load i32, ptr [[I]], align 41066// CHECK1-NEXT: [[INC:%.*]] = add nsw i32 [[TMP22]], 11067// CHECK1-NEXT: store i32 [[INC]], ptr [[I]], align 41068// CHECK1-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP9:![0-9]+]]1069// CHECK1: [[FOR_END]]:1070// CHECK1-NEXT: store i64 0, ptr [[DOTOMP_FUSE_INDEX29]], align 81071// CHECK1-NEXT: br label %[[FOR_COND30:.*]]1072// CHECK1: [[FOR_COND30]]:1073// CHECK1-NEXT: [[TMP23:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 81074// CHECK1-NEXT: [[TMP24:%.*]] = load i64, ptr [[DOTOMP_FUSE_MAX22]], align 81075// CHECK1-NEXT: [[CMP31:%.*]] = icmp slt i64 [[TMP23]], [[TMP24]]1076// CHECK1-NEXT: br i1 [[CMP31]], label %[[FOR_BODY32:.*]], label %[[FOR_END63:.*]]1077// CHECK1: [[FOR_BODY32]]:1078// CHECK1-NEXT: [[TMP25:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 81079// CHECK1-NEXT: [[TMP26:%.*]] = load i64, ptr [[DOTOMP_NI05]], align 81080// CHECK1-NEXT: [[CMP33:%.*]] = icmp slt i64 [[TMP25]], [[TMP26]]1081// CHECK1-NEXT: br i1 [[CMP33]], label %[[IF_THEN:.*]], label %[[IF_END53:.*]]1082// CHECK1: [[IF_THEN]]:1083// CHECK1-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTOMP_LB03]], align 41084// CHECK1-NEXT: [[CONV34:%.*]] = sext i32 [[TMP27]] to i641085// CHECK1-NEXT: [[TMP28:%.*]] = load i32, ptr [[DOTOMP_ST04]], align 41086// CHECK1-NEXT: [[CONV35:%.*]] = sext i32 [[TMP28]] to i641087// CHECK1-NEXT: [[TMP29:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 81088// CHECK1-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV35]], [[TMP29]]1089// CHECK1-NEXT: [[ADD36:%.*]] = add nsw i64 [[CONV34]], [[MUL]]1090// CHECK1-NEXT: [[CONV37:%.*]] = trunc i64 [[ADD36]] to i321091// CHECK1-NEXT: store i32 [[CONV37]], ptr [[DOTOMP_IV06]], align 41092// CHECK1-NEXT: [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV06]], align 41093// CHECK1-NEXT: [[MUL38:%.*]] = mul nsw i32 [[TMP30]], 11094// CHECK1-NEXT: [[ADD39:%.*]] = add nsw i32 0, [[MUL38]]1095// CHECK1-NEXT: store i32 [[ADD39]], ptr [[DOTOMP_FUSE_INDEX]], align 41096// CHECK1-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41097// CHECK1-NEXT: [[TMP32:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 41098// CHECK1-NEXT: [[CMP40:%.*]] = icmp slt i32 [[TMP31]], [[TMP32]]1099// CHECK1-NEXT: br i1 [[CMP40]], label %[[IF_THEN41:.*]], label %[[IF_END:.*]]1100// CHECK1: [[IF_THEN41]]:1101// CHECK1-NEXT: [[TMP33:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 41102// CHECK1-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 41103// CHECK1-NEXT: [[TMP35:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41104// CHECK1-NEXT: [[MUL42:%.*]] = mul nsw i32 [[TMP34]], [[TMP35]]1105// CHECK1-NEXT: [[ADD43:%.*]] = add nsw i32 [[TMP33]], [[MUL42]]1106// CHECK1-NEXT: store i32 [[ADD43]], ptr [[DOTOMP_IV0]], align 41107// CHECK1-NEXT: [[TMP36:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 41108// CHECK1-NEXT: [[MUL44:%.*]] = mul nsw i32 [[TMP36]], 21109// CHECK1-NEXT: [[ADD45:%.*]] = add nsw i32 0, [[MUL44]]1110// CHECK1-NEXT: store i32 [[ADD45]], ptr [[J]], align 41111// CHECK1-NEXT: [[TMP37:%.*]] = load i32, ptr [[J]], align 41112// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP37]])1113// CHECK1-NEXT: br label %[[IF_END]]1114// CHECK1: [[IF_END]]:1115// CHECK1-NEXT: [[TMP38:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41116// CHECK1-NEXT: [[TMP39:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41117// CHECK1-NEXT: [[CMP46:%.*]] = icmp slt i32 [[TMP38]], [[TMP39]]1118// CHECK1-NEXT: br i1 [[CMP46]], label %[[IF_THEN47:.*]], label %[[IF_END52:.*]]1119// CHECK1: [[IF_THEN47]]:1120// CHECK1-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 41121// CHECK1-NEXT: [[TMP41:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 41122// CHECK1-NEXT: [[TMP42:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41123// CHECK1-NEXT: [[MUL48:%.*]] = mul nsw i32 [[TMP41]], [[TMP42]]1124// CHECK1-NEXT: [[ADD49:%.*]] = add nsw i32 [[TMP40]], [[MUL48]]1125// CHECK1-NEXT: store i32 [[ADD49]], ptr [[DOTOMP_IV1]], align 41126// CHECK1-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 41127// CHECK1-NEXT: [[MUL50:%.*]] = mul nsw i32 [[TMP43]], 11128// CHECK1-NEXT: [[ADD51:%.*]] = add nsw i32 0, [[MUL50]]1129// CHECK1-NEXT: store i32 [[ADD51]], ptr [[K]], align 41130// CHECK1-NEXT: [[TMP44:%.*]] = load i32, ptr [[K]], align 41131// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP44]])1132// CHECK1-NEXT: br label %[[IF_END52]]1133// CHECK1: [[IF_END52]]:1134// CHECK1-NEXT: br label %[[IF_END53]]1135// CHECK1: [[IF_END53]]:1136// CHECK1-NEXT: [[TMP45:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 81137// CHECK1-NEXT: [[TMP46:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 81138// CHECK1-NEXT: [[CMP54:%.*]] = icmp slt i64 [[TMP45]], [[TMP46]]1139// CHECK1-NEXT: br i1 [[CMP54]], label %[[IF_THEN55:.*]], label %[[IF_END60:.*]]1140// CHECK1: [[IF_THEN55]]:1141// CHECK1-NEXT: [[TMP47:%.*]] = load i64, ptr [[DOTOMP_LB116]], align 81142// CHECK1-NEXT: [[TMP48:%.*]] = load i64, ptr [[DOTOMP_ST117]], align 81143// CHECK1-NEXT: [[TMP49:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 81144// CHECK1-NEXT: [[MUL56:%.*]] = mul nsw i64 [[TMP48]], [[TMP49]]1145// CHECK1-NEXT: [[ADD57:%.*]] = add nsw i64 [[TMP47]], [[MUL56]]1146// CHECK1-NEXT: store i64 [[ADD57]], ptr [[DOTOMP_IV120]], align 81147// CHECK1-NEXT: [[TMP50:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_8]], align 81148// CHECK1-NEXT: [[TMP51:%.*]] = load i64, ptr [[DOTOMP_IV120]], align 81149// CHECK1-NEXT: [[MUL58:%.*]] = mul nsw i64 [[TMP51]], 11150// CHECK1-NEXT: [[ADD_PTR59:%.*]] = getelementptr inbounds double, ptr [[TMP50]], i64 [[MUL58]]1151// CHECK1-NEXT: store ptr [[ADD_PTR59]], ptr [[__BEGIN2]], align 81152// CHECK1-NEXT: [[TMP52:%.*]] = load ptr, ptr [[__BEGIN2]], align 81153// CHECK1-NEXT: store ptr [[TMP52]], ptr [[V]], align 81154// CHECK1-NEXT: [[TMP53:%.*]] = load i32, ptr [[C]], align 41155// CHECK1-NEXT: [[TMP54:%.*]] = load ptr, ptr [[V]], align 81156// CHECK1-NEXT: [[TMP55:%.*]] = load double, ptr [[TMP54]], align 81157// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP53]], double noundef [[TMP55]])1158// CHECK1-NEXT: br label %[[IF_END60]]1159// CHECK1: [[IF_END60]]:1160// CHECK1-NEXT: br label %[[FOR_INC61:.*]]1161// CHECK1: [[FOR_INC61]]:1162// CHECK1-NEXT: [[TMP56:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 81163// CHECK1-NEXT: [[INC62:%.*]] = add nsw i64 [[TMP56]], 11164// CHECK1-NEXT: store i64 [[INC62]], ptr [[DOTOMP_FUSE_INDEX29]], align 81165// CHECK1-NEXT: br label %[[FOR_COND30]], !llvm.loop [[LOOP10:![0-9]+]]1166// CHECK1: [[FOR_END63]]:1167// CHECK1-NEXT: store i32 37, ptr [[CC]], align 41168// CHECK1-NEXT: store ptr [[ARR]], ptr [[__RANGE264]], align 81169// CHECK1-NEXT: [[TMP57:%.*]] = load ptr, ptr [[__RANGE264]], align 81170// CHECK1-NEXT: [[ARRAYDECAY66:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP57]], i64 0, i64 01171// CHECK1-NEXT: store ptr [[ARRAYDECAY66]], ptr [[__BEGIN265]], align 81172// CHECK1-NEXT: [[TMP58:%.*]] = load ptr, ptr [[__RANGE264]], align 81173// CHECK1-NEXT: [[ARRAYDECAY68:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP58]], i64 0, i64 01174// CHECK1-NEXT: [[ADD_PTR69:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY68]], i64 2561175// CHECK1-NEXT: store ptr [[ADD_PTR69]], ptr [[__END267]], align 81176// CHECK1-NEXT: br label %[[FOR_COND70:.*]]1177// CHECK1: [[FOR_COND70]]:1178// CHECK1-NEXT: [[TMP59:%.*]] = load ptr, ptr [[__BEGIN265]], align 81179// CHECK1-NEXT: [[TMP60:%.*]] = load ptr, ptr [[__END267]], align 81180// CHECK1-NEXT: [[CMP71:%.*]] = icmp ne ptr [[TMP59]], [[TMP60]]1181// CHECK1-NEXT: br i1 [[CMP71]], label %[[FOR_BODY72:.*]], label %[[FOR_END74:.*]]1182// CHECK1: [[FOR_BODY72]]:1183// CHECK1-NEXT: [[TMP61:%.*]] = load ptr, ptr [[__BEGIN265]], align 81184// CHECK1-NEXT: store ptr [[TMP61]], ptr [[VV]], align 81185// CHECK1-NEXT: [[TMP62:%.*]] = load i32, ptr [[CC]], align 41186// CHECK1-NEXT: [[TMP63:%.*]] = load ptr, ptr [[VV]], align 81187// CHECK1-NEXT: [[TMP64:%.*]] = load double, ptr [[TMP63]], align 81188// CHECK1-NEXT: call void (...) @body(i32 noundef [[TMP62]], double noundef [[TMP64]])1189// CHECK1-NEXT: br label %[[FOR_INC73:.*]]1190// CHECK1: [[FOR_INC73]]:1191// CHECK1-NEXT: [[TMP65:%.*]] = load ptr, ptr [[__BEGIN265]], align 81192// CHECK1-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP65]], i32 11193// CHECK1-NEXT: store ptr [[INCDEC_PTR]], ptr [[__BEGIN265]], align 81194// CHECK1-NEXT: br label %[[FOR_COND70]]1195// CHECK1: [[FOR_END74]]:1196// CHECK1-NEXT: ret void1197//1198//1199// CHECK2-LABEL: define dso_local void @body(1200// CHECK2-SAME: ...) #[[ATTR0:[0-9]+]] {1201// CHECK2-NEXT: [[ENTRY:.*:]]1202// CHECK2-NEXT: ret void1203//1204//1205// CHECK2-LABEL: define dso_local void @foo1(1206// CHECK2-SAME: i32 noundef [[START1:%.*]], i32 noundef [[END1:%.*]], i32 noundef [[STEP1:%.*]], i32 noundef [[START2:%.*]], i32 noundef [[END2:%.*]], i32 noundef [[STEP2:%.*]]) #[[ATTR0]] {1207// CHECK2-NEXT: [[ENTRY:.*:]]1208// CHECK2-NEXT: [[START1_ADDR:%.*]] = alloca i32, align 41209// CHECK2-NEXT: [[END1_ADDR:%.*]] = alloca i32, align 41210// CHECK2-NEXT: [[STEP1_ADDR:%.*]] = alloca i32, align 41211// CHECK2-NEXT: [[START2_ADDR:%.*]] = alloca i32, align 41212// CHECK2-NEXT: [[END2_ADDR:%.*]] = alloca i32, align 41213// CHECK2-NEXT: [[STEP2_ADDR:%.*]] = alloca i32, align 41214// CHECK2-NEXT: [[I:%.*]] = alloca i32, align 41215// CHECK2-NEXT: [[J:%.*]] = alloca i32, align 41216// CHECK2-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41217// CHECK2-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41218// CHECK2-NEXT: [[DOTNEW_STEP:%.*]] = alloca i32, align 41219// CHECK2-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 41220// CHECK2-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 41221// CHECK2-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 41222// CHECK2-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 41223// CHECK2-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 41224// CHECK2-NEXT: [[DOTCAPTURE_EXPR_6:%.*]] = alloca i32, align 41225// CHECK2-NEXT: [[DOTCAPTURE_EXPR_7:%.*]] = alloca i32, align 41226// CHECK2-NEXT: [[DOTNEW_STEP8:%.*]] = alloca i32, align 41227// CHECK2-NEXT: [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 41228// CHECK2-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 41229// CHECK2-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 41230// CHECK2-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 41231// CHECK2-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 41232// CHECK2-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 41233// CHECK2-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 41234// CHECK2-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 41235// CHECK2-NEXT: store i32 [[START1]], ptr [[START1_ADDR]], align 41236// CHECK2-NEXT: store i32 [[END1]], ptr [[END1_ADDR]], align 41237// CHECK2-NEXT: store i32 [[STEP1]], ptr [[STEP1_ADDR]], align 41238// CHECK2-NEXT: store i32 [[START2]], ptr [[START2_ADDR]], align 41239// CHECK2-NEXT: store i32 [[END2]], ptr [[END2_ADDR]], align 41240// CHECK2-NEXT: store i32 [[STEP2]], ptr [[STEP2_ADDR]], align 41241// CHECK2-NEXT: [[TMP0:%.*]] = load i32, ptr [[START1_ADDR]], align 41242// CHECK2-NEXT: store i32 [[TMP0]], ptr [[I]], align 41243// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr [[START1_ADDR]], align 41244// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTCAPTURE_EXPR_]], align 41245// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[END1_ADDR]], align 41246// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_1]], align 41247// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[STEP1_ADDR]], align 41248// CHECK2-NEXT: store i32 [[TMP3]], ptr [[DOTNEW_STEP]], align 41249// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41250// CHECK2-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41251// CHECK2-NEXT: [[SUB:%.*]] = sub i32 [[TMP4]], [[TMP5]]1252// CHECK2-NEXT: [[SUB3:%.*]] = sub i32 [[SUB]], 11253// CHECK2-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 41254// CHECK2-NEXT: [[ADD:%.*]] = add i32 [[SUB3]], [[TMP6]]1255// CHECK2-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 41256// CHECK2-NEXT: [[DIV:%.*]] = udiv i32 [[ADD]], [[TMP7]]1257// CHECK2-NEXT: [[SUB4:%.*]] = sub i32 [[DIV]], 11258// CHECK2-NEXT: store i32 [[SUB4]], ptr [[DOTCAPTURE_EXPR_2]], align 41259// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 41260// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 41261// CHECK2-NEXT: [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 41262// CHECK2-NEXT: [[ADD5:%.*]] = add i32 [[TMP8]], 11263// CHECK2-NEXT: store i32 [[ADD5]], ptr [[DOTOMP_NI0]], align 41264// CHECK2-NEXT: [[TMP9:%.*]] = load i32, ptr [[START2_ADDR]], align 41265// CHECK2-NEXT: store i32 [[TMP9]], ptr [[J]], align 41266// CHECK2-NEXT: [[TMP10:%.*]] = load i32, ptr [[START2_ADDR]], align 41267// CHECK2-NEXT: store i32 [[TMP10]], ptr [[DOTCAPTURE_EXPR_6]], align 41268// CHECK2-NEXT: [[TMP11:%.*]] = load i32, ptr [[END2_ADDR]], align 41269// CHECK2-NEXT: store i32 [[TMP11]], ptr [[DOTCAPTURE_EXPR_7]], align 41270// CHECK2-NEXT: [[TMP12:%.*]] = load i32, ptr [[STEP2_ADDR]], align 41271// CHECK2-NEXT: store i32 [[TMP12]], ptr [[DOTNEW_STEP8]], align 41272// CHECK2-NEXT: [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_7]], align 41273// CHECK2-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_6]], align 41274// CHECK2-NEXT: [[SUB10:%.*]] = sub i32 [[TMP13]], [[TMP14]]1275// CHECK2-NEXT: [[SUB11:%.*]] = sub i32 [[SUB10]], 11276// CHECK2-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 41277// CHECK2-NEXT: [[ADD12:%.*]] = add i32 [[SUB11]], [[TMP15]]1278// CHECK2-NEXT: [[TMP16:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 41279// CHECK2-NEXT: [[DIV13:%.*]] = udiv i32 [[ADD12]], [[TMP16]]1280// CHECK2-NEXT: [[SUB14:%.*]] = sub i32 [[DIV13]], 11281// CHECK2-NEXT: store i32 [[SUB14]], ptr [[DOTCAPTURE_EXPR_9]], align 41282// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 41283// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 41284// CHECK2-NEXT: [[TMP17:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 41285// CHECK2-NEXT: [[ADD15:%.*]] = add i32 [[TMP17]], 11286// CHECK2-NEXT: store i32 [[ADD15]], ptr [[DOTOMP_NI1]], align 41287// CHECK2-NEXT: [[TMP18:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 41288// CHECK2-NEXT: store i32 [[TMP18]], ptr [[DOTOMP_TEMP_1]], align 41289// CHECK2-NEXT: [[TMP19:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 41290// CHECK2-NEXT: [[TMP20:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41291// CHECK2-NEXT: [[CMP:%.*]] = icmp ugt i32 [[TMP19]], [[TMP20]]1292// CHECK2-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]1293// CHECK2: [[COND_TRUE]]:1294// CHECK2-NEXT: [[TMP21:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 41295// CHECK2-NEXT: br label %[[COND_END:.*]]1296// CHECK2: [[COND_FALSE]]:1297// CHECK2-NEXT: [[TMP22:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41298// CHECK2-NEXT: br label %[[COND_END]]1299// CHECK2: [[COND_END]]:1300// CHECK2-NEXT: [[COND:%.*]] = phi i32 [ [[TMP21]], %[[COND_TRUE]] ], [ [[TMP22]], %[[COND_FALSE]] ]1301// CHECK2-NEXT: store i32 [[COND]], ptr [[DOTOMP_FUSE_MAX]], align 41302// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 41303// CHECK2-NEXT: br label %[[FOR_COND:.*]]1304// CHECK2: [[FOR_COND]]:1305// CHECK2-NEXT: [[TMP23:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41306// CHECK2-NEXT: [[TMP24:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 41307// CHECK2-NEXT: [[CMP16:%.*]] = icmp ult i32 [[TMP23]], [[TMP24]]1308// CHECK2-NEXT: br i1 [[CMP16]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]1309// CHECK2: [[FOR_BODY]]:1310// CHECK2-NEXT: [[TMP25:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41311// CHECK2-NEXT: [[TMP26:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 41312// CHECK2-NEXT: [[CMP17:%.*]] = icmp ult i32 [[TMP25]], [[TMP26]]1313// CHECK2-NEXT: br i1 [[CMP17]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]1314// CHECK2: [[IF_THEN]]:1315// CHECK2-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 41316// CHECK2-NEXT: [[TMP28:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 41317// CHECK2-NEXT: [[TMP29:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41318// CHECK2-NEXT: [[MUL:%.*]] = mul i32 [[TMP28]], [[TMP29]]1319// CHECK2-NEXT: [[ADD18:%.*]] = add i32 [[TMP27]], [[MUL]]1320// CHECK2-NEXT: store i32 [[ADD18]], ptr [[DOTOMP_IV0]], align 41321// CHECK2-NEXT: [[TMP30:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41322// CHECK2-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 41323// CHECK2-NEXT: [[TMP32:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 41324// CHECK2-NEXT: [[MUL19:%.*]] = mul i32 [[TMP31]], [[TMP32]]1325// CHECK2-NEXT: [[ADD20:%.*]] = add i32 [[TMP30]], [[MUL19]]1326// CHECK2-NEXT: store i32 [[ADD20]], ptr [[I]], align 41327// CHECK2-NEXT: [[TMP33:%.*]] = load i32, ptr [[I]], align 41328// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP33]])1329// CHECK2-NEXT: br label %[[IF_END]]1330// CHECK2: [[IF_END]]:1331// CHECK2-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41332// CHECK2-NEXT: [[TMP35:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41333// CHECK2-NEXT: [[CMP21:%.*]] = icmp ult i32 [[TMP34]], [[TMP35]]1334// CHECK2-NEXT: br i1 [[CMP21]], label %[[IF_THEN22:.*]], label %[[IF_END27:.*]]1335// CHECK2: [[IF_THEN22]]:1336// CHECK2-NEXT: [[TMP36:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 41337// CHECK2-NEXT: [[TMP37:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 41338// CHECK2-NEXT: [[TMP38:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41339// CHECK2-NEXT: [[MUL23:%.*]] = mul i32 [[TMP37]], [[TMP38]]1340// CHECK2-NEXT: [[ADD24:%.*]] = add i32 [[TMP36]], [[MUL23]]1341// CHECK2-NEXT: store i32 [[ADD24]], ptr [[DOTOMP_IV1]], align 41342// CHECK2-NEXT: [[TMP39:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_6]], align 41343// CHECK2-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 41344// CHECK2-NEXT: [[TMP41:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 41345// CHECK2-NEXT: [[MUL25:%.*]] = mul i32 [[TMP40]], [[TMP41]]1346// CHECK2-NEXT: [[ADD26:%.*]] = add i32 [[TMP39]], [[MUL25]]1347// CHECK2-NEXT: store i32 [[ADD26]], ptr [[J]], align 41348// CHECK2-NEXT: [[TMP42:%.*]] = load i32, ptr [[J]], align 41349// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP42]])1350// CHECK2-NEXT: br label %[[IF_END27]]1351// CHECK2: [[IF_END27]]:1352// CHECK2-NEXT: br label %[[FOR_INC:.*]]1353// CHECK2: [[FOR_INC]]:1354// CHECK2-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41355// CHECK2-NEXT: [[INC:%.*]] = add i32 [[TMP43]], 11356// CHECK2-NEXT: store i32 [[INC]], ptr [[DOTOMP_FUSE_INDEX]], align 41357// CHECK2-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP3:![0-9]+]]1358// CHECK2: [[FOR_END]]:1359// CHECK2-NEXT: ret void1360//1361//1362// CHECK2-LABEL: define dso_local void @foo3(1363// CHECK2-SAME: ) #[[ATTR0]] {1364// CHECK2-NEXT: [[ENTRY:.*:]]1365// CHECK2-NEXT: [[ARR:%.*]] = alloca [256 x double], align 161366// CHECK2-NEXT: [[I:%.*]] = alloca i32, align 41367// CHECK2-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 41368// CHECK2-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 41369// CHECK2-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 41370// CHECK2-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 41371// CHECK2-NEXT: [[J:%.*]] = alloca i32, align 41372// CHECK2-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 41373// CHECK2-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 41374// CHECK2-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 41375// CHECK2-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 41376// CHECK2-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 41377// CHECK2-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 41378// CHECK2-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 41379// CHECK2-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41380// CHECK2-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41381// CHECK2-NEXT: [[DOTOMP_LB03:%.*]] = alloca i32, align 41382// CHECK2-NEXT: [[DOTOMP_ST04:%.*]] = alloca i32, align 41383// CHECK2-NEXT: [[DOTOMP_NI05:%.*]] = alloca i64, align 81384// CHECK2-NEXT: [[DOTOMP_IV06:%.*]] = alloca i32, align 41385// CHECK2-NEXT: [[C:%.*]] = alloca i32, align 41386// CHECK2-NEXT: [[__RANGE2:%.*]] = alloca ptr, align 81387// CHECK2-NEXT: [[__END2:%.*]] = alloca ptr, align 81388// CHECK2-NEXT: [[__BEGIN2:%.*]] = alloca ptr, align 81389// CHECK2-NEXT: [[DOTCAPTURE_EXPR_8:%.*]] = alloca ptr, align 81390// CHECK2-NEXT: [[DOTCAPTURE_EXPR_10:%.*]] = alloca ptr, align 81391// CHECK2-NEXT: [[DOTCAPTURE_EXPR_11:%.*]] = alloca i64, align 81392// CHECK2-NEXT: [[DOTOMP_LB116:%.*]] = alloca i64, align 81393// CHECK2-NEXT: [[DOTOMP_ST117:%.*]] = alloca i64, align 81394// CHECK2-NEXT: [[DOTOMP_NI118:%.*]] = alloca i64, align 81395// CHECK2-NEXT: [[DOTOMP_IV120:%.*]] = alloca i64, align 81396// CHECK2-NEXT: [[CC:%.*]] = alloca i32, align 41397// CHECK2-NEXT: [[__RANGE221:%.*]] = alloca ptr, align 81398// CHECK2-NEXT: [[__END222:%.*]] = alloca ptr, align 81399// CHECK2-NEXT: [[__BEGIN225:%.*]] = alloca ptr, align 81400// CHECK2-NEXT: [[DOTCAPTURE_EXPR_27:%.*]] = alloca ptr, align 81401// CHECK2-NEXT: [[DOTCAPTURE_EXPR_29:%.*]] = alloca ptr, align 81402// CHECK2-NEXT: [[DOTCAPTURE_EXPR_30:%.*]] = alloca i64, align 81403// CHECK2-NEXT: [[DOTOMP_LB2:%.*]] = alloca i64, align 81404// CHECK2-NEXT: [[DOTOMP_ST2:%.*]] = alloca i64, align 81405// CHECK2-NEXT: [[DOTOMP_NI2:%.*]] = alloca i64, align 81406// CHECK2-NEXT: [[DOTOMP_IV2:%.*]] = alloca i64, align 81407// CHECK2-NEXT: [[DOTOMP_TEMP_140:%.*]] = alloca i64, align 81408// CHECK2-NEXT: [[DOTOMP_TEMP_2:%.*]] = alloca i64, align 81409// CHECK2-NEXT: [[DOTOMP_FUSE_MAX46:%.*]] = alloca i64, align 81410// CHECK2-NEXT: [[DOTOMP_FUSE_INDEX52:%.*]] = alloca i64, align 81411// CHECK2-NEXT: [[V:%.*]] = alloca ptr, align 81412// CHECK2-NEXT: [[VV:%.*]] = alloca ptr, align 81413// CHECK2-NEXT: store i32 0, ptr [[I]], align 41414// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 41415// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 41416// CHECK2-NEXT: store i32 128, ptr [[DOTOMP_NI0]], align 41417// CHECK2-NEXT: store i32 0, ptr [[J]], align 41418// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 41419// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 41420// CHECK2-NEXT: store i32 128, ptr [[DOTOMP_NI1]], align 41421// CHECK2-NEXT: [[TMP0:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 41422// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTOMP_TEMP_1]], align 41423// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 41424// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41425// CHECK2-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP1]], [[TMP2]]1426// CHECK2-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]1427// CHECK2: [[COND_TRUE]]:1428// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 41429// CHECK2-NEXT: br label %[[COND_END:.*]]1430// CHECK2: [[COND_FALSE]]:1431// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41432// CHECK2-NEXT: br label %[[COND_END]]1433// CHECK2: [[COND_END]]:1434// CHECK2-NEXT: [[COND:%.*]] = phi i32 [ [[TMP3]], %[[COND_TRUE]] ], [ [[TMP4]], %[[COND_FALSE]] ]1435// CHECK2-NEXT: store i32 [[COND]], ptr [[DOTOMP_FUSE_MAX]], align 41436// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 41437// CHECK2-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 41438// CHECK2-NEXT: store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 41439// CHECK2-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41440// CHECK2-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP6]], 01441// CHECK2-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 11442// CHECK2-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11443// CHECK2-NEXT: store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41444// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB03]], align 41445// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST04]], align 41446// CHECK2-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41447// CHECK2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP7]], 11448// CHECK2-NEXT: [[CONV:%.*]] = sext i32 [[ADD]] to i641449// CHECK2-NEXT: store i64 [[CONV]], ptr [[DOTOMP_NI05]], align 81450// CHECK2-NEXT: store i32 42, ptr [[C]], align 41451// CHECK2-NEXT: store ptr [[ARR]], ptr [[__RANGE2]], align 81452// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__RANGE2]], align 81453// CHECK2-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP8]], i64 0, i64 01454// CHECK2-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY]], i64 2561455// CHECK2-NEXT: store ptr [[ADD_PTR]], ptr [[__END2]], align 81456// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__RANGE2]], align 81457// CHECK2-NEXT: [[ARRAYDECAY7:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP9]], i64 0, i64 01458// CHECK2-NEXT: store ptr [[ARRAYDECAY7]], ptr [[__BEGIN2]], align 81459// CHECK2-NEXT: [[TMP10:%.*]] = load ptr, ptr [[__RANGE2]], align 81460// CHECK2-NEXT: [[ARRAYDECAY9:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP10]], i64 0, i64 01461// CHECK2-NEXT: store ptr [[ARRAYDECAY9]], ptr [[DOTCAPTURE_EXPR_8]], align 81462// CHECK2-NEXT: [[TMP11:%.*]] = load ptr, ptr [[__END2]], align 81463// CHECK2-NEXT: store ptr [[TMP11]], ptr [[DOTCAPTURE_EXPR_10]], align 81464// CHECK2-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_10]], align 81465// CHECK2-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_8]], align 81466// CHECK2-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[TMP12]] to i641467// CHECK2-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[TMP13]] to i641468// CHECK2-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]]1469// CHECK2-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 81470// CHECK2-NEXT: [[SUB12:%.*]] = sub nsw i64 [[SUB_PTR_DIV]], 11471// CHECK2-NEXT: [[ADD13:%.*]] = add nsw i64 [[SUB12]], 11472// CHECK2-NEXT: [[DIV14:%.*]] = sdiv i64 [[ADD13]], 11473// CHECK2-NEXT: [[SUB15:%.*]] = sub nsw i64 [[DIV14]], 11474// CHECK2-NEXT: store i64 [[SUB15]], ptr [[DOTCAPTURE_EXPR_11]], align 81475// CHECK2-NEXT: store i64 0, ptr [[DOTOMP_LB116]], align 81476// CHECK2-NEXT: store i64 1, ptr [[DOTOMP_ST117]], align 81477// CHECK2-NEXT: [[TMP14:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_11]], align 81478// CHECK2-NEXT: [[ADD19:%.*]] = add nsw i64 [[TMP14]], 11479// CHECK2-NEXT: store i64 [[ADD19]], ptr [[DOTOMP_NI118]], align 81480// CHECK2-NEXT: store i32 37, ptr [[CC]], align 41481// CHECK2-NEXT: store ptr [[ARR]], ptr [[__RANGE221]], align 81482// CHECK2-NEXT: [[TMP15:%.*]] = load ptr, ptr [[__RANGE221]], align 81483// CHECK2-NEXT: [[ARRAYDECAY23:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP15]], i64 0, i64 01484// CHECK2-NEXT: [[ADD_PTR24:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY23]], i64 2561485// CHECK2-NEXT: store ptr [[ADD_PTR24]], ptr [[__END222]], align 81486// CHECK2-NEXT: [[TMP16:%.*]] = load ptr, ptr [[__RANGE221]], align 81487// CHECK2-NEXT: [[ARRAYDECAY26:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP16]], i64 0, i64 01488// CHECK2-NEXT: store ptr [[ARRAYDECAY26]], ptr [[__BEGIN225]], align 81489// CHECK2-NEXT: [[TMP17:%.*]] = load ptr, ptr [[__RANGE221]], align 81490// CHECK2-NEXT: [[ARRAYDECAY28:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP17]], i64 0, i64 01491// CHECK2-NEXT: store ptr [[ARRAYDECAY28]], ptr [[DOTCAPTURE_EXPR_27]], align 81492// CHECK2-NEXT: [[TMP18:%.*]] = load ptr, ptr [[__END222]], align 81493// CHECK2-NEXT: store ptr [[TMP18]], ptr [[DOTCAPTURE_EXPR_29]], align 81494// CHECK2-NEXT: [[TMP19:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_29]], align 81495// CHECK2-NEXT: [[TMP20:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_27]], align 81496// CHECK2-NEXT: [[SUB_PTR_LHS_CAST31:%.*]] = ptrtoint ptr [[TMP19]] to i641497// CHECK2-NEXT: [[SUB_PTR_RHS_CAST32:%.*]] = ptrtoint ptr [[TMP20]] to i641498// CHECK2-NEXT: [[SUB_PTR_SUB33:%.*]] = sub i64 [[SUB_PTR_LHS_CAST31]], [[SUB_PTR_RHS_CAST32]]1499// CHECK2-NEXT: [[SUB_PTR_DIV34:%.*]] = sdiv exact i64 [[SUB_PTR_SUB33]], 81500// CHECK2-NEXT: [[SUB35:%.*]] = sub nsw i64 [[SUB_PTR_DIV34]], 11501// CHECK2-NEXT: [[ADD36:%.*]] = add nsw i64 [[SUB35]], 11502// CHECK2-NEXT: [[DIV37:%.*]] = sdiv i64 [[ADD36]], 11503// CHECK2-NEXT: [[SUB38:%.*]] = sub nsw i64 [[DIV37]], 11504// CHECK2-NEXT: store i64 [[SUB38]], ptr [[DOTCAPTURE_EXPR_30]], align 81505// CHECK2-NEXT: store i64 0, ptr [[DOTOMP_LB2]], align 81506// CHECK2-NEXT: store i64 1, ptr [[DOTOMP_ST2]], align 81507// CHECK2-NEXT: [[TMP21:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_30]], align 81508// CHECK2-NEXT: [[ADD39:%.*]] = add nsw i64 [[TMP21]], 11509// CHECK2-NEXT: store i64 [[ADD39]], ptr [[DOTOMP_NI2]], align 81510// CHECK2-NEXT: [[TMP22:%.*]] = load i64, ptr [[DOTOMP_NI05]], align 81511// CHECK2-NEXT: store i64 [[TMP22]], ptr [[DOTOMP_TEMP_140]], align 81512// CHECK2-NEXT: [[TMP23:%.*]] = load i64, ptr [[DOTOMP_TEMP_140]], align 81513// CHECK2-NEXT: [[TMP24:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 81514// CHECK2-NEXT: [[CMP41:%.*]] = icmp sgt i64 [[TMP23]], [[TMP24]]1515// CHECK2-NEXT: br i1 [[CMP41]], label %[[COND_TRUE42:.*]], label %[[COND_FALSE43:.*]]1516// CHECK2: [[COND_TRUE42]]:1517// CHECK2-NEXT: [[TMP25:%.*]] = load i64, ptr [[DOTOMP_TEMP_140]], align 81518// CHECK2-NEXT: br label %[[COND_END44:.*]]1519// CHECK2: [[COND_FALSE43]]:1520// CHECK2-NEXT: [[TMP26:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 81521// CHECK2-NEXT: br label %[[COND_END44]]1522// CHECK2: [[COND_END44]]:1523// CHECK2-NEXT: [[COND45:%.*]] = phi i64 [ [[TMP25]], %[[COND_TRUE42]] ], [ [[TMP26]], %[[COND_FALSE43]] ]1524// CHECK2-NEXT: store i64 [[COND45]], ptr [[DOTOMP_TEMP_2]], align 81525// CHECK2-NEXT: [[TMP27:%.*]] = load i64, ptr [[DOTOMP_TEMP_2]], align 81526// CHECK2-NEXT: [[TMP28:%.*]] = load i64, ptr [[DOTOMP_NI2]], align 81527// CHECK2-NEXT: [[CMP47:%.*]] = icmp sgt i64 [[TMP27]], [[TMP28]]1528// CHECK2-NEXT: br i1 [[CMP47]], label %[[COND_TRUE48:.*]], label %[[COND_FALSE49:.*]]1529// CHECK2: [[COND_TRUE48]]:1530// CHECK2-NEXT: [[TMP29:%.*]] = load i64, ptr [[DOTOMP_TEMP_2]], align 81531// CHECK2-NEXT: br label %[[COND_END50:.*]]1532// CHECK2: [[COND_FALSE49]]:1533// CHECK2-NEXT: [[TMP30:%.*]] = load i64, ptr [[DOTOMP_NI2]], align 81534// CHECK2-NEXT: br label %[[COND_END50]]1535// CHECK2: [[COND_END50]]:1536// CHECK2-NEXT: [[COND51:%.*]] = phi i64 [ [[TMP29]], %[[COND_TRUE48]] ], [ [[TMP30]], %[[COND_FALSE49]] ]1537// CHECK2-NEXT: store i64 [[COND51]], ptr [[DOTOMP_FUSE_MAX46]], align 81538// CHECK2-NEXT: store i64 0, ptr [[DOTOMP_FUSE_INDEX52]], align 81539// CHECK2-NEXT: br label %[[FOR_COND:.*]]1540// CHECK2: [[FOR_COND]]:1541// CHECK2-NEXT: [[TMP31:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 81542// CHECK2-NEXT: [[TMP32:%.*]] = load i64, ptr [[DOTOMP_FUSE_MAX46]], align 81543// CHECK2-NEXT: [[CMP53:%.*]] = icmp slt i64 [[TMP31]], [[TMP32]]1544// CHECK2-NEXT: br i1 [[CMP53]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]1545// CHECK2: [[FOR_BODY]]:1546// CHECK2-NEXT: [[TMP33:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 81547// CHECK2-NEXT: [[TMP34:%.*]] = load i64, ptr [[DOTOMP_NI05]], align 81548// CHECK2-NEXT: [[CMP54:%.*]] = icmp slt i64 [[TMP33]], [[TMP34]]1549// CHECK2-NEXT: br i1 [[CMP54]], label %[[IF_THEN:.*]], label %[[IF_END74:.*]]1550// CHECK2: [[IF_THEN]]:1551// CHECK2-NEXT: [[TMP35:%.*]] = load i32, ptr [[DOTOMP_LB03]], align 41552// CHECK2-NEXT: [[CONV55:%.*]] = sext i32 [[TMP35]] to i641553// CHECK2-NEXT: [[TMP36:%.*]] = load i32, ptr [[DOTOMP_ST04]], align 41554// CHECK2-NEXT: [[CONV56:%.*]] = sext i32 [[TMP36]] to i641555// CHECK2-NEXT: [[TMP37:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 81556// CHECK2-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV56]], [[TMP37]]1557// CHECK2-NEXT: [[ADD57:%.*]] = add nsw i64 [[CONV55]], [[MUL]]1558// CHECK2-NEXT: [[CONV58:%.*]] = trunc i64 [[ADD57]] to i321559// CHECK2-NEXT: store i32 [[CONV58]], ptr [[DOTOMP_IV06]], align 41560// CHECK2-NEXT: [[TMP38:%.*]] = load i32, ptr [[DOTOMP_IV06]], align 41561// CHECK2-NEXT: [[MUL59:%.*]] = mul nsw i32 [[TMP38]], 11562// CHECK2-NEXT: [[ADD60:%.*]] = add nsw i32 0, [[MUL59]]1563// CHECK2-NEXT: store i32 [[ADD60]], ptr [[DOTOMP_FUSE_INDEX]], align 41564// CHECK2-NEXT: [[TMP39:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41565// CHECK2-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 41566// CHECK2-NEXT: [[CMP61:%.*]] = icmp slt i32 [[TMP39]], [[TMP40]]1567// CHECK2-NEXT: br i1 [[CMP61]], label %[[IF_THEN62:.*]], label %[[IF_END:.*]]1568// CHECK2: [[IF_THEN62]]:1569// CHECK2-NEXT: [[TMP41:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 41570// CHECK2-NEXT: [[TMP42:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 41571// CHECK2-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41572// CHECK2-NEXT: [[MUL63:%.*]] = mul nsw i32 [[TMP42]], [[TMP43]]1573// CHECK2-NEXT: [[ADD64:%.*]] = add nsw i32 [[TMP41]], [[MUL63]]1574// CHECK2-NEXT: store i32 [[ADD64]], ptr [[DOTOMP_IV0]], align 41575// CHECK2-NEXT: [[TMP44:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 41576// CHECK2-NEXT: [[MUL65:%.*]] = mul nsw i32 [[TMP44]], 11577// CHECK2-NEXT: [[ADD66:%.*]] = add nsw i32 0, [[MUL65]]1578// CHECK2-NEXT: store i32 [[ADD66]], ptr [[I]], align 41579// CHECK2-NEXT: [[TMP45:%.*]] = load i32, ptr [[I]], align 41580// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP45]])1581// CHECK2-NEXT: br label %[[IF_END]]1582// CHECK2: [[IF_END]]:1583// CHECK2-NEXT: [[TMP46:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41584// CHECK2-NEXT: [[TMP47:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41585// CHECK2-NEXT: [[CMP67:%.*]] = icmp slt i32 [[TMP46]], [[TMP47]]1586// CHECK2-NEXT: br i1 [[CMP67]], label %[[IF_THEN68:.*]], label %[[IF_END73:.*]]1587// CHECK2: [[IF_THEN68]]:1588// CHECK2-NEXT: [[TMP48:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 41589// CHECK2-NEXT: [[TMP49:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 41590// CHECK2-NEXT: [[TMP50:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41591// CHECK2-NEXT: [[MUL69:%.*]] = mul nsw i32 [[TMP49]], [[TMP50]]1592// CHECK2-NEXT: [[ADD70:%.*]] = add nsw i32 [[TMP48]], [[MUL69]]1593// CHECK2-NEXT: store i32 [[ADD70]], ptr [[DOTOMP_IV1]], align 41594// CHECK2-NEXT: [[TMP51:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 41595// CHECK2-NEXT: [[MUL71:%.*]] = mul nsw i32 [[TMP51]], 21596// CHECK2-NEXT: [[ADD72:%.*]] = add nsw i32 0, [[MUL71]]1597// CHECK2-NEXT: store i32 [[ADD72]], ptr [[J]], align 41598// CHECK2-NEXT: [[TMP52:%.*]] = load i32, ptr [[J]], align 41599// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP52]])1600// CHECK2-NEXT: br label %[[IF_END73]]1601// CHECK2: [[IF_END73]]:1602// CHECK2-NEXT: br label %[[IF_END74]]1603// CHECK2: [[IF_END74]]:1604// CHECK2-NEXT: [[TMP53:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 81605// CHECK2-NEXT: [[TMP54:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 81606// CHECK2-NEXT: [[CMP75:%.*]] = icmp slt i64 [[TMP53]], [[TMP54]]1607// CHECK2-NEXT: br i1 [[CMP75]], label %[[IF_THEN76:.*]], label %[[IF_END81:.*]]1608// CHECK2: [[IF_THEN76]]:1609// CHECK2-NEXT: [[TMP55:%.*]] = load i64, ptr [[DOTOMP_LB116]], align 81610// CHECK2-NEXT: [[TMP56:%.*]] = load i64, ptr [[DOTOMP_ST117]], align 81611// CHECK2-NEXT: [[TMP57:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 81612// CHECK2-NEXT: [[MUL77:%.*]] = mul nsw i64 [[TMP56]], [[TMP57]]1613// CHECK2-NEXT: [[ADD78:%.*]] = add nsw i64 [[TMP55]], [[MUL77]]1614// CHECK2-NEXT: store i64 [[ADD78]], ptr [[DOTOMP_IV120]], align 81615// CHECK2-NEXT: [[TMP58:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_8]], align 81616// CHECK2-NEXT: [[TMP59:%.*]] = load i64, ptr [[DOTOMP_IV120]], align 81617// CHECK2-NEXT: [[MUL79:%.*]] = mul nsw i64 [[TMP59]], 11618// CHECK2-NEXT: [[ADD_PTR80:%.*]] = getelementptr inbounds double, ptr [[TMP58]], i64 [[MUL79]]1619// CHECK2-NEXT: store ptr [[ADD_PTR80]], ptr [[__BEGIN2]], align 81620// CHECK2-NEXT: [[TMP60:%.*]] = load ptr, ptr [[__BEGIN2]], align 81621// CHECK2-NEXT: store ptr [[TMP60]], ptr [[V]], align 81622// CHECK2-NEXT: [[TMP61:%.*]] = load i32, ptr [[C]], align 41623// CHECK2-NEXT: [[TMP62:%.*]] = load ptr, ptr [[V]], align 81624// CHECK2-NEXT: [[TMP63:%.*]] = load double, ptr [[TMP62]], align 81625// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP61]], double noundef [[TMP63]])1626// CHECK2-NEXT: br label %[[IF_END81]]1627// CHECK2: [[IF_END81]]:1628// CHECK2-NEXT: [[TMP64:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 81629// CHECK2-NEXT: [[TMP65:%.*]] = load i64, ptr [[DOTOMP_NI2]], align 81630// CHECK2-NEXT: [[CMP82:%.*]] = icmp slt i64 [[TMP64]], [[TMP65]]1631// CHECK2-NEXT: br i1 [[CMP82]], label %[[IF_THEN83:.*]], label %[[IF_END88:.*]]1632// CHECK2: [[IF_THEN83]]:1633// CHECK2-NEXT: [[TMP66:%.*]] = load i64, ptr [[DOTOMP_LB2]], align 81634// CHECK2-NEXT: [[TMP67:%.*]] = load i64, ptr [[DOTOMP_ST2]], align 81635// CHECK2-NEXT: [[TMP68:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 81636// CHECK2-NEXT: [[MUL84:%.*]] = mul nsw i64 [[TMP67]], [[TMP68]]1637// CHECK2-NEXT: [[ADD85:%.*]] = add nsw i64 [[TMP66]], [[MUL84]]1638// CHECK2-NEXT: store i64 [[ADD85]], ptr [[DOTOMP_IV2]], align 81639// CHECK2-NEXT: [[TMP69:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_27]], align 81640// CHECK2-NEXT: [[TMP70:%.*]] = load i64, ptr [[DOTOMP_IV2]], align 81641// CHECK2-NEXT: [[MUL86:%.*]] = mul nsw i64 [[TMP70]], 11642// CHECK2-NEXT: [[ADD_PTR87:%.*]] = getelementptr inbounds double, ptr [[TMP69]], i64 [[MUL86]]1643// CHECK2-NEXT: store ptr [[ADD_PTR87]], ptr [[__BEGIN225]], align 81644// CHECK2-NEXT: [[TMP71:%.*]] = load ptr, ptr [[__BEGIN225]], align 81645// CHECK2-NEXT: store ptr [[TMP71]], ptr [[VV]], align 81646// CHECK2-NEXT: [[TMP72:%.*]] = load i32, ptr [[CC]], align 41647// CHECK2-NEXT: [[TMP73:%.*]] = load ptr, ptr [[VV]], align 81648// CHECK2-NEXT: [[TMP74:%.*]] = load double, ptr [[TMP73]], align 81649// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP72]], double noundef [[TMP74]])1650// CHECK2-NEXT: br label %[[IF_END88]]1651// CHECK2: [[IF_END88]]:1652// CHECK2-NEXT: br label %[[FOR_INC:.*]]1653// CHECK2: [[FOR_INC]]:1654// CHECK2-NEXT: [[TMP75:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX52]], align 81655// CHECK2-NEXT: [[INC:%.*]] = add nsw i64 [[TMP75]], 11656// CHECK2-NEXT: store i64 [[INC]], ptr [[DOTOMP_FUSE_INDEX52]], align 81657// CHECK2-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP5:![0-9]+]]1658// CHECK2: [[FOR_END]]:1659// CHECK2-NEXT: ret void1660//1661//1662// CHECK2-LABEL: define dso_local void @foo4(1663// CHECK2-SAME: ) #[[ATTR0]] {1664// CHECK2-NEXT: [[ENTRY:.*:]]1665// CHECK2-NEXT: [[ARR:%.*]] = alloca [256 x double], align 161666// CHECK2-NEXT: [[J:%.*]] = alloca i32, align 41667// CHECK2-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 41668// CHECK2-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 41669// CHECK2-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 41670// CHECK2-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 41671// CHECK2-NEXT: [[K:%.*]] = alloca i32, align 41672// CHECK2-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 41673// CHECK2-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 41674// CHECK2-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 41675// CHECK2-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 41676// CHECK2-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 41677// CHECK2-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 41678// CHECK2-NEXT: [[I:%.*]] = alloca i32, align 41679// CHECK2-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 41680// CHECK2-NEXT: [[C:%.*]] = alloca i32, align 41681// CHECK2-NEXT: [[__RANGE2:%.*]] = alloca ptr, align 81682// CHECK2-NEXT: [[__BEGIN2:%.*]] = alloca ptr, align 81683// CHECK2-NEXT: [[__END2:%.*]] = alloca ptr, align 81684// CHECK2-NEXT: [[V:%.*]] = alloca ptr, align 81685// CHECK2-NEXT: store i32 0, ptr [[J]], align 41686// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 41687// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 41688// CHECK2-NEXT: store i32 128, ptr [[DOTOMP_NI0]], align 41689// CHECK2-NEXT: store i32 0, ptr [[K]], align 41690// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 41691// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 41692// CHECK2-NEXT: store i32 64, ptr [[DOTOMP_NI1]], align 41693// CHECK2-NEXT: [[TMP0:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 41694// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTOMP_TEMP_1]], align 41695// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 41696// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41697// CHECK2-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP1]], [[TMP2]]1698// CHECK2-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]1699// CHECK2: [[COND_TRUE]]:1700// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 41701// CHECK2-NEXT: br label %[[COND_END:.*]]1702// CHECK2: [[COND_FALSE]]:1703// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41704// CHECK2-NEXT: br label %[[COND_END]]1705// CHECK2: [[COND_END]]:1706// CHECK2-NEXT: [[COND:%.*]] = phi i32 [ [[TMP3]], %[[COND_TRUE]] ], [ [[TMP4]], %[[COND_FALSE]] ]1707// CHECK2-NEXT: store i32 [[COND]], ptr [[DOTOMP_FUSE_MAX]], align 41708// CHECK2-NEXT: store i32 0, ptr [[I]], align 41709// CHECK2-NEXT: br label %[[FOR_COND:.*]]1710// CHECK2: [[FOR_COND]]:1711// CHECK2-NEXT: [[TMP5:%.*]] = load i32, ptr [[I]], align 41712// CHECK2-NEXT: [[CMP1:%.*]] = icmp slt i32 [[TMP5]], 1281713// CHECK2-NEXT: br i1 [[CMP1]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]1714// CHECK2: [[FOR_BODY]]:1715// CHECK2-NEXT: [[TMP6:%.*]] = load i32, ptr [[I]], align 41716// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP6]])1717// CHECK2-NEXT: br label %[[FOR_INC:.*]]1718// CHECK2: [[FOR_INC]]:1719// CHECK2-NEXT: [[TMP7:%.*]] = load i32, ptr [[I]], align 41720// CHECK2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP7]], 11721// CHECK2-NEXT: store i32 [[INC]], ptr [[I]], align 41722// CHECK2-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP6:![0-9]+]]1723// CHECK2: [[FOR_END]]:1724// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 41725// CHECK2-NEXT: br label %[[FOR_COND2:.*]]1726// CHECK2: [[FOR_COND2]]:1727// CHECK2-NEXT: [[TMP8:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41728// CHECK2-NEXT: [[TMP9:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 41729// CHECK2-NEXT: [[CMP3:%.*]] = icmp slt i32 [[TMP8]], [[TMP9]]1730// CHECK2-NEXT: br i1 [[CMP3]], label %[[FOR_BODY4:.*]], label %[[FOR_END17:.*]]1731// CHECK2: [[FOR_BODY4]]:1732// CHECK2-NEXT: [[TMP10:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41733// CHECK2-NEXT: [[TMP11:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 41734// CHECK2-NEXT: [[CMP5:%.*]] = icmp slt i32 [[TMP10]], [[TMP11]]1735// CHECK2-NEXT: br i1 [[CMP5]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]1736// CHECK2: [[IF_THEN]]:1737// CHECK2-NEXT: [[TMP12:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 41738// CHECK2-NEXT: [[TMP13:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 41739// CHECK2-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41740// CHECK2-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP13]], [[TMP14]]1741// CHECK2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP12]], [[MUL]]1742// CHECK2-NEXT: store i32 [[ADD]], ptr [[DOTOMP_IV0]], align 41743// CHECK2-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 41744// CHECK2-NEXT: [[MUL6:%.*]] = mul nsw i32 [[TMP15]], 21745// CHECK2-NEXT: [[ADD7:%.*]] = add nsw i32 0, [[MUL6]]1746// CHECK2-NEXT: store i32 [[ADD7]], ptr [[J]], align 41747// CHECK2-NEXT: [[TMP16:%.*]] = load i32, ptr [[J]], align 41748// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP16]])1749// CHECK2-NEXT: br label %[[IF_END]]1750// CHECK2: [[IF_END]]:1751// CHECK2-NEXT: [[TMP17:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41752// CHECK2-NEXT: [[TMP18:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41753// CHECK2-NEXT: [[CMP8:%.*]] = icmp slt i32 [[TMP17]], [[TMP18]]1754// CHECK2-NEXT: br i1 [[CMP8]], label %[[IF_THEN9:.*]], label %[[IF_END14:.*]]1755// CHECK2: [[IF_THEN9]]:1756// CHECK2-NEXT: [[TMP19:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 41757// CHECK2-NEXT: [[TMP20:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 41758// CHECK2-NEXT: [[TMP21:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41759// CHECK2-NEXT: [[MUL10:%.*]] = mul nsw i32 [[TMP20]], [[TMP21]]1760// CHECK2-NEXT: [[ADD11:%.*]] = add nsw i32 [[TMP19]], [[MUL10]]1761// CHECK2-NEXT: store i32 [[ADD11]], ptr [[DOTOMP_IV1]], align 41762// CHECK2-NEXT: [[TMP22:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 41763// CHECK2-NEXT: [[MUL12:%.*]] = mul nsw i32 [[TMP22]], 11764// CHECK2-NEXT: [[ADD13:%.*]] = add nsw i32 0, [[MUL12]]1765// CHECK2-NEXT: store i32 [[ADD13]], ptr [[K]], align 41766// CHECK2-NEXT: [[TMP23:%.*]] = load i32, ptr [[K]], align 41767// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP23]])1768// CHECK2-NEXT: br label %[[IF_END14]]1769// CHECK2: [[IF_END14]]:1770// CHECK2-NEXT: br label %[[FOR_INC15:.*]]1771// CHECK2: [[FOR_INC15]]:1772// CHECK2-NEXT: [[TMP24:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41773// CHECK2-NEXT: [[INC16:%.*]] = add nsw i32 [[TMP24]], 11774// CHECK2-NEXT: store i32 [[INC16]], ptr [[DOTOMP_FUSE_INDEX]], align 41775// CHECK2-NEXT: br label %[[FOR_COND2]], !llvm.loop [[LOOP7:![0-9]+]]1776// CHECK2: [[FOR_END17]]:1777// CHECK2-NEXT: store i32 42, ptr [[C]], align 41778// CHECK2-NEXT: store ptr [[ARR]], ptr [[__RANGE2]], align 81779// CHECK2-NEXT: [[TMP25:%.*]] = load ptr, ptr [[__RANGE2]], align 81780// CHECK2-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP25]], i64 0, i64 01781// CHECK2-NEXT: store ptr [[ARRAYDECAY]], ptr [[__BEGIN2]], align 81782// CHECK2-NEXT: [[TMP26:%.*]] = load ptr, ptr [[__RANGE2]], align 81783// CHECK2-NEXT: [[ARRAYDECAY18:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP26]], i64 0, i64 01784// CHECK2-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY18]], i64 2561785// CHECK2-NEXT: store ptr [[ADD_PTR]], ptr [[__END2]], align 81786// CHECK2-NEXT: br label %[[FOR_COND19:.*]]1787// CHECK2: [[FOR_COND19]]:1788// CHECK2-NEXT: [[TMP27:%.*]] = load ptr, ptr [[__BEGIN2]], align 81789// CHECK2-NEXT: [[TMP28:%.*]] = load ptr, ptr [[__END2]], align 81790// CHECK2-NEXT: [[CMP20:%.*]] = icmp ne ptr [[TMP27]], [[TMP28]]1791// CHECK2-NEXT: br i1 [[CMP20]], label %[[FOR_BODY21:.*]], label %[[FOR_END23:.*]]1792// CHECK2: [[FOR_BODY21]]:1793// CHECK2-NEXT: [[TMP29:%.*]] = load ptr, ptr [[__BEGIN2]], align 81794// CHECK2-NEXT: store ptr [[TMP29]], ptr [[V]], align 81795// CHECK2-NEXT: [[TMP30:%.*]] = load i32, ptr [[C]], align 41796// CHECK2-NEXT: [[TMP31:%.*]] = load ptr, ptr [[V]], align 81797// CHECK2-NEXT: [[TMP32:%.*]] = load double, ptr [[TMP31]], align 81798// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP30]], double noundef [[TMP32]])1799// CHECK2-NEXT: br label %[[FOR_INC22:.*]]1800// CHECK2: [[FOR_INC22]]:1801// CHECK2-NEXT: [[TMP33:%.*]] = load ptr, ptr [[__BEGIN2]], align 81802// CHECK2-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP33]], i32 11803// CHECK2-NEXT: store ptr [[INCDEC_PTR]], ptr [[__BEGIN2]], align 81804// CHECK2-NEXT: br label %[[FOR_COND19]]1805// CHECK2: [[FOR_END23]]:1806// CHECK2-NEXT: ret void1807//1808//1809// CHECK2-LABEL: define dso_local void @foo5(1810// CHECK2-SAME: ) #[[ATTR0]] {1811// CHECK2-NEXT: [[ENTRY:.*:]]1812// CHECK2-NEXT: [[ARR:%.*]] = alloca [256 x double], align 161813// CHECK2-NEXT: [[J:%.*]] = alloca i32, align 41814// CHECK2-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 41815// CHECK2-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 41816// CHECK2-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 41817// CHECK2-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 41818// CHECK2-NEXT: [[K:%.*]] = alloca i32, align 41819// CHECK2-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 41820// CHECK2-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 41821// CHECK2-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 41822// CHECK2-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 41823// CHECK2-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 41824// CHECK2-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 41825// CHECK2-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 41826// CHECK2-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 41827// CHECK2-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 41828// CHECK2-NEXT: [[DOTOMP_LB03:%.*]] = alloca i32, align 41829// CHECK2-NEXT: [[DOTOMP_ST04:%.*]] = alloca i32, align 41830// CHECK2-NEXT: [[DOTOMP_NI05:%.*]] = alloca i64, align 81831// CHECK2-NEXT: [[DOTOMP_IV06:%.*]] = alloca i32, align 41832// CHECK2-NEXT: [[C:%.*]] = alloca i32, align 41833// CHECK2-NEXT: [[__RANGE2:%.*]] = alloca ptr, align 81834// CHECK2-NEXT: [[__END2:%.*]] = alloca ptr, align 81835// CHECK2-NEXT: [[__BEGIN2:%.*]] = alloca ptr, align 81836// CHECK2-NEXT: [[DOTCAPTURE_EXPR_8:%.*]] = alloca ptr, align 81837// CHECK2-NEXT: [[DOTCAPTURE_EXPR_10:%.*]] = alloca ptr, align 81838// CHECK2-NEXT: [[DOTCAPTURE_EXPR_11:%.*]] = alloca i64, align 81839// CHECK2-NEXT: [[DOTOMP_LB116:%.*]] = alloca i64, align 81840// CHECK2-NEXT: [[DOTOMP_ST117:%.*]] = alloca i64, align 81841// CHECK2-NEXT: [[DOTOMP_NI118:%.*]] = alloca i64, align 81842// CHECK2-NEXT: [[DOTOMP_IV120:%.*]] = alloca i64, align 81843// CHECK2-NEXT: [[DOTOMP_TEMP_121:%.*]] = alloca i64, align 81844// CHECK2-NEXT: [[DOTOMP_FUSE_MAX22:%.*]] = alloca i64, align 81845// CHECK2-NEXT: [[I:%.*]] = alloca i32, align 41846// CHECK2-NEXT: [[DOTOMP_FUSE_INDEX29:%.*]] = alloca i64, align 81847// CHECK2-NEXT: [[V:%.*]] = alloca ptr, align 81848// CHECK2-NEXT: [[CC:%.*]] = alloca i32, align 41849// CHECK2-NEXT: [[__RANGE264:%.*]] = alloca ptr, align 81850// CHECK2-NEXT: [[__BEGIN265:%.*]] = alloca ptr, align 81851// CHECK2-NEXT: [[__END267:%.*]] = alloca ptr, align 81852// CHECK2-NEXT: [[VV:%.*]] = alloca ptr, align 81853// CHECK2-NEXT: store i32 0, ptr [[J]], align 41854// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 41855// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 41856// CHECK2-NEXT: store i32 128, ptr [[DOTOMP_NI0]], align 41857// CHECK2-NEXT: store i32 0, ptr [[K]], align 41858// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 41859// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 41860// CHECK2-NEXT: store i32 512, ptr [[DOTOMP_NI1]], align 41861// CHECK2-NEXT: [[TMP0:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 41862// CHECK2-NEXT: store i32 [[TMP0]], ptr [[DOTOMP_TEMP_1]], align 41863// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 41864// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41865// CHECK2-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP1]], [[TMP2]]1866// CHECK2-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]1867// CHECK2: [[COND_TRUE]]:1868// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 41869// CHECK2-NEXT: br label %[[COND_END:.*]]1870// CHECK2: [[COND_FALSE]]:1871// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41872// CHECK2-NEXT: br label %[[COND_END]]1873// CHECK2: [[COND_END]]:1874// CHECK2-NEXT: [[COND:%.*]] = phi i32 [ [[TMP3]], %[[COND_TRUE]] ], [ [[TMP4]], %[[COND_FALSE]] ]1875// CHECK2-NEXT: store i32 [[COND]], ptr [[DOTOMP_FUSE_MAX]], align 41876// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 41877// CHECK2-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 41878// CHECK2-NEXT: store i32 [[TMP5]], ptr [[DOTCAPTURE_EXPR_]], align 41879// CHECK2-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 41880// CHECK2-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP6]], 01881// CHECK2-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 11882// CHECK2-NEXT: [[SUB2:%.*]] = sub nsw i32 [[DIV]], 11883// CHECK2-NEXT: store i32 [[SUB2]], ptr [[DOTCAPTURE_EXPR_1]], align 41884// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB03]], align 41885// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST04]], align 41886// CHECK2-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 41887// CHECK2-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP7]], 11888// CHECK2-NEXT: [[CONV:%.*]] = sext i32 [[ADD]] to i641889// CHECK2-NEXT: store i64 [[CONV]], ptr [[DOTOMP_NI05]], align 81890// CHECK2-NEXT: store i32 42, ptr [[C]], align 41891// CHECK2-NEXT: store ptr [[ARR]], ptr [[__RANGE2]], align 81892// CHECK2-NEXT: [[TMP8:%.*]] = load ptr, ptr [[__RANGE2]], align 81893// CHECK2-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP8]], i64 0, i64 01894// CHECK2-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY]], i64 2561895// CHECK2-NEXT: store ptr [[ADD_PTR]], ptr [[__END2]], align 81896// CHECK2-NEXT: [[TMP9:%.*]] = load ptr, ptr [[__RANGE2]], align 81897// CHECK2-NEXT: [[ARRAYDECAY7:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP9]], i64 0, i64 01898// CHECK2-NEXT: store ptr [[ARRAYDECAY7]], ptr [[__BEGIN2]], align 81899// CHECK2-NEXT: [[TMP10:%.*]] = load ptr, ptr [[__RANGE2]], align 81900// CHECK2-NEXT: [[ARRAYDECAY9:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP10]], i64 0, i64 01901// CHECK2-NEXT: store ptr [[ARRAYDECAY9]], ptr [[DOTCAPTURE_EXPR_8]], align 81902// CHECK2-NEXT: [[TMP11:%.*]] = load ptr, ptr [[__END2]], align 81903// CHECK2-NEXT: store ptr [[TMP11]], ptr [[DOTCAPTURE_EXPR_10]], align 81904// CHECK2-NEXT: [[TMP12:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_10]], align 81905// CHECK2-NEXT: [[TMP13:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_8]], align 81906// CHECK2-NEXT: [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[TMP12]] to i641907// CHECK2-NEXT: [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[TMP13]] to i641908// CHECK2-NEXT: [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], [[SUB_PTR_RHS_CAST]]1909// CHECK2-NEXT: [[SUB_PTR_DIV:%.*]] = sdiv exact i64 [[SUB_PTR_SUB]], 81910// CHECK2-NEXT: [[SUB12:%.*]] = sub nsw i64 [[SUB_PTR_DIV]], 11911// CHECK2-NEXT: [[ADD13:%.*]] = add nsw i64 [[SUB12]], 11912// CHECK2-NEXT: [[DIV14:%.*]] = sdiv i64 [[ADD13]], 11913// CHECK2-NEXT: [[SUB15:%.*]] = sub nsw i64 [[DIV14]], 11914// CHECK2-NEXT: store i64 [[SUB15]], ptr [[DOTCAPTURE_EXPR_11]], align 81915// CHECK2-NEXT: store i64 0, ptr [[DOTOMP_LB116]], align 81916// CHECK2-NEXT: store i64 1, ptr [[DOTOMP_ST117]], align 81917// CHECK2-NEXT: [[TMP14:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_11]], align 81918// CHECK2-NEXT: [[ADD19:%.*]] = add nsw i64 [[TMP14]], 11919// CHECK2-NEXT: store i64 [[ADD19]], ptr [[DOTOMP_NI118]], align 81920// CHECK2-NEXT: [[TMP15:%.*]] = load i64, ptr [[DOTOMP_NI05]], align 81921// CHECK2-NEXT: store i64 [[TMP15]], ptr [[DOTOMP_TEMP_121]], align 81922// CHECK2-NEXT: [[TMP16:%.*]] = load i64, ptr [[DOTOMP_TEMP_121]], align 81923// CHECK2-NEXT: [[TMP17:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 81924// CHECK2-NEXT: [[CMP23:%.*]] = icmp sgt i64 [[TMP16]], [[TMP17]]1925// CHECK2-NEXT: br i1 [[CMP23]], label %[[COND_TRUE24:.*]], label %[[COND_FALSE25:.*]]1926// CHECK2: [[COND_TRUE24]]:1927// CHECK2-NEXT: [[TMP18:%.*]] = load i64, ptr [[DOTOMP_TEMP_121]], align 81928// CHECK2-NEXT: br label %[[COND_END26:.*]]1929// CHECK2: [[COND_FALSE25]]:1930// CHECK2-NEXT: [[TMP19:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 81931// CHECK2-NEXT: br label %[[COND_END26]]1932// CHECK2: [[COND_END26]]:1933// CHECK2-NEXT: [[COND27:%.*]] = phi i64 [ [[TMP18]], %[[COND_TRUE24]] ], [ [[TMP19]], %[[COND_FALSE25]] ]1934// CHECK2-NEXT: store i64 [[COND27]], ptr [[DOTOMP_FUSE_MAX22]], align 81935// CHECK2-NEXT: store i32 0, ptr [[I]], align 41936// CHECK2-NEXT: br label %[[FOR_COND:.*]]1937// CHECK2: [[FOR_COND]]:1938// CHECK2-NEXT: [[TMP20:%.*]] = load i32, ptr [[I]], align 41939// CHECK2-NEXT: [[CMP28:%.*]] = icmp slt i32 [[TMP20]], 1281940// CHECK2-NEXT: br i1 [[CMP28]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]1941// CHECK2: [[FOR_BODY]]:1942// CHECK2-NEXT: [[TMP21:%.*]] = load i32, ptr [[I]], align 41943// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP21]])1944// CHECK2-NEXT: br label %[[FOR_INC:.*]]1945// CHECK2: [[FOR_INC]]:1946// CHECK2-NEXT: [[TMP22:%.*]] = load i32, ptr [[I]], align 41947// CHECK2-NEXT: [[INC:%.*]] = add nsw i32 [[TMP22]], 11948// CHECK2-NEXT: store i32 [[INC]], ptr [[I]], align 41949// CHECK2-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP8:![0-9]+]]1950// CHECK2: [[FOR_END]]:1951// CHECK2-NEXT: store i64 0, ptr [[DOTOMP_FUSE_INDEX29]], align 81952// CHECK2-NEXT: br label %[[FOR_COND30:.*]]1953// CHECK2: [[FOR_COND30]]:1954// CHECK2-NEXT: [[TMP23:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 81955// CHECK2-NEXT: [[TMP24:%.*]] = load i64, ptr [[DOTOMP_FUSE_MAX22]], align 81956// CHECK2-NEXT: [[CMP31:%.*]] = icmp slt i64 [[TMP23]], [[TMP24]]1957// CHECK2-NEXT: br i1 [[CMP31]], label %[[FOR_BODY32:.*]], label %[[FOR_END63:.*]]1958// CHECK2: [[FOR_BODY32]]:1959// CHECK2-NEXT: [[TMP25:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 81960// CHECK2-NEXT: [[TMP26:%.*]] = load i64, ptr [[DOTOMP_NI05]], align 81961// CHECK2-NEXT: [[CMP33:%.*]] = icmp slt i64 [[TMP25]], [[TMP26]]1962// CHECK2-NEXT: br i1 [[CMP33]], label %[[IF_THEN:.*]], label %[[IF_END53:.*]]1963// CHECK2: [[IF_THEN]]:1964// CHECK2-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTOMP_LB03]], align 41965// CHECK2-NEXT: [[CONV34:%.*]] = sext i32 [[TMP27]] to i641966// CHECK2-NEXT: [[TMP28:%.*]] = load i32, ptr [[DOTOMP_ST04]], align 41967// CHECK2-NEXT: [[CONV35:%.*]] = sext i32 [[TMP28]] to i641968// CHECK2-NEXT: [[TMP29:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 81969// CHECK2-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV35]], [[TMP29]]1970// CHECK2-NEXT: [[ADD36:%.*]] = add nsw i64 [[CONV34]], [[MUL]]1971// CHECK2-NEXT: [[CONV37:%.*]] = trunc i64 [[ADD36]] to i321972// CHECK2-NEXT: store i32 [[CONV37]], ptr [[DOTOMP_IV06]], align 41973// CHECK2-NEXT: [[TMP30:%.*]] = load i32, ptr [[DOTOMP_IV06]], align 41974// CHECK2-NEXT: [[MUL38:%.*]] = mul nsw i32 [[TMP30]], 11975// CHECK2-NEXT: [[ADD39:%.*]] = add nsw i32 0, [[MUL38]]1976// CHECK2-NEXT: store i32 [[ADD39]], ptr [[DOTOMP_FUSE_INDEX]], align 41977// CHECK2-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41978// CHECK2-NEXT: [[TMP32:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 41979// CHECK2-NEXT: [[CMP40:%.*]] = icmp slt i32 [[TMP31]], [[TMP32]]1980// CHECK2-NEXT: br i1 [[CMP40]], label %[[IF_THEN41:.*]], label %[[IF_END:.*]]1981// CHECK2: [[IF_THEN41]]:1982// CHECK2-NEXT: [[TMP33:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 41983// CHECK2-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 41984// CHECK2-NEXT: [[TMP35:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41985// CHECK2-NEXT: [[MUL42:%.*]] = mul nsw i32 [[TMP34]], [[TMP35]]1986// CHECK2-NEXT: [[ADD43:%.*]] = add nsw i32 [[TMP33]], [[MUL42]]1987// CHECK2-NEXT: store i32 [[ADD43]], ptr [[DOTOMP_IV0]], align 41988// CHECK2-NEXT: [[TMP36:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 41989// CHECK2-NEXT: [[MUL44:%.*]] = mul nsw i32 [[TMP36]], 21990// CHECK2-NEXT: [[ADD45:%.*]] = add nsw i32 0, [[MUL44]]1991// CHECK2-NEXT: store i32 [[ADD45]], ptr [[J]], align 41992// CHECK2-NEXT: [[TMP37:%.*]] = load i32, ptr [[J]], align 41993// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP37]])1994// CHECK2-NEXT: br label %[[IF_END]]1995// CHECK2: [[IF_END]]:1996// CHECK2-NEXT: [[TMP38:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 41997// CHECK2-NEXT: [[TMP39:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 41998// CHECK2-NEXT: [[CMP46:%.*]] = icmp slt i32 [[TMP38]], [[TMP39]]1999// CHECK2-NEXT: br i1 [[CMP46]], label %[[IF_THEN47:.*]], label %[[IF_END52:.*]]2000// CHECK2: [[IF_THEN47]]:2001// CHECK2-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 42002// CHECK2-NEXT: [[TMP41:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 42003// CHECK2-NEXT: [[TMP42:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 42004// CHECK2-NEXT: [[MUL48:%.*]] = mul nsw i32 [[TMP41]], [[TMP42]]2005// CHECK2-NEXT: [[ADD49:%.*]] = add nsw i32 [[TMP40]], [[MUL48]]2006// CHECK2-NEXT: store i32 [[ADD49]], ptr [[DOTOMP_IV1]], align 42007// CHECK2-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 42008// CHECK2-NEXT: [[MUL50:%.*]] = mul nsw i32 [[TMP43]], 12009// CHECK2-NEXT: [[ADD51:%.*]] = add nsw i32 0, [[MUL50]]2010// CHECK2-NEXT: store i32 [[ADD51]], ptr [[K]], align 42011// CHECK2-NEXT: [[TMP44:%.*]] = load i32, ptr [[K]], align 42012// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP44]])2013// CHECK2-NEXT: br label %[[IF_END52]]2014// CHECK2: [[IF_END52]]:2015// CHECK2-NEXT: br label %[[IF_END53]]2016// CHECK2: [[IF_END53]]:2017// CHECK2-NEXT: [[TMP45:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 82018// CHECK2-NEXT: [[TMP46:%.*]] = load i64, ptr [[DOTOMP_NI118]], align 82019// CHECK2-NEXT: [[CMP54:%.*]] = icmp slt i64 [[TMP45]], [[TMP46]]2020// CHECK2-NEXT: br i1 [[CMP54]], label %[[IF_THEN55:.*]], label %[[IF_END60:.*]]2021// CHECK2: [[IF_THEN55]]:2022// CHECK2-NEXT: [[TMP47:%.*]] = load i64, ptr [[DOTOMP_LB116]], align 82023// CHECK2-NEXT: [[TMP48:%.*]] = load i64, ptr [[DOTOMP_ST117]], align 82024// CHECK2-NEXT: [[TMP49:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 82025// CHECK2-NEXT: [[MUL56:%.*]] = mul nsw i64 [[TMP48]], [[TMP49]]2026// CHECK2-NEXT: [[ADD57:%.*]] = add nsw i64 [[TMP47]], [[MUL56]]2027// CHECK2-NEXT: store i64 [[ADD57]], ptr [[DOTOMP_IV120]], align 82028// CHECK2-NEXT: [[TMP50:%.*]] = load ptr, ptr [[DOTCAPTURE_EXPR_8]], align 82029// CHECK2-NEXT: [[TMP51:%.*]] = load i64, ptr [[DOTOMP_IV120]], align 82030// CHECK2-NEXT: [[MUL58:%.*]] = mul nsw i64 [[TMP51]], 12031// CHECK2-NEXT: [[ADD_PTR59:%.*]] = getelementptr inbounds double, ptr [[TMP50]], i64 [[MUL58]]2032// CHECK2-NEXT: store ptr [[ADD_PTR59]], ptr [[__BEGIN2]], align 82033// CHECK2-NEXT: [[TMP52:%.*]] = load ptr, ptr [[__BEGIN2]], align 82034// CHECK2-NEXT: store ptr [[TMP52]], ptr [[V]], align 82035// CHECK2-NEXT: [[TMP53:%.*]] = load i32, ptr [[C]], align 42036// CHECK2-NEXT: [[TMP54:%.*]] = load ptr, ptr [[V]], align 82037// CHECK2-NEXT: [[TMP55:%.*]] = load double, ptr [[TMP54]], align 82038// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP53]], double noundef [[TMP55]])2039// CHECK2-NEXT: br label %[[IF_END60]]2040// CHECK2: [[IF_END60]]:2041// CHECK2-NEXT: br label %[[FOR_INC61:.*]]2042// CHECK2: [[FOR_INC61]]:2043// CHECK2-NEXT: [[TMP56:%.*]] = load i64, ptr [[DOTOMP_FUSE_INDEX29]], align 82044// CHECK2-NEXT: [[INC62:%.*]] = add nsw i64 [[TMP56]], 12045// CHECK2-NEXT: store i64 [[INC62]], ptr [[DOTOMP_FUSE_INDEX29]], align 82046// CHECK2-NEXT: br label %[[FOR_COND30]], !llvm.loop [[LOOP9:![0-9]+]]2047// CHECK2: [[FOR_END63]]:2048// CHECK2-NEXT: store i32 37, ptr [[CC]], align 42049// CHECK2-NEXT: store ptr [[ARR]], ptr [[__RANGE264]], align 82050// CHECK2-NEXT: [[TMP57:%.*]] = load ptr, ptr [[__RANGE264]], align 82051// CHECK2-NEXT: [[ARRAYDECAY66:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP57]], i64 0, i64 02052// CHECK2-NEXT: store ptr [[ARRAYDECAY66]], ptr [[__BEGIN265]], align 82053// CHECK2-NEXT: [[TMP58:%.*]] = load ptr, ptr [[__RANGE264]], align 82054// CHECK2-NEXT: [[ARRAYDECAY68:%.*]] = getelementptr inbounds [256 x double], ptr [[TMP58]], i64 0, i64 02055// CHECK2-NEXT: [[ADD_PTR69:%.*]] = getelementptr inbounds double, ptr [[ARRAYDECAY68]], i64 2562056// CHECK2-NEXT: store ptr [[ADD_PTR69]], ptr [[__END267]], align 82057// CHECK2-NEXT: br label %[[FOR_COND70:.*]]2058// CHECK2: [[FOR_COND70]]:2059// CHECK2-NEXT: [[TMP59:%.*]] = load ptr, ptr [[__BEGIN265]], align 82060// CHECK2-NEXT: [[TMP60:%.*]] = load ptr, ptr [[__END267]], align 82061// CHECK2-NEXT: [[CMP71:%.*]] = icmp ne ptr [[TMP59]], [[TMP60]]2062// CHECK2-NEXT: br i1 [[CMP71]], label %[[FOR_BODY72:.*]], label %[[FOR_END74:.*]]2063// CHECK2: [[FOR_BODY72]]:2064// CHECK2-NEXT: [[TMP61:%.*]] = load ptr, ptr [[__BEGIN265]], align 82065// CHECK2-NEXT: store ptr [[TMP61]], ptr [[VV]], align 82066// CHECK2-NEXT: [[TMP62:%.*]] = load i32, ptr [[CC]], align 42067// CHECK2-NEXT: [[TMP63:%.*]] = load ptr, ptr [[VV]], align 82068// CHECK2-NEXT: [[TMP64:%.*]] = load double, ptr [[TMP63]], align 82069// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP62]], double noundef [[TMP64]])2070// CHECK2-NEXT: br label %[[FOR_INC73:.*]]2071// CHECK2: [[FOR_INC73]]:2072// CHECK2-NEXT: [[TMP65:%.*]] = load ptr, ptr [[__BEGIN265]], align 82073// CHECK2-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP65]], i32 12074// CHECK2-NEXT: store ptr [[INCDEC_PTR]], ptr [[__BEGIN265]], align 82075// CHECK2-NEXT: br label %[[FOR_COND70]]2076// CHECK2: [[FOR_END74]]:2077// CHECK2-NEXT: ret void2078//2079//2080// CHECK2-LABEL: define dso_local void @tfoo2(2081// CHECK2-SAME: ) #[[ATTR0]] {2082// CHECK2-NEXT: [[ENTRY:.*:]]2083// CHECK2-NEXT: call void @_Z4foo2IiEvT_S0_S0_(i32 noundef 0, i32 noundef 64, i32 noundef 4)2084// CHECK2-NEXT: ret void2085//2086//2087// CHECK2-LABEL: define linkonce_odr void @_Z4foo2IiEvT_S0_S0_(2088// CHECK2-SAME: i32 noundef [[START:%.*]], i32 noundef [[END:%.*]], i32 noundef [[STEP:%.*]]) #[[ATTR0]] comdat {2089// CHECK2-NEXT: [[ENTRY:.*:]]2090// CHECK2-NEXT: [[START_ADDR:%.*]] = alloca i32, align 42091// CHECK2-NEXT: [[END_ADDR:%.*]] = alloca i32, align 42092// CHECK2-NEXT: [[STEP_ADDR:%.*]] = alloca i32, align 42093// CHECK2-NEXT: [[I:%.*]] = alloca i32, align 42094// CHECK2-NEXT: [[J:%.*]] = alloca i32, align 42095// CHECK2-NEXT: [[K:%.*]] = alloca i32, align 42096// CHECK2-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 42097// CHECK2-NEXT: [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 42098// CHECK2-NEXT: [[DOTNEW_STEP:%.*]] = alloca i32, align 42099// CHECK2-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 42100// CHECK2-NEXT: [[DOTOMP_LB0:%.*]] = alloca i32, align 42101// CHECK2-NEXT: [[DOTOMP_ST0:%.*]] = alloca i32, align 42102// CHECK2-NEXT: [[DOTOMP_NI0:%.*]] = alloca i32, align 42103// CHECK2-NEXT: [[DOTOMP_IV0:%.*]] = alloca i32, align 42104// CHECK2-NEXT: [[DOTCAPTURE_EXPR_6:%.*]] = alloca i32, align 42105// CHECK2-NEXT: [[DOTCAPTURE_EXPR_7:%.*]] = alloca i32, align 42106// CHECK2-NEXT: [[DOTNEW_STEP8:%.*]] = alloca i32, align 42107// CHECK2-NEXT: [[DOTCAPTURE_EXPR_9:%.*]] = alloca i32, align 42108// CHECK2-NEXT: [[DOTOMP_LB1:%.*]] = alloca i32, align 42109// CHECK2-NEXT: [[DOTOMP_ST1:%.*]] = alloca i32, align 42110// CHECK2-NEXT: [[DOTOMP_NI1:%.*]] = alloca i32, align 42111// CHECK2-NEXT: [[DOTOMP_IV1:%.*]] = alloca i32, align 42112// CHECK2-NEXT: [[DOTCAPTURE_EXPR_17:%.*]] = alloca i32, align 42113// CHECK2-NEXT: [[DOTCAPTURE_EXPR_19:%.*]] = alloca i32, align 42114// CHECK2-NEXT: [[DOTNEW_STEP21:%.*]] = alloca i32, align 42115// CHECK2-NEXT: [[DOTCAPTURE_EXPR_22:%.*]] = alloca i32, align 42116// CHECK2-NEXT: [[DOTOMP_LB2:%.*]] = alloca i32, align 42117// CHECK2-NEXT: [[DOTOMP_ST2:%.*]] = alloca i32, align 42118// CHECK2-NEXT: [[DOTOMP_NI2:%.*]] = alloca i32, align 42119// CHECK2-NEXT: [[DOTOMP_IV2:%.*]] = alloca i32, align 42120// CHECK2-NEXT: [[DOTOMP_TEMP_1:%.*]] = alloca i32, align 42121// CHECK2-NEXT: [[DOTOMP_TEMP_2:%.*]] = alloca i32, align 42122// CHECK2-NEXT: [[DOTOMP_FUSE_MAX:%.*]] = alloca i32, align 42123// CHECK2-NEXT: [[DOTOMP_FUSE_INDEX:%.*]] = alloca i32, align 42124// CHECK2-NEXT: store i32 [[START]], ptr [[START_ADDR]], align 42125// CHECK2-NEXT: store i32 [[END]], ptr [[END_ADDR]], align 42126// CHECK2-NEXT: store i32 [[STEP]], ptr [[STEP_ADDR]], align 42127// CHECK2-NEXT: [[TMP0:%.*]] = load i32, ptr [[START_ADDR]], align 42128// CHECK2-NEXT: store i32 [[TMP0]], ptr [[I]], align 42129// CHECK2-NEXT: [[TMP1:%.*]] = load i32, ptr [[START_ADDR]], align 42130// CHECK2-NEXT: store i32 [[TMP1]], ptr [[DOTCAPTURE_EXPR_]], align 42131// CHECK2-NEXT: [[TMP2:%.*]] = load i32, ptr [[END_ADDR]], align 42132// CHECK2-NEXT: store i32 [[TMP2]], ptr [[DOTCAPTURE_EXPR_1]], align 42133// CHECK2-NEXT: [[TMP3:%.*]] = load i32, ptr [[STEP_ADDR]], align 42134// CHECK2-NEXT: store i32 [[TMP3]], ptr [[DOTNEW_STEP]], align 42135// CHECK2-NEXT: [[TMP4:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_1]], align 42136// CHECK2-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42137// CHECK2-NEXT: [[SUB:%.*]] = sub i32 [[TMP4]], [[TMP5]]2138// CHECK2-NEXT: [[SUB3:%.*]] = sub i32 [[SUB]], 12139// CHECK2-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 42140// CHECK2-NEXT: [[ADD:%.*]] = add i32 [[SUB3]], [[TMP6]]2141// CHECK2-NEXT: [[TMP7:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 42142// CHECK2-NEXT: [[DIV:%.*]] = udiv i32 [[ADD]], [[TMP7]]2143// CHECK2-NEXT: [[SUB4:%.*]] = sub i32 [[DIV]], 12144// CHECK2-NEXT: store i32 [[SUB4]], ptr [[DOTCAPTURE_EXPR_2]], align 42145// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB0]], align 42146// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST0]], align 42147// CHECK2-NEXT: [[TMP8:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 42148// CHECK2-NEXT: [[ADD5:%.*]] = add i32 [[TMP8]], 12149// CHECK2-NEXT: store i32 [[ADD5]], ptr [[DOTOMP_NI0]], align 42150// CHECK2-NEXT: [[TMP9:%.*]] = load i32, ptr [[END_ADDR]], align 42151// CHECK2-NEXT: store i32 [[TMP9]], ptr [[J]], align 42152// CHECK2-NEXT: [[TMP10:%.*]] = load i32, ptr [[END_ADDR]], align 42153// CHECK2-NEXT: store i32 [[TMP10]], ptr [[DOTCAPTURE_EXPR_6]], align 42154// CHECK2-NEXT: [[TMP11:%.*]] = load i32, ptr [[START_ADDR]], align 42155// CHECK2-NEXT: store i32 [[TMP11]], ptr [[DOTCAPTURE_EXPR_7]], align 42156// CHECK2-NEXT: [[TMP12:%.*]] = load i32, ptr [[STEP_ADDR]], align 42157// CHECK2-NEXT: store i32 [[TMP12]], ptr [[DOTNEW_STEP8]], align 42158// CHECK2-NEXT: [[TMP13:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_6]], align 42159// CHECK2-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_7]], align 42160// CHECK2-NEXT: [[SUB10:%.*]] = sub i32 [[TMP13]], [[TMP14]]2161// CHECK2-NEXT: [[SUB11:%.*]] = sub i32 [[SUB10]], 12162// CHECK2-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 42163// CHECK2-NEXT: [[ADD12:%.*]] = add i32 [[SUB11]], [[TMP15]]2164// CHECK2-NEXT: [[TMP16:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 42165// CHECK2-NEXT: [[DIV13:%.*]] = udiv i32 [[ADD12]], [[TMP16]]2166// CHECK2-NEXT: [[SUB14:%.*]] = sub i32 [[DIV13]], 12167// CHECK2-NEXT: store i32 [[SUB14]], ptr [[DOTCAPTURE_EXPR_9]], align 42168// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB1]], align 42169// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST1]], align 42170// CHECK2-NEXT: [[TMP17:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_9]], align 42171// CHECK2-NEXT: [[ADD15:%.*]] = add i32 [[TMP17]], 12172// CHECK2-NEXT: store i32 [[ADD15]], ptr [[DOTOMP_NI1]], align 42173// CHECK2-NEXT: [[TMP18:%.*]] = load i32, ptr [[START_ADDR]], align 42174// CHECK2-NEXT: [[TMP19:%.*]] = load i32, ptr [[STEP_ADDR]], align 42175// CHECK2-NEXT: [[ADD16:%.*]] = add nsw i32 [[TMP18]], [[TMP19]]2176// CHECK2-NEXT: store i32 [[ADD16]], ptr [[K]], align 42177// CHECK2-NEXT: [[TMP20:%.*]] = load i32, ptr [[START_ADDR]], align 42178// CHECK2-NEXT: [[TMP21:%.*]] = load i32, ptr [[STEP_ADDR]], align 42179// CHECK2-NEXT: [[ADD18:%.*]] = add nsw i32 [[TMP20]], [[TMP21]]2180// CHECK2-NEXT: store i32 [[ADD18]], ptr [[DOTCAPTURE_EXPR_17]], align 42181// CHECK2-NEXT: [[TMP22:%.*]] = load i32, ptr [[END_ADDR]], align 42182// CHECK2-NEXT: [[TMP23:%.*]] = load i32, ptr [[STEP_ADDR]], align 42183// CHECK2-NEXT: [[ADD20:%.*]] = add nsw i32 [[TMP22]], [[TMP23]]2184// CHECK2-NEXT: store i32 [[ADD20]], ptr [[DOTCAPTURE_EXPR_19]], align 42185// CHECK2-NEXT: [[TMP24:%.*]] = load i32, ptr [[STEP_ADDR]], align 42186// CHECK2-NEXT: store i32 [[TMP24]], ptr [[DOTNEW_STEP21]], align 42187// CHECK2-NEXT: [[TMP25:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_19]], align 42188// CHECK2-NEXT: [[TMP26:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_17]], align 42189// CHECK2-NEXT: [[SUB23:%.*]] = sub i32 [[TMP25]], [[TMP26]]2190// CHECK2-NEXT: [[SUB24:%.*]] = sub i32 [[SUB23]], 12191// CHECK2-NEXT: [[TMP27:%.*]] = load i32, ptr [[DOTNEW_STEP21]], align 42192// CHECK2-NEXT: [[ADD25:%.*]] = add i32 [[SUB24]], [[TMP27]]2193// CHECK2-NEXT: [[TMP28:%.*]] = load i32, ptr [[DOTNEW_STEP21]], align 42194// CHECK2-NEXT: [[DIV26:%.*]] = udiv i32 [[ADD25]], [[TMP28]]2195// CHECK2-NEXT: [[SUB27:%.*]] = sub i32 [[DIV26]], 12196// CHECK2-NEXT: store i32 [[SUB27]], ptr [[DOTCAPTURE_EXPR_22]], align 42197// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_LB2]], align 42198// CHECK2-NEXT: store i32 1, ptr [[DOTOMP_ST2]], align 42199// CHECK2-NEXT: [[TMP29:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_22]], align 42200// CHECK2-NEXT: [[ADD28:%.*]] = add i32 [[TMP29]], 12201// CHECK2-NEXT: store i32 [[ADD28]], ptr [[DOTOMP_NI2]], align 42202// CHECK2-NEXT: [[TMP30:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 42203// CHECK2-NEXT: store i32 [[TMP30]], ptr [[DOTOMP_TEMP_1]], align 42204// CHECK2-NEXT: [[TMP31:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 42205// CHECK2-NEXT: [[TMP32:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 42206// CHECK2-NEXT: [[CMP:%.*]] = icmp ugt i32 [[TMP31]], [[TMP32]]2207// CHECK2-NEXT: br i1 [[CMP]], label %[[COND_TRUE:.*]], label %[[COND_FALSE:.*]]2208// CHECK2: [[COND_TRUE]]:2209// CHECK2-NEXT: [[TMP33:%.*]] = load i32, ptr [[DOTOMP_TEMP_1]], align 42210// CHECK2-NEXT: br label %[[COND_END:.*]]2211// CHECK2: [[COND_FALSE]]:2212// CHECK2-NEXT: [[TMP34:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 42213// CHECK2-NEXT: br label %[[COND_END]]2214// CHECK2: [[COND_END]]:2215// CHECK2-NEXT: [[COND:%.*]] = phi i32 [ [[TMP33]], %[[COND_TRUE]] ], [ [[TMP34]], %[[COND_FALSE]] ]2216// CHECK2-NEXT: store i32 [[COND]], ptr [[DOTOMP_TEMP_2]], align 42217// CHECK2-NEXT: [[TMP35:%.*]] = load i32, ptr [[DOTOMP_TEMP_2]], align 42218// CHECK2-NEXT: [[TMP36:%.*]] = load i32, ptr [[DOTOMP_NI2]], align 42219// CHECK2-NEXT: [[CMP29:%.*]] = icmp ugt i32 [[TMP35]], [[TMP36]]2220// CHECK2-NEXT: br i1 [[CMP29]], label %[[COND_TRUE30:.*]], label %[[COND_FALSE31:.*]]2221// CHECK2: [[COND_TRUE30]]:2222// CHECK2-NEXT: [[TMP37:%.*]] = load i32, ptr [[DOTOMP_TEMP_2]], align 42223// CHECK2-NEXT: br label %[[COND_END32:.*]]2224// CHECK2: [[COND_FALSE31]]:2225// CHECK2-NEXT: [[TMP38:%.*]] = load i32, ptr [[DOTOMP_NI2]], align 42226// CHECK2-NEXT: br label %[[COND_END32]]2227// CHECK2: [[COND_END32]]:2228// CHECK2-NEXT: [[COND33:%.*]] = phi i32 [ [[TMP37]], %[[COND_TRUE30]] ], [ [[TMP38]], %[[COND_FALSE31]] ]2229// CHECK2-NEXT: store i32 [[COND33]], ptr [[DOTOMP_FUSE_MAX]], align 42230// CHECK2-NEXT: store i32 0, ptr [[DOTOMP_FUSE_INDEX]], align 42231// CHECK2-NEXT: br label %[[FOR_COND:.*]]2232// CHECK2: [[FOR_COND]]:2233// CHECK2-NEXT: [[TMP39:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 42234// CHECK2-NEXT: [[TMP40:%.*]] = load i32, ptr [[DOTOMP_FUSE_MAX]], align 42235// CHECK2-NEXT: [[CMP34:%.*]] = icmp ult i32 [[TMP39]], [[TMP40]]2236// CHECK2-NEXT: br i1 [[CMP34]], label %[[FOR_BODY:.*]], label %[[FOR_END:.*]]2237// CHECK2: [[FOR_BODY]]:2238// CHECK2-NEXT: [[TMP41:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 42239// CHECK2-NEXT: [[TMP42:%.*]] = load i32, ptr [[DOTOMP_NI0]], align 42240// CHECK2-NEXT: [[CMP35:%.*]] = icmp ult i32 [[TMP41]], [[TMP42]]2241// CHECK2-NEXT: br i1 [[CMP35]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]2242// CHECK2: [[IF_THEN]]:2243// CHECK2-NEXT: [[TMP43:%.*]] = load i32, ptr [[DOTOMP_LB0]], align 42244// CHECK2-NEXT: [[TMP44:%.*]] = load i32, ptr [[DOTOMP_ST0]], align 42245// CHECK2-NEXT: [[TMP45:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 42246// CHECK2-NEXT: [[MUL:%.*]] = mul i32 [[TMP44]], [[TMP45]]2247// CHECK2-NEXT: [[ADD36:%.*]] = add i32 [[TMP43]], [[MUL]]2248// CHECK2-NEXT: store i32 [[ADD36]], ptr [[DOTOMP_IV0]], align 42249// CHECK2-NEXT: [[TMP46:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 42250// CHECK2-NEXT: [[TMP47:%.*]] = load i32, ptr [[DOTOMP_IV0]], align 42251// CHECK2-NEXT: [[TMP48:%.*]] = load i32, ptr [[DOTNEW_STEP]], align 42252// CHECK2-NEXT: [[MUL37:%.*]] = mul i32 [[TMP47]], [[TMP48]]2253// CHECK2-NEXT: [[ADD38:%.*]] = add i32 [[TMP46]], [[MUL37]]2254// CHECK2-NEXT: store i32 [[ADD38]], ptr [[I]], align 42255// CHECK2-NEXT: [[TMP49:%.*]] = load i32, ptr [[I]], align 42256// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP49]])2257// CHECK2-NEXT: br label %[[IF_END]]2258// CHECK2: [[IF_END]]:2259// CHECK2-NEXT: [[TMP50:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 42260// CHECK2-NEXT: [[TMP51:%.*]] = load i32, ptr [[DOTOMP_NI1]], align 42261// CHECK2-NEXT: [[CMP39:%.*]] = icmp ult i32 [[TMP50]], [[TMP51]]2262// CHECK2-NEXT: br i1 [[CMP39]], label %[[IF_THEN40:.*]], label %[[IF_END45:.*]]2263// CHECK2: [[IF_THEN40]]:2264// CHECK2-NEXT: [[TMP52:%.*]] = load i32, ptr [[DOTOMP_LB1]], align 42265// CHECK2-NEXT: [[TMP53:%.*]] = load i32, ptr [[DOTOMP_ST1]], align 42266// CHECK2-NEXT: [[TMP54:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 42267// CHECK2-NEXT: [[MUL41:%.*]] = mul i32 [[TMP53]], [[TMP54]]2268// CHECK2-NEXT: [[ADD42:%.*]] = add i32 [[TMP52]], [[MUL41]]2269// CHECK2-NEXT: store i32 [[ADD42]], ptr [[DOTOMP_IV1]], align 42270// CHECK2-NEXT: [[TMP55:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_6]], align 42271// CHECK2-NEXT: [[TMP56:%.*]] = load i32, ptr [[DOTOMP_IV1]], align 42272// CHECK2-NEXT: [[TMP57:%.*]] = load i32, ptr [[DOTNEW_STEP8]], align 42273// CHECK2-NEXT: [[MUL43:%.*]] = mul i32 [[TMP56]], [[TMP57]]2274// CHECK2-NEXT: [[SUB44:%.*]] = sub i32 [[TMP55]], [[MUL43]]2275// CHECK2-NEXT: store i32 [[SUB44]], ptr [[J]], align 42276// CHECK2-NEXT: [[TMP58:%.*]] = load i32, ptr [[J]], align 42277// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP58]])2278// CHECK2-NEXT: br label %[[IF_END45]]2279// CHECK2: [[IF_END45]]:2280// CHECK2-NEXT: [[TMP59:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 42281// CHECK2-NEXT: [[TMP60:%.*]] = load i32, ptr [[DOTOMP_NI2]], align 42282// CHECK2-NEXT: [[CMP46:%.*]] = icmp ult i32 [[TMP59]], [[TMP60]]2283// CHECK2-NEXT: br i1 [[CMP46]], label %[[IF_THEN47:.*]], label %[[IF_END52:.*]]2284// CHECK2: [[IF_THEN47]]:2285// CHECK2-NEXT: [[TMP61:%.*]] = load i32, ptr [[DOTOMP_LB2]], align 42286// CHECK2-NEXT: [[TMP62:%.*]] = load i32, ptr [[DOTOMP_ST2]], align 42287// CHECK2-NEXT: [[TMP63:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 42288// CHECK2-NEXT: [[MUL48:%.*]] = mul i32 [[TMP62]], [[TMP63]]2289// CHECK2-NEXT: [[ADD49:%.*]] = add i32 [[TMP61]], [[MUL48]]2290// CHECK2-NEXT: store i32 [[ADD49]], ptr [[DOTOMP_IV2]], align 42291// CHECK2-NEXT: [[TMP64:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_17]], align 42292// CHECK2-NEXT: [[TMP65:%.*]] = load i32, ptr [[DOTOMP_IV2]], align 42293// CHECK2-NEXT: [[TMP66:%.*]] = load i32, ptr [[DOTNEW_STEP21]], align 42294// CHECK2-NEXT: [[MUL50:%.*]] = mul i32 [[TMP65]], [[TMP66]]2295// CHECK2-NEXT: [[ADD51:%.*]] = add i32 [[TMP64]], [[MUL50]]2296// CHECK2-NEXT: store i32 [[ADD51]], ptr [[K]], align 42297// CHECK2-NEXT: [[TMP67:%.*]] = load i32, ptr [[K]], align 42298// CHECK2-NEXT: call void (...) @body(i32 noundef [[TMP67]])2299// CHECK2-NEXT: br label %[[IF_END52]]2300// CHECK2: [[IF_END52]]:2301// CHECK2-NEXT: br label %[[FOR_INC:.*]]2302// CHECK2: [[FOR_INC]]:2303// CHECK2-NEXT: [[TMP68:%.*]] = load i32, ptr [[DOTOMP_FUSE_INDEX]], align 42304// CHECK2-NEXT: [[INC:%.*]] = add i32 [[TMP68]], 12305// CHECK2-NEXT: store i32 [[INC]], ptr [[DOTOMP_FUSE_INDEX]], align 42306// CHECK2-NEXT: br label %[[FOR_COND]], !llvm.loop [[LOOP10:![0-9]+]]2307// CHECK2: [[FOR_END]]:2308// CHECK2-NEXT: ret void2309//2310//.2311// CHECK1: [[LOOP3]] = distinct !{[[LOOP3]], [[META4:![0-9]+]]}2312// CHECK1: [[META4]] = !{!"llvm.loop.mustprogress"}2313// CHECK1: [[LOOP5]] = distinct !{[[LOOP5]], [[META4]]}2314// CHECK1: [[LOOP6]] = distinct !{[[LOOP6]], [[META4]]}2315// CHECK1: [[LOOP7]] = distinct !{[[LOOP7]], [[META4]]}2316// CHECK1: [[LOOP8]] = distinct !{[[LOOP8]], [[META4]]}2317// CHECK1: [[LOOP9]] = distinct !{[[LOOP9]], [[META4]]}2318// CHECK1: [[LOOP10]] = distinct !{[[LOOP10]], [[META4]]}2319//.2320// CHECK2: [[LOOP3]] = distinct !{[[LOOP3]], [[META4:![0-9]+]]}2321// CHECK2: [[META4]] = !{!"llvm.loop.mustprogress"}2322// CHECK2: [[LOOP5]] = distinct !{[[LOOP5]], [[META4]]}2323// CHECK2: [[LOOP6]] = distinct !{[[LOOP6]], [[META4]]}2324// CHECK2: [[LOOP7]] = distinct !{[[LOOP7]], [[META4]]}2325// CHECK2: [[LOOP8]] = distinct !{[[LOOP8]], [[META4]]}2326// CHECK2: [[LOOP9]] = distinct !{[[LOOP9]], [[META4]]}2327// CHECK2: [[LOOP10]] = distinct !{[[LOOP10]], [[META4]]}2328//.2329