mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
[LoopUtils] Extend findStringMetadataForLoop to return the value for metadata
E.g. for: !1 = {"llvm.distribute", i32 1} it now returns the MDOperand for 1. I will use this in LoopDistribution to check the value of the metadata. Note that the change is backward-compatible with its current use in LoopVersioningLICM. An Optional implicitly converts to a bool depending whether it contains a value or not. llvm-svn: 267190
This commit is contained in:
parent
97996c46e1
commit
726ae3b57c
@ -385,9 +385,13 @@ void computeLICMSafetyInfo(LICMSafetyInfo *, Loop *);
|
||||
/// \brief Returns the instructions that use values defined in the loop.
|
||||
SmallVector<Instruction *, 8> findDefsUsedOutsideOfLoop(Loop *L);
|
||||
|
||||
/// \brief Find string metadata for loop, if it exists return true, else return
|
||||
/// false.
|
||||
bool findStringMetadataForLoop(Loop *TheLoop, StringRef Name);
|
||||
/// \brief Find string metadata for loop
|
||||
///
|
||||
/// If it has a value (e.g. {"llvm.distribute", 1} return the value as an
|
||||
/// operand or null otherwise. If the string metadata is not found return
|
||||
/// Optional's not-a-value.
|
||||
Optional<const MDOperand *> findStringMetadataForLoop(Loop *TheLoop,
|
||||
StringRef Name);
|
||||
|
||||
/// \brief Set input string into loop metadata by keeping other values intact.
|
||||
void addStringMetadataToLoop(Loop *TheLoop, const char *MDString,
|
||||
|
@ -823,13 +823,17 @@ void llvm::initializeLoopPassPass(PassRegistry &Registry) {
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass)
|
||||
}
|
||||
|
||||
/// \brief Find string metadata for loop, if it exists return true, else return
|
||||
/// false.
|
||||
bool llvm::findStringMetadataForLoop(Loop *TheLoop, StringRef Name) {
|
||||
/// \brief Find string metadata for loop
|
||||
///
|
||||
/// If it has a value (e.g. {"llvm.distribute", 1} return the value as an
|
||||
/// operand or null otherwise. If the string metadata is not found return
|
||||
/// Optional's not-a-value.
|
||||
Optional<const MDOperand *> llvm::findStringMetadataForLoop(Loop *TheLoop,
|
||||
StringRef Name) {
|
||||
MDNode *LoopID = TheLoop->getLoopID();
|
||||
// Return false if LoopID is false.
|
||||
// Return none if LoopID is false.
|
||||
if (!LoopID)
|
||||
return false;
|
||||
return None;
|
||||
|
||||
// First operand should refer to the loop id itself.
|
||||
assert(LoopID->getNumOperands() > 0 && "requires at least one operand");
|
||||
@ -845,7 +849,14 @@ bool llvm::findStringMetadataForLoop(Loop *TheLoop, StringRef Name) {
|
||||
continue;
|
||||
// Return true if MDString holds expected MetaData.
|
||||
if (Name.equals(S->getString()))
|
||||
return true;
|
||||
switch (MD->getNumOperands()) {
|
||||
case 1:
|
||||
return nullptr;
|
||||
case 2:
|
||||
return &MD->getOperand(1);
|
||||
default:
|
||||
llvm_unreachable("loop metadata has 0 or 1 operand");
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return None;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user