// RUN: mlir-opt %s -acc-recipe-materialization | FileCheck %s // acc.kernels with private: recipe materialized to alloca inside region // CHECK-NOT: acc.private // CHECK: acc.kernels dataOperands( // CHECK: memref.alloca() {acc.var_name = #acc.var_name<"s">} : memref acc.private.recipe @privatization_memref_i32 : memref init { ^bb0(%arg0: memref): %0 = memref.alloca() : memref acc.yield %0 : memref } func.func @kpriv_(%arg0: memref, %arg1: memref<32xi32>) { %c1 = arith.constant 1 : index %c32 = arith.constant 32 : index %iv_alloc = memref.alloca() : memref %start = memref.load %arg0[] : memref memref.store %start, %iv_alloc[] : memref %copy = acc.copyin varPtr(%arg1 : memref<32xi32>) -> memref<32xi32> {dataClause = #acc, implicit = true, name = "a"} %priv = acc.private varPtr(%iv_alloc : memref) recipe(@privatization_memref_i32) -> memref {implicit = true, name = "s"} acc.kernels dataOperands(%copy : memref<32xi32>) private(%priv : memref) { acc.loop control(%arg2 : index) = (%c1 : index) to (%c32 : index) step (%c1 : index) { %iv = arith.index_cast %arg2 : index to i32 memref.store %iv, %iv_alloc[] : memref %s_val = memref.load %priv[] : memref memref.store %s_val, %copy[%arg2] : memref<32xi32> acc.yield } attributes {inclusiveUpperbound = array, independent = [#acc.device_type]} acc.terminator } acc.copyout accPtr(%copy : memref<32xi32>) to varPtr(%arg1 : memref<32xi32>) {dataClause = #acc, implicit = true, name = "a"} return }