When creating lazy bindings in RegionStore, propagate existing lazy bindings instead of creating new ones.
This is a functionality optimization. llvm-svn: 156427
This commit is contained in:
parent
228571b69b
commit
b4235b48ca
|
@ -1427,12 +1427,30 @@ SVal RegionStoreManager::getBindingForLazySymbol(const TypedValueRegion *R) {
|
||||||
SVal RegionStoreManager::getBindingForStruct(Store store,
|
SVal RegionStoreManager::getBindingForStruct(Store store,
|
||||||
const TypedValueRegion* R) {
|
const TypedValueRegion* R) {
|
||||||
assert(R->getValueType()->isStructureOrClassType());
|
assert(R->getValueType()->isStructureOrClassType());
|
||||||
|
|
||||||
|
// If we already have a lazy binding, don't create a new one.
|
||||||
|
RegionBindings B = GetRegionBindings(store);
|
||||||
|
BindingKey K = BindingKey::Make(R, BindingKey::Default);
|
||||||
|
if (const nonloc::LazyCompoundVal *V =
|
||||||
|
dyn_cast_or_null<nonloc::LazyCompoundVal>(lookup(B, K))) {
|
||||||
|
return *V;
|
||||||
|
}
|
||||||
|
|
||||||
return svalBuilder.makeLazyCompoundVal(StoreRef(store, *this), R);
|
return svalBuilder.makeLazyCompoundVal(StoreRef(store, *this), R);
|
||||||
}
|
}
|
||||||
|
|
||||||
SVal RegionStoreManager::getBindingForArray(Store store,
|
SVal RegionStoreManager::getBindingForArray(Store store,
|
||||||
const TypedValueRegion * R) {
|
const TypedValueRegion * R) {
|
||||||
assert(Ctx.getAsConstantArrayType(R->getValueType()));
|
assert(Ctx.getAsConstantArrayType(R->getValueType()));
|
||||||
|
|
||||||
|
// If we already have a lazy binding, don't create a new one.
|
||||||
|
RegionBindings B = GetRegionBindings(store);
|
||||||
|
BindingKey K = BindingKey::Make(R, BindingKey::Default);
|
||||||
|
if (const nonloc::LazyCompoundVal *V =
|
||||||
|
dyn_cast_or_null<nonloc::LazyCompoundVal>(lookup(B, K))) {
|
||||||
|
return *V;
|
||||||
|
}
|
||||||
|
|
||||||
return svalBuilder.makeLazyCompoundVal(StoreRef(store, *this), R);
|
return svalBuilder.makeLazyCompoundVal(StoreRef(store, *this), R);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue