================
@@ -1206,11 +1214,21 @@ struct DSEState {
return OW_None;
}
- bool isInvisibleToCallerAfterRet(const Value *V) {
+ bool isInvisibleToCallerAfterRet(const Value *V, const Value *Ptr,
+ const LocationSize StoreSize) {
if (isa<AllocaInst>(V))
return true;
auto I = InvisibleToCallerAfterRet.insert({V, false});
+ if (I.second && InvisibleToCallerAfterRetBounded.contains(V)) {
+ int64_t ValueOffset;
+ const Value *BaseValue =
+ GetPointerBaseWithConstantOffset(Ptr, ValueOffset, DL);
+ assert(BaseValue == V);
+ if (ValueOffset + StoreSize.toRaw() <
+ InvisibleToCallerAfterRetBounded[BaseValue])
----------------
antoniofrighetto wrote:
Should use getValue() instead (don't think it's necessary to check isPrecise()
here though).
Also, the store may still be eliminated with `<=`, right? (E.g., a store at
offset 0 with size 8 and dead_on_return(8)).
https://github.com/llvm/llvm-project/pull/173694
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits