mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-09 11:25:55 +00:00
AsmParser: Factor duplicated code into ParseMDNode(), NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225710 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1490,24 +1490,11 @@ bool LLParser::ParseInstructionMetadata(Instruction *Inst,
|
|||||||
unsigned MDK = M->getMDKindID(Name);
|
unsigned MDK = M->getMDKindID(Name);
|
||||||
Lex.Lex();
|
Lex.Lex();
|
||||||
|
|
||||||
if (ParseToken(lltok::exclaim, "expected '!' here"))
|
MDNode *N;
|
||||||
|
if (ParseMDNode(N))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// This code is similar to that of ParseMetadata. However, only MDNodes
|
Inst->setMetadata(MDK, N);
|
||||||
// are supported here.
|
|
||||||
if (Lex.getKind() == lltok::lbrace) {
|
|
||||||
MDNode *N;
|
|
||||||
if (ParseMDTuple(N))
|
|
||||||
return true;
|
|
||||||
Inst->setMetadata(MDK, N);
|
|
||||||
} else {
|
|
||||||
MDNode *Node;
|
|
||||||
if (ParseMDNodeID(Node))
|
|
||||||
return true;
|
|
||||||
// If we got the node, add it to the instruction.
|
|
||||||
Inst->setMetadata(MDK, Node);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (MDK == LLVMContext::MD_tbaa)
|
if (MDK == LLVMContext::MD_tbaa)
|
||||||
InstsWithTBAATag.push_back(Inst);
|
InstsWithTBAATag.push_back(Inst);
|
||||||
|
|
||||||
@@ -2912,6 +2899,23 @@ bool LLParser::ParseMDTuple(MDNode *&MD, bool IsDistinct) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// MDNode:
|
||||||
|
/// ::= !{ ... }
|
||||||
|
/// ::= !7
|
||||||
|
bool LLParser::ParseMDNode(MDNode *&N) {
|
||||||
|
return ParseToken(lltok::exclaim, "expected '!' here") ||
|
||||||
|
ParseMDNodeTail(N);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LLParser::ParseMDNodeTail(MDNode *&N) {
|
||||||
|
// !{ ... }
|
||||||
|
if (Lex.getKind() == lltok::lbrace)
|
||||||
|
return ParseMDTuple(N);
|
||||||
|
|
||||||
|
// !42
|
||||||
|
return ParseMDNodeID(N);
|
||||||
|
}
|
||||||
|
|
||||||
/// ParseMetadataAsValue
|
/// ParseMetadataAsValue
|
||||||
/// ::= metadata i32 %local
|
/// ::= metadata i32 %local
|
||||||
/// ::= metadata i32 @global
|
/// ::= metadata i32 @global
|
||||||
@@ -2978,18 +2982,9 @@ bool LLParser::ParseMetadata(Metadata *&MD, PerFunctionState *PFS) {
|
|||||||
|
|
||||||
// MDNode:
|
// MDNode:
|
||||||
// !{ ... }
|
// !{ ... }
|
||||||
if (Lex.getKind() == lltok::lbrace) {
|
// !7
|
||||||
MDNode *N;
|
|
||||||
if (ParseMDTuple(N))
|
|
||||||
return true;
|
|
||||||
MD = N;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Standalone metadata reference
|
|
||||||
// !42
|
|
||||||
MDNode *N;
|
MDNode *N;
|
||||||
if (ParseMDNodeID(N))
|
if (ParseMDNodeTail(N))
|
||||||
return true;
|
return true;
|
||||||
MD = N;
|
MD = N;
|
||||||
return false;
|
return false;
|
||||||
|
@@ -388,6 +388,8 @@ namespace llvm {
|
|||||||
bool ParseValueAsMetadata(Metadata *&MD, PerFunctionState *PFS);
|
bool ParseValueAsMetadata(Metadata *&MD, PerFunctionState *PFS);
|
||||||
bool ParseMetadata(Metadata *&MD, PerFunctionState *PFS);
|
bool ParseMetadata(Metadata *&MD, PerFunctionState *PFS);
|
||||||
bool ParseMDTuple(MDNode *&MD, bool IsDistinct = false);
|
bool ParseMDTuple(MDNode *&MD, bool IsDistinct = false);
|
||||||
|
bool ParseMDNode(MDNode *&MD);
|
||||||
|
bool ParseMDNodeTail(MDNode *&MD);
|
||||||
bool ParseMDNodeVector(SmallVectorImpl<Metadata *> &MDs);
|
bool ParseMDNodeVector(SmallVectorImpl<Metadata *> &MDs);
|
||||||
bool ParseInstructionMetadata(Instruction *Inst, PerFunctionState *PFS);
|
bool ParseInstructionMetadata(Instruction *Inst, PerFunctionState *PFS);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user