From 49797ca6be3f13148dc8a92681579a3278519d06 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Thu, 22 Dec 2016 05:27:12 +0000 Subject: Refactor the DIExpression fragment query interface (NFC) ... so it becomes available to DIExpressionCursor. llvm-svn: 290322 --- llvm/lib/IR/DebugInfoMetadata.cpp | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) (limited to 'llvm/lib/IR/DebugInfoMetadata.cpp') 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::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 { -- cgit v1.2.3