llvm-project/llvm/lib/Transforms/Scalar
Chris Lattner 1db9bbe802 Implement PRE of loads in the GVN pass with a pretty cheap and
straight-forward implementation.  This does not require any extra
alias analysis queries beyond what we already do for non-local loads.

Some programs really really like load PRE.  For example, SPASS triggers
this ~1000 times, ~300 times in 255.vortex, and ~1500 times on 403.gcc.

The biggest limitation to the implementation is that it does not split
critical edges.  This is a huge killer on many programs and should be
addressed after the initial patch is enabled by default.

The implementation of this should incidentally speed up rejection of 
non-local loads because it avoids creating the repl densemap in cases 
when it won't be used for fully redundant loads.

This is currently disabled by default.
Before I turn this on, I need to fix a couple of miscompilations in
the testsuite, look at compile time performance numbers, and look at
perf impact.  This is pretty close to ready though.

llvm-svn: 60408
2008-12-02 08:16:11 +00:00
..
ADCE.cpp Let instcombiner remove redundant dbg intrinsics. 2008-11-19 18:59:41 +00:00
BasicBlockPlacement.cpp Tidy up several unbeseeming casts from pointer to intptr_t. 2008-09-04 17:05:41 +00:00
CMakeLists.txt CMake: updated list of source files. 2008-11-05 00:11:22 +00:00
CodeGenPrepare.cpp don't call MergeBasicBlockIntoOnlyPred on a block whose only 2008-11-28 19:54:49 +00:00
CondPropagate.cpp Tidy up several unbeseeming casts from pointer to intptr_t. 2008-09-04 17:05:41 +00:00
ConstantProp.cpp Tidy up several unbeseeming casts from pointer to intptr_t. 2008-09-04 17:05:41 +00:00
DCE.cpp simplify this logic. 2008-11-27 22:46:09 +00:00
DeadStoreElimination.cpp Fix a thinko that manifested as a crash on clamav last night. 2008-11-29 20:29:04 +00:00
GVN.cpp Implement PRE of loads in the GVN pass with a pretty cheap and 2008-12-02 08:16:11 +00:00
GVNPRE.cpp Tidy up several unbeseeming casts from pointer to intptr_t. 2008-09-04 17:05:41 +00:00
IndVarSimplify.cpp Revert r60042. IndVarSimplify should check if APFloat is PPCDoubleDouble first before trying to convert it to an integer. 2008-11-26 01:11:57 +00:00
InstructionCombining.cpp Remove some errors that crept in. No functionality change. 2008-12-02 06:24:20 +00:00
JumpThreading.cpp switch a couple more calls to use array_pod_sort. 2008-12-01 06:52:57 +00:00
LICM.cpp Change create*Pass factory functions to return Pass* instead of 2008-10-22 23:32:42 +00:00
LoopDeletion.cpp Change create*Pass factory functions to return Pass* instead of 2008-10-22 23:32:42 +00:00
LoopIndexSplit.cpp If the sign of exit condition and split condition does not match 2008-11-10 19:48:34 +00:00
LoopRotation.cpp Change create*Pass factory functions to return Pass* instead of 2008-10-22 23:32:42 +00:00
LoopStrengthReduce.cpp some random comment improvements. 2008-12-02 04:52:26 +00:00
LoopUnroll.cpp Change create*Pass factory functions to return Pass* instead of 2008-10-22 23:32:42 +00:00
LoopUnswitch.cpp switch a couple more calls to use array_pod_sort. 2008-12-01 06:52:57 +00:00
Makefile remove attribution from lib Makefiles. 2007-12-29 20:09:26 +00:00
MemCpyOptimizer.cpp Eliminate the dropInstruction method, which is not needed any more. 2008-11-29 23:30:39 +00:00
PredicateSimplifier.cpp Silence unused variable warnings. 2008-11-21 20:00:59 +00:00
Reassociate.cpp Fix build failure. 2008-11-21 21:00:20 +00:00
Reg2Mem.cpp Tidy up several unbeseeming casts from pointer to intptr_t. 2008-09-04 17:05:41 +00:00
SCCP.cpp Fix unused variable warnings. 2008-11-21 01:52:59 +00:00
Scalar.cpp C and Objective Caml bindings for mem2reg and reg2mem. 2008-03-20 17:16:03 +00:00
ScalarReplAggregates.cpp Allow SROA of vectors. Removing this caused a 2008-11-04 20:54:03 +00:00
SimplifyCFGPass.cpp Large mechanical patch. 2008-09-25 21:00:45 +00:00
SimplifyHalfPowrLibCalls.cpp Add a new pass to simplify specific half_powr function calls. This is 2008-11-04 23:41:45 +00:00
SimplifyLibCalls.cpp Optimize memmove and memset into the LLVM builtins. Note that these 2008-11-30 08:32:11 +00:00
TailDuplication.cpp simplify code. 2008-11-27 22:56:14 +00:00
TailRecursionElimination.cpp Tidy up several unbeseeming casts from pointer to intptr_t. 2008-09-04 17:05:41 +00:00