Refactor DIBuilder::createFragmentExpression into a static DIExpression member
NFC
llvm-svn: 312165
diff --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp
index 83e5d38..458596b 100644
--- a/llvm/lib/Transforms/Scalar/SROA.cpp
+++ b/llvm/lib/Transforms/Scalar/SROA.cpp
@@ -4068,7 +4068,14 @@
continue;
Size = std::min(Size, AbsEnd - Start);
}
- FragmentExpr = DIB.createFragmentExpression(Start, Size);
+ // The new, smaller fragment is stenciled out from the old fragment.
+ if (auto OrigFragment = FragmentExpr->getFragmentInfo()) {
+ assert(Start >= OrigFragment->OffsetInBits &&
+ "new fragment is outside of original fragment");
+ Start -= OrigFragment->OffsetInBits;
+ }
+ FragmentExpr =
+ DIExpression::createFragmentExpression(Expr, Start, Size);
}
// Remove any existing dbg.declare intrinsic describing the same alloca.