mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-13 09:33:50 +00:00
now that instruction metadata is only parsed in one place, eliminate the
parser-global MDsOnInst vector and make ParseInstructionMetadata return its result by-ref through an argument like the entire rest of the parser. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92302 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c3a6c5c83b
commit
1340dd3708
@ -1065,7 +1065,9 @@ bool LLParser::ParseOptionalCallingConv(CallingConv::ID &CC) {
|
||||
|
||||
/// ParseInstructionMetadata
|
||||
/// ::= !dbg !42 (',' !dbg !57)*
|
||||
bool LLParser::ParseInstructionMetadata() {
|
||||
bool LLParser::
|
||||
ParseInstructionMetadata(SmallVectorImpl<std::pair<unsigned,
|
||||
MDNode *> > &Result){
|
||||
do {
|
||||
if (Lex.getKind() != lltok::MetadataVar)
|
||||
return TokError("expected metadata after comma");
|
||||
@ -1079,7 +1081,7 @@ bool LLParser::ParseInstructionMetadata() {
|
||||
return true;
|
||||
|
||||
unsigned MDK = M->getMDKindID(Name.c_str());
|
||||
MDsOnInst.push_back(std::make_pair(MDK, Node));
|
||||
Result.push_back(std::make_pair(MDK, Node));
|
||||
|
||||
// If this is the end of the list, we're done.
|
||||
} while (EatIfPresent(lltok::comma));
|
||||
@ -2794,6 +2796,7 @@ bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
|
||||
|
||||
// Parse the instructions in this block until we get a terminator.
|
||||
Instruction *Inst;
|
||||
SmallVector<std::pair<unsigned, MDNode *>, 4> MetadataOnInst;
|
||||
do {
|
||||
// This instruction may have three possibilities for a name: a) none
|
||||
// specified, b) name specified "%foo =", c) number specified: "%4 =".
|
||||
@ -2822,22 +2825,21 @@ bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
|
||||
// With a normal result, we check to see if the instruction is followed by
|
||||
// a comma and metadata.
|
||||
if (EatIfPresent(lltok::comma))
|
||||
if (ParseInstructionMetadata())
|
||||
if (ParseInstructionMetadata(MetadataOnInst))
|
||||
return true;
|
||||
break;
|
||||
case InstExtraComma:
|
||||
// If the instruction parser ate an extra comma at the end of it, it
|
||||
// *must* be followed by metadata.
|
||||
if (ParseInstructionMetadata())
|
||||
if (ParseInstructionMetadata(MetadataOnInst))
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
|
||||
// Set metadata attached with this instruction.
|
||||
for (SmallVector<std::pair<unsigned, MDNode *>, 2>::iterator
|
||||
MDI = MDsOnInst.begin(), MDE = MDsOnInst.end(); MDI != MDE; ++MDI)
|
||||
Inst->setMetadata(MDI->first, MDI->second);
|
||||
MDsOnInst.clear();
|
||||
for (unsigned i = 0, e = MetadataOnInst.size(); i != e; ++i)
|
||||
Inst->setMetadata(MetadataOnInst[i].first, MetadataOnInst[i].second);
|
||||
MetadataOnInst.clear();
|
||||
|
||||
BB->getInstList().push_back(Inst);
|
||||
|
||||
|
@ -83,7 +83,6 @@ namespace llvm {
|
||||
std::vector<PATypeHolder> NumberedTypes;
|
||||
std::vector<TrackingVH<MDNode> > NumberedMetadata;
|
||||
std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> > ForwardRefMDNodes;
|
||||
SmallVector<std::pair<unsigned, MDNode *>, 2> MDsOnInst;
|
||||
struct UpRefRecord {
|
||||
/// Loc - This is the location of the upref.
|
||||
LocTy Loc;
|
||||
@ -171,7 +170,8 @@ namespace llvm {
|
||||
bool ParseOptionalVisibility(unsigned &Visibility);
|
||||
bool ParseOptionalCallingConv(CallingConv::ID &CC);
|
||||
bool ParseOptionalAlignment(unsigned &Alignment);
|
||||
bool ParseInstructionMetadata();
|
||||
bool ParseInstructionMetadata(SmallVectorImpl<std::pair<unsigned,
|
||||
MDNode *> > &);
|
||||
bool ParseOptionalCommaAlign(unsigned &Alignment, bool &AteExtraComma);
|
||||
bool ParseIndexList(SmallVectorImpl<unsigned> &Indices,bool &AteExtraComma);
|
||||
bool ParseIndexList(SmallVectorImpl<unsigned> &Indices) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user