diff options
author | Adrian Prantl <aprantl@apple.com> | 2016-12-22 05:27:12 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2016-12-22 05:27:12 +0000 |
commit | 49797ca6be3f13148dc8a92681579a3278519d06 (patch) | |
tree | 465a4157921bb722005fa76c96c69e5b428842fd /llvm/lib/IR/DebugInfoMetadata.cpp | |
parent | b458841745c1aa624d776c7a198ed2ec12d8621f (diff) | |
download | bcm5719-llvm-49797ca6be3f13148dc8a92681579a3278519d06.tar.gz bcm5719-llvm-49797ca6be3f13148dc8a92681579a3278519d06.zip |
Refactor the DIExpression fragment query interface (NFC)
... so it becomes available to DIExpressionCursor.
llvm-svn: 290322
Diffstat (limited to 'llvm/lib/IR/DebugInfoMetadata.cpp')
-rw-r--r-- | llvm/lib/IR/DebugInfoMetadata.cpp | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/llvm/lib/IR/DebugInfoMetadata.cpp b/llvm/lib/IR/DebugInfoMetadata.cpp index 75c397e1345..1003093760f 100644 --- a/llvm/lib/IR/DebugInfoMetadata.cpp +++ b/llvm/lib/IR/DebugInfoMetadata.cpp @@ -601,22 +601,14 @@ bool DIExpression::isValid() const { return true; } -bool DIExpression::isFragment() const { - assert(isValid() && "Expected valid expression"); - if (unsigned N = getNumElements()) - if (N >= 3) - return getElement(N - 3) == dwarf::DW_OP_LLVM_fragment; - return false; -} - -uint64_t DIExpression::getFragmentOffsetInBits() const { - assert(isFragment() && "Expected fragment"); - return getElement(getNumElements() - 2); -} - -uint64_t DIExpression::getFragmentSizeInBits() const { - assert(isFragment() && "Expected fragment"); - return getElement(getNumElements() - 1); +Optional<DIExpression::FragmentInfo> +DIExpression::getFragmentInfo(expr_op_iterator Start, expr_op_iterator End) { + for (auto I = Start; I != End; ++I) + if (I->getOp() == dwarf::DW_OP_LLVM_fragment) { + DIExpression::FragmentInfo Info = {I->getArg(1), I->getArg(0)}; + return Info; + } + return None; } bool DIExpression::isConstant() const { |