Skip to content

Commit b04eab8

Browse files
authored
Merge pull request #385 from Xilinx/matthias.fix_verbatim_parsing
Fix verbatim parsing to be unambiguous
2 parents 81b017a + 95521c7 commit b04eab8

File tree

4 files changed

+19
-14
lines changed

4 files changed

+19
-14
lines changed

mlir/include/mlir/Dialect/EmitC/IR/EmitC.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1181,7 +1181,7 @@ def EmitC_VerbatimOp : EmitC_Op<"verbatim"> {
11811181
let builders = [OpBuilder<(ins "::mlir::StringAttr":$value), [{ build($_builder, $_state, value, {}); }] >];
11821182
let builders = [OpBuilder<(ins "::llvm::StringRef":$value), [{ build($_builder, $_state, value, {}); }] >];
11831183
let hasVerifier = 1;
1184-
let assemblyFormat = "$value ($fmtArgs^ `:` type($fmtArgs))? attr-dict";
1184+
let assemblyFormat = "$value (`args` $fmtArgs^ `:` type($fmtArgs))? attr-dict";
11851185
}
11861186

11871187
def EmitC_AssignOp : EmitC_Op<"assign", []> {

mlir/test/Dialect/EmitC/invalid_ops.mlir

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -481,46 +481,46 @@ emitc.global const @myref : !emitc.array<2xi16> ref
481481

482482
func.func @test_verbatim(%arg0 : !emitc.ptr<i32>, %arg1 : i32) {
483483
// expected-error @+1 {{'emitc.verbatim' op requires operands for each placeholder in the format string}}
484-
emitc.verbatim "" %arg0, %arg1 : !emitc.ptr<i32>, i32
484+
emitc.verbatim "" args %arg0, %arg1 : !emitc.ptr<i32>, i32
485485
return
486486
}
487487

488488
// -----
489489

490490
func.func @test_verbatim(%arg0 : !emitc.ptr<i32>, %arg1 : i32) {
491491
// expected-error @+1 {{'emitc.verbatim' op requires operands for each placeholder in the format string}}
492-
emitc.verbatim "abc" %arg0, %arg1 : !emitc.ptr<i32>, i32
492+
emitc.verbatim "abc" args %arg0, %arg1 : !emitc.ptr<i32>, i32
493493
return
494494
}
495495

496496
// -----
497497

498498
func.func @test_verbatim(%arg0 : !emitc.ptr<i32>, %arg1 : i32) {
499499
// expected-error @+1 {{'emitc.verbatim' op requires operands for each placeholder in the format string}}
500-
emitc.verbatim "{}" %arg0, %arg1 : !emitc.ptr<i32>, i32
500+
emitc.verbatim "{}" args %arg0, %arg1 : !emitc.ptr<i32>, i32
501501
return
502502
}
503503

504504
// -----
505505

506506
func.func @test_verbatim(%arg0 : !emitc.ptr<i32>, %arg1 : i32) {
507507
// expected-error @+1 {{'emitc.verbatim' op requires operands for each placeholder in the format string}}
508-
emitc.verbatim "{} {} {}" %arg0, %arg1 : !emitc.ptr<i32>, i32
508+
emitc.verbatim "{} {} {}" args %arg0, %arg1 : !emitc.ptr<i32>, i32
509509
return
510510
}
511511

512512
// -----
513513

514514
func.func @test_verbatim(%arg0 : !emitc.ptr<i32>, %arg1 : i32) {
515515
// expected-error @+1 {{'emitc.verbatim' op expected '}' after unescaped '{'}}
516-
emitc.verbatim "{ " %arg0, %arg1 : !emitc.ptr<i32>, i32
516+
emitc.verbatim "{ " args %arg0, %arg1 : !emitc.ptr<i32>, i32
517517
return
518518
}
519519

520520
// -----
521521

522522
func.func @test_verbatim(%arg0 : !emitc.ptr<i32>, %arg1 : i32) {
523523
// expected-error @+1 {{'emitc.verbatim' op expected '}' after unescaped '{'}}
524-
emitc.verbatim "{a} " %arg0, %arg1 : !emitc.ptr<i32>, i32
524+
emitc.verbatim "{a} " args %arg0, %arg1 : !emitc.ptr<i32>, i32
525525
return
526526
}

mlir/test/Dialect/EmitC/ops.mlir

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,10 +244,15 @@ emitc.verbatim "typedef float f32;"
244244
emitc.verbatim "{} { }"
245245

246246
func.func @test_verbatim(%arg0 : !emitc.ptr<i32>, %arg1 : i32) {
247-
emitc.verbatim "{} + {};" %arg0, %arg1 : !emitc.ptr<i32>, i32
247+
emitc.verbatim "{} + {};" args %arg0, %arg1 : !emitc.ptr<i32>, i32
248248

249249
// Trailing '{' are ok and don't start a placeholder.
250-
emitc.verbatim "{} + {} {" %arg0, %arg1 : !emitc.ptr<i32>, i32
250+
emitc.verbatim "{} + {} {" args %arg0, %arg1 : !emitc.ptr<i32>, i32
251+
252+
// Check there is no ambiguity whether %a is the argument to the emitc.verbatim op.
253+
emitc.verbatim "a"
254+
%a = "emitc.constant"(){value = 42 : i32} : () -> i32
255+
251256
return
252257
}
253258

mlir/test/Target/Cpp/verbatim.mlir

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,20 @@ emitc.func @func(%arg: f32) {
2525
%a = "emitc.variable"(){value = #emitc.opaque<"">} : () -> !emitc.array<3x7xi32>
2626
// CHECK: int32_t [[A:[^ ]*]][3][7];
2727

28-
emitc.verbatim "{}" %arg : f32
28+
emitc.verbatim "{}" args %arg : f32
2929
// CHECK: [[V0]]
3030

31-
emitc.verbatim "{} {{a" %arg : f32
31+
emitc.verbatim "{} {{a" args %arg : f32
3232
// CHECK-NEXT: [[V0]] {a
3333

34-
emitc.verbatim "#pragma my var={} property" %arg : f32
34+
emitc.verbatim "#pragma my var={} property" args %arg : f32
3535
// CHECK-NEXT: #pragma my var=[[V0]] property
3636

3737
// Trailing '{' are printed as-is.
38-
emitc.verbatim "#pragma my var={} {" %arg : f32
38+
emitc.verbatim "#pragma my var={} {" args %arg : f32
3939
// CHECK-NEXT: #pragma my var=[[V0]] {
4040

41-
emitc.verbatim "#pragma my2 var={} property" %a : !emitc.array<3x7xi32>
41+
emitc.verbatim "#pragma my2 var={} property" args %a : !emitc.array<3x7xi32>
4242
// CHECK-NEXT: #pragma my2 var=[[A]] property
4343
emitc.return
4444
}

0 commit comments

Comments
 (0)