From 3e1390090fe31702488d26b72aa2aa018f557f0e Mon Sep 17 00:00:00 2001 From: River Riddle Date: Tue, 3 Nov 2020 12:31:24 -0800 Subject: [PATCH] [mlir][Parser] Small optimization to parsing * Use function_ref instead of std::function in several methods * Use ::get instead of ::getChecked for IntegerType. - It is already fully verified and constructing a mlir::Location can be extremely costly during parsing. --- mlir/lib/Parser/Parser.cpp | 17 +++++++++-------- mlir/lib/Parser/Parser.h | 5 ++--- mlir/lib/Parser/TypeParser.cpp | 3 +-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/mlir/lib/Parser/Parser.cpp b/mlir/lib/Parser/Parser.cpp index 6d04f97f4576..e89972007156 100644 --- a/mlir/lib/Parser/Parser.cpp +++ b/mlir/lib/Parser/Parser.cpp @@ -35,8 +35,8 @@ using llvm::SourceMgr; /// Parse a comma separated list of elements that must have at least one entry /// in it. -ParseResult Parser::parseCommaSeparatedList( - const std::function &parseElement) { +ParseResult +Parser::parseCommaSeparatedList(function_ref parseElement) { // Non-empty case starts with an element. if (parseElement()) return failure(); @@ -55,9 +55,10 @@ ParseResult Parser::parseCommaSeparatedList( /// abstract-list ::= rightToken // if allowEmptyList == true /// abstract-list ::= element (',' element)* rightToken /// -ParseResult Parser::parseCommaSeparatedListUntil( - Token::Kind rightToken, const std::function &parseElement, - bool allowEmptyList) { +ParseResult +Parser::parseCommaSeparatedListUntil(Token::Kind rightToken, + function_ref parseElement, + bool allowEmptyList) { // Handle the empty case. if (getToken().is(rightToken)) { if (!allowEmptyList) @@ -145,8 +146,8 @@ public: /// returns null on failure. Value resolveSSAUse(SSAUseInfo useInfo, Type type); - ParseResult parseSSADefOrUseAndType( - const std::function &action); + ParseResult + parseSSADefOrUseAndType(function_ref action); ParseResult parseOptionalSSAUseAndTypeList(SmallVectorImpl &results); @@ -506,7 +507,7 @@ Value OperationParser::resolveSSAUse(SSAUseInfo useInfo, Type type) { /// /// ssa-use-and-type ::= ssa-use `:` type ParseResult OperationParser::parseSSADefOrUseAndType( - const std::function &action) { + function_ref action) { SSAUseInfo useInfo; if (parseSSAUse(useInfo) || parseToken(Token::colon, "expected ':' and type for SSA operand")) diff --git a/mlir/lib/Parser/Parser.h b/mlir/lib/Parser/Parser.h index 9ffaea051f66..63a9d0df040c 100644 --- a/mlir/lib/Parser/Parser.h +++ b/mlir/lib/Parser/Parser.h @@ -36,13 +36,12 @@ public: /// Parse a comma-separated list of elements up until the specified end token. ParseResult parseCommaSeparatedListUntil(Token::Kind rightToken, - const std::function &parseElement, + function_ref parseElement, bool allowEmptyList = true); /// Parse a comma separated list of elements that must have at least one entry /// in it. - ParseResult - parseCommaSeparatedList(const std::function &parseElement); + ParseResult parseCommaSeparatedList(function_ref parseElement); ParseResult parsePrettyDialectSymbolName(StringRef &prettyName); diff --git a/mlir/lib/Parser/TypeParser.cpp b/mlir/lib/Parser/TypeParser.cpp index f5c98f3c6f9d..c3087c15b0c5 100644 --- a/mlir/lib/Parser/TypeParser.cpp +++ b/mlir/lib/Parser/TypeParser.cpp @@ -337,9 +337,8 @@ Type Parser::parseNonFunctionType() { if (Optional signedness = getToken().getIntTypeSignedness()) signSemantics = *signedness ? IntegerType::Signed : IntegerType::Unsigned; - auto loc = getEncodedSourceLocation(getToken().getLoc()); consumeToken(Token::inttype); - return IntegerType::getChecked(width.getValue(), signSemantics, loc); + return IntegerType::get(width.getValue(), signSemantics, getContext()); } // float-type