[mlir] Change custom syntax of emitc.include op to resemble C
This changes the custom syntax of the emitc.include operation for standard includes. Reviewed By: marbre Differential Revision: https://reviews.llvm.org/D105281
This commit is contained in:
parent
0724c0e4fb
commit
4ff440b0ef
|
@ -126,12 +126,15 @@ def EmitC_IncludeOp
|
|||
|
||||
```mlir
|
||||
// Custom form defining the inclusion of `<myheader>`.
|
||||
emitc.include "myheader.h" is_standard_include
|
||||
emitc.include <"myheader.h">
|
||||
|
||||
// Generic form of the same operation.
|
||||
"emitc.include" (){include = "myheader.h", is_standard_include} : () -> ()
|
||||
|
||||
// Generic form defining the inclusion of `"myheader"`.
|
||||
// Custom form defining the inclusion of `"myheader"`.
|
||||
emitc.include "myheader.h"
|
||||
|
||||
// Generic form of the same operation.
|
||||
"emitc.include" (){include = "myheader.h"} : () -> ()
|
||||
```
|
||||
}];
|
||||
|
@ -139,9 +142,8 @@ def EmitC_IncludeOp
|
|||
Arg<StrAttr, "source file to include">:$include,
|
||||
UnitAttr:$is_standard_include
|
||||
);
|
||||
let assemblyFormat = [{
|
||||
$include attr-dict (`is_standard_include` $is_standard_include^)?
|
||||
}];
|
||||
let printer = [{ return ::print(p, *this); }];
|
||||
let parser = [{ return ::parse$cppClass(parser, result); }];
|
||||
let verifier = ?;
|
||||
}
|
||||
|
||||
|
|
|
@ -116,6 +116,41 @@ OpFoldResult emitc::ConstantOp::fold(ArrayRef<Attribute> operands) {
|
|||
return value();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// IncludeOp
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static void print(OpAsmPrinter &p, IncludeOp &op) {
|
||||
bool standardInclude = op.is_standard_include();
|
||||
|
||||
p << IncludeOp::getOperationName() << " ";
|
||||
if (standardInclude)
|
||||
p << "<";
|
||||
p << "\"" << op.include() << "\"";
|
||||
if (standardInclude)
|
||||
p << ">";
|
||||
}
|
||||
|
||||
static ParseResult parseIncludeOp(OpAsmParser &parser, OperationState &result) {
|
||||
bool standardInclude = !parser.parseOptionalLess();
|
||||
|
||||
StringAttr include;
|
||||
OptionalParseResult includeParseResult =
|
||||
parser.parseOptionalAttribute(include, "include", result.attributes);
|
||||
if (!includeParseResult.hasValue())
|
||||
return parser.emitError(parser.getNameLoc()) << "expected string attribute";
|
||||
|
||||
if (standardInclude && parser.parseOptionalGreater())
|
||||
return parser.emitError(parser.getNameLoc())
|
||||
<< "expected trailing '>' for standard include";
|
||||
|
||||
if (standardInclude)
|
||||
result.addAttribute("is_standard_include",
|
||||
UnitAttr::get(parser.getBuilder().getContext()));
|
||||
|
||||
return success();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// TableGen'd op method definitions
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: mlir-opt -verify-diagnostics %s | FileCheck %s
|
||||
// RUN: mlir-opt %s | mlir-opt | FileCheck %s
|
||||
|
||||
"emitc.include" (){include = "test.h", is_standard_include} : () -> ()
|
||||
emitc.include "test.h" is_standard_include
|
||||
emitc.include <"test.h">
|
||||
emitc.include "test.h"
|
||||
|
||||
// CHECK-LABEL: func @f(%{{.*}}: i32, %{{.*}}: !emitc.opaque<"int32_t">) {
|
||||
func @f(%arg0: i32, %f: !emitc.opaque<"int32_t">) {
|
||||
|
|
Loading…
Reference in New Issue