Skip to content

Commit c89d0ff

Browse files
committed
Changed allocator clause definition to use Integer type value argument instead of
IntegerAttr.
1 parent d455dca commit c89d0ff

File tree

4 files changed

+24
-99
lines changed

4 files changed

+24
-99
lines changed

mlir/include/mlir/Dialect/OpenMP/OpenMPClauses.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,11 @@ class OpenMP_AllocatorClauseSkip<
120120
extraClassDeclaration> {
121121

122122
let arguments = (ins
123-
DefaultValuedOptionalAttr<I64Attr, "0">:$allocator
123+
Optional<I64>:$allocator
124124
);
125125

126126
let optAssemblyFormat = [{
127-
`allocator` `(` custom<AllocatorHandle>($allocator) `)`
127+
`allocator` `(` $allocator `)`
128128
}];
129129

130130
let description = [{

mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2100,7 +2100,7 @@ def MaskedOp : OpenMP_Op<"masked", clauses = [
21002100
//===----------------------------------------------------------------------===//
21012101
// [Spec 5.2] 6.5 allocate Directive
21022102
//===----------------------------------------------------------------------===//
2103-
def AllocateDirOp : OpenMP_Op<"allocate_dir", clauses = [
2103+
def AllocateDirOp : OpenMP_Op<"allocate_dir", [AttrSizedOperandSegments], clauses = [
21042104
OpenMP_AlignClause, OpenMP_AllocatorClause
21052105
]> {
21062106
let summary = "allocate directive";

mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp

Lines changed: 0 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,94 +1250,6 @@ verifyReductionVarList(Operation *op, std::optional<ArrayAttr> reductionSyms,
12501250
return success();
12511251
}
12521252

1253-
//===----------------------------------------------------------------------===//
1254-
// Parser, printer and verifier for Allocator (Section 8.4 in OpenMP 6.0)
1255-
//===----------------------------------------------------------------------===//
1256-
1257-
/// Parses a allocator clause. The value of allocator handle is an integer
1258-
/// which is a combination of different allocator handles from
1259-
/// `omp_allocator_handle_t`.
1260-
///
1261-
/// allocator-clause = `allocator` `(` allocator-value `)`
1262-
static ParseResult parseAllocatorHandle(OpAsmParser &parser,
1263-
IntegerAttr &allocatorHandleAttr) {
1264-
StringRef allocatorKeyword;
1265-
int64_t allocator = 0;
1266-
if (succeeded(parser.parseOptionalKeyword("none"))) {
1267-
allocatorHandleAttr = IntegerAttr::get(parser.getBuilder().getI64Type(), 0);
1268-
return success();
1269-
}
1270-
OptionalParseResult parsedInteger = parser.parseOptionalInteger(allocator);
1271-
if (parsedInteger.has_value()) {
1272-
allocatorHandleAttr =
1273-
IntegerAttr::get(parser.getBuilder().getI64Type(), allocator);
1274-
return success();
1275-
}
1276-
if (failed(parser.parseKeyword(&allocatorKeyword)))
1277-
return failure();
1278-
if (allocatorKeyword == "omp_null_allocator")
1279-
allocator = 0;
1280-
else if (allocatorKeyword == "omp_default_mem_alloc")
1281-
allocator = 1;
1282-
else if (allocatorKeyword == "omp_large_cap_mem_alloc")
1283-
allocator = 2;
1284-
else if (allocatorKeyword == "omp_const_mem_alloc")
1285-
allocator = 3;
1286-
else if (allocatorKeyword == "omp_high_bw_mem_alloc")
1287-
allocator = 4;
1288-
else if (allocatorKeyword == "omp_low_lat_mem_alloc")
1289-
allocator = 5;
1290-
else if (allocatorKeyword == "omp_cgroup_mem_alloc")
1291-
allocator = 6;
1292-
else if (allocatorKeyword == "omp_pteam_mem_alloc")
1293-
allocator = 7;
1294-
else if (allocatorKeyword == "omp_thread_mem_alloc")
1295-
allocator = 8;
1296-
allocatorHandleAttr =
1297-
IntegerAttr::get(parser.getBuilder().getI64Type(), allocator);
1298-
return success();
1299-
}
1300-
1301-
/// Prints a allocator clause
1302-
static void printAllocatorHandle(OpAsmPrinter &p, Operation *op,
1303-
IntegerAttr allocatorHandleAttr) {
1304-
int64_t allocator = allocatorHandleAttr.getInt();
1305-
StringRef allocatorHandle;
1306-
switch (allocator) {
1307-
case 0:
1308-
allocatorHandle = "omp_null_allocator";
1309-
break;
1310-
case 1:
1311-
allocatorHandle = "omp_default_mem_alloc";
1312-
break;
1313-
case 2:
1314-
allocatorHandle = "omp_large_cap_mem_alloc";
1315-
break;
1316-
case 3:
1317-
allocatorHandle = "omp_const_mem_alloc";
1318-
break;
1319-
case 4:
1320-
allocatorHandle = "omp_high_bw_mem_alloc";
1321-
break;
1322-
case 5:
1323-
allocatorHandle = "omp_low_lat_mem_alloc";
1324-
break;
1325-
case 6:
1326-
allocatorHandle = "omp_cgroup_mem_alloc";
1327-
break;
1328-
case 7:
1329-
allocatorHandle = "omp_pteam_mem_alloc";
1330-
break;
1331-
case 8:
1332-
allocatorHandle = "omp_thread_mem_alloc";
1333-
break;
1334-
default:
1335-
p << Twine(allocator).str();
1336-
return;
1337-
}
1338-
p << allocatorHandle;
1339-
}
1340-
13411253
//===----------------------------------------------------------------------===//
13421254
// Parser, printer and verifier for Copyprivate
13431255
//===----------------------------------------------------------------------===//

mlir/test/Dialect/OpenMP/ops.mlir

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3260,6 +3260,10 @@ func.func @omp_workshare_loop_wrapper_attrs(%idx : index) {
32603260
return
32613261
}
32623262

3263+
func.func @omp_init_allocator(%custom_allocator : i64) -> i64 {
3264+
return %custom_allocator : i64
3265+
}
3266+
32633267
// CHECK-LABEL: func.func @omp_allocate_dir(
32643268
// CHECK-SAME: %[[ARG0:.*]]: memref<i32>,
32653269
// CHECK-SAME: %[[ARG1:.*]]: memref<i32>) {
@@ -3278,20 +3282,29 @@ func.func @omp_allocate_dir(%arg0 : memref<i32>, %arg1 : memref<i32>) -> () {
32783282
omp.allocate_dir (%arg0 : memref<i32>) align(2)
32793283

32803284
// Test with one data var and allocator clause
3281-
// CHECK: omp.allocate_dir(%[[ARG0]] : memref<i32>) allocator(omp_pteam_mem_alloc)
3282-
omp.allocate_dir (%arg0 : memref<i32>) allocator(7)
3285+
// CHECK: %[[VAL_1:.*]] = arith.constant 1 : i64
3286+
%omp_default_mem_alloc = arith.constant 1 : i64
3287+
// CHECK: omp.allocate_dir(%[[ARG0]] : memref<i32>) allocator(%[[VAL_1:.*]])
3288+
omp.allocate_dir (%arg0 : memref<i32>) allocator(%omp_default_mem_alloc)
32833289

32843290
// Test with one data var, align clause and allocator clause
3285-
// CHECK: omp.allocate_dir(%[[ARG0]] : memref<i32>) align(2) allocator(omp_thread_mem_alloc)
3286-
omp.allocate_dir (%arg0 : memref<i32>) align(2) allocator(omp_thread_mem_alloc)
3291+
// CHECK: %[[VAL_2:.*]] = arith.constant 7 : i64
3292+
%omp_pteam_mem_alloc = arith.constant 7 : i64
3293+
// CHECK: omp.allocate_dir(%[[ARG0]] : memref<i32>) align(4) allocator(%[[VAL_2:.*]])
3294+
omp.allocate_dir (%arg0 : memref<i32>) align(4) allocator(%omp_pteam_mem_alloc)
32873295

32883296
// Test with two data vars, align clause and allocator clause
3289-
// CHECK: omp.allocate_dir(%[[ARG0]], %[[ARG1]] : memref<i32>, memref<i32>) align(2) allocator(omp_cgroup_mem_alloc)
3290-
omp.allocate_dir (%arg0, %arg1 : memref<i32>, memref<i32>) align(2) allocator(omp_cgroup_mem_alloc)
3297+
// CHECK: %[[VAL_3:.*]] = arith.constant 6 : i64
3298+
%omp_cgroup_mem_alloc = arith.constant 6 : i64
3299+
// CHECK: omp.allocate_dir(%[[ARG0]], %[[ARG1]] : memref<i32>, memref<i32>) align(8) allocator(%[[VAL_3:.*]])
3300+
omp.allocate_dir (%arg0, %arg1 : memref<i32>, memref<i32>) align(8) allocator(%omp_cgroup_mem_alloc)
32913301

32923302
// Test with one data var and user defined allocator clause
3293-
// CHECK: omp.allocate_dir(%[[ARG0]] : memref<i32>) allocator(9)
3294-
omp.allocate_dir (%arg0 : memref<i32>) allocator(9)
3303+
// CHECK: %[[VAL_4:.*]] = arith.constant 9 : i64
3304+
%custom_allocator = arith.constant 9 : i64
3305+
%custom_mem_alloc = func.call @omp_init_allocator(%custom_allocator) : (i64) -> (i64)
3306+
// CHECK: omp.allocate_dir(%[[ARG0]] : memref<i32>) allocator(%[[VAL_5:.*]])
3307+
omp.allocate_dir (%arg0 : memref<i32>) allocator(%custom_mem_alloc)
32953308

32963309
return
32973310
}

0 commit comments

Comments
 (0)