From 52627654ef9e112600a4eb200d079f23b8fb4bad Mon Sep 17 00:00:00 2001 From: Yizhi Liu Date: Thu, 3 Sep 2020 09:57:13 -0700 Subject: [PATCH] [Bugfix][Printer] Avoid adding annotation twice for ConstantNode (#6364) * [Relay] Add user-defined constant node printer * fix constant node printer, which appends annotator twice when meta=true * fix lint --- src/printer/relay_text_printer.cc | 10 +++++++--- src/printer/text_printer.h | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/printer/relay_text_printer.cc b/src/printer/relay_text_printer.cc index 1b09052..aa8775d 100644 --- a/src/printer/relay_text_printer.cc +++ b/src/printer/relay_text_printer.cc @@ -239,7 +239,7 @@ bool RelayTextPrinter::AlwaysInline(const Expr& expr) { //------------------------------------ // Overload of Expr printing functions //------------------------------------ -Doc RelayTextPrinter::PrintExpr(const Expr& expr, bool meta, bool try_inline) { +Doc RelayTextPrinter::PrintExpr(const Expr& expr, bool meta, bool try_inline, bool optional_info) { // Exploit memoization to print GNF. // The first time we visit an expression, we need to allocate a temp var // for it. Every subsequent time we can just use its assigned variable. @@ -269,7 +269,9 @@ Doc RelayTextPrinter::PrintExpr(const Expr& expr, bool meta, bool try_inline) { printed_expr = VisitExpr(expr); } - printed_expr << PrintOptionalInfo(expr); + if (optional_info) { + printed_expr << PrintOptionalInfo(expr); + } // add expr to doc if (expr.as()) { @@ -335,7 +337,9 @@ Doc RelayTextPrinter::VisitExpr_(const ConstantNode* op) { } // default fall-back, record it as meta node. Doc doc; - return doc << Print(GetRef(op), true); + // Don't append optional_info. Because the entry function is Print, + // and it will append the optional_info afterwards. + return doc << PrintExpr(GetRef(op), true, false, false); } Doc RelayTextPrinter::VisitExpr_(const TupleNode* op) { diff --git a/src/printer/text_printer.h b/src/printer/text_printer.h index b65b03c..e519969 100644 --- a/src/printer/text_printer.h +++ b/src/printer/text_printer.h @@ -108,7 +108,7 @@ class RelayTextPrinter : public ExprFunctor, //------------------------------------ // Overload of Expr printing functions //------------------------------------ - Doc PrintExpr(const Expr& expr, bool meta, bool try_inline); + Doc PrintExpr(const Expr& expr, bool meta, bool try_inline, bool optional_info = true); // Should only be triggered when op is a free variable being visited for the // first time. Doc VisitExpr_(const VarNode* op) final; -- 2.7.4