brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 6ba4e38 Raw
49 lines · plain
1! RUN: bbc -emit-hlfir -fopenmp -o - %s | FileCheck %s2! RUN: %flang_fc1 -emit-hlfir -fopenmp -o - %s | FileCheck %s3 4! Test that we can reduce variables used in an equivalence statement.5! Unlike POINTER variables these are lowered to an unboxed !fir.ptr<>.6 7subroutine reduction_equivalence()8  integer::va9  equivalence (va,vva)10  va=111 12!$omp parallel reduction(+:va)13  va=114!$omp end parallel15end subroutine reduction_equivalence16 17 18! CHECK-LABEL:   omp.declare_reduction @add_reduction_i32 : i32 init {19! CHECK:         ^bb0(%[[VAL_0:.*]]: i32):20! CHECK:           %[[VAL_1:.*]] = arith.constant 0 : i3221! CHECK:           omp.yield(%[[VAL_1]] : i32)22! CHECK-LABEL:   } combiner {23! CHECK:         ^bb0(%[[VAL_0:.*]]: i32, %[[VAL_1:.*]]: i32):24! CHECK:           %[[VAL_2:.*]] = arith.addi %[[VAL_0]], %[[VAL_1]] : i3225! CHECK:           omp.yield(%[[VAL_2]] : i32)26! CHECK:         }27 28! CHECK-LABEL:   func.func @_QPreduction_equivalence() {29! CHECK:           %[[VAL_0:.*]] = fir.alloca !fir.array<4xi8> {uniq_name = "_QFreduction_equivalenceEva"}30! CHECK:           %[[VAL_1:.*]] = arith.constant 0 : index31! CHECK:           %[[VAL_2:.*]] = fir.coordinate_of %[[VAL_0]], %[[VAL_1]] : (!fir.ref<!fir.array<4xi8>>, index) -> !fir.ref<i8>32! CHECK:           %[[VAL_3:.*]] = fir.convert %[[VAL_2]] : (!fir.ref<i8>) -> !fir.ptr<i32>33! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_3]] storage(%[[VAL_0]][0]) {uniq_name = "_QFreduction_equivalenceEva"} : (!fir.ptr<i32>, !fir.ref<!fir.array<4xi8>>) -> (!fir.ptr<i32>, !fir.ptr<i32>)34! CHECK:           %[[VAL_5:.*]] = arith.constant 0 : index35! CHECK:           %[[VAL_6:.*]] = fir.coordinate_of %[[VAL_0]], %[[VAL_5]] : (!fir.ref<!fir.array<4xi8>>, index) -> !fir.ref<i8>36! CHECK:           %[[VAL_7:.*]] = fir.convert %[[VAL_6]] : (!fir.ref<i8>) -> !fir.ptr<f32>37! CHECK:           %[[VAL_8:.*]]:2 = hlfir.declare %[[VAL_7]] storage(%[[VAL_0]][0]) {uniq_name = "_QFreduction_equivalenceEvva"} : (!fir.ptr<f32>, !fir.ref<!fir.array<4xi8>>) -> (!fir.ptr<f32>, !fir.ptr<f32>)38! CHECK:           %[[VAL_9:.*]] = arith.constant 1 : i3239! CHECK:           hlfir.assign %[[VAL_9]] to %[[VAL_4]]#0 : i32, !fir.ptr<i32>40! CHECK:           %[[VAL_10:.*]] = fir.convert %[[VAL_4]]#0 : (!fir.ptr<i32>) -> !fir.ref<i32>41! CHECK:           omp.parallel reduction(@add_reduction_i32 %[[VAL_10]] -> %[[VAL_11:.*]] : !fir.ref<i32>) {42! CHECK:             %[[VAL_12:.*]]:2 = hlfir.declare %[[VAL_11]] {uniq_name = "_QFreduction_equivalenceEva"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)43! CHECK:             %[[VAL_13:.*]] = arith.constant 1 : i3244! CHECK:             hlfir.assign %[[VAL_13]] to %[[VAL_12]]#0 : i32, !fir.ref<i32>45! CHECK:             omp.terminator46! CHECK:           }47! CHECK:           return48! CHECK:         }49