17c8bb409SDavid Greene// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --include-generated-funcs 27c8bb409SDavid Greene// Check that the CHECK lines are generated for clang-generated functions 3*b16a3b4fSNikita Popov// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-unknown-linux-gnu -fopenmp %s -emit-llvm -o - | FileCheck --check-prefix=OMP %s 4*b16a3b4fSNikita Popov// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-unknown-linux-gnu %s -emit-llvm -o - | FileCheck --check-prefix=NOOMP %s 57c8bb409SDavid Greene 67c8bb409SDavid Greeneconst int size = 1024 * 1024 * 32; 77c8bb409SDavid Greene 87c8bb409SDavid Greenedouble A[size]; 97c8bb409SDavid Greene 107c8bb409SDavid Greenevoid foo(void); 117c8bb409SDavid Greene 120dd49a56SAaron Ballmanint main(void) { 137c8bb409SDavid Greene int i = 0; 147c8bb409SDavid Greene 157c8bb409SDavid Greene#pragma omp parallel for 167c8bb409SDavid Greene for (i = 0; i < size; ++i) { 177c8bb409SDavid Greene A[i] = 0.0; 187c8bb409SDavid Greene } 197c8bb409SDavid Greene 207c8bb409SDavid Greene foo(); 217c8bb409SDavid Greene 227c8bb409SDavid Greene return 0; 237c8bb409SDavid Greene} 247c8bb409SDavid Greene 257c8bb409SDavid Greenevoid foo(void) { 267c8bb409SDavid Greene int i = 0; 277c8bb409SDavid Greene 287c8bb409SDavid Greene#pragma omp parallel for 297c8bb409SDavid Greene for (i = 0; i < size; ++i) { 307c8bb409SDavid Greene A[i] = 1.0; 317c8bb409SDavid Greene } 327c8bb409SDavid Greene} 33df729e2bSJohannes Doerfert// OMP-LABEL: @main( 347c8bb409SDavid Greene// OMP-NEXT: entry: 35df729e2bSJohannes Doerfert// OMP-NEXT: [[RETVAL:%.*]] = alloca i32, align 4 367c8bb409SDavid Greene// OMP-NEXT: [[I:%.*]] = alloca i32, align 4 37df729e2bSJohannes Doerfert// OMP-NEXT: store i32 0, i32* [[RETVAL]], align 4 387c8bb409SDavid Greene// OMP-NEXT: store i32 0, i32* [[I]], align 4 39ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) 40df729e2bSJohannes Doerfert// OMP-NEXT: call void @foo() 41df729e2bSJohannes Doerfert// OMP-NEXT: ret i32 0 427c8bb409SDavid Greene// 437c8bb409SDavid Greene// 447c8bb409SDavid Greene// OMP-LABEL: @.omp_outlined.( 457c8bb409SDavid Greene// OMP-NEXT: entry: 467c8bb409SDavid Greene// OMP-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 477c8bb409SDavid Greene// OMP-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 487c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 497c8bb409SDavid Greene// OMP-NEXT: [[TMP:%.*]] = alloca i32, align 4 507c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 517c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 527c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 537c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 547c8bb409SDavid Greene// OMP-NEXT: [[I:%.*]] = alloca i32, align 4 557c8bb409SDavid Greene// OMP-NEXT: store i32* [[DOTGLOBAL_TID_:%.*]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 567c8bb409SDavid Greene// OMP-NEXT: store i32* [[DOTBOUND_TID_:%.*]], i32** [[DOTBOUND_TID__ADDR]], align 8 577c8bb409SDavid Greene// OMP-NEXT: store i32 0, i32* [[DOTOMP_LB]], align 4 587c8bb409SDavid Greene// OMP-NEXT: store i32 33554431, i32* [[DOTOMP_UB]], align 4 597c8bb409SDavid Greene// OMP-NEXT: store i32 1, i32* [[DOTOMP_STRIDE]], align 4 607c8bb409SDavid Greene// OMP-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 61ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 62ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4 63ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1) 64ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP2:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4 65ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 33554431 667c8bb409SDavid Greene// OMP-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 677c8bb409SDavid Greene// OMP: cond.true: 687c8bb409SDavid Greene// OMP-NEXT: br label [[COND_END:%.*]] 697c8bb409SDavid Greene// OMP: cond.false: 70ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP3:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4 717c8bb409SDavid Greene// OMP-NEXT: br label [[COND_END]] 727c8bb409SDavid Greene// OMP: cond.end: 73ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[COND:%.*]] = phi i32 [ 33554431, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 747c8bb409SDavid Greene// OMP-NEXT: store i32 [[COND]], i32* [[DOTOMP_UB]], align 4 75ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP4:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4 76ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: store i32 [[TMP4]], i32* [[DOTOMP_IV]], align 4 777c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 787c8bb409SDavid Greene// OMP: omp.inner.for.cond: 79ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP5:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4 80ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP6:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4 81ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 827c8bb409SDavid Greene// OMP-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 837c8bb409SDavid Greene// OMP: omp.inner.for.body: 84ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4 85ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 867c8bb409SDavid Greene// OMP-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 877c8bb409SDavid Greene// OMP-NEXT: store i32 [[ADD]], i32* [[I]], align 4 88ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP8:%.*]] = load i32, i32* [[I]], align 4 89ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[IDXPROM:%.*]] = sext i32 [[TMP8]] to i64 907c8bb409SDavid Greene// OMP-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [33554432 x double], [33554432 x double]* @A, i64 0, i64 [[IDXPROM]] 91df729e2bSJohannes Doerfert// OMP-NEXT: store double 0.000000e+00, double* [[ARRAYIDX]], align 8 927c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 937c8bb409SDavid Greene// OMP: omp.body.continue: 947c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 957c8bb409SDavid Greene// OMP: omp.inner.for.inc: 96ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP9:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4 97ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP9]], 1 987c8bb409SDavid Greene// OMP-NEXT: store i32 [[ADD2]], i32* [[DOTOMP_IV]], align 4 997c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_INNER_FOR_COND]] 1007c8bb409SDavid Greene// OMP: omp.inner.for.end: 1017c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 1027c8bb409SDavid Greene// OMP: omp.loop.exit: 103ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]]) 1047c8bb409SDavid Greene// OMP-NEXT: ret void 1057c8bb409SDavid Greene// 1067c8bb409SDavid Greene// 107df729e2bSJohannes Doerfert// OMP-LABEL: @foo( 1087c8bb409SDavid Greene// OMP-NEXT: entry: 1097c8bb409SDavid Greene// OMP-NEXT: [[I:%.*]] = alloca i32, align 4 1107c8bb409SDavid Greene// OMP-NEXT: store i32 0, i32* [[I]], align 4 111ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined..1 to void (i32*, i32*, ...)*)) 112df729e2bSJohannes Doerfert// OMP-NEXT: ret void 1137c8bb409SDavid Greene// 1147c8bb409SDavid Greene// 1157c8bb409SDavid Greene// OMP-LABEL: @.omp_outlined..1( 1167c8bb409SDavid Greene// OMP-NEXT: entry: 1177c8bb409SDavid Greene// OMP-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 1187c8bb409SDavid Greene// OMP-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 1197c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 1207c8bb409SDavid Greene// OMP-NEXT: [[TMP:%.*]] = alloca i32, align 4 1217c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 1227c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 1237c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 1247c8bb409SDavid Greene// OMP-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 1257c8bb409SDavid Greene// OMP-NEXT: [[I:%.*]] = alloca i32, align 4 1267c8bb409SDavid Greene// OMP-NEXT: store i32* [[DOTGLOBAL_TID_:%.*]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 1277c8bb409SDavid Greene// OMP-NEXT: store i32* [[DOTBOUND_TID_:%.*]], i32** [[DOTBOUND_TID__ADDR]], align 8 1287c8bb409SDavid Greene// OMP-NEXT: store i32 0, i32* [[DOTOMP_LB]], align 4 1297c8bb409SDavid Greene// OMP-NEXT: store i32 33554431, i32* [[DOTOMP_UB]], align 4 1307c8bb409SDavid Greene// OMP-NEXT: store i32 1, i32* [[DOTOMP_STRIDE]], align 4 1317c8bb409SDavid Greene// OMP-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 132ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP0:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 133ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4 134ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1) 135ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP2:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4 136ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP2]], 33554431 1377c8bb409SDavid Greene// OMP-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]] 1387c8bb409SDavid Greene// OMP: cond.true: 1397c8bb409SDavid Greene// OMP-NEXT: br label [[COND_END:%.*]] 1407c8bb409SDavid Greene// OMP: cond.false: 141ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP3:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4 1427c8bb409SDavid Greene// OMP-NEXT: br label [[COND_END]] 1437c8bb409SDavid Greene// OMP: cond.end: 144ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[COND:%.*]] = phi i32 [ 33554431, [[COND_TRUE]] ], [ [[TMP3]], [[COND_FALSE]] ] 1457c8bb409SDavid Greene// OMP-NEXT: store i32 [[COND]], i32* [[DOTOMP_UB]], align 4 146ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP4:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4 147ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: store i32 [[TMP4]], i32* [[DOTOMP_IV]], align 4 1487c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 1497c8bb409SDavid Greene// OMP: omp.inner.for.cond: 150ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP5:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4 151ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP6:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4 152ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[CMP1:%.*]] = icmp sle i32 [[TMP5]], [[TMP6]] 1537c8bb409SDavid Greene// OMP-NEXT: br i1 [[CMP1]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 1547c8bb409SDavid Greene// OMP: omp.inner.for.body: 155ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4 156ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[MUL:%.*]] = mul nsw i32 [[TMP7]], 1 1577c8bb409SDavid Greene// OMP-NEXT: [[ADD:%.*]] = add nsw i32 0, [[MUL]] 1587c8bb409SDavid Greene// OMP-NEXT: store i32 [[ADD]], i32* [[I]], align 4 159ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP8:%.*]] = load i32, i32* [[I]], align 4 160ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[IDXPROM:%.*]] = sext i32 [[TMP8]] to i64 1617c8bb409SDavid Greene// OMP-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [33554432 x double], [33554432 x double]* @A, i64 0, i64 [[IDXPROM]] 162df729e2bSJohannes Doerfert// OMP-NEXT: store double 1.000000e+00, double* [[ARRAYIDX]], align 8 1637c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 1647c8bb409SDavid Greene// OMP: omp.body.continue: 1657c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 1667c8bb409SDavid Greene// OMP: omp.inner.for.inc: 167ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[TMP9:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4 168ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: [[ADD2:%.*]] = add nsw i32 [[TMP9]], 1 1697c8bb409SDavid Greene// OMP-NEXT: store i32 [[ADD2]], i32* [[DOTOMP_IV]], align 4 1707c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_INNER_FOR_COND]] 1717c8bb409SDavid Greene// OMP: omp.inner.for.end: 1727c8bb409SDavid Greene// OMP-NEXT: br label [[OMP_LOOP_EXIT:%.*]] 1737c8bb409SDavid Greene// OMP: omp.loop.exit: 174ac90dfc4SGiorgis Georgakoudis// OMP-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB1]], i32 [[TMP1]]) 1757c8bb409SDavid Greene// OMP-NEXT: ret void 1767c8bb409SDavid Greene// 1777c8bb409SDavid Greene// 1787c8bb409SDavid Greene// NOOMP-LABEL: @main( 1797c8bb409SDavid Greene// NOOMP-NEXT: entry: 1807c8bb409SDavid Greene// NOOMP-NEXT: [[RETVAL:%.*]] = alloca i32, align 4 1817c8bb409SDavid Greene// NOOMP-NEXT: [[I:%.*]] = alloca i32, align 4 1827c8bb409SDavid Greene// NOOMP-NEXT: store i32 0, i32* [[RETVAL]], align 4 1837c8bb409SDavid Greene// NOOMP-NEXT: store i32 0, i32* [[I]], align 4 1847c8bb409SDavid Greene// NOOMP-NEXT: store i32 0, i32* [[I]], align 4 1857c8bb409SDavid Greene// NOOMP-NEXT: br label [[FOR_COND:%.*]] 1867c8bb409SDavid Greene// NOOMP: for.cond: 1877c8bb409SDavid Greene// NOOMP-NEXT: [[TMP0:%.*]] = load i32, i32* [[I]], align 4 1887c8bb409SDavid Greene// NOOMP-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], 33554432 1897c8bb409SDavid Greene// NOOMP-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 1907c8bb409SDavid Greene// NOOMP: for.body: 1917c8bb409SDavid Greene// NOOMP-NEXT: [[TMP1:%.*]] = load i32, i32* [[I]], align 4 1927c8bb409SDavid Greene// NOOMP-NEXT: [[IDXPROM:%.*]] = sext i32 [[TMP1]] to i64 1937c8bb409SDavid Greene// NOOMP-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [33554432 x double], [33554432 x double]* @A, i64 0, i64 [[IDXPROM]] 1947c8bb409SDavid Greene// NOOMP-NEXT: store double 0.000000e+00, double* [[ARRAYIDX]], align 8 1957c8bb409SDavid Greene// NOOMP-NEXT: br label [[FOR_INC:%.*]] 1967c8bb409SDavid Greene// NOOMP: for.inc: 1977c8bb409SDavid Greene// NOOMP-NEXT: [[TMP2:%.*]] = load i32, i32* [[I]], align 4 1987c8bb409SDavid Greene// NOOMP-NEXT: [[INC:%.*]] = add nsw i32 [[TMP2]], 1 1997c8bb409SDavid Greene// NOOMP-NEXT: store i32 [[INC]], i32* [[I]], align 4 200cd1bd6e5SJohannes Doerfert// NOOMP-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP2:![0-9]+]] 2017c8bb409SDavid Greene// NOOMP: for.end: 2027c8bb409SDavid Greene// NOOMP-NEXT: call void @foo() 2037c8bb409SDavid Greene// NOOMP-NEXT: ret i32 0 2047c8bb409SDavid Greene// 2057c8bb409SDavid Greene// 2067c8bb409SDavid Greene// NOOMP-LABEL: @foo( 2077c8bb409SDavid Greene// NOOMP-NEXT: entry: 2087c8bb409SDavid Greene// NOOMP-NEXT: [[I:%.*]] = alloca i32, align 4 2097c8bb409SDavid Greene// NOOMP-NEXT: store i32 0, i32* [[I]], align 4 2107c8bb409SDavid Greene// NOOMP-NEXT: store i32 0, i32* [[I]], align 4 2117c8bb409SDavid Greene// NOOMP-NEXT: br label [[FOR_COND:%.*]] 2127c8bb409SDavid Greene// NOOMP: for.cond: 2137c8bb409SDavid Greene// NOOMP-NEXT: [[TMP0:%.*]] = load i32, i32* [[I]], align 4 2147c8bb409SDavid Greene// NOOMP-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], 33554432 2157c8bb409SDavid Greene// NOOMP-NEXT: br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]] 2167c8bb409SDavid Greene// NOOMP: for.body: 2177c8bb409SDavid Greene// NOOMP-NEXT: [[TMP1:%.*]] = load i32, i32* [[I]], align 4 2187c8bb409SDavid Greene// NOOMP-NEXT: [[IDXPROM:%.*]] = sext i32 [[TMP1]] to i64 2197c8bb409SDavid Greene// NOOMP-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [33554432 x double], [33554432 x double]* @A, i64 0, i64 [[IDXPROM]] 2207c8bb409SDavid Greene// NOOMP-NEXT: store double 1.000000e+00, double* [[ARRAYIDX]], align 8 2217c8bb409SDavid Greene// NOOMP-NEXT: br label [[FOR_INC:%.*]] 2227c8bb409SDavid Greene// NOOMP: for.inc: 2237c8bb409SDavid Greene// NOOMP-NEXT: [[TMP2:%.*]] = load i32, i32* [[I]], align 4 2247c8bb409SDavid Greene// NOOMP-NEXT: [[INC:%.*]] = add nsw i32 [[TMP2]], 1 2257c8bb409SDavid Greene// NOOMP-NEXT: store i32 [[INC]], i32* [[I]], align 4 226cd1bd6e5SJohannes Doerfert// NOOMP-NEXT: br label [[FOR_COND]], !llvm.loop [[LOOP4:![0-9]+]] 2277c8bb409SDavid Greene// NOOMP: for.end: 2287c8bb409SDavid Greene// NOOMP-NEXT: ret void 2297c8bb409SDavid Greene// 230