summaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/StackSafetyAnalysis.cpp
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2020-06-12 17:41:28 -0700
committerVitaly Buka <vitalybuka@google.com>2020-06-12 17:42:32 -0700
commite6ce0dc5de37a51afed255c7e384d2016924dbbb (patch)
treeafec5bc013d3d1481abf37e1cb38ce9939b28874 /llvm/lib/Analysis/StackSafetyAnalysis.cpp
parent4741835e031b559f2effcad70f59e35c32c1eece (diff)
[StackSafety,NFC] Extract addOverflowNever
Diffstat (limited to 'llvm/lib/Analysis/StackSafetyAnalysis.cpp')
-rw-r--r--llvm/lib/Analysis/StackSafetyAnalysis.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/llvm/lib/Analysis/StackSafetyAnalysis.cpp b/llvm/lib/Analysis/StackSafetyAnalysis.cpp
index 853707e9c23d..3fb5c294acf6 100644
--- a/llvm/lib/Analysis/StackSafetyAnalysis.cpp
+++ b/llvm/lib/Analysis/StackSafetyAnalysis.cpp
@@ -98,6 +98,13 @@ bool isUnsafe(const ConstantRange &R) {
return R.isEmptySet() || R.isFullSet() || R.isUpperSignWrapped();
}
+ConstantRange addOverflowNever(const ConstantRange &L, const ConstantRange &R) {
+ if (L.signedAddMayOverflow(R) !=
+ ConstantRange::OverflowResult::NeverOverflows)
+ return ConstantRange(L.getBitWidth(), true);
+ return L.add(R);
+}
+
/// Calculate the allocation size of a given alloca. Returns empty range
// in case of confution.
ConstantRange getStaticAllocaSizeRange(const AllocaInst &AI) {
@@ -237,10 +244,7 @@ StackSafetyLocalAnalysis::getAccessRange(Value *Addr, Value *Base,
if (isUnsafe(Offsets))
return UnknownRange;
- if (Offsets.signedAddMayOverflow(SizeRange) !=
- ConstantRange::OverflowResult::NeverOverflows)
- return UnknownRange;
- Offsets = Offsets.add(SizeRange);
+ Offsets = addOverflowNever(Offsets, SizeRange);
if (isUnsafe(Offsets))
return UnknownRange;
return Offsets;
@@ -453,10 +457,7 @@ ConstantRange StackSafetyDataFlowAnalysis<CalleeTy>::getArgumentAccessRange(
return Access;
if (Access.isFullSet())
return UnknownRange;
- if (Offsets.signedAddMayOverflow(Access) !=
- ConstantRange::OverflowResult::NeverOverflows)
- return UnknownRange;
- return Access.add(Offsets);
+ return addOverflowNever(Access, Offsets);
}
template <typename CalleeTy>