153d8c6b1STom Eccles! RUN: bbc -emit-hlfir -fopenmp -o - %s | FileCheck %s 253d8c6b1STom Eccles! RUN: %flang_fc1 -emit-hlfir -fopenmp -o - %s | FileCheck %s 353d8c6b1STom Eccles 453d8c6b1STom Ecclesmodule m1 553d8c6b1STom Eccles intrinsic max 653d8c6b1STom Ecclesend module m1 753d8c6b1STom Ecclesprogram main 853d8c6b1STom Eccles use m1, ren=>max 953d8c6b1STom Eccles n=0 1053d8c6b1STom Eccles !$omp parallel reduction(ren:n) 1153d8c6b1STom Eccles print *, "par" 1253d8c6b1STom Eccles !$omp end parallel 1353d8c6b1STom Ecclesend program main 1453d8c6b1STom Eccles 1553d8c6b1STom Eccles! test that we understood that this should be a max reduction 1653d8c6b1STom Eccles 17*3deaa77fSTom Eccles! CHECK-LABEL: omp.declare_reduction @max_i32 : i32 init { 1853d8c6b1STom Eccles! CHECK: ^bb0(%[[VAL_0:.*]]: i32): 1953d8c6b1STom Eccles! CHECK: %[[VAL_1:.*]] = arith.constant -2147483648 : i32 2053d8c6b1STom Eccles! CHECK: omp.yield(%[[VAL_1]] : i32) 2153d8c6b1STom Eccles 2253d8c6b1STom Eccles! CHECK-LABEL: } combiner { 2353d8c6b1STom Eccles! CHECK: ^bb0(%[[VAL_0:.*]]: i32, %[[VAL_1:.*]]: i32): 2453d8c6b1STom Eccles! CHECK: %[[VAL_2:.*]] = arith.maxsi %[[VAL_0]], %[[VAL_1]] : i32 2553d8c6b1STom Eccles! CHECK: omp.yield(%[[VAL_2]] : i32) 2653d8c6b1STom Eccles! CHECK: } 2753d8c6b1STom Eccles 2853d8c6b1STom Eccles! CHECK-LABEL: func.func @_QQmain() attributes {fir.bindc_name = "main"} { 2953d8c6b1STom Eccles! CHECK: %[[VAL_0:.*]] = fir.alloca i32 {bindc_name = "n", uniq_name = "_QFEn"} 3053d8c6b1STom Eccles! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] {uniq_name = "_QFEn"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 3153d8c6b1STom Eccles! CHECK: %[[VAL_2:.*]] = arith.constant 0 : i32 3253d8c6b1STom Eccles! CHECK: hlfir.assign %[[VAL_2]] to %[[VAL_1]]#0 : i32, !fir.ref<i32> 33*3deaa77fSTom Eccles! CHECK: omp.parallel reduction(@max_i32 %[[VAL_1]]#0 -> %[[VAL_3:.*]] : !fir.ref<i32>) { 3453d8c6b1STom Eccles! ... 3553d8c6b1STom Eccles! CHECK: omp.terminator 3653d8c6b1STom Eccles 37