[PATCH] D149668: [ShrinkWrap] Use underlying object to rule out stack access.
Jonathon Penix via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri May 12 08:40:53 PDT 2023
jpenix-quic added inline comments.
================
Comment at: llvm/lib/CodeGen/ShrinkWrap.cpp:286
+ if (MI.mayLoadOrStore() && (MI.isCall() || MI.hasUnmodeledSideEffects() ||
+ !all_of(MI.memoperands(), IsKnownNonStackPtr)))
return true;
----------------
fhahn wrote:
> jpenix-quic wrote:
> > Hi @fhahn, does this work as expected when MI.memoperands() is empty? If I understand correctly, all_of will return true in that case which I don't think is what we want (my understanding is we need to be conservative if memoperands() is empty). That said, I struggled to find a test where this causes an issue here, so I'm not sure if this is actually an issue in practice or if any possible situations are covered by the other checks, etc.
> >
> > Do you have thoughts on this? If it is an issue, I imagine we could just add an extra check for the empty case or something similar.
> @jpenix-quic I had a closer look and added a case where missing memoperands cause incorrect results. It's a bit artificial as memory operands are dropped from instructions that usually have them, but it illustrates the problem: ac9e9594af37
>
> I also pushed a fix to treat instructions without memoperands conservatively: d0718ff410cc
>
>
Great, thank you for looking into and handling this!
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D149668/new/
https://reviews.llvm.org/D149668
More information about the llvm-commits
mailing list