llvm-6502/lib/Transforms/Scalar
Chris Lattner 56ba7a74b9 generalize the previous transformation to handle indexing into
arrays of structs and other arrays, so long as all the subsequent
indexes are constants.  This triggers frequently for stuff like:

@divisions = internal constant [29 x [2 x i32]] [[2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 1], [2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 2], [2 x i32] zeroinitializer, [2 x i32] zeroinitializer, [2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 1], [2 x i32] zeroinitializer, [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 2]], align 32 ; <[29 x [2 x i32]]*> [#uses=50]

	  %623 = getelementptr inbounds [29 x [2 x i32]]* @divisions, i64 0, i64 %619, i64 0 ; <i32*> [#uses=1]
	   %684 = icmp eq i32 %683, 999 

also for the "my_defs" table in 'gs', etc.




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92444 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-03 03:03:27 +00:00
..
ABCD.cpp Fix DenseMap iterator constness. 2009-11-10 01:02:17 +00:00
ADCE.cpp
BasicBlockPlacement.cpp
CMakeLists.txt remove the now dead condprop pass, PR3906. 2009-11-11 05:56:35 +00:00
CodeGenPrepare.cpp Revert 91280-91283, 91286-91289, 91291, 91293, 91295-91296. It apparently introduced a non-deterministic behavior in the optimizer somewhere. 2009-12-17 09:39:49 +00:00
ConstantProp.cpp remove a bunch of extraneous LLVMContext arguments 2009-11-06 04:27:31 +00:00
DCE.cpp
DeadStoreElimination.cpp formatting cleanups. 2009-12-02 06:35:55 +00:00
GEPSplitter.cpp Check in the experimental GEP splitter pass. This pass splits complex 2009-10-26 19:12:14 +00:00
GVN.cpp split code that doesn't need to be templated out of IRBuilder into a new 2009-12-28 21:28:46 +00:00
IndVarSimplify.cpp Add Loop contains utility methods for testing whether a loop 2009-12-18 01:24:09 +00:00
InstructionCombining.cpp generalize the previous transformation to handle indexing into 2010-01-03 03:03:27 +00:00
JumpThreading.cpp Metadata.h doesn't need to include ValueHandle.h anymore. 2009-12-28 08:20:46 +00:00
LICM.cpp Add Loop contains utility methods for testing whether a loop 2009-12-18 01:24:09 +00:00
LoopDeletion.cpp LoopDeletion depends on loops having dedicated exits. 2009-11-05 21:47:04 +00:00
LoopIndexSplit.cpp Add Loop contains utility methods for testing whether a loop 2009-12-18 01:24:09 +00:00
LoopRotation.cpp Update various Loop optimization passes to cope with the possibility that 2009-11-05 21:11:53 +00:00
LoopStrengthReduce.cpp Remove dump routine and the associated Debug.h from a header. Patch up 2009-12-23 22:58:38 +00:00
LoopUnrollPass.cpp Replace LoopUnrollPass.cpp's custom code-size estimation code using 2009-10-31 14:54:17 +00:00
LoopUnswitch.cpp Add Loop contains utility methods for testing whether a loop 2009-12-18 01:24:09 +00:00
Makefile
MemCpyOptimizer.cpp Introduce and use convenience methods for getting pointer types 2009-10-06 15:40:36 +00:00
Reassociate.cpp theoretically the negate we find could be in a different function, check 2010-01-02 21:46:33 +00:00
Reg2Mem.cpp
Scalar.cpp remove the now dead condprop pass, PR3906. 2009-11-11 05:56:35 +00:00
ScalarReplAggregates.cpp Fix the Convert to scalar to not insert dead loads in the store case. The 2009-12-22 19:33:28 +00:00
SCCP.cpp Fix a use of an invalidated iterator in the case where there are multiple 2009-11-23 16:13:39 +00:00
SCCVN.cpp Eliminte unnecessary uses of <cstdio>. 2009-12-18 03:25:51 +00:00
SimplifyCFGPass.cpp Implement PR5795 by merging duplicated return blocks. This could go further 2009-12-22 06:07:30 +00:00
SimplifyHalfPowrLibCalls.cpp improve portability to avoid conflicting with std::next in c++'0x. 2009-12-03 00:50:42 +00:00
SimplifyLibCalls.cpp move an optimization for memcmp out of simplifylibcalls and into 2009-12-24 00:37:38 +00:00
TailDuplication.cpp remove a bunch of extraneous LLVMContext arguments 2009-11-06 04:27:31 +00:00
TailRecursionElimination.cpp Improve tail call elimination to handle the switch statement. 2009-11-07 21:10:15 +00:00