mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-24 20:44:09 +00:00
[mlir][openacc] Add acc.private operation as data entry operation
acc.private operation will be used as data entry operation for the private operands. Reviewed By: razvanlupusoru Differential Revision: https://reviews.llvm.org/D152970
This commit is contained in:
parent
d10a61c8d2
commit
cfba521dbd
@ -222,6 +222,14 @@ class OpenACC_DataEntryOp<string mnemonic, string clause, list<Trait> traits = [
|
||||
let hasVerifier = 1;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// 2.5.13 private clause
|
||||
//===----------------------------------------------------------------------===//
|
||||
def OpenACC_PrivateOp : OpenACC_DataEntryOp<"private",
|
||||
"mlir::acc::DataClause::acc_private"> {
|
||||
let summary = "Represents private semantics for acc private clause.";
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// 2.7.4 deviceptr clause
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -61,6 +61,16 @@ LogicalResult acc::DataBoundsOp::verify() {
|
||||
return success();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// PrivateOp
|
||||
//===----------------------------------------------------------------------===//
|
||||
LogicalResult acc::PrivateOp::verify() {
|
||||
if (getDataClause() != acc::DataClause::acc_private)
|
||||
return emitError(
|
||||
"data clause associated with private operation must match its intent");
|
||||
return success();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// DevicePtrOp
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -136,7 +136,8 @@ func.func @compute3(%a: memref<10x10xf32>, %b: memref<10x10xf32>, %c: memref<10x
|
||||
%pc = acc.present varPtr(%c : memref<10xf32>) -> memref<10xf32>
|
||||
%pd = acc.present varPtr(%d : memref<10xf32>) -> memref<10xf32>
|
||||
acc.data dataOperands(%pa, %pb, %pc, %pd: memref<10x10xf32>, memref<10x10xf32>, memref<10xf32>, memref<10xf32>) {
|
||||
acc.parallel num_gangs(%numGangs: i64) num_workers(%numWorkers: i64) private(@privatization_memref_10_f32 -> %c : memref<10xf32>) {
|
||||
%private = acc.private varPtr(%c : memref<10xf32>) -> memref<10xf32>
|
||||
acc.parallel num_gangs(%numGangs: i64) num_workers(%numWorkers: i64) private(@privatization_memref_10_f32 -> %private : memref<10xf32>) {
|
||||
acc.loop gang {
|
||||
scf.for %x = %lb to %c10 step %st {
|
||||
acc.loop worker {
|
||||
@ -178,7 +179,8 @@ func.func @compute3(%a: memref<10x10xf32>, %b: memref<10x10xf32>, %c: memref<10x
|
||||
// CHECK-NEXT: [[NUMGANG:%.*]] = arith.constant 10 : i64
|
||||
// CHECK-NEXT: [[NUMWORKERS:%.*]] = arith.constant 10 : i64
|
||||
// CHECK: acc.data dataOperands(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}} : memref<10x10xf32>, memref<10x10xf32>, memref<10xf32>, memref<10xf32>) {
|
||||
// CHECK-NEXT: acc.parallel num_gangs([[NUMGANG]] : i64) num_workers([[NUMWORKERS]] : i64) private(@privatization_memref_10_f32 -> [[ARG2]] : memref<10xf32>) {
|
||||
// CHECK-NEXT: %[[P_ARG2:.*]] = acc.private varPtr([[ARG2]] : memref<10xf32>) -> memref<10xf32>
|
||||
// CHECK-NEXT: acc.parallel num_gangs([[NUMGANG]] : i64) num_workers([[NUMWORKERS]] : i64) private(@privatization_memref_10_f32 -> %[[P_ARG2]] : memref<10xf32>) {
|
||||
// CHECK-NEXT: acc.loop gang {
|
||||
// CHECK-NEXT: scf.for %{{.*}} = [[C0]] to [[C10]] step [[C1]] {
|
||||
// CHECK-NEXT: acc.loop worker {
|
||||
|
Loading…
x
Reference in New Issue
Block a user