[Mlir-commits] [mlir] d6929aa - [mlir][openacc] Make use of the second counter extension in DataOp translation
Valentin Clement
llvmlistbot at llvm.org
Mon Sep 20 04:44:25 PDT 2021
Author: Valentin Clement
Date: 2021-09-20T13:43:50+02:00
New Revision: d6929aaa67c7996a69451e301970408362af909e
URL: https://github.com/llvm/llvm-project/commit/d6929aaa67c7996a69451e301970408362af909e
DIFF: https://github.com/llvm/llvm-project/commit/d6929aaa67c7996a69451e301970408362af909e.diff
LOG: [mlir][openacc] Make use of the second counter extension in DataOp translation
Make use of runtime extension for the second reference counter used in
structured data region. This extension is implemented in D106510 and D106509.
Differential Revision: https://reviews.llvm.org/D106517
Added:
Modified:
mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
mlir/test/Target/LLVMIR/openacc-llvm.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
index 2900a095e3db..f6f7be139dd6 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
@@ -40,6 +40,8 @@ static constexpr uint64_t kHostCopyoutFlag = 0x002;
static constexpr uint64_t kCopyFlag = kDeviceCopyinFlag | kHostCopyoutFlag;
static constexpr uint64_t kPresentFlag = 0x1000;
static constexpr uint64_t kDeleteFlag = 0x008;
+// Runtime extension to implement the OpenACC second reference counter.
+static constexpr uint64_t kHoldFlag = 0x2000;
/// Default value for the device id
static constexpr int64_t kDefaultDevice = -1;
@@ -307,51 +309,54 @@ static LogicalResult convertDataOp(acc::DataOp &op,
// TODO handle no_create, deviceptr and attach operands.
if (failed(processOperands(builder, moduleTranslation, op, op.copyOperands(),
- totalNbOperand, kCopyFlag, flags, names, index,
- mapperAllocas)))
+ totalNbOperand, kCopyFlag | kHoldFlag, flags,
+ names, index, mapperAllocas)))
return failure();
if (failed(processOperands(
builder, moduleTranslation, op, op.copyinOperands(), totalNbOperand,
- kDeviceCopyinFlag, flags, names, index, mapperAllocas)))
+ kDeviceCopyinFlag | kHoldFlag, flags, names, index, mapperAllocas)))
return failure();
// TODO copyin readonly currenlty handled as copyin. Update when extension
// available.
if (failed(processOperands(builder, moduleTranslation, op,
op.copyinReadonlyOperands(), totalNbOperand,
- kDeviceCopyinFlag, flags, names, index,
+ kDeviceCopyinFlag | kHoldFlag, flags, names, index,
mapperAllocas)))
return failure();
if (failed(processOperands(
builder, moduleTranslation, op, op.copyoutOperands(), totalNbOperand,
- kHostCopyoutFlag, flags, names, index, mapperAllocas)))
+ kHostCopyoutFlag | kHoldFlag, flags, names, index, mapperAllocas)))
return failure();
// TODO copyout zero currenlty handled as copyout. Update when extension
// available.
if (failed(processOperands(builder, moduleTranslation, op,
op.copyoutZeroOperands(), totalNbOperand,
- kHostCopyoutFlag, flags, names, index,
+ kHostCopyoutFlag | kHoldFlag, flags, names, index,
mapperAllocas)))
return failure();
if (failed(processOperands(builder, moduleTranslation, op,
- op.createOperands(), totalNbOperand, kCreateFlag,
- flags, names, index, mapperAllocas)))
+ op.createOperands(), totalNbOperand,
+ kCreateFlag | kHoldFlag, flags, names, index,
+ mapperAllocas)))
return failure();
// TODO create zero currenlty handled as create. Update when extension
// available.
if (failed(processOperands(builder, moduleTranslation, op,
op.createZeroOperands(), totalNbOperand,
- kCreateFlag, flags, names, index, mapperAllocas)))
+ kCreateFlag | kHoldFlag, flags, names, index,
+ mapperAllocas)))
return failure();
if (failed(processOperands(builder, moduleTranslation, op,
- op.presentOperands(), totalNbOperand, kPresentFlag,
- flags, names, index, mapperAllocas)))
+ op.presentOperands(), totalNbOperand,
+ kPresentFlag | kHoldFlag, flags, names, index,
+ mapperAllocas)))
return failure();
llvm::GlobalVariable *maptypes =
diff --git a/mlir/test/Target/LLVMIR/openacc-llvm.mlir b/mlir/test/Target/LLVMIR/openacc-llvm.mlir
index 867213d15276..517897e78611 100644
--- a/mlir/test/Target/LLVMIR/openacc-llvm.mlir
+++ b/mlir/test/Target/LLVMIR/openacc-llvm.mlir
@@ -208,7 +208,7 @@ llvm.func @testdataop(%arg0: !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<1 x i6
// CHECK: [[LOCGLOBAL:@.*]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 0, i8* getelementptr inbounds ([{{[0-9]*}} x i8], [{{[0-9]*}} x i8]* [[LOCSTR]], i32 0, i32 0) }, align 8
// CHECK: [[MAPNAME1:@.*]] = private unnamed_addr constant [{{[0-9]*}} x i8] c";{{.*}};unknown;{{[0-9]*}};{{[0-9]*}};;\00", align 1
// CHECK: [[MAPNAME2:@.*]] = private unnamed_addr constant [{{[0-9]*}} x i8] c";{{.*}};unknown;{{[0-9]*}};{{[0-9]*}};;\00", align 1
-// CHECK: [[MAPTYPES:@.*]] = private unnamed_addr constant [{{[0-9]*}} x i64] [i64 3, i64 2]
+// CHECK: [[MAPTYPES:@.*]] = private unnamed_addr constant [{{[0-9]*}} x i64] [i64 8195, i64 8194]
// CHECK: [[MAPNAMES:@.*]] = private constant [{{[0-9]*}} x i8*] [i8* getelementptr inbounds ([{{[0-9]*}} x i8], [{{[0-9]*}} x i8]* [[MAPNAME1]], i32 0, i32 0), i8* getelementptr inbounds ([{{[0-9]*}} x i8], [{{[0-9]*}} x i8]* [[MAPNAME2]], i32 0, i32 0)]
// CHECK: define void @testdataop({ float*, float*, i64, [1 x i64], [1 x i64] } %{{.*}}, float* [[SIMPLEPTR:%.*]], i32* %{{.*}})
More information about the Mlir-commits
mailing list