[DSE,MemorySSA] Do not use callCapturesBefore in isReadClobber.

Using callCapturesBefore potentially improves the precision and the
number of stores we can remove. But in practice, it seems to have very
little impact in terms of stores removed. For example, for
SPEC2000/SPEC2006/MultiSource with -O3 -flto, ~50 more stores are
removed (out of ~26900 stores removed). But in terms of compile-time, it
is very expensive and the patch gives substantial compile-time
improvements: Geomean O3 -0.24%, ReleaseThinLTO -0.47%, ReleaseLTO-g
-0.39%.

http://llvm-compile-time-tracker.com/compare.php?from=612a0bff88ed906c83b82f079d4c49e5fecfb9d0&to=e6c86b96d20d97dd88e903a409bd8d39b6114312&stat=instructions
This commit is contained in:
Florian Hahn 2020-08-18 11:12:31 +01:00
parent c9b45ce1fd
commit d1a1cce5b1
1 changed files with 5 additions and 5 deletions

View File

@ -1762,11 +1762,11 @@ struct DSEState {
if (CB->onlyAccessesInaccessibleMemory()) if (CB->onlyAccessesInaccessibleMemory())
return false; return false;
ModRefInfo MR = BatchAA.getModRefInfo(UseInst, DefLoc); // NOTE: For calls, the number of stores removed could be slightly improved
// If necessary, perform additional analysis. // by using AA.callCapturesBefore(UseInst, DefLoc, &DT), but that showed to
if (isRefSet(MR)) // be expensive compared to the benefits in practice. For now, avoid more
MR = AA.callCapturesBefore(UseInst, DefLoc, &DT); // expensive analysis to limit compile-time.
return isRefSet(MR); return isRefSet(BatchAA.getModRefInfo(UseInst, DefLoc));
} }
// Find a MemoryDef writing to \p DefLoc and dominating \p Current, with no // Find a MemoryDef writing to \p DefLoc and dominating \p Current, with no