summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2018-08-14 01:49:33 +0000
committerTeresa Johnson <tejohnson@google.com>2018-08-14 01:49:33 +0000
commitc7816800d87f848907b1c86d6fc614ad03585c46 (patch)
treeabacefb3e72eb04f6753b5def1fd1d0d13d39c79 /llvm/lib
parent40e7663b1fca58b099c1cb1d5278f368494ea46d (diff)
downloadbcm5719-llvm-c7816800d87f848907b1c86d6fc614ad03585c46.tar.gz
bcm5719-llvm-c7816800d87f848907b1c86d6fc614ad03585c46.zip
[ThinLTO] Handle optional args in assembly format for ConstVCalls
Summary: The AsmWriter was only writing the Args for a ConstVCall if it was non-empty, however, the LLParser was always expecting it. To aid in making it optional, surround the ConstVCall VFuncId and Args in parentheses when writing, then make the Args optional when reading. Reviewers: pcc Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D49960 llvm-svn: 339637
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp14
-rw-r--r--llvm/lib/IR/AsmWriter.cpp2
2 files changed, 12 insertions, 4 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 7cf74dd16f5..8eede0a72eb 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -8027,12 +8027,18 @@ bool LLParser::ParseConstVCallList(
}
/// ConstVCall
-/// ::= VFuncId, Args
+/// ::= '(' VFuncId ',' Args ')'
bool LLParser::ParseConstVCall(FunctionSummary::ConstVCall &ConstVCall,
IdToIndexMapType &IdToIndexMap, unsigned Index) {
- if (ParseVFuncId(ConstVCall.VFunc, IdToIndexMap, Index) ||
- ParseToken(lltok::comma, "expected ',' here") ||
- ParseArgs(ConstVCall.Args))
+ if (ParseToken(lltok::lparen, "expected '(' here") ||
+ ParseVFuncId(ConstVCall.VFunc, IdToIndexMap, Index))
+ return true;
+
+ if (EatIfPresent(lltok::comma))
+ if (ParseArgs(ConstVCall.Args))
+ return true;
+
+ if (ParseToken(lltok::rparen, "expected ')' here"))
return true;
return false;
diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp
index 99a25a723b4..e19c7c20a5d 100644
--- a/llvm/lib/IR/AsmWriter.cpp
+++ b/llvm/lib/IR/AsmWriter.cpp
@@ -2955,11 +2955,13 @@ void AssemblyWriter::printConstVCalls(
FieldSeparator FS;
for (auto &ConstVCall : VCallList) {
Out << FS;
+ Out << "(";
printVFuncId(ConstVCall.VFunc);
if (!ConstVCall.Args.empty()) {
Out << ", ";
printArgs(ConstVCall.Args);
}
+ Out << ")";
}
Out << ")";
}
OpenPOWER on IntegriCloud