|
1 | 1 | ! RUN: %flang_fc1 -O1 -mllvm --enable-affine-opt -emit-llvm -fopenmp -o - %s \
|
2 | 2 | ! RUN: | FileCheck %s
|
3 | 3 |
|
4 |
| -!CHECK-LABEL: entry: |
5 |
| -!CHECK: %[[VAL_0:.*]] = alloca { ptr }, align 8 |
6 |
| -!CHECK: %[[VAL_1:.*]] = tail call i32 @__kmpc_global_thread_num(ptr nonnull @1) |
7 |
| -!CHECK: store ptr %[[VAL_2:.*]], ptr %[[VAL_0]], align 8 |
8 |
| -!CHECK: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr nonnull @1, i32 1, ptr nonnull @foo_..omp_par, ptr nonnull %[[VAL_0]]) |
9 |
| -!CHECK: ret void |
10 |
| -!CHECK: omp.par.entry: |
11 |
| -!CHECK: %[[VAL_3:.*]] = load ptr, ptr %[[VAL_4:.*]], align 8, !align !3 |
12 |
| -!CHECK: %[[VAL_5:.*]] = alloca i32, align 4 |
13 |
| -!CHECK: %[[VAL_6:.*]] = alloca i64, align 8 |
14 |
| -!CHECK: %[[VAL_7:.*]] = alloca i64, align 8 |
15 |
| -!CHECK: %[[VAL_8:.*]] = alloca i64, align 8 |
16 |
| -!CHECK: store i64 0, ptr %[[VAL_6]], align 8 |
17 |
| -!CHECK: store i64 99, ptr %[[VAL_7]], align 8 |
18 |
| -!CHECK: store i64 1, ptr %[[VAL_8]], align 8 |
19 |
| -!CHECK: %[[VAL_9:.*]] = tail call i32 @__kmpc_global_thread_num(ptr nonnull @1) |
20 |
| -!CHECK: call void @__kmpc_for_static_init_8u(ptr nonnull @1, i32 %[[VAL_9]], i32 34, ptr nonnull %[[VAL_5]], ptr nonnull %[[VAL_6]], ptr nonnull %[[VAL_7]], ptr nonnull %[[VAL_8]], i64 1, i64 0) |
21 |
| -!CHECK: %[[VAL_10:.*]] = load i64, ptr %[[VAL_6]], align 8 |
22 |
| -!CHECK: %[[VAL_11:.*]] = load i64, ptr %[[VAL_7]], align 8 |
23 |
| -!CHECK: %[[VAL_12:.*]] = sub i64 %[[VAL_11]], %[[VAL_10]] |
24 |
| -!CHECK: %[[VAL_13:.*]] = icmp eq i64 %[[VAL_12]], -1 |
25 |
| -!CHECK: br i1 %[[VAL_13]], label %[[VAL_14:.*]], label %[[VAL_15:.*]] |
26 |
| -!CHECK: omp_loop.exit: ; preds = %[[VAL_16:.*]], %[[VAL_17:.*]] |
27 |
| -!CHECK: call void @__kmpc_for_static_fini(ptr nonnull @1, i32 %[[VAL_9]]) |
28 |
| -!CHECK: %[[VAL_18:.*]] = call i32 @__kmpc_global_thread_num(ptr nonnull @1) |
29 |
| -!CHECK: call void @__kmpc_barrier(ptr nonnull @2, i32 %[[VAL_18]]) |
30 |
| -!CHECK: ret void |
31 |
| -!CHECK: omp_loop.body: ; preds = %[[VAL_17]], %[[VAL_16]] |
32 |
| -!CHECK: %[[VAL_19:.*]] = phi i64 [ %[[VAL_20:.*]], %[[VAL_16]] ], [ 0, %[[VAL_17]] ] |
33 |
| -!CHECK: %[[VAL_21:.*]] = add i64 %[[VAL_19]], %[[VAL_10]] |
34 |
| -!CHECK: %[[VAL_22:.*]] = mul i64 %[[VAL_21]], 400 |
35 |
| -!CHECK: %[[VAL_23:.*]] = getelementptr i8, ptr %[[VAL_3]], i64 %[[VAL_22]] |
36 |
| -!CHECK: br label %[[VAL_24:.*]] |
37 |
| -!CHECK: omp_loop.inc: ; preds = %[[VAL_24]] |
38 |
| -!CHECK: %[[VAL_20]] = add nuw i64 %[[VAL_19]], 1 |
39 |
| -!CHECK: %[[VAL_25:.*]] = icmp eq i64 %[[VAL_19]], %[[VAL_12]] |
40 |
| -!CHECK: br i1 %[[VAL_25]], label %[[VAL_14]], label %[[VAL_15]] |
41 |
| -!CHECK: omp.loop_nest.region6: ; preds = %[[VAL_15]], %[[VAL_24]] |
42 |
| -!CHECK: %[[VAL_26:.*]] = phi i64 [ 0, %[[VAL_15]] ], [ %[[VAL_27:.*]], %[[VAL_24]] ] |
43 |
| -!CHECK: %[[VAL_28:.*]] = getelementptr i32, ptr %[[VAL_23]], i64 %[[VAL_26]] |
44 |
| -!CHECK: store i32 1, ptr %[[VAL_28]], align 4, !tbaa !4 |
45 |
| -!CHECK: %[[VAL_27]] = add nuw nsw i64 %[[VAL_26]], 1 |
46 |
| -!CHECK: %[[VAL_29:.*]] = icmp eq i64 %[[VAL_27]], 100 |
47 |
| -!CHECK: br i1 %[[VAL_29]], label %[[VAL_16]], label %[[VAL_24]] |
| 4 | +!CHECK-LABEL: define void @foo_(ptr captures(none) %0) {{.*}} { |
| 5 | +!CHECK: call void{{.*}}@__kmpc_fork_call{{.*}}@[[OMP_OUTLINED_FN_1:.*]]) |
48 | 6 |
|
49 | 7 | subroutine foo(a)
|
50 | 8 | integer, dimension(100, 100), intent(out) :: a
|
|
0 commit comments