1*207b08a9SGiorgis Georgakoudis // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _
2*207b08a9SGiorgis Georgakoudis // RUN: %clang_cc1 -triple x86_64-unknown-linux -fopenmp -x c++ %s -verify -debug-info-kind=limited -emit-llvm -o - | FileCheck %s --check-prefix=CHECK1
3a8a9153aSAlexey Bataev 
4*207b08a9SGiorgis Georgakoudis // RUN: %clang_cc1 -triple x86_64-unknown-linux -fopenmp-simd -x c++ %s -verify -debug-info-kind=limited -emit-llvm -o - | FileCheck %s --check-prefix=CHECK2
52f5ed342SAlexey Bataev // expected-no-diagnostics
62f5ed342SAlexey Bataev 
72f5ed342SAlexey Bataev void f(int m) {
82f5ed342SAlexey Bataev   int i;
92f5ed342SAlexey Bataev   int cen[m];
102f5ed342SAlexey Bataev #pragma omp parallel for
112f5ed342SAlexey Bataev   for (i = 0; i < m; ++i) {
122f5ed342SAlexey Bataev     cen[i] = i;
132f5ed342SAlexey Bataev   }
142f5ed342SAlexey Bataev }
152f5ed342SAlexey Bataev 
16*207b08a9SGiorgis Georgakoudis // CHECK1-LABEL: define {{[^@]+}}@_Z1fi
17*207b08a9SGiorgis Georgakoudis // CHECK1-SAME: (i32 [[M:%.*]]) #[[ATTR0:[0-9]+]] !dbg [[DBG6:![0-9]+]] {
18*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:  entry:
19*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[M_ADDR:%.*]] = alloca i32, align 4
20*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 4
21*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[SAVED_STACK:%.*]] = alloca i8*, align 8
22*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[__VLA_EXPR0:%.*]] = alloca i64, align 8
23*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 [[M]], i32* [[M_ADDR]], align 4
24*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[M_ADDR]], metadata [[META11:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12:![0-9]+]]
25*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[I]], metadata [[META13:![0-9]+]], metadata !DIExpression()), !dbg [[DBG14:![0-9]+]]
26*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP0:%.*]] = load i32, i32* [[M_ADDR]], align 4, !dbg [[DBG15:![0-9]+]]
27*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP1:%.*]] = zext i32 [[TMP0]] to i64, !dbg [[DBG16:![0-9]+]]
28*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP2:%.*]] = call i8* @llvm.stacksave(), !dbg [[DBG16]]
29*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i8* [[TMP2]], i8** [[SAVED_STACK]], align 8, !dbg [[DBG16]]
30*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[VLA:%.*]] = alloca i32, i64 [[TMP1]], align 16, !dbg [[DBG16]]
31*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i64 [[TMP1]], i64* [[__VLA_EXPR0]], align 8, !dbg [[DBG16]]
32*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i64* [[__VLA_EXPR0]], metadata [[META17:![0-9]+]], metadata !DIExpression()), !dbg [[DBG19:![0-9]+]]
33*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[VLA]], metadata [[META20:![0-9]+]], metadata !DIExpression()), !dbg [[DBG24:![0-9]+]]
34*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB4:[0-9]+]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32*, i64, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*), i32* [[M_ADDR]], i64 [[TMP1]], i32* [[VLA]]), !dbg [[DBG25:![0-9]+]]
35*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP3:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8, !dbg [[DBG26:![0-9]+]]
36*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.stackrestore(i8* [[TMP3]]), !dbg [[DBG26]]
37*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    ret void, !dbg [[DBG26]]
38*207b08a9SGiorgis Georgakoudis //
39*207b08a9SGiorgis Georgakoudis //
40*207b08a9SGiorgis Georgakoudis // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined._debug__
41*207b08a9SGiorgis Georgakoudis // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32* nonnull align 4 dereferenceable(4) [[M:%.*]], i64 [[VLA:%.*]], i32* nonnull align 4 dereferenceable(4) [[CEN:%.*]]) #[[ATTR3:[0-9]+]] !dbg [[DBG27:![0-9]+]] {
42*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:  entry:
43*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
44*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
45*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[M_ADDR:%.*]] = alloca i32*, align 8
46*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[VLA_ADDR:%.*]] = alloca i64, align 8
47*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[CEN_ADDR:%.*]] = alloca i32*, align 8
48*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTOMP_IV:%.*]] = alloca i32, align 4
49*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP:%.*]] = alloca i32, align 4
50*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTCAPTURE_EXPR_:%.*]] = alloca i32, align 4
51*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTCAPTURE_EXPR_1:%.*]] = alloca i32, align 4
52*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[I:%.*]] = alloca i32, align 4
53*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTOMP_LB:%.*]] = alloca i32, align 4
54*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTOMP_UB:%.*]] = alloca i32, align 4
55*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4
56*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4
57*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[I3:%.*]] = alloca i32, align 4
58*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
59*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32** [[DOTGLOBAL_TID__ADDR]], metadata [[META35:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36:![0-9]+]]
60*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
61*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32** [[DOTBOUND_TID__ADDR]], metadata [[META37:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36]]
62*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32* [[M]], i32** [[M_ADDR]], align 8
63*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32** [[M_ADDR]], metadata [[META38:![0-9]+]], metadata !DIExpression()), !dbg [[DBG39:![0-9]+]]
64*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i64 [[VLA]], i64* [[VLA_ADDR]], align 8
65*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i64* [[VLA_ADDR]], metadata [[META40:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36]]
66*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32* [[CEN]], i32** [[CEN_ADDR]], align 8
67*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32** [[CEN_ADDR]], metadata [[META41:![0-9]+]], metadata !DIExpression()), !dbg [[DBG42:![0-9]+]]
68*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[M_ADDR]], align 8, !dbg [[DBG43:![0-9]+]]
69*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP1:%.*]] = load i64, i64* [[VLA_ADDR]], align 8, !dbg [[DBG43]]
70*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP2:%.*]] = load i32*, i32** [[CEN_ADDR]], align 8, !dbg [[DBG43]]
71*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[DOTOMP_IV]], metadata [[META44:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36]]
72*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[DOTCAPTURE_EXPR_]], metadata [[META45:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36]]
73*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP3:%.*]] = load i32, i32* [[TMP0]], align 4, !dbg [[DBG46:![0-9]+]]
74*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 [[TMP3]], i32* [[DOTCAPTURE_EXPR_]], align 4, !dbg [[DBG46]]
75*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[DOTCAPTURE_EXPR_1]], metadata [[META45]], metadata !DIExpression()), !dbg [[DBG36]]
76*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP4:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4, !dbg [[DBG46]]
77*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP4]], 0, !dbg [[DBG43]]
78*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DIV:%.*]] = sdiv i32 [[SUB]], 1, !dbg [[DBG43]]
79*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[SUB2:%.*]] = sub nsw i32 [[DIV]], 1, !dbg [[DBG43]]
80*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 [[SUB2]], i32* [[DOTCAPTURE_EXPR_1]], align 4, !dbg [[DBG43]]
81*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[I]], metadata [[META47:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36]]
82*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 0, i32* [[I]], align 4, !dbg [[DBG48:![0-9]+]]
83*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP5:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_]], align 4, !dbg [[DBG46]]
84*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[CMP:%.*]] = icmp slt i32 0, [[TMP5]], !dbg [[DBG43]]
85*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_PRECOND_THEN:%.*]], label [[OMP_PRECOND_END:%.*]], !dbg [[DBG43]]
86*207b08a9SGiorgis Georgakoudis // CHECK1:       omp.precond.then:
87*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[DOTOMP_LB]], metadata [[META49:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36]]
88*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 0, i32* [[DOTOMP_LB]], align 4, !dbg [[DBG50:![0-9]+]]
89*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[DOTOMP_UB]], metadata [[META51:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36]]
90*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP6:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4, !dbg [[DBG43]]
91*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 [[TMP6]], i32* [[DOTOMP_UB]], align 4, !dbg [[DBG50]]
92*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[DOTOMP_STRIDE]], metadata [[META52:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36]]
93*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 1, i32* [[DOTOMP_STRIDE]], align 4, !dbg [[DBG50]]
94*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[DOTOMP_IS_LAST]], metadata [[META53:![0-9]+]], metadata !DIExpression()), !dbg [[DBG36]]
95*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 0, i32* [[DOTOMP_IS_LAST]], align 4, !dbg [[DBG50]]
96*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32* [[I3]], metadata [[META47]], metadata !DIExpression()), !dbg [[DBG36]]
97*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP7:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8, !dbg [[DBG43]]
98*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP8:%.*]] = load i32, i32* [[TMP7]], align 4, !dbg [[DBG43]]
99*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @__kmpc_for_static_init_4(%struct.ident_t* @[[GLOB1:[0-9]+]], i32 [[TMP8]], i32 34, i32* [[DOTOMP_IS_LAST]], i32* [[DOTOMP_LB]], i32* [[DOTOMP_UB]], i32* [[DOTOMP_STRIDE]], i32 1, i32 1), !dbg [[DBG54:![0-9]+]]
100*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP9:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4, !dbg [[DBG50]]
101*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4, !dbg [[DBG43]]
102*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[CMP4:%.*]] = icmp sgt i32 [[TMP9]], [[TMP10]], !dbg [[DBG50]]
103*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br i1 [[CMP4]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]], !dbg [[DBG50]]
104*207b08a9SGiorgis Georgakoudis // CHECK1:       cond.true:
105*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR_1]], align 4, !dbg [[DBG43]]
106*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br label [[COND_END:%.*]], !dbg [[DBG50]]
107*207b08a9SGiorgis Georgakoudis // CHECK1:       cond.false:
108*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP12:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4, !dbg [[DBG50]]
109*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br label [[COND_END]], !dbg [[DBG50]]
110*207b08a9SGiorgis Georgakoudis // CHECK1:       cond.end:
111*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[COND:%.*]] = phi i32 [ [[TMP11]], [[COND_TRUE]] ], [ [[TMP12]], [[COND_FALSE]] ], !dbg [[DBG50]]
112*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 [[COND]], i32* [[DOTOMP_UB]], align 4, !dbg [[DBG50]]
113*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP13:%.*]] = load i32, i32* [[DOTOMP_LB]], align 4, !dbg [[DBG50]]
114*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 [[TMP13]], i32* [[DOTOMP_IV]], align 4, !dbg [[DBG50]]
115*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]], !dbg [[DBG43]]
116*207b08a9SGiorgis Georgakoudis // CHECK1:       omp.inner.for.cond:
117*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP14:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4, !dbg [[DBG50]]
118*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP15:%.*]] = load i32, i32* [[DOTOMP_UB]], align 4, !dbg [[DBG50]]
119*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[CMP5:%.*]] = icmp sle i32 [[TMP14]], [[TMP15]], !dbg [[DBG43]]
120*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br i1 [[CMP5]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]], !dbg [[DBG43]]
121*207b08a9SGiorgis Georgakoudis // CHECK1:       omp.inner.for.body:
122*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP16:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4, !dbg [[DBG50]]
123*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[MUL:%.*]] = mul nsw i32 [[TMP16]], 1, !dbg [[DBG48]]
124*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[ADD:%.*]] = add nsw i32 0, [[MUL]], !dbg [[DBG48]]
125*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 [[ADD]], i32* [[I3]], align 4, !dbg [[DBG48]]
126*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP17:%.*]] = load i32, i32* [[I3]], align 4, !dbg [[DBG55:![0-9]+]]
127*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP18:%.*]] = load i32, i32* [[I3]], align 4, !dbg [[DBG57:![0-9]+]]
128*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP18]] to i64, !dbg [[DBG58:![0-9]+]]
129*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[TMP2]], i64 [[IDXPROM]], !dbg [[DBG58]]
130*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 [[TMP17]], i32* [[ARRAYIDX]], align 4, !dbg [[DBG59:![0-9]+]]
131*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br label [[OMP_BODY_CONTINUE:%.*]], !dbg [[DBG60:![0-9]+]]
132*207b08a9SGiorgis Georgakoudis // CHECK1:       omp.body.continue:
133*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]], !dbg [[DBG54]]
134*207b08a9SGiorgis Georgakoudis // CHECK1:       omp.inner.for.inc:
135*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP19:%.*]] = load i32, i32* [[DOTOMP_IV]], align 4, !dbg [[DBG50]]
136*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[ADD6:%.*]] = add nsw i32 [[TMP19]], 1, !dbg [[DBG43]]
137*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32 [[ADD6]], i32* [[DOTOMP_IV]], align 4, !dbg [[DBG43]]
138*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]], !dbg [[DBG54]], !llvm.loop [[LOOP61:![0-9]+]]
139*207b08a9SGiorgis Georgakoudis // CHECK1:       omp.inner.for.end:
140*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br label [[OMP_LOOP_EXIT:%.*]], !dbg [[DBG54]]
141*207b08a9SGiorgis Georgakoudis // CHECK1:       omp.loop.exit:
142*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP20:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8, !dbg [[DBG54]]
143*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP21:%.*]] = load i32, i32* [[TMP20]], align 4, !dbg [[DBG54]]
144*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @__kmpc_for_static_fini(%struct.ident_t* @[[GLOB3:[0-9]+]], i32 [[TMP21]]), !dbg [[DBG62:![0-9]+]]
145*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    br label [[OMP_PRECOND_END]], !dbg [[DBG54]]
146*207b08a9SGiorgis Georgakoudis // CHECK1:       omp.precond.end:
147*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    ret void, !dbg [[DBG63:![0-9]+]]
148*207b08a9SGiorgis Georgakoudis //
149*207b08a9SGiorgis Georgakoudis //
150*207b08a9SGiorgis Georgakoudis // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined.
151*207b08a9SGiorgis Georgakoudis // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32* nonnull align 4 dereferenceable(4) [[M:%.*]], i64 [[VLA:%.*]], i32* nonnull align 4 dereferenceable(4) [[CEN:%.*]]) #[[ATTR3]] !dbg [[DBG64:![0-9]+]] {
152*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:  entry:
153*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8
154*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8
155*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[M_ADDR:%.*]] = alloca i32*, align 8
156*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[VLA_ADDR:%.*]] = alloca i64, align 8
157*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[CEN_ADDR:%.*]] = alloca i32*, align 8
158*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8
159*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32** [[DOTGLOBAL_TID__ADDR]], metadata [[META65:![0-9]+]], metadata !DIExpression()), !dbg [[DBG66:![0-9]+]]
160*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8
161*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32** [[DOTBOUND_TID__ADDR]], metadata [[META67:![0-9]+]], metadata !DIExpression()), !dbg [[DBG66]]
162*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32* [[M]], i32** [[M_ADDR]], align 8
163*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32** [[M_ADDR]], metadata [[META68:![0-9]+]], metadata !DIExpression()), !dbg [[DBG66]]
164*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i64 [[VLA]], i64* [[VLA_ADDR]], align 8
165*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i64* [[VLA_ADDR]], metadata [[META69:![0-9]+]], metadata !DIExpression()), !dbg [[DBG66]]
166*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    store i32* [[CEN]], i32** [[CEN_ADDR]], align 8
167*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @llvm.dbg.declare(metadata i32** [[CEN_ADDR]], metadata [[META70:![0-9]+]], metadata !DIExpression()), !dbg [[DBG66]]
168*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP0:%.*]] = load i32*, i32** [[M_ADDR]], align 8, !dbg [[DBG71:![0-9]+]]
169*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP1:%.*]] = load i64, i64* [[VLA_ADDR]], align 8, !dbg [[DBG71]]
170*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP2:%.*]] = load i32*, i32** [[CEN_ADDR]], align 8, !dbg [[DBG71]]
171*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP3:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8, !dbg [[DBG71]]
172*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP4:%.*]] = load i32*, i32** [[DOTBOUND_TID__ADDR]], align 8, !dbg [[DBG71]]
173*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP5:%.*]] = load i32*, i32** [[M_ADDR]], align 8, !dbg [[DBG71]]
174*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    [[TMP6:%.*]] = load i32*, i32** [[CEN_ADDR]], align 8, !dbg [[DBG71]]
175*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    call void @.omp_outlined._debug__(i32* [[TMP3]], i32* [[TMP4]], i32* [[TMP5]], i64 [[TMP1]], i32* [[TMP6]]) #[[ATTR4:[0-9]+]], !dbg [[DBG71]]
176*207b08a9SGiorgis Georgakoudis // CHECK1-NEXT:    ret void, !dbg [[DBG71]]
177*207b08a9SGiorgis Georgakoudis //
178*207b08a9SGiorgis Georgakoudis //
179*207b08a9SGiorgis Georgakoudis // CHECK2-LABEL: define {{[^@]+}}@_Z1fi
180*207b08a9SGiorgis Georgakoudis // CHECK2-SAME: (i32 [[M:%.*]]) #[[ATTR0:[0-9]+]] !dbg [[DBG6:![0-9]+]] {
181*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:  entry:
182*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[M_ADDR:%.*]] = alloca i32, align 4
183*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[I:%.*]] = alloca i32, align 4
184*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[SAVED_STACK:%.*]] = alloca i8*, align 8
185*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[__VLA_EXPR0:%.*]] = alloca i64, align 8
186*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    store i32 [[M]], i32* [[M_ADDR]], align 4
187*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    call void @llvm.dbg.declare(metadata i32* [[M_ADDR]], metadata [[META11:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12:![0-9]+]]
188*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    call void @llvm.dbg.declare(metadata i32* [[I]], metadata [[META13:![0-9]+]], metadata !DIExpression()), !dbg [[DBG14:![0-9]+]]
189*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[TMP0:%.*]] = load i32, i32* [[M_ADDR]], align 4, !dbg [[DBG15:![0-9]+]]
190*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[TMP1:%.*]] = zext i32 [[TMP0]] to i64, !dbg [[DBG16:![0-9]+]]
191*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[TMP2:%.*]] = call i8* @llvm.stacksave(), !dbg [[DBG16]]
192*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    store i8* [[TMP2]], i8** [[SAVED_STACK]], align 8, !dbg [[DBG16]]
193*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[VLA:%.*]] = alloca i32, i64 [[TMP1]], align 16, !dbg [[DBG16]]
194*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    store i64 [[TMP1]], i64* [[__VLA_EXPR0]], align 8, !dbg [[DBG16]]
195*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    call void @llvm.dbg.declare(metadata i64* [[__VLA_EXPR0]], metadata [[META17:![0-9]+]], metadata !DIExpression()), !dbg [[DBG19:![0-9]+]]
196*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    call void @llvm.dbg.declare(metadata i32* [[VLA]], metadata [[META20:![0-9]+]], metadata !DIExpression()), !dbg [[DBG24:![0-9]+]]
197*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    store i32 0, i32* [[I]], align 4, !dbg [[DBG25:![0-9]+]]
198*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    br label [[FOR_COND:%.*]], !dbg [[DBG28:![0-9]+]]
199*207b08a9SGiorgis Georgakoudis // CHECK2:       for.cond:
200*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[TMP3:%.*]] = load i32, i32* [[I]], align 4, !dbg [[DBG29:![0-9]+]]
201*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[TMP4:%.*]] = load i32, i32* [[M_ADDR]], align 4, !dbg [[DBG31:![0-9]+]]
202*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[CMP:%.*]] = icmp slt i32 [[TMP3]], [[TMP4]], !dbg [[DBG32:![0-9]+]]
203*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]], !dbg [[DBG33:![0-9]+]]
204*207b08a9SGiorgis Georgakoudis // CHECK2:       for.body:
205*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[TMP5:%.*]] = load i32, i32* [[I]], align 4, !dbg [[DBG34:![0-9]+]]
206*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[TMP6:%.*]] = load i32, i32* [[I]], align 4, !dbg [[DBG36:![0-9]+]]
207*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[IDXPROM:%.*]] = sext i32 [[TMP6]] to i64, !dbg [[DBG37:![0-9]+]]
208*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[VLA]], i64 [[IDXPROM]], !dbg [[DBG37]]
209*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    store i32 [[TMP5]], i32* [[ARRAYIDX]], align 4, !dbg [[DBG38:![0-9]+]]
210*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    br label [[FOR_INC:%.*]], !dbg [[DBG39:![0-9]+]]
211*207b08a9SGiorgis Georgakoudis // CHECK2:       for.inc:
212*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[TMP7:%.*]] = load i32, i32* [[I]], align 4, !dbg [[DBG40:![0-9]+]]
213*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[INC:%.*]] = add nsw i32 [[TMP7]], 1, !dbg [[DBG40]]
214*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    store i32 [[INC]], i32* [[I]], align 4, !dbg [[DBG40]]
215*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    br label [[FOR_COND]], !dbg [[DBG41:![0-9]+]], !llvm.loop [[LOOP42:![0-9]+]]
216*207b08a9SGiorgis Georgakoudis // CHECK2:       for.end:
217*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    [[TMP8:%.*]] = load i8*, i8** [[SAVED_STACK]], align 8, !dbg [[DBG45:![0-9]+]]
218*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    call void @llvm.stackrestore(i8* [[TMP8]]), !dbg [[DBG45]]
219*207b08a9SGiorgis Georgakoudis // CHECK2-NEXT:    ret void, !dbg [[DBG45]]
220*207b08a9SGiorgis Georgakoudis //
221