mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-16 16:16:45 +00:00
Fix LSR compile time.
This is a simple fix that brings the compilation time from 5min to 5s on a specific real-world example. It's a large chain of computation in a crypto routine (always a problem for SCEV). A unit test is not feasible and there would be no way to check it. The fix is just basic good practice for dealing with SCEVs, there's no risk of regression. Patch by Daniel Reynaud! llvm-svn: 220622
This commit is contained in:
parent
4ede6cc2e1
commit
b8b40e0564
@ -3117,10 +3117,15 @@ void
|
||||
LSRInstance::CollectLoopInvariantFixupsAndFormulae() {
|
||||
SmallVector<const SCEV *, 8> Worklist(RegUses.begin(), RegUses.end());
|
||||
SmallPtrSet<const SCEV *, 8> Inserted;
|
||||
SmallPtrSet<const SCEV *, 32> Done;
|
||||
|
||||
while (!Worklist.empty()) {
|
||||
const SCEV *S = Worklist.pop_back_val();
|
||||
|
||||
// Don't process the same SCEV twice
|
||||
if (!Done.insert(S))
|
||||
continue;
|
||||
|
||||
if (const SCEVNAryExpr *N = dyn_cast<SCEVNAryExpr>(S))
|
||||
Worklist.append(N->op_begin(), N->op_end());
|
||||
else if (const SCEVCastExpr *C = dyn_cast<SCEVCastExpr>(S))
|
||||
|
Loading…
Reference in New Issue
Block a user