diff options
| author | Eric Christopher <echristo@gmail.com> | 2016-01-04 23:18:58 +0000 |
|---|---|---|
| committer | Eric Christopher <echristo@gmail.com> | 2016-01-04 23:18:58 +0000 |
| commit | 49a7d6c473f0fdd7d7a9356b83524ec2e95ec1e5 (patch) | |
| tree | cd6c3629b5d24d76a0a8ffb6d928097e08c44208 /llvm/lib/CodeGen | |
| parent | b33f3a239a073c2c6c17b1e9f285069fd6227dd5 (diff) | |
| download | bcm5719-llvm-49a7d6c473f0fdd7d7a9356b83524ec2e95ec1e5.tar.gz bcm5719-llvm-49a7d6c473f0fdd7d7a9356b83524ec2e95ec1e5.zip | |
Clarify that the bypassSlowDivision optimization operates on a single BB [v2]
Update some comments to be more explicit.
Change bypassSlowDivision and the functions it calls so that they take
BasicBlock*s and Instruction*s, rather than Function::iterator&s and
BasicBlock::iterator&s.
Change the APIs so that the caller is responsible for updating the
iterator, rather than the callee. This makes control flow much easier
to follow.
Patch by Justin Lebar!
llvm-svn: 256789
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/CodeGenPrepare.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index 5844124d856..4120b454451 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -225,8 +225,14 @@ bool CodeGenPrepare::runOnFunction(Function &F) { if (!OptSize && TLI && TLI->isSlowDivBypassed()) { const DenseMap<unsigned int, unsigned int> &BypassWidths = TLI->getBypassSlowDivWidths(); - for (Function::iterator I = F.begin(); I != F.end(); I++) - EverMadeChange |= bypassSlowDivision(F, I, BypassWidths); + BasicBlock* BB = &*F.begin(); + while (BB != nullptr) { + // bypassSlowDivision may create new BBs, but we don't want to reapply the + // optimization to those blocks. + BasicBlock* Next = BB->getNextNode(); + EverMadeChange |= bypassSlowDivision(BB, BypassWidths); + BB = Next; + } } // Eliminate blocks that contain only PHI nodes and an |

