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.
LoadShorts-simple2.ll (1.92 KB)
LoadShorts-simple2.log (16.5 KB)