Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IR] Support custom op printer #54499

Merged
27 changes: 13 additions & 14 deletions paddle/fluid/ir_adaptor/translator/op_translator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include <vector>

#include "paddle/fluid/framework/op_desc.h"
#include "paddle/fluid/ir/dialect/pd_attribute.h"
#include "paddle/fluid/ir/dialect/pd_type.h"
#include "paddle/fluid/ir/interface/op_yaml_info.h"
#include "paddle/fluid/ir_adaptor/translator/attribute_translator.h"
Expand Down Expand Up @@ -198,20 +199,18 @@ inline ir::Operation* InsertFullOperationForAttributeInput(ir::IrContext* ctx,

inline ir::Operation* InsertFullArrayOperationForAttributeInput(
ir::IrContext* ctx, ir::Program* program, ir::Attribute attr) {
std::string constant_op_name(ir::ConstantOp::name());
ir::OpInfo op_info = ctx->GetRegisteredOpInfo(constant_op_name);

ir::Type null_type = paddle::dialect::DenseTensorType::get(
ctx,
ir::Type(nullptr),
phi::DDim{},
paddle::dialect::DenseTensorTypeStorage::DataLayout::UNDEFINED,
phi::LoD{},
0); // TODO(lyk): to be done
ir::Operation* operation =
ir::Operation::Create({}, {{"value", attr}}, {null_type}, op_info);
program->block()->push_back(operation);
return operation;
IR_ENFORCE(attr.isa<paddle::dialect::IntArrayAttribute>(),
"Encounter non IntArray type when trying to insert IntArray "
"mutable attribute");

phi::IntArray int_array =
attr.dyn_cast<paddle::dialect::IntArrayAttribute>().data();

ir::Builder builder = ir::Builder::AtBlockEnd(ctx, program->block());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这儿直接用 ir::Builder builder(ctx, program->block);就可以。 AtBlockEnd接口准备删除,

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

好的,下个PR修改一下。

paddle::dialect::FullIntArrayOp full_int_array_op =
builder.Build<paddle::dialect::FullIntArrayOp>(
int_array.GetData(), phi::DataType::INT64, phi::CPUPlace());
return full_int_array_op.operation();
}

inline ir::OpResult GetAttributeAsInput(ir::IrContext* ctx,
Expand Down
10 changes: 9 additions & 1 deletion paddle/ir/core/dialect.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

#pragma once

#include <functional>
#include <ostream>

#include "paddle/ir/core/attribute.h"
Expand All @@ -25,6 +26,10 @@
#include "paddle/ir/core/type_base.h"

namespace ir {

class Operation;
class IrPrinter;

class DialectInterface;
///
/// \brief Dialect can basically be understood as a namespace. In Dialect, we
Expand Down Expand Up @@ -136,10 +141,13 @@ class Dialect {
IR_THROW("dialect has no registered type printing hook");
}

virtual void PrintAttribute(Attribute type, std::ostream &os) const {
virtual void PrintAttribute(Attribute attr, std::ostream &os) const {
IR_THROW("dialect has no registered attribute printing hook");
}

virtual void PrintOperation(Operation *op,
IrPrinter &printer) const; // NOLINT

private:
Dialect(const Dialect &) = delete;

Expand Down
Loading