Add ODS accessors for named regions.

PiperOrigin-RevId: 256639471
This commit is contained in:
Nicolas Vasilache 2019-07-05 02:20:38 -07:00 committed by A. Unique TensorFlower
parent 75ae06acf3
commit 8c6a3ace16
2 changed files with 17 additions and 0 deletions

View File

@ -23,6 +23,7 @@ def NS_AOp : NS_Op<"a_op", [NoSideEffect]> {
Variadic<F32>:$s
);
let regions = (region AnyRegion:$someRegion);
let builders = [OpBuilder<"Value *val">];
let parser = [{ foo }];
let printer = [{ bar }];
@ -59,6 +60,7 @@ def NS_AOp : NS_Op<"a_op", [NoSideEffect]> {
// CHECK: Operation::operand_range b();
// CHECK: Operation::result_range getODSResults(unsigned index);
// CHECK: Value *r();
// CHECK: Region &someRegion();
// CHECK: APInt attr1();
// CHECK: Optional< APFloat > attr2();
// CHECK: static void build(Value *val);

View File

@ -469,6 +469,9 @@ private:
// Generates getters for named results.
void genNamedResultGetters();
// Generates getters for named regions.
void genNamedRegionGetters();
// Generates builder method for the operation.
void genBuilder();
@ -536,6 +539,7 @@ OpEmitter::OpEmitter(const Operator &op)
genOpNameGetter();
genNamedOperandGetters();
genNamedResultGetters();
genNamedRegionGetters();
genAttrGetters();
genBuilder();
genParser();
@ -721,6 +725,17 @@ void OpEmitter::genNamedResultGetters() {
}
}
void OpEmitter::genNamedRegionGetters() {
unsigned numRegions = op.getNumRegions();
for (unsigned i = 0; i < numRegions; ++i) {
const auto &region = op.getRegion(i);
if (!region.name.empty()) {
auto &m = opClass.newMethod("Region &", region.name);
m.body() << formatv("return this->getOperation()->getRegion({0});", i);
}
}
}
void OpEmitter::genStandaloneParamBuilder(bool useOperandType,
bool useAttrType) {
if (useOperandType && useAttrType) {