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