18ab62da1SChi Chun Chen // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name tmp2 --version 2 2eb61bde8SDave Pagan // RUN: %clang_cc1 -verify -triple x86_64-pc-linux-gnu -fopenmp %s 3eb61bde8SDave Pagan // RUN: %clang_cc1 -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s --check-prefix=IR 4eb61bde8SDave Pagan 5eb61bde8SDave Pagan // Check same results after serialization round-trip 6eb61bde8SDave Pagan // RUN: %clang_cc1 -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-pch -o %t %s 7eb61bde8SDave Pagan // RUN: %clang_cc1 -verify -triple x86_64-pc-linux-gnu -fopenmp -include-pch %t -emit-llvm %s -o - | FileCheck %s --check-prefix=IR-PCH 8eb61bde8SDave Pagan 9eb61bde8SDave Pagan // expected-no-diagnostics 10eb61bde8SDave Pagan 11eb61bde8SDave Pagan #ifndef HEADER 12eb61bde8SDave Pagan #define HEADER 13eb61bde8SDave Pagan 14eb61bde8SDave Pagan void foo(int t) { 15eb61bde8SDave Pagan 16eb61bde8SDave Pagan int i, j, z; 17eb61bde8SDave Pagan #pragma omp loop collapse(2) reduction(+:z) lastprivate(j) bind(thread) 18eb61bde8SDave Pagan for (int i = 0; i<t; ++i) 19eb61bde8SDave Pagan for (j = 0; j<t; ++j) 20eb61bde8SDave Pagan z += i+j; 21eb61bde8SDave Pagan } 22eb61bde8SDave Pagan #endif 235a64ae75SJohannes Doerfert // IR-LABEL: define dso_local void @_Z3fooi 24eb61bde8SDave Pagan // IR-SAME: (i32 noundef [[T:%.*]]) #[[ATTR0:[0-9]+]] { 25eb61bde8SDave Pagan // IR-NEXT: entry: 26eb61bde8SDave Pagan // IR-NEXT: [[T_ADDR:%.*]] = alloca i32, align 4 27eb61bde8SDave Pagan // IR-NEXT: [[I:%.*]] = alloca i32, align 4 28eb61bde8SDave Pagan // IR-NEXT: [[J:%.*]] = alloca i32, align 4 29eb61bde8SDave Pagan // IR-NEXT: [[Z:%.*]] = alloca i32, align 4 308ab62da1SChi Chun Chen // IR-NEXT: [[TMP:%.*]] = alloca i32, align 4 318ab62da1SChi Chun Chen // IR-NEXT: [[TMP2TMP1:%.*]] = alloca i32, align 4 328ab62da1SChi Chun Chen // IR-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4 338ab62da1SChi Chun Chen // IR-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 4 348ab62da1SChi Chun Chen // IR-NEXT: [[DOTCAPTURE_EXPR_3:%.*]] = alloca i64, align 8 35*c7473007SKrzysztof Parzyszek // IR-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 36*c7473007SKrzysztof Parzyszek // IR-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 378ab62da1SChi Chun Chen // IR-NEXT: [[I8:%.*]] = alloca i32, align 4 388ab62da1SChi Chun Chen // IR-NEXT: [[J9:%.*]] = alloca i32, align 4 398ab62da1SChi Chun Chen // IR-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 408ab62da1SChi Chun Chen // IR-NEXT: [[I11:%.*]] = alloca i32, align 4 418ab62da1SChi Chun Chen // IR-NEXT: [[J12:%.*]] = alloca i32, align 4 428ab62da1SChi Chun Chen // IR-NEXT: [[Z13:%.*]] = alloca i32, align 4 43eb61bde8SDave Pagan // IR-NEXT: store i32 [[T]], ptr [[T_ADDR]], align 4 448ab62da1SChi Chun Chen // IR-NEXT: [[TMP0:%.*]] = load i32, ptr [[T_ADDR]], align 4 458ab62da1SChi Chun Chen // IR-NEXT: store i32 [[TMP0]], ptr [[DOTCAPTURE_EXPR_]], align 4 46eb61bde8SDave Pagan // IR-NEXT: [[TMP1:%.*]] = load i32, ptr [[T_ADDR]], align 4 478ab62da1SChi Chun Chen // IR-NEXT: store i32 [[TMP1]], ptr [[DOTCAPTURE_EXPR_2]], align 4 488ab62da1SChi Chun Chen // IR-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4 498ab62da1SChi Chun Chen // IR-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP2]], 0 508ab62da1SChi Chun Chen // IR-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1 518ab62da1SChi Chun Chen // IR-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64 528ab62da1SChi Chun Chen // IR-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4 538ab62da1SChi Chun Chen // IR-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP3]], 0 548ab62da1SChi Chun Chen // IR-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1 558ab62da1SChi Chun Chen // IR-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64 568ab62da1SChi Chun Chen // IR-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]] 578ab62da1SChi Chun Chen // IR-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1 588ab62da1SChi Chun Chen // IR-NEXT: store i64 [[SUB7]], ptr [[DOTCAPTURE_EXPR_3]], align 8 59*c7473007SKrzysztof Parzyszek // IR-NEXT: store i64 0, ptr [[DOTOMP_LB]], align 8 60*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP4:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_3]], align 8 61*c7473007SKrzysztof Parzyszek // IR-NEXT: store i64 [[TMP4]], ptr [[DOTOMP_UB]], align 8 628ab62da1SChi Chun Chen // IR-NEXT: store i32 0, ptr [[I8]], align 4 638ab62da1SChi Chun Chen // IR-NEXT: store i32 0, ptr [[J9]], align 4 64*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4 65*c7473007SKrzysztof Parzyszek // IR-NEXT: [[CMP:%.*]] = icmp slt i32 0, [[TMP5]] 668ab62da1SChi Chun Chen // IR-NEXT: br i1 [[CMP]], label [[LAND_LHS_TRUE:%.*]], label [[SIMD_IF_END:%.*]] 678ab62da1SChi Chun Chen // IR: land.lhs.true: 68*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4 69*c7473007SKrzysztof Parzyszek // IR-NEXT: [[CMP10:%.*]] = icmp slt i32 0, [[TMP6]] 708ab62da1SChi Chun Chen // IR-NEXT: br i1 [[CMP10]], label [[SIMD_IF_THEN:%.*]], label [[SIMD_IF_END]] 718ab62da1SChi Chun Chen // IR: simd.if.then: 72*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP7:%.*]] = load i64, ptr [[DOTOMP_LB]], align 8 73*c7473007SKrzysztof Parzyszek // IR-NEXT: store i64 [[TMP7]], ptr [[DOTOMP_IV]], align 8 748ab62da1SChi Chun Chen // IR-NEXT: store i32 0, ptr [[Z13]], align 4 758ab62da1SChi Chun Chen // IR-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 768ab62da1SChi Chun Chen // IR: omp.inner.for.cond: 77*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP8:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3:![0-9]+]] 78*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP9:%.*]] = load i64, ptr [[DOTOMP_UB]], align 8, !llvm.access.group [[ACC_GRP3]] 79*c7473007SKrzysztof Parzyszek // IR-NEXT: [[CMP14:%.*]] = icmp sle i64 [[TMP8]], [[TMP9]] 808ab62da1SChi Chun Chen // IR-NEXT: br i1 [[CMP14]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 818ab62da1SChi Chun Chen // IR: omp.inner.for.body: 82*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP10:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 83*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4, !llvm.access.group [[ACC_GRP3]] 84*c7473007SKrzysztof Parzyszek // IR-NEXT: [[SUB15:%.*]] = sub nsw i32 [[TMP11]], 0 858ab62da1SChi Chun Chen // IR-NEXT: [[DIV16:%.*]] = sdiv i32 [[SUB15]], 1 868ab62da1SChi Chun Chen // IR-NEXT: [[MUL17:%.*]] = mul nsw i32 1, [[DIV16]] 878ab62da1SChi Chun Chen // IR-NEXT: [[CONV18:%.*]] = sext i32 [[MUL17]] to i64 88*c7473007SKrzysztof Parzyszek // IR-NEXT: [[DIV19:%.*]] = sdiv i64 [[TMP10]], [[CONV18]] 898ab62da1SChi Chun Chen // IR-NEXT: [[MUL20:%.*]] = mul nsw i64 [[DIV19]], 1 908ab62da1SChi Chun Chen // IR-NEXT: [[ADD21:%.*]] = add nsw i64 0, [[MUL20]] 918ab62da1SChi Chun Chen // IR-NEXT: [[CONV22:%.*]] = trunc i64 [[ADD21]] to i32 928ab62da1SChi Chun Chen // IR-NEXT: store i32 [[CONV22]], ptr [[I11]], align 4, !llvm.access.group [[ACC_GRP3]] 93*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP12:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 94*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP13:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 95*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4, !llvm.access.group [[ACC_GRP3]] 96*c7473007SKrzysztof Parzyszek // IR-NEXT: [[SUB23:%.*]] = sub nsw i32 [[TMP14]], 0 978ab62da1SChi Chun Chen // IR-NEXT: [[DIV24:%.*]] = sdiv i32 [[SUB23]], 1 988ab62da1SChi Chun Chen // IR-NEXT: [[MUL25:%.*]] = mul nsw i32 1, [[DIV24]] 998ab62da1SChi Chun Chen // IR-NEXT: [[CONV26:%.*]] = sext i32 [[MUL25]] to i64 100*c7473007SKrzysztof Parzyszek // IR-NEXT: [[DIV27:%.*]] = sdiv i64 [[TMP13]], [[CONV26]] 101*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4, !llvm.access.group [[ACC_GRP3]] 102*c7473007SKrzysztof Parzyszek // IR-NEXT: [[SUB28:%.*]] = sub nsw i32 [[TMP15]], 0 1038ab62da1SChi Chun Chen // IR-NEXT: [[DIV29:%.*]] = sdiv i32 [[SUB28]], 1 1048ab62da1SChi Chun Chen // IR-NEXT: [[MUL30:%.*]] = mul nsw i32 1, [[DIV29]] 1058ab62da1SChi Chun Chen // IR-NEXT: [[CONV31:%.*]] = sext i32 [[MUL30]] to i64 1068ab62da1SChi Chun Chen // IR-NEXT: [[MUL32:%.*]] = mul nsw i64 [[DIV27]], [[CONV31]] 107*c7473007SKrzysztof Parzyszek // IR-NEXT: [[SUB33:%.*]] = sub nsw i64 [[TMP12]], [[MUL32]] 1088ab62da1SChi Chun Chen // IR-NEXT: [[MUL34:%.*]] = mul nsw i64 [[SUB33]], 1 1098ab62da1SChi Chun Chen // IR-NEXT: [[ADD35:%.*]] = add nsw i64 0, [[MUL34]] 1108ab62da1SChi Chun Chen // IR-NEXT: [[CONV36:%.*]] = trunc i64 [[ADD35]] to i32 1118ab62da1SChi Chun Chen // IR-NEXT: store i32 [[CONV36]], ptr [[J12]], align 4, !llvm.access.group [[ACC_GRP3]] 112*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP16:%.*]] = load i32, ptr [[I11]], align 4, !llvm.access.group [[ACC_GRP3]] 113*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP17:%.*]] = load i32, ptr [[J12]], align 4, !llvm.access.group [[ACC_GRP3]] 114*c7473007SKrzysztof Parzyszek // IR-NEXT: [[ADD37:%.*]] = add nsw i32 [[TMP16]], [[TMP17]] 115*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP18:%.*]] = load i32, ptr [[Z13]], align 4, !llvm.access.group [[ACC_GRP3]] 116*c7473007SKrzysztof Parzyszek // IR-NEXT: [[ADD38:%.*]] = add nsw i32 [[TMP18]], [[ADD37]] 1178ab62da1SChi Chun Chen // IR-NEXT: store i32 [[ADD38]], ptr [[Z13]], align 4, !llvm.access.group [[ACC_GRP3]] 1188ab62da1SChi Chun Chen // IR-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 1198ab62da1SChi Chun Chen // IR: omp.body.continue: 1208ab62da1SChi Chun Chen // IR-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 1218ab62da1SChi Chun Chen // IR: omp.inner.for.inc: 122*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP19:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 123*c7473007SKrzysztof Parzyszek // IR-NEXT: [[ADD39:%.*]] = add nsw i64 [[TMP19]], 1 1248ab62da1SChi Chun Chen // IR-NEXT: store i64 [[ADD39]], ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 1258ab62da1SChi Chun Chen // IR-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP4:![0-9]+]] 1268ab62da1SChi Chun Chen // IR: omp.inner.for.end: 127*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4 128*c7473007SKrzysztof Parzyszek // IR-NEXT: [[SUB40:%.*]] = sub nsw i32 [[TMP20]], 0 1298ab62da1SChi Chun Chen // IR-NEXT: [[DIV41:%.*]] = sdiv i32 [[SUB40]], 1 1308ab62da1SChi Chun Chen // IR-NEXT: [[MUL42:%.*]] = mul nsw i32 [[DIV41]], 1 1318ab62da1SChi Chun Chen // IR-NEXT: [[ADD43:%.*]] = add nsw i32 0, [[MUL42]] 1328ab62da1SChi Chun Chen // IR-NEXT: store i32 [[ADD43]], ptr [[I11]], align 4 133*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4 134*c7473007SKrzysztof Parzyszek // IR-NEXT: [[SUB44:%.*]] = sub nsw i32 [[TMP21]], 0 1358ab62da1SChi Chun Chen // IR-NEXT: [[DIV45:%.*]] = sdiv i32 [[SUB44]], 1 1368ab62da1SChi Chun Chen // IR-NEXT: [[MUL46:%.*]] = mul nsw i32 [[DIV45]], 1 1378ab62da1SChi Chun Chen // IR-NEXT: [[ADD47:%.*]] = add nsw i32 0, [[MUL46]] 1388ab62da1SChi Chun Chen // IR-NEXT: store i32 [[ADD47]], ptr [[J]], align 4 139*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP22:%.*]] = load i32, ptr [[Z]], align 4 140*c7473007SKrzysztof Parzyszek // IR-NEXT: [[TMP23:%.*]] = load i32, ptr [[Z13]], align 4 141*c7473007SKrzysztof Parzyszek // IR-NEXT: [[ADD48:%.*]] = add nsw i32 [[TMP22]], [[TMP23]] 1428ab62da1SChi Chun Chen // IR-NEXT: store i32 [[ADD48]], ptr [[Z]], align 4 1438ab62da1SChi Chun Chen // IR-NEXT: br label [[SIMD_IF_END]] 1448ab62da1SChi Chun Chen // IR: simd.if.end: 145eb61bde8SDave Pagan // IR-NEXT: ret void 146eb61bde8SDave Pagan // 147eb61bde8SDave Pagan // 1485a64ae75SJohannes Doerfert // IR-PCH-LABEL: define dso_local void @_Z3fooi 149eb61bde8SDave Pagan // IR-PCH-SAME: (i32 noundef [[T:%.*]]) #[[ATTR0:[0-9]+]] { 150eb61bde8SDave Pagan // IR-PCH-NEXT: entry: 151eb61bde8SDave Pagan // IR-PCH-NEXT: [[T_ADDR:%.*]] = alloca i32, align 4 152eb61bde8SDave Pagan // IR-PCH-NEXT: [[I:%.*]] = alloca i32, align 4 153eb61bde8SDave Pagan // IR-PCH-NEXT: [[J:%.*]] = alloca i32, align 4 154eb61bde8SDave Pagan // IR-PCH-NEXT: [[Z:%.*]] = alloca i32, align 4 1558ab62da1SChi Chun Chen // IR-PCH-NEXT: [[TMP:%.*]] = alloca i32, align 4 1568ab62da1SChi Chun Chen // IR-PCH-NEXT: [[TMP2TMP1:%.*]] = alloca i32, align 4 1578ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4 1588ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DOTCAPTURE_EXPR_2:%.*]] = alloca i32, align 4 1598ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DOTCAPTURE_EXPR_3:%.*]] = alloca i64, align 8 160*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 161*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 1628ab62da1SChi Chun Chen // IR-PCH-NEXT: [[I8:%.*]] = alloca i32, align 4 1638ab62da1SChi Chun Chen // IR-PCH-NEXT: [[J9:%.*]] = alloca i32, align 4 1648ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 1658ab62da1SChi Chun Chen // IR-PCH-NEXT: [[I11:%.*]] = alloca i32, align 4 1668ab62da1SChi Chun Chen // IR-PCH-NEXT: [[J12:%.*]] = alloca i32, align 4 1678ab62da1SChi Chun Chen // IR-PCH-NEXT: [[Z13:%.*]] = alloca i32, align 4 168eb61bde8SDave Pagan // IR-PCH-NEXT: store i32 [[T]], ptr [[T_ADDR]], align 4 1698ab62da1SChi Chun Chen // IR-PCH-NEXT: [[TMP0:%.*]] = load i32, ptr [[T_ADDR]], align 4 1708ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 [[TMP0]], ptr [[DOTCAPTURE_EXPR_]], align 4 171eb61bde8SDave Pagan // IR-PCH-NEXT: [[TMP1:%.*]] = load i32, ptr [[T_ADDR]], align 4 1728ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 [[TMP1]], ptr [[DOTCAPTURE_EXPR_2]], align 4 1738ab62da1SChi Chun Chen // IR-PCH-NEXT: [[TMP2:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4 1748ab62da1SChi Chun Chen // IR-PCH-NEXT: [[SUB:%.*]] = sub nsw i32 [[TMP2]], 0 1758ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DIV:%.*]] = sdiv i32 [[SUB]], 1 1768ab62da1SChi Chun Chen // IR-PCH-NEXT: [[CONV:%.*]] = sext i32 [[DIV]] to i64 1778ab62da1SChi Chun Chen // IR-PCH-NEXT: [[TMP3:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4 1788ab62da1SChi Chun Chen // IR-PCH-NEXT: [[SUB4:%.*]] = sub nsw i32 [[TMP3]], 0 1798ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DIV5:%.*]] = sdiv i32 [[SUB4]], 1 1808ab62da1SChi Chun Chen // IR-PCH-NEXT: [[CONV6:%.*]] = sext i32 [[DIV5]] to i64 1818ab62da1SChi Chun Chen // IR-PCH-NEXT: [[MUL:%.*]] = mul nsw i64 [[CONV]], [[CONV6]] 1828ab62da1SChi Chun Chen // IR-PCH-NEXT: [[SUB7:%.*]] = sub nsw i64 [[MUL]], 1 1838ab62da1SChi Chun Chen // IR-PCH-NEXT: store i64 [[SUB7]], ptr [[DOTCAPTURE_EXPR_3]], align 8 184*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: store i64 0, ptr [[DOTOMP_LB]], align 8 185*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP4:%.*]] = load i64, ptr [[DOTCAPTURE_EXPR_3]], align 8 186*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: store i64 [[TMP4]], ptr [[DOTOMP_UB]], align 8 1878ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 0, ptr [[I8]], align 4 1888ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 0, ptr [[J9]], align 4 189*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP5:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4 190*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[CMP:%.*]] = icmp slt i32 0, [[TMP5]] 1918ab62da1SChi Chun Chen // IR-PCH-NEXT: br i1 [[CMP]], label [[LAND_LHS_TRUE:%.*]], label [[SIMD_IF_END:%.*]] 1928ab62da1SChi Chun Chen // IR-PCH: land.lhs.true: 193*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP6:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4 194*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[CMP10:%.*]] = icmp slt i32 0, [[TMP6]] 1958ab62da1SChi Chun Chen // IR-PCH-NEXT: br i1 [[CMP10]], label [[SIMD_IF_THEN:%.*]], label [[SIMD_IF_END]] 1968ab62da1SChi Chun Chen // IR-PCH: simd.if.then: 197*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP7:%.*]] = load i64, ptr [[DOTOMP_LB]], align 8 198*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: store i64 [[TMP7]], ptr [[DOTOMP_IV]], align 8 1998ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 0, ptr [[Z13]], align 4 2008ab62da1SChi Chun Chen // IR-PCH-NEXT: br label [[OMP_INNER_FOR_COND:%.*]] 2018ab62da1SChi Chun Chen // IR-PCH: omp.inner.for.cond: 202*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP8:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3:![0-9]+]] 203*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP9:%.*]] = load i64, ptr [[DOTOMP_UB]], align 8, !llvm.access.group [[ACC_GRP3]] 204*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[CMP14:%.*]] = icmp sle i64 [[TMP8]], [[TMP9]] 2058ab62da1SChi Chun Chen // IR-PCH-NEXT: br i1 [[CMP14]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]] 2068ab62da1SChi Chun Chen // IR-PCH: omp.inner.for.body: 207*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP10:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 208*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP11:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4, !llvm.access.group [[ACC_GRP3]] 209*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[SUB15:%.*]] = sub nsw i32 [[TMP11]], 0 2108ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DIV16:%.*]] = sdiv i32 [[SUB15]], 1 2118ab62da1SChi Chun Chen // IR-PCH-NEXT: [[MUL17:%.*]] = mul nsw i32 1, [[DIV16]] 2128ab62da1SChi Chun Chen // IR-PCH-NEXT: [[CONV18:%.*]] = sext i32 [[MUL17]] to i64 213*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[DIV19:%.*]] = sdiv i64 [[TMP10]], [[CONV18]] 2148ab62da1SChi Chun Chen // IR-PCH-NEXT: [[MUL20:%.*]] = mul nsw i64 [[DIV19]], 1 2158ab62da1SChi Chun Chen // IR-PCH-NEXT: [[ADD21:%.*]] = add nsw i64 0, [[MUL20]] 2168ab62da1SChi Chun Chen // IR-PCH-NEXT: [[CONV22:%.*]] = trunc i64 [[ADD21]] to i32 2178ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 [[CONV22]], ptr [[I11]], align 4, !llvm.access.group [[ACC_GRP3]] 218*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP12:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 219*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP13:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 220*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP14:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4, !llvm.access.group [[ACC_GRP3]] 221*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[SUB23:%.*]] = sub nsw i32 [[TMP14]], 0 2228ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DIV24:%.*]] = sdiv i32 [[SUB23]], 1 2238ab62da1SChi Chun Chen // IR-PCH-NEXT: [[MUL25:%.*]] = mul nsw i32 1, [[DIV24]] 2248ab62da1SChi Chun Chen // IR-PCH-NEXT: [[CONV26:%.*]] = sext i32 [[MUL25]] to i64 225*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[DIV27:%.*]] = sdiv i64 [[TMP13]], [[CONV26]] 226*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP15:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4, !llvm.access.group [[ACC_GRP3]] 227*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[SUB28:%.*]] = sub nsw i32 [[TMP15]], 0 2288ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DIV29:%.*]] = sdiv i32 [[SUB28]], 1 2298ab62da1SChi Chun Chen // IR-PCH-NEXT: [[MUL30:%.*]] = mul nsw i32 1, [[DIV29]] 2308ab62da1SChi Chun Chen // IR-PCH-NEXT: [[CONV31:%.*]] = sext i32 [[MUL30]] to i64 2318ab62da1SChi Chun Chen // IR-PCH-NEXT: [[MUL32:%.*]] = mul nsw i64 [[DIV27]], [[CONV31]] 232*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[SUB33:%.*]] = sub nsw i64 [[TMP12]], [[MUL32]] 2338ab62da1SChi Chun Chen // IR-PCH-NEXT: [[MUL34:%.*]] = mul nsw i64 [[SUB33]], 1 2348ab62da1SChi Chun Chen // IR-PCH-NEXT: [[ADD35:%.*]] = add nsw i64 0, [[MUL34]] 2358ab62da1SChi Chun Chen // IR-PCH-NEXT: [[CONV36:%.*]] = trunc i64 [[ADD35]] to i32 2368ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 [[CONV36]], ptr [[J12]], align 4, !llvm.access.group [[ACC_GRP3]] 237*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP16:%.*]] = load i32, ptr [[I11]], align 4, !llvm.access.group [[ACC_GRP3]] 238*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP17:%.*]] = load i32, ptr [[J12]], align 4, !llvm.access.group [[ACC_GRP3]] 239*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[ADD37:%.*]] = add nsw i32 [[TMP16]], [[TMP17]] 240*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP18:%.*]] = load i32, ptr [[Z13]], align 4, !llvm.access.group [[ACC_GRP3]] 241*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[ADD38:%.*]] = add nsw i32 [[TMP18]], [[ADD37]] 2428ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 [[ADD38]], ptr [[Z13]], align 4, !llvm.access.group [[ACC_GRP3]] 2438ab62da1SChi Chun Chen // IR-PCH-NEXT: br label [[OMP_BODY_CONTINUE:%.*]] 2448ab62da1SChi Chun Chen // IR-PCH: omp.body.continue: 2458ab62da1SChi Chun Chen // IR-PCH-NEXT: br label [[OMP_INNER_FOR_INC:%.*]] 2468ab62da1SChi Chun Chen // IR-PCH: omp.inner.for.inc: 247*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP19:%.*]] = load i64, ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 248*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[ADD39:%.*]] = add nsw i64 [[TMP19]], 1 2498ab62da1SChi Chun Chen // IR-PCH-NEXT: store i64 [[ADD39]], ptr [[DOTOMP_IV]], align 8, !llvm.access.group [[ACC_GRP3]] 2508ab62da1SChi Chun Chen // IR-PCH-NEXT: br label [[OMP_INNER_FOR_COND]], !llvm.loop [[LOOP4:![0-9]+]] 2518ab62da1SChi Chun Chen // IR-PCH: omp.inner.for.end: 252*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP20:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_]], align 4 253*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[SUB40:%.*]] = sub nsw i32 [[TMP20]], 0 2548ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DIV41:%.*]] = sdiv i32 [[SUB40]], 1 2558ab62da1SChi Chun Chen // IR-PCH-NEXT: [[MUL42:%.*]] = mul nsw i32 [[DIV41]], 1 2568ab62da1SChi Chun Chen // IR-PCH-NEXT: [[ADD43:%.*]] = add nsw i32 0, [[MUL42]] 2578ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 [[ADD43]], ptr [[I11]], align 4 258*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP21:%.*]] = load i32, ptr [[DOTCAPTURE_EXPR_2]], align 4 259*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[SUB44:%.*]] = sub nsw i32 [[TMP21]], 0 2608ab62da1SChi Chun Chen // IR-PCH-NEXT: [[DIV45:%.*]] = sdiv i32 [[SUB44]], 1 2618ab62da1SChi Chun Chen // IR-PCH-NEXT: [[MUL46:%.*]] = mul nsw i32 [[DIV45]], 1 2628ab62da1SChi Chun Chen // IR-PCH-NEXT: [[ADD47:%.*]] = add nsw i32 0, [[MUL46]] 2638ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 [[ADD47]], ptr [[J]], align 4 264*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP22:%.*]] = load i32, ptr [[Z]], align 4 265*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[TMP23:%.*]] = load i32, ptr [[Z13]], align 4 266*c7473007SKrzysztof Parzyszek // IR-PCH-NEXT: [[ADD48:%.*]] = add nsw i32 [[TMP22]], [[TMP23]] 2678ab62da1SChi Chun Chen // IR-PCH-NEXT: store i32 [[ADD48]], ptr [[Z]], align 4 2688ab62da1SChi Chun Chen // IR-PCH-NEXT: br label [[SIMD_IF_END]] 2698ab62da1SChi Chun Chen // IR-PCH: simd.if.end: 270eb61bde8SDave Pagan // IR-PCH-NEXT: ret void 271eb61bde8SDave Pagan // 272