mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-10 22:00:58 +00:00
[Loop Utils] Extend the scope of addStringMetadataToLoop.
To avoid duplicates in loop metadata, if the string to add is already there, just update the value. Reviewers: reames, Ashutosh Reviewed By: reames Subscribers: hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D65265 llvm-svn: 367087
This commit is contained in:
parent
60edd04498
commit
5d24c286fb
@ -252,6 +252,8 @@ TransformationMode hasLICMVersioningTransformation(Loop *L);
|
||||
/// @}
|
||||
|
||||
/// Set input string into loop metadata by keeping other values intact.
|
||||
/// If the string is already in loop metadata update value if it is
|
||||
/// different.
|
||||
void addStringMetadataToLoop(Loop *TheLoop, const char *MDString,
|
||||
unsigned V = 0);
|
||||
|
||||
|
@ -201,7 +201,9 @@ static MDNode *createStringMetadata(Loop *TheLoop, StringRef Name, unsigned V) {
|
||||
}
|
||||
|
||||
/// Set input string into loop metadata by keeping other values intact.
|
||||
void llvm::addStringMetadataToLoop(Loop *TheLoop, const char *MDString,
|
||||
/// If the string is already in loop metadata update value if it is
|
||||
/// different.
|
||||
void llvm::addStringMetadataToLoop(Loop *TheLoop, const char *StringMD,
|
||||
unsigned V) {
|
||||
SmallVector<Metadata *, 4> MDs(1);
|
||||
// If the loop already has metadata, retain it.
|
||||
@ -209,11 +211,25 @@ void llvm::addStringMetadataToLoop(Loop *TheLoop, const char *MDString,
|
||||
if (LoopID) {
|
||||
for (unsigned i = 1, ie = LoopID->getNumOperands(); i < ie; ++i) {
|
||||
MDNode *Node = cast<MDNode>(LoopID->getOperand(i));
|
||||
// If it is of form key = value, try to parse it.
|
||||
if (Node->getNumOperands() == 2) {
|
||||
MDString *S = dyn_cast<MDString>(Node->getOperand(0));
|
||||
if (S && S->getString().equals(StringMD)) {
|
||||
ConstantInt *IntMD =
|
||||
mdconst::extract_or_null<ConstantInt>(Node->getOperand(1));
|
||||
if (IntMD && IntMD->getSExtValue() == V)
|
||||
// It is already in place. Do nothing.
|
||||
return;
|
||||
// We need to update the value, so just skip it here and it will
|
||||
// be added after copying other existed nodes.
|
||||
continue;
|
||||
}
|
||||
}
|
||||
MDs.push_back(Node);
|
||||
}
|
||||
}
|
||||
// Add new metadata.
|
||||
MDs.push_back(createStringMetadata(TheLoop, MDString, V));
|
||||
MDs.push_back(createStringMetadata(TheLoop, StringMD, V));
|
||||
// Replace current metadata node with new one.
|
||||
LLVMContext &Context = TheLoop->getHeader()->getContext();
|
||||
MDNode *NewLoopID = MDNode::get(Context, MDs);
|
||||
|
Loading…
x
Reference in New Issue
Block a user