From: Valentin Clement Date: Wed, 24 May 2023 17:44:40 +0000 (-0700) Subject: [mlir][openacc] Use new reduction design in acc.loop X-Git-Tag: upstream/17.0.6~7338 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6763f5918c926f5013cfac8b2472d77c06d48226;p=platform%2Fupstream%2Fllvm.git [mlir][openacc] Use new reduction design in acc.loop Use the new reduction design in acc.loop operation. Depends on D151146 Reviewed By: razvanlupusoru, jeanPerier Differential Revision: https://reviews.llvm.org/D151164 --- diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td index a662ad9..097d01e 100644 --- a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td +++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td @@ -1046,8 +1046,8 @@ def OpenACC_LoopOp : OpenACC_Op<"loop", Variadic:$tileOperands, Variadic:$privateOperands, OptionalAttr:$privatizations, - OptionalAttr:$reductionOp, - Variadic:$reductionOperands); + Variadic:$reductionOperands, + OptionalAttr:$reductionRecipes); let results = (outs Variadic:$results); @@ -1069,7 +1069,9 @@ def OpenACC_LoopOp : OpenACC_Op<"loop", $privateOperands, type($privateOperands), $privatizations) `)` | `tile` `(` $tileOperands `:` type($tileOperands) `)` - | `reduction` `(` $reductionOperands `:` type($reductionOperands) `)` + | `reduction` `(` custom( + $reductionOperands, type($reductionOperands), $reductionRecipes) + `)` ) $region ( `(` type($results)^ `)` )? diff --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp index e5d7888..714bf26 100644 --- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp +++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp @@ -749,6 +749,11 @@ LogicalResult acc::LoopOp::verify() { "privatizations"))) return failure(); + if (failed(checkSymOperandList( + *this, getReductionRecipes(), getReductionOperands(), "reduction", + "reductions"))) + return failure(); + // Check non-empty body(). if (getRegion().empty()) return emitError("expected non-empty body."); diff --git a/mlir/test/Dialect/OpenACC/ops.mlir b/mlir/test/Dialect/OpenACC/ops.mlir index fca5a5f..17a6cbd 100644 --- a/mlir/test/Dialect/OpenACC/ops.mlir +++ b/mlir/test/Dialect/OpenACC/ops.mlir @@ -1412,13 +1412,13 @@ acc.private.recipe @privatization_struct_i32_i64 : !llvm.struct<(i32, i32)> init // ----- acc.reduction.recipe @reduction_add_i64 : i64 reduction_operator init { -^bb0(%0: i64): - %1 = arith.constant 0 : i64 - acc.yield %1 : i64 +^bb0(%arg0: i64): + %0 = arith.constant 0 : i64 + acc.yield %0 : i64 } combiner { -^bb0(%0: i64, %1: i64): - %2 = arith.addi %0, %1 : i64 - acc.yield %2 : i64 +^bb0(%arg0: i64, %arg1: i64): + %0 = arith.addi %arg0, %arg1 : i64 + acc.yield %0 : i64 } // CHECK-LABEL: acc.reduction.recipe @reduction_add_i64 : i64 reduction_operator init { @@ -1433,6 +1433,10 @@ acc.reduction.recipe @reduction_add_i64 : i64 reduction_operator init { func.func @acc_reduc_test(%a : i64) -> () { acc.parallel reduction(@reduction_add_i64 -> %a : i64) { + acc.loop reduction(@reduction_add_i64 -> %a : i64) { + acc.yield + } + acc.yield } return } @@ -1440,6 +1444,7 @@ func.func @acc_reduc_test(%a : i64) -> () { // CHECK-LABEL: func.func @acc_reduc_test( // CHECK-SAME: %[[ARG0:.*]]: i64) // CHECK: acc.parallel reduction(@reduction_add_i64 -> %[[ARG0]] : i64) +// CHECK: acc.loop reduction(@reduction_add_i64 -> %[[ARG0]] : i64) // -----