[mlir][IR] Remove references to BuiltinOps from IR/

There isn't a good reason for anything within IR to specifically reference any of the builtin operations. The only place that had a good reason in the past was AsmPrinter, but the behavior there doesn't need to hardcode ModuleOp anymore.

Differential Revision: https://reviews.llvm.org/D92448
This commit is contained in:
River Riddle 2020-12-03 15:46:23 -08:00
parent c503dc1b8a
commit 672cc75cce
10 changed files with 57 additions and 67 deletions

View File

@ -11,6 +11,7 @@
#include "flang/Optimizer/Dialect/FIROps.h"
#include "mlir/Dialect/StandardOps/IR/Ops.h"
#include "mlir/IR/BuiltinOps.h"
namespace fir {

View File

@ -15,7 +15,6 @@ namespace mlir {
class AffineExpr;
class BlockAndValueMapping;
class ModuleOp;
class UnknownLoc;
class FileLineColLoc;
class Type;
@ -47,7 +46,7 @@ class UnitAttr;
class Builder {
public:
explicit Builder(MLIRContext *context) : context(context) {}
explicit Builder(ModuleOp module);
explicit Builder(Operation *op) : Builder(op->getContext()) {}
MLIRContext *getContext() const { return context; }

View File

@ -197,12 +197,6 @@ def ModuleOp : Builtin_Op<"module", [
/// Return the name of this module if present.
Optional<StringRef> getName() { return sym_name(); }
/// Print this module in the custom top-level form.
void print(raw_ostream &os, OpPrintingFlags flags = llvm::None);
void print(raw_ostream &os, AsmState &state,
OpPrintingFlags flags = llvm::None);
void dump();
//===------------------------------------------------------------------===//
// SymbolOpInterface Methods
//===------------------------------------------------------------------===//

View File

@ -25,7 +25,7 @@ class Location;
class MLIRContextImpl;
class StorageUniquer;
/// MLIRContext is the top-level object for a collection of MLIR modules. It
/// MLIRContext is the top-level object for a collection of MLIR operations. It
/// holds immortal uniqued objects like types, and the tables used to unique
/// them.
///

View File

@ -19,6 +19,8 @@
#include "llvm/ADT/MapVector.h"
namespace mlir {
class ModuleOp;
namespace pdl_to_pdl_interp {
class MatcherNode;

View File

@ -15,7 +15,6 @@
#include "mlir/IR/AffineMap.h"
#include "mlir/IR/AsmState.h"
#include "mlir/IR/Attributes.h"
#include "mlir/IR/BuiltinOps.h"
#include "mlir/IR/Dialect.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/IR/IntegerSet.h"
@ -2189,8 +2188,9 @@ public:
AsmStateImpl &state)
: ModulePrinter(os, flags, &state) {}
/// Print the given top-level module.
void print(ModuleOp op);
/// Print the given top-level operation.
void printTopLevelOperation(Operation *op);
/// Print the given operation with its indent and location.
void print(Operation *op);
/// Print the bare location, not including indentation/location/etc.
@ -2289,12 +2289,12 @@ private:
};
} // end anonymous namespace
void OperationPrinter::print(ModuleOp op) {
void OperationPrinter::printTopLevelOperation(Operation *op) {
// Output the aliases at the top level that can't be deferred.
state->getAliasState().printNonDeferredAliases(os, newLine);
// Print the module.
print(op.getOperation());
print(op);
os << newLine;
// Output the aliases at the top level that can be deferred.
@ -2588,6 +2588,14 @@ void Value::printAsOperand(raw_ostream &os, AsmState &state) {
}
void Operation::print(raw_ostream &os, OpPrintingFlags flags) {
// If this is a top level operation, we also print aliases.
if (!getParent() && !flags.shouldUseLocalScope()) {
AsmState state(this);
state.getImpl().initializeAliases(this, flags);
print(os, state, flags);
return;
}
// Find the operation to number from based upon the provided flags.
Operation *printedOp = this;
bool shouldUseLocalScope = flags.shouldUseLocalScope();
@ -2608,7 +2616,11 @@ void Operation::print(raw_ostream &os, OpPrintingFlags flags) {
print(os, state, flags);
}
void Operation::print(raw_ostream &os, AsmState &state, OpPrintingFlags flags) {
OperationPrinter(os, flags, state.getImpl()).print(this);
OperationPrinter printer(os, flags, state.getImpl());
if (!getParent() && !flags.shouldUseLocalScope())
printer.printTopLevelOperation(this);
else
printer.print(this);
}
void Operation::dump() {
@ -2649,17 +2661,3 @@ void Block::printAsOperand(raw_ostream &os, AsmState &state) {
OperationPrinter printer(os, /*flags=*/llvm::None, state.getImpl());
printer.printBlockName(this);
}
void ModuleOp::print(raw_ostream &os, OpPrintingFlags flags) {
AsmState state(*this);
// Don't populate aliases when printing at local scope.
if (!flags.shouldUseLocalScope())
state.getImpl().initializeAliases(*this, flags);
print(os, state, flags);
}
void ModuleOp::print(raw_ostream &os, AsmState &state, OpPrintingFlags flags) {
OperationPrinter(os, flags, state.getImpl()).print(*this);
}
void ModuleOp::dump() { print(llvm::errs()); }

View File

@ -9,7 +9,6 @@
#include "mlir/IR/Attributes.h"
#include "AttributeDetail.h"
#include "mlir/IR/AffineMap.h"
#include "mlir/IR/BuiltinOps.h"
#include "mlir/IR/Diagnostics.h"
#include "mlir/IR/Dialect.h"
#include "mlir/IR/IntegerSet.h"

View File

@ -10,15 +10,13 @@
#include "mlir/IR/AffineExpr.h"
#include "mlir/IR/AffineMap.h"
#include "mlir/IR/BlockAndValueMapping.h"
#include "mlir/IR/BuiltinOps.h"
#include "mlir/IR/Dialect.h"
#include "mlir/IR/IntegerSet.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/StandardTypes.h"
#include "llvm/Support/raw_ostream.h"
using namespace mlir;
#include "mlir/IR/SymbolTable.h"
Builder::Builder(ModuleOp module) : context(module.getContext()) {}
using namespace mlir;
Identifier Builder::getIdentifier(StringRef str) {
return Identifier::get(str, context);

View File

@ -17,7 +17,6 @@
#include "mlir/IR/AffineMap.h"
#include "mlir/IR/Attributes.h"
#include "mlir/IR/BuiltinDialect.h"
#include "mlir/IR/BuiltinOps.h"
#include "mlir/IR/Diagnostics.h"
#include "mlir/IR/Dialect.h"
#include "mlir/IR/Identifier.h"

View File

@ -108,7 +108,7 @@ TEST_FUNC(builder_dynamic_for_func_args) {
// CHECK-DAG: [[ri4:%[0-9]+]] = muli {{.*}}, {{.*}} : i32
// CHECK: {{.*}} = subi [[ri3]], [[ri4]] : i32
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -130,7 +130,7 @@ TEST_FUNC(builder_dynamic_for) {
// CHECK-DAG: [[r1:%[0-9]+]] = affine.apply affine_map<()[s0, s1] -> (s0 + s1)>()[%{{.*}}, %{{.*}}]
// CHECK-NEXT: affine.for %{{.*}} = affine_map<(d0) -> (d0)>([[r0]]) to affine_map<(d0) -> (d0)>([[r1]]) step 2 {
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -152,7 +152,7 @@ TEST_FUNC(builder_loop_for) {
// CHECK-DAG: [[r1:%[0-9]+]] = affine.apply affine_map<()[s0, s1] -> (s0 + s1)>()[%{{.*}}, %{{.*}}]
// CHECK-NEXT: scf.for %{{.*}} = [[r0]] to [[r1]] step {{.*}} {
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -173,7 +173,7 @@ TEST_FUNC(builder_max_min_for) {
// CHECK: affine.for %{{.*}} = max affine_map<(d0, d1) -> (d0, d1)>(%{{.*}}, %{{.*}}) to min affine_map<(d0, d1) -> (d0, d1)>(%{{.*}}, %{{.*}}) {
// CHECK: return
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -205,7 +205,7 @@ TEST_FUNC(builder_affine_for_iter_args) {
// CHECK-NEXT: affine.yield %[[iarg_2]], %[[sum]] : i32, i32
// CHECK-NEXT: }
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -232,7 +232,7 @@ TEST_FUNC(builder_block_append) {
// CHECK-NEXT: return
// CHECK-NEXT: }
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -271,7 +271,7 @@ TEST_FUNC(builder_blocks) {
// CHECK-NEXT: br ^bb1(%{{.*}}, %{{.*}} : i32, i32)
// CHECK-NEXT: }
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -305,7 +305,7 @@ TEST_FUNC(builder_cond_branch) {
// CHECK-NEXT: ^bb2(%{{.*}}: i64, %{{.*}}: i32): // pred: ^bb0
// CHECK-NEXT: return
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -363,7 +363,7 @@ TEST_FUNC(builder_helpers) {
// CHECK-DAG: [[e:%.*]] = addf [[d]], [[c]] : f32
// CHECK-NEXT: affine.store [[e]], %{{.*}}[%{{.*}}, %{{.*}}, %{{.*}}] : memref<?x?x?xf32>
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -384,7 +384,7 @@ TEST_FUNC(insertion_in_block) {
// CHECK: ^bb1: // no predecessors
// CHECK: {{.*}} = constant 1 : i32
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -409,7 +409,7 @@ TEST_FUNC(zero_and_std_sign_extendi_op_i1_to_i8) {
// CHECK: %[[SRC2:.*]] = affine.load
// CHECK: sexti %[[SRC2]] : i1 to i8
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -430,7 +430,7 @@ TEST_FUNC(operator_or) {
// CHECK: [[ARG0:%.*]]: i1, [[ARG1:%.*]]: i1
// CHECK: or [[ARG0]], [[ARG1]]
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -454,7 +454,7 @@ TEST_FUNC(operator_and) {
// CHECK: [[TRUE:%.*]] = constant true
// CHECK: subi [[TRUE]], [[AND]] : i1
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -473,7 +473,7 @@ TEST_FUNC(divis_op_i32) {
// CHECK-DAG: {{.*}} = constant 2
// CHECK-NEXT: {{.*}} = divi_signed
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -492,7 +492,7 @@ TEST_FUNC(diviu_op_i32) {
// CHECK-DAG: {{.*}} = constant 2
// CHECK-NEXT: {{.*}} = divi_unsigned
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -511,7 +511,7 @@ TEST_FUNC(fpext_f32_f64) {
// CHECK: {{.*}} = constant 1.0
// CHECK-NEXT: {{.*}} = fpext
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -530,7 +530,7 @@ TEST_FUNC(fptrunc_f32_bf16) {
// CHECK: {{.*}} = constant 1.0
// CHECK-NEXT: {{.*}} = fptrunc
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -606,7 +606,7 @@ TEST_FUNC(select_op_i32) {
// CHECK-DAG: {{.*}} = affine.load
// CHECK-NEXT: {{.*}} = select
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -712,7 +712,7 @@ TEST_FUNC(select_op_f32) {
// CHECK-DAG: affine.apply
// CHECK-NEXT: select
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -787,7 +787,7 @@ TEST_FUNC(tile_2d) {
// CHECK-NEXT: {{.*}}= addf {{.*}}, {{.*}} : f32
// CHECK-NEXT: affine.store {{.*}}, {{.*}}[%{{.*}}, %{{.*}}, %{{.*}}] : memref<?x?x?xf32>
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -821,7 +821,7 @@ TEST_FUNC(indirect_access) {
// CHECK: load %{{.*}}{{\[}}[[B]]{{\]}}
// CHECK: store %{{.*}}, %{{.*}}{{\[}}[[D]]{{\]}}
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -850,7 +850,7 @@ TEST_FUNC(empty_map_load_store) {
// CHECK: [[A:%.*]] = affine.load %{{.*}}[]
// CHECK: affine.store [[A]], %{{.*}}[]
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -886,7 +886,7 @@ TEST_FUNC(affine_if_op) {
intrinsics::affine_if(intSet, affineIfArgs, /*withElseRegion=*/false);
intrinsics::affine_if(intSet, affineIfArgs, /*withElseRegion=*/true);
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -932,7 +932,7 @@ TEST_FUNC(linalg_generic_pointwise_test) {
linalg_generic_pointwise_max(SA({i, j}), SB({i, j}), SC({i, j}));
linalg_generic_pointwise_tanh(SA({i, j}), SC({i, j}));
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -963,7 +963,7 @@ TEST_FUNC(linalg_generic_matmul_test) {
ScopedContext scope(builder, f.getLoc());
linalg_generic_matmul(f.getArguments());
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -999,7 +999,7 @@ TEST_FUNC(linalg_generic_conv_nhwc) {
linalg_generic_conv_nhwc(f.getArguments(),
/*strides=*/{3, 4}, /*dilations=*/{5, 6});
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -1036,7 +1036,7 @@ TEST_FUNC(linalg_generic_dilated_conv_nhwc) {
/*depth_multiplier=*/7,
/*strides=*/{3, 4}, /*dilations=*/{5, 6});
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -1062,7 +1062,7 @@ TEST_FUNC(linalg_metadata_ops) {
auto reshaped = linalg_reshape(v, maps);
linalg_reshape(memrefType, reshaped, maps);
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -1134,7 +1134,7 @@ TEST_FUNC(linalg_tensors_test) {
Value o1 = linalg_generic_matmul(A, B, tanhed, tensorType)->getResult(0);
linalg_generic_matmul(A, B, o1, tensorType);
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -1156,7 +1156,7 @@ TEST_FUNC(vector_extractelement_op_i32) {
// CHECK-DAG: {{.*}} = constant 0
// CHECK-NEXT: {{.*}} = vector.extractelement
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -1202,7 +1202,7 @@ TEST_FUNC(memref_vector_matmul_test) {
};
linalg_generic_matmul(A, B, C, contractionBuilder);
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}
@ -1238,7 +1238,7 @@ TEST_FUNC(builder_loop_for_yield) {
// CHECK: addf [[res]]#0, [[res]]#1 : f32
// clang-format on
f.print(llvm::outs());
f.print(llvm::outs(), OpPrintingFlags().useLocalScope());
f.erase();
}