Skip to content

Commit f3ead88

Browse files
committed
[MLIR][OpenMP] Removed the ambiguity in flush op assembly syntax
Summary: ======== Bugzilla Ticket No: Bug 46884 [https://bugs.llvm.org/show_bug.cgi?id=46884] Flush op assembly syntax was ambiguous: Consider the below test case: flush operation is not having any arguments. But the next statement token i.e "%2" is read as the argument for flush operation and then translator issues an error. *************************************************************** $ cat -n flush.mlir 1 llvm.func @_QQmain(%arg0: !llvm.i32) { 2 %0 = llvm.mlir.constant(1 : i64) : !llvm.i64 3 %1 = llvm.alloca %0 x !llvm.i32 {in_type = i32, name = "a"} : (!llvm.i64) -> !llvm.ptr<i32> 4 omp.flush 5 %2 = llvm.load %1 : !llvm.ptr<i32> 6 llvm.return 7 } $ mlir-translate -mlir-to-llvmir flush.mlir flush.mlir:5:6: error: expected ':' %2 = llvm.load %1 : !llvm.ptr<i32> ^ *************************************************************** Solution: ========= Introduced begin ( `(` ) and end token ( `)` ) to determince the begin and end of variadic arguments. The patch includes code changes and testcase modifications. Reviewed By: Valentin Clement, Mehdi AMINI Differential Revision: https://reviews.llvm.org/D88376
1 parent ca1ce39 commit f3ead88

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def FlushOp : OpenMP_Op<"flush"> {
124124

125125
let arguments = (ins Variadic<AnyType>:$varList);
126126

127-
let assemblyFormat = "attr-dict ($varList^ `:` type($varList))?";
127+
let assemblyFormat = [{ ( `(` $varList^ `:` type($varList) `)` )? attr-dict}];
128128
}
129129

130130
//===----------------------------------------------------------------------===//

mlir/test/Dialect/OpenMP/ops.mlir

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,19 @@ func @omp_taskyield() -> () {
2929
}
3030

3131
// CHECK-LABEL: func @omp_flush
32-
// CHECK-SAME: %[[ARG0:.*]]: !llvm.i32
32+
// CHECK-SAME: ([[ARG0:%.*]]: !llvm.i32) {
3333
func @omp_flush(%arg0 : !llvm.i32) -> () {
3434
// Test without data var
3535
// CHECK: omp.flush
3636
omp.flush
3737

3838
// Test with one data var
39-
// CHECK: omp.flush %[[ARG0]] : !llvm.i32
40-
"omp.flush"(%arg0) : (!llvm.i32) -> ()
39+
// CHECK: omp.flush([[ARG0]] : !llvm.i32)
40+
omp.flush(%arg0 : !llvm.i32)
4141

4242
// Test with two data var
43-
// CHECK: omp.flush %[[ARG0]], %[[ARG0]] : !llvm.i32, !llvm.i32
44-
"omp.flush"(%arg0, %arg0): (!llvm.i32, !llvm.i32) -> ()
43+
// CHECK: omp.flush([[ARG0]], [[ARG0]] : !llvm.i32, !llvm.i32)
44+
omp.flush(%arg0, %arg0: !llvm.i32, !llvm.i32)
4545

4646
return
4747
}

mlir/test/Target/openmp-llvm.mlir

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,18 @@ llvm.func @test_flush_construct(%arg0: !llvm.i32) {
2424
omp.flush
2525

2626
// CHECK: call void @__kmpc_flush(%struct.ident_t* @{{[0-9]+}}
27-
omp.flush %arg0 : !llvm.i32
27+
omp.flush (%arg0 : !llvm.i32)
2828

2929
// CHECK: call void @__kmpc_flush(%struct.ident_t* @{{[0-9]+}}
30-
omp.flush %arg0, %arg0 : !llvm.i32, !llvm.i32
30+
omp.flush (%arg0, %arg0 : !llvm.i32, !llvm.i32)
31+
32+
%0 = llvm.mlir.constant(1 : i64) : !llvm.i64
33+
// CHECK: alloca {{.*}} align 4
34+
%1 = llvm.alloca %0 x !llvm.i32 {in_type = i32, name = "a"} : (!llvm.i64) -> !llvm.ptr<i32>
35+
// CHECK: call void @__kmpc_flush(%struct.ident_t* @{{[0-9]+}}
36+
omp.flush
37+
// CHECK: load i32, i32*
38+
%2 = llvm.load %1 : !llvm.ptr<i32>
3139

3240
// CHECK-NEXT: ret void
3341
llvm.return

0 commit comments

Comments
 (0)