projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
clean up some really strange code.
[oota-llvm.git]
/
lib
/
AsmParser
/
LLParser.cpp
diff --git
a/lib/AsmParser/LLParser.cpp
b/lib/AsmParser/LLParser.cpp
index 3a2d24440dc19894094fe4fa0173295473daefca..9de1cafb5e07b205a4a8fcbb65adeab13968e00f 100644
(file)
--- a/
lib/AsmParser/LLParser.cpp
+++ b/
lib/AsmParser/LLParser.cpp
@@
-463,42
+463,43
@@
bool LLParser::ParseNamedGlobal() {
// MDString:
// ::= '!' STRINGCONSTANT
// MDString:
// ::= '!' STRINGCONSTANT
-bool LLParser::ParseMDString(M
etadataBase *&MDS
) {
+bool LLParser::ParseMDString(M
DString *&Result
) {
std::string Str;
if (ParseStringConstant(Str)) return true;
std::string Str;
if (ParseStringConstant(Str)) return true;
-
MDS
= MDString::get(Context, Str);
+
Result
= MDString::get(Context, Str);
return false;
}
// MDNode:
// ::= '!' MDNodeNumber
return false;
}
// MDNode:
// ::= '!' MDNodeNumber
-bool LLParser::ParseMDNode(M
etadataBase *&Node
) {
+bool LLParser::ParseMDNode(M
DNode *&Result
) {
// !{ ..., !42, ... }
unsigned MID = 0;
// !{ ..., !42, ... }
unsigned MID = 0;
- if (ParseUInt32(MID))
return true;
+ if (ParseUInt32(MID)) return true;
// Check existing MDNode.
// Check existing MDNode.
- std::map<unsigned,
WeakVH
>::iterator I = MetadataCache.find(MID);
+ std::map<unsigned,
TrackingVH<MDNode>
>::iterator I = MetadataCache.find(MID);
if (I != MetadataCache.end()) {
if (I != MetadataCache.end()) {
-
Node = cast<MetadataBase>(I->second)
;
+
Result = I->second
;
return false;
}
// Check known forward references.
return false;
}
// Check known forward references.
- std::map<unsigned, std::pair<
WeakVH
, LocTy> >::iterator
+ std::map<unsigned, std::pair<
TrackingVH<MDNode>
, LocTy> >::iterator
FI = ForwardRefMDNodes.find(MID);
if (FI != ForwardRefMDNodes.end()) {
FI = ForwardRefMDNodes.find(MID);
if (FI != ForwardRefMDNodes.end()) {
-
Node = cast<MetadataBase>(FI->second.first)
;
+
Result = FI->second.first
;
return false;
}
return false;
}
- // Create MDNode forward reference
- SmallVector<Value *, 1> Elts;
+ // Create MDNode forward reference.
+
+ // FIXME: This is not unique enough!
std::string FwdRefName = "llvm.mdnode.fwdref." + utostr(MID);
std::string FwdRefName = "llvm.mdnode.fwdref." + utostr(MID);
-
Elts.push_back(
MDString::get(Context, FwdRefName));
- MDNode *FwdNode = MDNode::get(Context,
Elts.data(), Elts.size()
);
+
Value *V =
MDString::get(Context, FwdRefName));
+ MDNode *FwdNode = MDNode::get(Context,
&V, 1
);
ForwardRefMDNodes[MID] = std::make_pair(FwdNode, Lex.getLoc());
ForwardRefMDNodes[MID] = std::make_pair(FwdNode, Lex.getLoc());
-
Node
= FwdNode;
+
Result
= FwdNode;
return false;
}
return false;
}
@@
-521,10
+522,12
@@
bool LLParser::ParseNamedMetadata() {
Lex.Lex();
SmallVector<MetadataBase *, 8> Elts;
do {
Lex.Lex();
SmallVector<MetadataBase *, 8> Elts;
do {
- if (
Lex.getKind() != lltok::Metadata
)
- return
TokError("Expected '!' here")
;
+ if (
ParseToken(lltok::Metadata, "Expected '!' here")
)
+ return
true
;
Lex.Lex();
Lex.Lex();
- MetadataBase *N = 0;
+
+ // FIXME: This rejects MDStrings. Are they legal in an named MDNode or not?
+ MDNode *N = 0;
if (ParseMDNode(N)) return true;
Elts.push_back(N);
} while (EatIfPresent(lltok::comma));
if (ParseMDNode(N)) return true;
Elts.push_back(N);
} while (EatIfPresent(lltok::comma));
@@
-544,7
+547,7
@@
bool LLParser::ParseStandaloneMetadata() {
unsigned MetadataID = 0;
if (ParseUInt32(MetadataID))
return true;
unsigned MetadataID = 0;
if (ParseUInt32(MetadataID))
return true;
- if (MetadataCache.
find(MetadataID) != MetadataCache.end(
))
+ if (MetadataCache.
count(MetadataID
))
return TokError("Metadata id is already used");
if (ParseToken(lltok::equal, "expected '=' here"))
return true;
return TokError("Metadata id is already used");
if (ParseToken(lltok::equal, "expected '=' here"))
return true;
@@
-561,6
+564,7
@@
bool LLParser::ParseStandaloneMetadata() {
if (Lex.getKind() != lltok::lbrace)
return TokError("Expected '{' here");
if (Lex.getKind() != lltok::lbrace)
return TokError("Expected '{' here");
+ // FIXME: This doesn't make sense here.
SmallVector<Value *, 16> Elts;
if (ParseMDNodeVector(Elts)
|| ParseToken(lltok::rbrace, "expected end of metadata node"))
SmallVector<Value *, 16> Elts;
if (ParseMDNodeVector(Elts)
|| ParseToken(lltok::rbrace, "expected end of metadata node"))
@@
-568,11
+572,10
@@
bool LLParser::ParseStandaloneMetadata() {
MDNode *Init = MDNode::get(Context, Elts.data(), Elts.size());
MetadataCache[MetadataID] = Init;
MDNode *Init = MDNode::get(Context, Elts.data(), Elts.size());
MetadataCache[MetadataID] = Init;
- std::map<unsigned, std::pair<
WeakVH
, LocTy> >::iterator
+ std::map<unsigned, std::pair<
TrackingVH<MDNode>
, LocTy> >::iterator
FI = ForwardRefMDNodes.find(MetadataID);
if (FI != ForwardRefMDNodes.end()) {
FI = ForwardRefMDNodes.find(MetadataID);
if (FI != ForwardRefMDNodes.end()) {
- MDNode *FwdNode = cast<MDNode>(FI->second.first);
- FwdNode->replaceAllUsesWith(Init);
+ FI->second.first->replaceAllUsesWith(Init);
ForwardRefMDNodes.erase(FI);
}
ForwardRefMDNodes.erase(FI);
}
@@
-599,14
+602,16
@@
bool LLParser::ParseInlineMetadata(Value *&V, PerFunctionState &PFS) {
return false;
}
return false;
}
+ // FIXME: This can't possibly work at all. r90497
+
// Standalone metadata reference
// !{ ..., !42, ... }
// Standalone metadata reference
// !{ ..., !42, ... }
- if (!ParseMDNode((M
etadataBas
e *&)V))
+ if (!ParseMDNode((M
DNod
e *&)V))
return false;
// MDString:
// '!' STRINGCONSTANT
return false;
// MDString:
// '!' STRINGCONSTANT
- if (ParseMDString((M
etadataBase
*&)V)) return true;
+ if (ParseMDString((M
DString
*&)V)) return true;
return false;
}
return false;
}
@@
-1118,11
+1123,11
@@
bool LLParser::ParseOptionalCustomMetadata() {
return TokError("expected '!' here");
Lex.Lex();
return TokError("expected '!' here");
Lex.Lex();
- M
etadataBas
e *Node;
+ M
DNod
e *Node;
if (ParseMDNode(Node)) return true;
unsigned MDK = M->getMDKindID(Name.c_str());
if (ParseMDNode(Node)) return true;
unsigned MDK = M->getMDKindID(Name.c_str());
- MDsOnInst.push_back(std::make_pair(MDK,
cast<MDNode>(Node)
));
+ MDsOnInst.push_back(std::make_pair(MDK,
Node
));
// If this is the end of the list, we're done.
if (!EatIfPresent(lltok::comma))
// If this is the end of the list, we're done.
if (!EatIfPresent(lltok::comma))
@@
-1937,6
+1942,8
@@
bool LLParser::ParseValID(ValID &ID) {
case lltok::Metadata: { // !{...} MDNode, !"foo" MDString
ID.Kind = ValID::t_Metadata;
Lex.Lex();
case lltok::Metadata: { // !{...} MDNode, !"foo" MDString
ID.Kind = ValID::t_Metadata;
Lex.Lex();
+
+ // FIXME: This doesn't belong here.
if (Lex.getKind() == lltok::lbrace) {
SmallVector<Value*, 16> Elts;
if (ParseMDNodeVector(Elts) ||
if (Lex.getKind() == lltok::lbrace) {
SmallVector<Value*, 16> Elts;
if (ParseMDNodeVector(Elts) ||
@@
-1949,12
+1956,13
@@
bool LLParser::ParseValID(ValID &ID) {
// Standalone metadata reference
// !{ ..., !42, ... }
// Standalone metadata reference
// !{ ..., !42, ... }
- if (!ParseMDNode(ID.MetadataVal))
+ // FIXME: Split MetadataVal into one for MDNode and one for MDString.
+ if (!ParseMDNode((MDNode*&)ID.MetadataVal))
return false;
// MDString:
// ::= '!' STRINGCONSTANT
return false;
// MDString:
// ::= '!' STRINGCONSTANT
- if (ParseMDString(ID.MetadataVal)) return true;
+ if (ParseMDString(
(MDString*&)
ID.MetadataVal)) return true;
ID.Kind = ValID::t_Metadata;
return false;
}
ID.Kind = ValID::t_Metadata;
return false;
}
@@
-3842,6
+3850,7
@@
bool LLParser::ParseMDNodeVector(SmallVectorImpl<Value*> &Elts) {
Lex.Lex();
do {
Value *V = 0;
Lex.Lex();
do {
Value *V = 0;
+ // FIXME: REWRITE.
if (Lex.getKind() == lltok::kw_null) {
Lex.Lex();
V = 0;
if (Lex.getKind() == lltok::kw_null) {
Lex.Lex();
V = 0;
@@
-3850,11
+3859,11
@@
bool LLParser::ParseMDNodeVector(SmallVectorImpl<Value*> &Elts) {
if (ParseType(Ty)) return true;
if (Lex.getKind() == lltok::Metadata) {
Lex.Lex();
if (ParseType(Ty)) return true;
if (Lex.getKind() == lltok::Metadata) {
Lex.Lex();
- M
etadataBas
e *Node = 0;
+ M
DNod
e *Node = 0;
if (!ParseMDNode(Node))
V = Node;
else {
if (!ParseMDNode(Node))
V = Node;
else {
- M
etadataBase
*MDS = 0;
+ M
DString
*MDS = 0;
if (ParseMDString(MDS)) return true;
V = MDS;
}
if (ParseMDString(MDS)) return true;
V = MDS;
}