- Jan 08, 2011
-
-
Cameron Zwarich authored
llvm-svn: 123065
-
Cameron Zwarich authored
they all ready do). This removes two dominator recomputations prior to isel, which is a 1% improvement in total llc time for 403.gcc. The only potentially suspect thing is making GCStrategy recompute dominators if it used a custom lowering strategy. llvm-svn: 123064
-
Cameron Zwarich authored
top of subloop headers, as the phi uses logically occur outside of the subloop. llvm-svn: 123062
-
Chris Lattner authored
them into the loop preheader, eliminating silly instructions like "icmp i32 0, 100" in fixed tripcount loops. This also better exposes the bigger problem with loop rotate that I'd like to fix: once this has been folded, the duplicated conditional branch *often* turns into an uncond branch. Not aggressively handling this is pessimizing later loop optimizations somethin' fierce by making "dominates all exit blocks" checks fail. llvm-svn: 123060
-
Chris Lattner authored
1. Take a flags argument instead of a bool. This makes it more clear to the reader what it is used for. 2. Add a flag that says that "remapping a value not in the map is ok". 3. Reimplement MapValue to share a bunch of code and be a lot more efficient. For lookup failures, don't drop null values into the map. 4. Using the new flag a bunch of code can vaporize in LinkModules and LoopUnswitch, kill it. No functionality change. llvm-svn: 123058
-
Chris Lattner authored
map from ValueMapper.h (giving us access to its utilities) and add a fastpath in the loop rotation code, avoiding expensive ssa updator manipulation for values with nothing to update. llvm-svn: 123057
-
- Jan 06, 2011
-
-
Cameron Zwarich authored
OptimizeInst() so that they can be used on a worklist instruction. llvm-svn: 122945
-
Cameron Zwarich authored
llvm-svn: 122944
-
Cameron Zwarich authored
into a separate function, so that it can be called from a loop using a worklist rather than a loop traversing a whole basic block. llvm-svn: 122943
-
Jakob Stoklund Olesen authored
Simplify RALinScan::DowngradeRegister with TRI::getOverlaps while we are there. llvm-svn: 122940
-
Cameron Zwarich authored
worklist, the key will need to become std::pair<BasicBlock*, Value*>. llvm-svn: 122932
-
- Jan 05, 2011
-
-
Cameron Zwarich authored
llvm-svn: 122891
-
Cameron Zwarich authored
regressing code quality. llvm-svn: 122887
-
Cameron Zwarich authored
llvm-svn: 122876
-
Cameron Zwarich authored
step is to only process instructions in subloops if they have been modified by an earlier simplification. llvm-svn: 122869
-
Cameron Zwarich authored
skipping them, but it should probably use a worklist and only revisit those instructions in subloops that have actually changed. It should probably also use a worklist after the first iteration like instsimplify now does. Regardless, it's only 0.3% of opt -O2 time on 403.gcc if it replaces the instcombine placed in the middle of the loop passes. llvm-svn: 122868
-
- Jan 04, 2011
-
-
Owen Anderson authored
Don't bother value numbering instructions with void types in GVN. In theory this should allow us to insert fewer things into the value numbering maps, but any speedup is beneath the noise threshold on my machine on 403.gcc. llvm-svn: 122844
-
Owen Anderson authored
llvm-svn: 122828
-
Owen Anderson authored
llvm-svn: 122827
-
Owen Anderson authored
llvm-svn: 122826
-
Owen Anderson authored
Clarify terminology, settling on referring to what was the "number table" as the "leader table", and rename methods to make it much more clear what they're doing. llvm-svn: 122823
-
Owen Anderson authored
llvm-svn: 122822
-
Owen Anderson authored
Branch instructions don't produce values, so there's no need to generate a value number for them. This avoids adding them to the various value numbering tables, resulting in a minor (~3%) speedup for GVN on 40.gcc. llvm-svn: 122819
-
Owen Anderson authored
llvm-svn: 122817
-
Cameron Zwarich authored
llvm-svn: 122815
-
Chris Lattner authored
when safe. The testcase is basically this nested loop: void foo(char *X) { for (int i = 0; i != 100; ++i) for (int j = 0; j != 100; ++j) X[j+i*100] = 0; } which gets turned into a single memset now. clang -O3 doesn't optimize this yet though due to a phase ordering issue I haven't analyzed yet. llvm-svn: 122806
-
Chris Lattner authored
instruction *after* the store. The store will always be deleted if the transformation kicks in, so we'd do an N^2 scan of every loop block. Whoops. llvm-svn: 122805
-
Cameron Zwarich authored
CodeGenPrepare (which is the default behavior). llvm-svn: 122801
-
Cameron Zwarich authored
FunctionPass. It probably doesn't have a reason to be a LoopPass, as it will probably drop the simple fixed point and either use RPO iteration or Duncan's approach in instsimplify of only revisiting instructions that have changed. The next step is to preserve LoopSimplify. This looks like it won't be too hard, although the pass manager doesn't actually seem to respect when non-loop passes claim to preserve LCSSA or LoopSimplify. This will have to be fixed. llvm-svn: 122791
-
Chris Lattner authored
stop setting NSW: signed overflow is possible. Thanks to Dan for pointing these out. llvm-svn: 122790
-
Owen Anderson authored
llvm-svn: 122788
-
Owen Anderson authored
Use the new addEscapingValue callback to update GlobalsModRef when GVN adds PHIs of GEPs. For the moment, have GlobalsModRef handle this conservatively by simply removing the value from its maps. llvm-svn: 122787
-
Chris Lattner authored
invalidated by stores, so they can be handled as 'simple' operations. llvm-svn: 122785
-
- Jan 03, 2011
-
-
Owen Anderson authored
almost-but-not-quite-identical code. No intended functionality change. llvm-svn: 122760
-
Chris Lattner authored
that are allowed to have metadata operands are intrinsic calls, and the only ones that take metadata currently return void. Just reject all void instructions, which should not be value numbered anyway. To future proof things, add an assert to the getHashValue impl for calls to check that metadata operands aren't present. llvm-svn: 122759
-
Chris Lattner authored
nested values, so they can change and drop to null, which can change the hash and cause havok. It turns out that it isn't a good idea to value number stuff with metadata operands anyway, so... don't. llvm-svn: 122758
-
Cameron Zwarich authored
capacity on the Visited SmallPtrSet. On 403.gcc, this is about a 4.5% speedup of CodeGenPrepare time (which itself is 10% of time spent in the backend). This is progress towards PR8889. llvm-svn: 122741
-
Chris Lattner authored
elimination as well. This deletes 60 stores in 176.gcc that largely come from bitfield code. llvm-svn: 122736
-
Chris Lattner authored
speeding earlycse up by 6%. llvm-svn: 122733
-
Chris Lattner authored
store->load forwarding. This allows EarlyCSE to zap 600 more loads from 176.gcc. llvm-svn: 122732
-