Bob Wilson
9e3d48f10d
Fix pr4195: When iterating through predecessor blocks, break out of the loop
...
after finding the (unique) layout predecessor. Sometimes a block may be listed
more than once, and processing it more than once in this loop can lead to
inconsistent values for FtTBB/FtFBB, since the AnalyzeBranch method does not
clear these values. There's no point in continuing the loop regardless.
The testcase for this is reduced from the 2003-05-02-DependentPHI SingleSource
test.
llvm-svn: 71536
2009-05-12 03:48:10 +00:00
Evan Cheng
9085126bee
Oops. Don't forget to align single bb loops.
...
llvm-svn: 71363
2009-05-09 19:18:01 +00:00
Evan Cheng
51fa9c7138
Enable loop bb placement optimization.
...
llvm-svn: 71291
2009-05-08 23:35:49 +00:00
Evan Cheng
6e9959e327
Don't align loop header unless the loop back edge is below the header.
...
llvm-svn: 71242
2009-05-08 19:01:44 +00:00
Evan Cheng
5b9b33bcac
Reverse branch condition only when there is a conditional branch.
...
llvm-svn: 71214
2009-05-08 09:35:53 +00:00
Nick Lewycky
b873ed672d
Add explicit braces to disambiguate nested if/else. Removes a warning.
...
llvm-svn: 71211
2009-05-08 06:57:41 +00:00
Evan Cheng
2fa281106a
Optimize code placement in loop to eliminate unconditional branches or move unconditional branch to the outside of the loop. e.g.
...
/// A:
/// ...
/// <fallthrough to B>
///
/// B: --> loop header
/// ...
/// jcc <cond> C, [exit]
///
/// C:
/// ...
/// jmp B
///
/// ==>
///
/// A:
/// ...
/// jmp B
///
/// C: --> new loop header
/// ...
/// <fallthough to B>
///
/// B:
/// ...
/// jcc <cond> C, [exit]
llvm-svn: 71209
2009-05-08 06:34:09 +00:00
Evan Cheng
143bae5dcd
Code refactoring.
...
llvm-svn: 71151
2009-05-07 05:49:39 +00:00
Evan Cheng
f356a89e92
Rename "loop aligner" pass to "code placement optimization" pass.
...
llvm-svn: 71150
2009-05-07 05:42:24 +00:00