[llvm-dev] [MemorySSA] Potential CachingMemorySSAWalker bug

Geoff Berry via llvm-dev llvm-dev at lists.llvm.org
Mon May 2 12:22:48 PDT 2016


I've put my changes to EarlyCSE that trigger this case up on phab here: 
http://reviews.llvm.org/D19821.  These changes depend on 
http://reviews.llvm.org/D19664 so that will need to be applied first.  
With these changes applied, the original attached .ll file should 
trigger this bug when compiled with opt -early-cse -early-cse-use-memoryssa

On 5/2/2016 2:34 PM, Daniel Berlin wrote:
> (IE the thing we cache has to be the same no matter which version is 
> called. If it can't be for some reason, we can't cache results from 
> both in the same cache. If it can be, i suspect there is a bug in 
> making that work :P)
>
> I suspect the latter, and not the former.
>
>
> On Mon, May 2, 2016 at 11:32 AM, Daniel Berlin <dberlin at dberlin.org 
> <mailto:dberlin at dberlin.org>> wrote:
>
>     I suspect something is pulling the RHS of the memorydef and
>     caching it for calls it should not be used for.
>     In particular, i suspect we are about to discover we can't cache
>     the results from both versions of getClobberingMemoryAccess
>     together, or that the cache is not always getting consistently
>     written.
>
>
>
>
>     On Mon, May 2, 2016 at 11:16 AM, George Burgess IV
>     <george.burgess.iv at gmail.com <mailto:george.burgess.iv at gmail.com>>
>     wrote:
>
>         Yeah, that sounds like a fun bug. I'll take a look later today
>         and see what I can find out. :)
>
>         On Fri, Apr 29, 2016 at 2:55 PM, Geoff Berry
>         <gberry at codeaurora.org <mailto:gberry at codeaurora.org>> wrote:
>
>             Hi guys,
>
>             I think I have run into another CachingMemorySSAWalker
>             cache bug. It's a bit tricky to reproduce, so I'd like to
>             start by trying to show you what is happening when running
>             EarlyCSE with my local changes to use MemorySSA.  I've
>             attached a debug log that shows that the value returned by
>             getClobberingMemoryAccess(Inst) after a call to
>             removeMemoryAccess is wrong.  The MemorySSA node in
>             question is MemoryUse(7), and the corruption happens after
>             a call to remove MemoryUse(2), at which point its clobber
>             value changes to '1 = MemoryDef(liveOnEntry)'.  The
>             interesting thing is that is doesn't seem to be the first
>             call to getClobberingMemoryAccess after the removal that
>             causes the corruption, but rather the second.  You'll
>             notice that I added calls to getClobberingMemoryAccess
>             when doing MSSA.dump(), which is what I'm using to attempt
>             to figure out when the cache gets corrupted.
>
>             Hopefully this is enough information to debug the
>             problem.  If not perhaps we can look at getting my
>             EarlyCSE changes checked in in a disabled state so you can
>             reproduce the problem directly.  I'm also happy to help
>             debug it farther.
>
>             -- 
>             Geoff Berry
>             Employee of Qualcomm Innovation Center, Inc.
>               Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>
>
>
>

-- 
Geoff Berry
Employee of Qualcomm Innovation Center, Inc.
  Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160502/eb576e30/attachment.html>


More information about the llvm-dev mailing list