From c7816800d87f848907b1c86d6fc614ad03585c46 Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Tue, 14 Aug 2018 01:49:33 +0000 Subject: [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 --- llvm/lib/AsmParser/LLParser.cpp | 14 ++++++++++---- llvm/lib/IR/AsmWriter.cpp | 2 ++ 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'llvm/lib') 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 << ")"; } -- cgit v1.2.3