- Dec 22, 2008
-
-
Bill Wendling authored
llvm-svn: 61349
-
Bill Wendling authored
truely deleted. These will be expanded with further checks of all of the data structures. llvm-svn: 61347
-
- Dec 21, 2008
-
-
Nick Lewycky authored
llvm-svn: 61297
-
- Dec 20, 2008
-
-
Nick Lewycky authored
our optz'n will apply to it, then build the replacement vector only if needed. llvm-svn: 61279
-
- Dec 19, 2008
-
-
Evan Cheng authored
- CodeGenPrepare does not split loop back edges but it only knows about back edges of single block loops. It now does a DFS walk to find loop back edges. - Use SplitBlockPredecessors to factor out common predecessors of the critical edge destination. This is disabled for now due to some regressions. llvm-svn: 61248
-
- Dec 18, 2008
-
-
Bill Wendling authored
llvm-svn: 61222
-
Bill Wendling authored
llvm-svn: 61219
-
Nick Lewycky authored
Simplifying the sdiv might allow further simplifications for our users. llvm-svn: 61196
-
Nick Lewycky authored
llvm-svn: 61195
-
Chris Lattner authored
bit from the original function to the cloned one. llvm-svn: 61194
-
Dale Johannesen authored
llvm-svn: 61181
-
Dale Johannesen authored
my last patch to this file. The issue there was that all uses of an IV inside a loop are actually references to Base[IV*2], and there was one use outside that was the same but LSR didn't see the base or the scaling because it didn't recurse into uses outside the loop; thus, it used base+IV*scale mode inside the loop instead of pulling base out of the loop. This was extra bad because register pressure later forced both base and IV into memory. Doing that recursion, at least enough to figure out addressing modes, is a good idea in general; the change in AddUsersIfInteresting does this. However, there were side effects.... It is also possible for recursing outside the loop to introduce another IV where there was only 1 before (if the refs inside are not scaled and the ref outside is). I don't think this is a common case, but it's in the testsuite. It is right to be very aggressive about getting rid of such introduced IVs (CheckForIVReuse and the handling of nonzero RewriteFactor in StrengthReduceStridedIVUsers). In the testcase in question the new IV produced this way has both a nonconstant stride and a nonzero base, neither of which was handled before. (This patch does not handle all the cases where this can happen.) And when inserting new code that feeds into a PHI, it's right to put such code at the original location rather than in the PHI's immediate predecessor(s) when the original location is outside the loop (a case that couldn't happen before) (RewriteInstructionToUseNewBase); better to avoid making multiple copies of it in this case. Everything above is exercised in CodeGen/X86/lsr-negative-stride.ll (and ifcvt4 in ARM which is the same IR). llvm-svn: 61178
-
Chris Lattner authored
and safe and orthogonal from turning off load pre. llvm-svn: 61177
-
Chris Lattner authored
llvm-svn: 61175
-
Bill Wendling authored
with everyone's favorite error messages: Comparing stages 2 and 3 warning: ./cc1-checksum.o differs warning: ./cc1plus-checksum.o differs Bootstrap comparison failure! ./c-decl.o differs ./cp/decl.o differs ./df-core.o differs ./gcc.o differs ./i386.o differs ./stor-layout.o differs ./tree-pretty-print.o differs ./tree.o differs make[2]: *** [compare] Error 1 make[1]: *** [stage3-bubble] Error 2 See PR3227. llvm-svn: 61169
-
- Dec 17, 2008
-
-
Chris Lattner authored
iterator invalidation problems. llvm-svn: 61124
-
Chris Lattner authored
nodes. This allows it to do fairly general phi insertion if a load from a pointer global wants to be SRAd but the load is used by (recursive) phi nodes. This fixes a pessimization on ppc introduced by Load PRE. llvm-svn: 61123
-
- Dec 16, 2008
-
-
Dale Johannesen authored
can be negative. Keep track of whether all uses of an IV are outside the loop. Some cosmetics; no functional change. llvm-svn: 61109
-
Chris Lattner authored
the load multiple times, make sure the check the uses of the PHI to ensure they are transformable. llvm-svn: 61102
-
Chris Lattner authored
llvm-svn: 61101
-
Eli Friedman authored
consistently for deleting branches. In addition to being slightly more readable, this makes SimplifyCFG a bit better about cleaning up after itself when it makes conditions unused. llvm-svn: 61100
-
Chris Lattner authored
llvm-svn: 61081
-
- Dec 15, 2008
-
-
Chris Lattner authored
variable sized array allocations. llvm-svn: 61051
-
Chris Lattner authored
llvm-svn: 61047
-
Chris Lattner authored
llvm-svn: 61046
-
Chris Lattner authored
Use GetElementPtrInst::hasAllZeroIndices where possible. llvm-svn: 61045
-
Chris Lattner authored
CFG when there is exactly one predecessor where the load is not available. This is designed to not increase code size but still eliminate partially redundant loads. This fires 1765 times on 403.gcc even though it doesn't do critical edge splitting yet (the most common reason for it to fail). llvm-svn: 61027
-
Owen Anderson authored
llvm-svn: 61024
-
Chris Lattner authored
cleans up the generated code a bit. This should have the added benefit of not randomly renaming functions/globals like my previous patch did. :) llvm-svn: 61023
-
Owen Anderson authored
Add support for slow-path GVN with full phi construction for scalars. This is disabled for now, as it actually pessimizes code in the abscence of phi translation for load elimination. This slow down GVN a bit, by about 2% on 403.gcc. llvm-svn: 61021
-
- Dec 14, 2008
-
-
Chris Lattner authored
llvm-svn: 61012
-
Owen Anderson authored
llvm-svn: 61009
-
- Dec 13, 2008
-
-
Bill Wendling authored
llvm[2]: Linking Release executable opt (without symbols) ... Undefined symbols: "llvm::APFloat::IEEEsingle", referenced from: __ZN4llvm7APFloat10IEEEsingleE$non_lazy_ptr in libLLVMCore.a(Constants.o) __ZN4llvm7APFloat10IEEEsingleE$non_lazy_ptr in libLLVMCore.a(AsmWriter.o) __ZN4llvm7APFloat10IEEEsingleE$non_lazy_ptr in libLLVMCore.a(ConstantFold.o) "llvm::APFloat::IEEEdouble", referenced from: __ZN4llvm7APFloat10IEEEdoubleE$non_lazy_ptr in libLLVMCore.a(Constants.o) __ZN4llvm7APFloat10IEEEdoubleE$non_lazy_ptr in libLLVMCore.a(AsmWriter.o) __ZN4llvm7APFloat10IEEEdoubleE$non_lazy_ptr in libLLVMCore.a(ConstantFold.o) ld: symbol(s) not found This is in release mode. To replicate, compile llvm and llvm-gcc in optimized mode. Then build llvm, in optimized mode, with the newly created compiler. llvm-svn: 60977
-
Chris Lattner authored
a pretification of the IR. llvm-svn: 60973
-
Misha Brukman authored
llvm-svn: 60971
-
- Dec 09, 2008
-
-
Chris Lattner authored
of a pointer. This allows is to catch more equivalencies. For example, the type_lists_compatible_p function used to require two iterations of the gvn pass (!) to delete its 18 redundant loads because the first pass would CSE all the addressing computation cruft, which would unblock the second memdep/gvn passes from recognizing them. This change allows memdep/gvn to catch all 18 when run just once on the function (as is typical :) instead of just 3. On all of 403.gcc, this bumps up the # reundandancies found from: 63 gvn - Number of instructions PRE'd 153991 gvn - Number of instructions deleted 50069 gvn - Number of loads deleted to: 63 gvn - Number of instructions PRE'd 154137 gvn - Number of instructions deleted 50185 gvn - Number of loads deleted +120 loads deleted isn't bad. llvm-svn: 60799
-
Chris Lattner authored
pointer stuff from it, simplifying the code a bit. llvm-svn: 60783
-
Chris Lattner authored
MemDep::getNonLocalPointerDependency method. There are some open issues with this (missed optimizations) and plenty of future work, but this does allow GVN to eliminate *slightly* more loads (49246 vs 49033). Switching over now allows simplification of the other code path in memdep. llvm-svn: 60780
-
Chris Lattner authored
llvm-svn: 60779
-
Chris Lattner authored
on test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad. llvm-svn: 60739
-