[PATCH] D82917: [ThinLTO] parse flags and blockcount summaries
Nick Desaulniers via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 17 13:16:22 PDT 2020
nickdesaulniers updated this revision to Diff 278884.
nickdesaulniers marked 3 inline comments as done.
nickdesaulniers added a comment.
- rebase, update comment
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82917/new/
https://reviews.llvm.org/D82917
Files:
llvm/lib/AsmParser/LLParser.cpp
llvm/test/Assembler/thinlto-bad-summary1.ll
llvm/test/Assembler/thinlto-summary.ll
Index: llvm/test/Assembler/thinlto-summary.ll
===================================================================
--- llvm/test/Assembler/thinlto-summary.ll
+++ llvm/test/Assembler/thinlto-summary.ll
@@ -63,6 +63,8 @@
; Test the other kinds of type test resoultions
^27 = typeid: (name: "_ZTS1D", summary: (typeTestRes: (kind: byteArray, sizeM1BitWidth: 0)))
^28 = typeid: (name: "_ZTS1E", summary: (typeTestRes: (kind: unsat, sizeM1BitWidth: 0)))
+^29 = flags: 8
+^30 = blockcount: 1888
; Make sure we get back from llvm-dis essentially what we put in via llvm-as.
; CHECK: ^0 = module: (path: "thinlto-summary1.o", hash: (1369602428, 2747878711, 259090915, 2507395659, 1141468049))
@@ -94,6 +96,8 @@
; CHECK: ^26 = typeid: (name: "_ZTS1A", summary: (typeTestRes: (kind: allOnes, sizeM1BitWidth: 7), wpdResolutions: ((offset: 0, wpdRes: (kind: branchFunnel)), (offset: 8, wpdRes: (kind: singleImpl, singleImplName: "_ZN1A1nEi")), (offset: 16, wpdRes: (kind: indir, resByArg: (args: (1, 2), byArg: (kind: indir, byte: 2, bit: 3), args: (3), byArg: (kind: uniformRetVal, info: 1), args: (4), byArg: (kind: uniqueRetVal, info: 1), args: (5), byArg: (kind: virtualConstProp))))))) ; guid = 7004155349499253778
; CHECK: ^27 = typeid: (name: "_ZTS1D", summary: (typeTestRes: (kind: byteArray, sizeM1BitWidth: 0))) ; guid = 9614786172484273522
; CHECK: ^28 = typeid: (name: "_ZTS1E", summary: (typeTestRes: (kind: unsat, sizeM1BitWidth: 0))) ; guid = 17437243864166745132
+; CHECK: ^29 = flags: 8
+; CHECK: ^30 = blockcount: 1888
; Make sure parsing of a non-summary entry containing a ":" does not fail
; after summary parsing, which handles colons differently.
Index: llvm/test/Assembler/thinlto-bad-summary1.ll
===================================================================
--- llvm/test/Assembler/thinlto-bad-summary1.ll
+++ llvm/test/Assembler/thinlto-bad-summary1.ll
@@ -2,7 +2,7 @@
; summary type label.
; RUN: not opt %s 2>&1 | FileCheck %s
-; CHECK: error: Expected 'gv', 'module', or 'typeid' at the start of summary entry
+; CHECK: error: Expected 'gv', 'module', 'typeid', 'flags' or 'blockcount' at the start of summary entry
; ModuleID = 'thinlto-function-summary-callgraph.ll'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Index: llvm/lib/AsmParser/LLParser.cpp
===================================================================
--- llvm/lib/AsmParser/LLParser.cpp
+++ llvm/lib/AsmParser/LLParser.cpp
@@ -788,13 +788,20 @@
// Skips a single module summary entry.
bool LLParser::SkipModuleSummaryEntry() {
// Each module summary entry consists of a tag for the entry
- // type, followed by a colon, then the fields surrounded by nested sets of
- // parentheses. The "tag:" looks like a Label. Once parsing support is
- // in place we will look for the tokens corresponding to the expected tags.
+ // type, followed by a colon, then the fields which may be surrounded by
+ // nested sets of parentheses. The "tag:" looks like a Label. Once parsing
+ // support is in place we will look for the tokens corresponding to the
+ // expected tags.
if (Lex.getKind() != lltok::kw_gv && Lex.getKind() != lltok::kw_module &&
- Lex.getKind() != lltok::kw_typeid)
+ Lex.getKind() != lltok::kw_typeid && Lex.getKind() != lltok::kw_flags &&
+ Lex.getKind() != lltok::kw_blockcount)
return TokError(
- "Expected 'gv', 'module', or 'typeid' at the start of summary entry");
+ "Expected 'gv', 'module', 'typeid', 'flags' or 'blockcount' at the "
+ "start of summary entry");
+ if (Lex.getKind() == lltok::kw_flags)
+ return ParseSummaryIndexFlags();
+ if (Lex.getKind() == lltok::kw_blockcount)
+ return ParseBlockCount();
Lex.Lex();
if (ParseToken(lltok::colon, "expected ':' at start of summary entry") ||
ParseToken(lltok::lparen, "expected '(' at start of summary entry"))
@@ -8145,7 +8152,8 @@
uint64_t Flags;
if (ParseUInt64(Flags))
return true;
- Index->setFlags(Flags);
+ if (Index)
+ Index->setFlags(Flags);
return false;
}
@@ -8160,7 +8168,8 @@
uint64_t BlockCount;
if (ParseUInt64(BlockCount))
return true;
- Index->setBlockCount(BlockCount);
+ if (Index)
+ Index->setBlockCount(BlockCount);
return false;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82917.278884.patch
Type: text/x-patch
Size: 4273 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200717/dba1468f/attachment.bin>
More information about the llvm-commits
mailing list