diff options
author | Adam Nemet <anemet@apple.com> | 2016-04-22 19:10:05 +0000 |
---|---|---|
committer | Adam Nemet <anemet@apple.com> | 2016-04-22 19:10:05 +0000 |
commit | fe3def7c2a301ea414e0e7adf54e8216064268a0 (patch) | |
tree | 26be2ae07711201ca926a3a04740d66741070f57 /llvm/lib/Transforms/Utils | |
parent | 6493bc2b97e19ed5920b7d03cc677deb38658dac (diff) | |
download | bcm5719-llvm-fe3def7c2a301ea414e0e7adf54e8216064268a0.tar.gz bcm5719-llvm-fe3def7c2a301ea414e0e7adf54e8216064268a0.zip |
[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
Diffstat (limited to 'llvm/lib/Transforms/Utils')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopUtils.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp index 2f74b115493..2d1f10f0591 100644 --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp @@ -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; } |