- Oct 25, 2011
-
-
Bill Wendling authored
In SjLj EH, the jump to the landing pad is not done explicitly through a branch statement. The EH landing pad is added as a successor to the throwing BB. Because of that however, the branch folding pass could mistakenly think that it could merge the throwing BB with another BB. This isn't safe to do. <rdar://problem/10334833> llvm-svn: 142891
-
Jim Grosbach authored
Four entry register lists. llvm-svn: 142882
-
Dan Gohman authored
llvm-svn: 142880
-
Dan Gohman authored
llvm-svn: 142878
-
Jim Grosbach authored
llvm-svn: 142877
-
Jim Grosbach authored
Three entry register list variation. llvm-svn: 142876
-
Owen Anderson authored
More fixes and improvements to MachO relocation pretty-printing, particular for x86 and x86_64 relocations with addends. llvm-svn: 142875
-
Eli Friedman authored
llvm-svn: 142871
-
Bill Wendling authored
table. A hidden variable could potentially end up in both lists. <rdar://problem/10336715> llvm-svn: 142869
-
Evan Cheng authored
llvm-svn: 142867
-
Jim Grosbach authored
One and two length register list variants. llvm-svn: 142861
-
- Oct 24, 2011
-
-
Jim Grosbach authored
Split am6offset into fixed and register offset variants so the instruction encodings are explicit rather than relying an a magic reg0 marker. Needed to being able to parse these. llvm-svn: 142853
-
Owen Anderson authored
llvm-svn: 142852
-
Nick Lewycky authored
when deciding that the loop has stopped evolving. Fixes miscompile in the gcc torture testsuite! llvm-svn: 142843
-
Eli Friedman authored
llvm-svn: 142841
-
Owen Anderson authored
llvm-svn: 142840
-
Douglas Gregor authored
llvm-svn: 142822
-
Douglas Gregor authored
llvm-svn: 142821
-
Owen Anderson authored
Fix a NEON disassembly case that was broken in the recent refactorings. As more of this code gets refactored, a lot of these manual decoding hooks should get smaller and/or go away entirely. llvm-svn: 142817
-
Dan Gohman authored
physreg dependencies, and upcoming codegen changes will require proper physreg dependence handling. llvm-svn: 142816
-
Dan Gohman authored
llvm-svn: 142815
-
Dan Gohman authored
use of Sched::ILP instead, as Sched::Latency is going away. llvm-svn: 142813
-
Dan Gohman authored
as the Latency scheduler is going away. llvm-svn: 142811
-
Dan Gohman authored
is going away. llvm-svn: 142810
-
Jim Grosbach authored
PR11220 llvm-svn: 142801
-
Bill Wendling authored
llvm-svn: 142800
-
Chandler Carruth authored
used it. Fixes an unused variable warning from GCC on release builds. llvm-svn: 142799
-
Chandler Carruth authored
introduce no-return or unreachable heuristics. The return heuristics from the Ball and Larus paper don't work well in practice as they pessimize early return paths. The only good hitrate return heuristics are those for: - NULL return - Constant return - negative integer return Only the last of these three can possibly require significant code for the returning block, and even the last is fairly rare and usually also a constant. As a consequence, even for the cold return paths, there is little code on that return path, and so little code density to be gained by sinking it. The places where sinking these blocks is valuable (inner loops) will already be weighted appropriately as the edge is a loop-exit branch. All of this aside, early returns are nearly as common as all three of these return categories, and should actually be predicted as taken! Rather than muddy the waters of the static predictions, just remain silent on returns and let the CFG itself dictate any layout or other issues. However, the return heuristic was flagging one very important case: unreachable. Unfortunately it still gave a 1/4 chance of the branch-to-unreachable occuring. It also didn't do a rigorous job of finding those blocks which post-dominate an unreachable block. This patch builds a more powerful analysis that should flag all branches to blocks known to then reach unreachable. It also has better worst-case runtime complexity by not looping through successors for each block. The previous code would perform an N^2 walk in the event of a single entry block branching to N successors with a switch where each successor falls through to the next and they finally fall through to a return. Test case added for noreturn heuristics. Also doxygen comments improved along the way. llvm-svn: 142793
-
Nick Lewycky authored
Enhance SCEV's brute force loop analysis to handle multiple PHI nodes in the loop header when computing the trip count. With this, we now constant evaluate: struct ListNode { const struct ListNode *next; int i; }; static const struct ListNode node1 = {0, 1}; static const struct ListNode node2 = {&node1, 2}; static const struct ListNode node3 = {&node2, 3}; int test() { int sum = 0; for (const struct ListNode *n = &node3; n != 0; n = n->next) sum += n->i; return sum; } llvm-svn: 142790
-
Nick Lewycky authored
state. Furthermore, they might not have two operands. This fixes the underlying issue behind the crashes introduced in r142781. llvm-svn: 142788
-
Nick Lewycky authored
instructions. This doesn't introduce any optimizations we weren't doing before (except potentially due to pass ordering issues), now passes will eliminate them sooner as part of their own cleanups. llvm-svn: 142787
-
Nick Lewycky authored
Assertion `i_nocapture < OperandTraits<PHINode>::operands(this) && "getOperand() out of range!"' failed. coming out of indvars. llvm-svn: 142786
-
NAKAMURA Takumi authored
llvm-svn: 142785
-
Chandler Carruth authored
a single class. Previously it was split between two classes, one internal and one external. The concern seemed to center around exposing the weights used, but those can remain confined to the implementation file. Having a single class to maintain the state and analyses in use will also simplify several of the enhancements I want to make to our static heuristics. llvm-svn: 142783
-
Nick Lewycky authored
loop header when computing the trip count. With this, we now constant evaluate: struct ListNode { const struct ListNode *next; int i; }; static const struct ListNode node1 = {0, 1}; static const struct ListNode node2 = {&node1, 2}; static const struct ListNode node3 = {&node2, 3}; int test() { int sum = 0; for (const struct ListNode *n = &node3; n != 0; n = n->next) sum += n->i; return sum; } llvm-svn: 142781
-
Chandler Carruth authored
extraneous whitespace. Trying to clean-up this pass as much as I can before I start making functional changes. llvm-svn: 142780
-
Craig Topper authored
llvm-svn: 142779
-
- Oct 23, 2011
-
-
Chandler Carruth authored
to bring it under direct test instead of merely indirectly testing it in the BlockFrequencyInfo pass. The next step is to start adding tests for the various heuristics employed, and to start fixing those heuristics once they're under test. llvm-svn: 142778
-
Chandler Carruth authored
to get important constant branch probabilities and use them for finding the best branch out of a set of possibilities. llvm-svn: 142762
-
Chandler Carruth authored
llvm-svn: 142761
-