xref: /llvm-project/clang/test/OpenMP/generic_loop_codegen.cpp (revision c74730070a0261d582e01ee7e5eef2e7c39fb11f)
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