aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/AsmParser
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/AsmParser')
-rw-r--r--llvm/lib/AsmParser/LLLexer.cpp3
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp33
2 files changed, 33 insertions, 3 deletions
diff --git a/llvm/lib/AsmParser/LLLexer.cpp b/llvm/lib/AsmParser/LLLexer.cpp
index 2301a27..8ded07f 100644
--- a/llvm/lib/AsmParser/LLLexer.cpp
+++ b/llvm/lib/AsmParser/LLLexer.cpp
@@ -737,6 +737,9 @@ lltok::Kind LLLexer::LexIdentifier() {
KEYWORD(live);
KEYWORD(dsoLocal);
KEYWORD(canAutoHide);
+ KEYWORD(importType);
+ KEYWORD(definition);
+ KEYWORD(declaration);
KEYWORD(function);
KEYWORD(insts);
KEYWORD(funcFlags);
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index f546e05..6310412 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -2083,6 +2083,20 @@ void LLParser::parseOptionalVisibility(unsigned &Res) {
Lex.Lex();
}
+bool LLParser::parseOptionalImportType(lltok::Kind Kind,
+ GlobalValueSummary::ImportKind &Res) {
+ switch (Kind) {
+ default:
+ return tokError("unknown import kind. Expect definition or declaration.");
+ case lltok::kw_definition:
+ Res = GlobalValueSummary::Definition;
+ return false;
+ case lltok::kw_declaration:
+ Res = GlobalValueSummary::Declaration;
+ return false;
+ }
+}
+
/// parseOptionalDLLStorageClass
/// ::= /*empty*/
/// ::= 'dllimport'
@@ -9230,7 +9244,8 @@ bool LLParser::parseFunctionSummary(std::string Name, GlobalValue::GUID GUID,
GlobalValueSummary::GVFlags GVFlags = GlobalValueSummary::GVFlags(
GlobalValue::ExternalLinkage, GlobalValue::DefaultVisibility,
/*NotEligibleToImport=*/false,
- /*Live=*/false, /*IsLocal=*/false, /*CanAutoHide=*/false);
+ /*Live=*/false, /*IsLocal=*/false, /*CanAutoHide=*/false,
+ GlobalValueSummary::Definition);
unsigned InstCount;
std::vector<FunctionSummary::EdgeTy> Calls;
FunctionSummary::TypeIdInfo TypeIdInfo;
@@ -9317,7 +9332,8 @@ bool LLParser::parseVariableSummary(std::string Name, GlobalValue::GUID GUID,
GlobalValueSummary::GVFlags GVFlags = GlobalValueSummary::GVFlags(
GlobalValue::ExternalLinkage, GlobalValue::DefaultVisibility,
/*NotEligibleToImport=*/false,
- /*Live=*/false, /*IsLocal=*/false, /*CanAutoHide=*/false);
+ /*Live=*/false, /*IsLocal=*/false, /*CanAutoHide=*/false,
+ GlobalValueSummary::Definition);
GlobalVarSummary::GVarFlags GVarFlags(/*ReadOnly*/ false,
/* WriteOnly */ false,
/* Constant */ false,
@@ -9375,7 +9391,8 @@ bool LLParser::parseAliasSummary(std::string Name, GlobalValue::GUID GUID,
GlobalValueSummary::GVFlags GVFlags = GlobalValueSummary::GVFlags(
GlobalValue::ExternalLinkage, GlobalValue::DefaultVisibility,
/*NotEligibleToImport=*/false,
- /*Live=*/false, /*IsLocal=*/false, /*CanAutoHide=*/false);
+ /*Live=*/false, /*IsLocal=*/false, /*CanAutoHide=*/false,
+ GlobalValueSummary::Definition);
if (parseToken(lltok::colon, "expected ':' here") ||
parseToken(lltok::lparen, "expected '(' here") ||
parseModuleReference(ModulePath) ||
@@ -10161,6 +10178,16 @@ bool LLParser::parseGVFlags(GlobalValueSummary::GVFlags &GVFlags) {
return true;
GVFlags.CanAutoHide = Flag;
break;
+ case lltok::kw_importType:
+ Lex.Lex();
+ if (parseToken(lltok::colon, "expected ':'"))
+ return true;
+ GlobalValueSummary::ImportKind IK;
+ if (parseOptionalImportType(Lex.getKind(), IK))
+ return true;
+ GVFlags.ImportType = static_cast<unsigned>(IK);
+ Lex.Lex();
+ break;
default:
return error(Lex.getLoc(), "expected gv flag type");
}