llvm-6502/lib/Transforms/Scalar
Chandler Carruth aa3cb334af Teach the integer-promotion rewrite strategy to be endianness aware.
Sorry for this being broken so long. =/

As part of this, switch all of the existing tests to be Little Endian,
which is the behavior I was asserting in them anyways! Add in a new
big-endian test that checks the interesting behavior there.

Another part of this is to tighten the rules abotu when we perform the
full-integer promotion. This logic now rejects cases where there fully
promoted integer is a non-multiple-of-8 bitwidth or cases where the
loads or stores touch bits which are in the allocated space of the
alloca but are not loaded or stored when accessing the integer. Sadly,
these aren't really observable today as the rest of the pass will
already ensure the invariants hold. However, the latter situation is
likely to become a potential concern in the future.

Thanks to Benjamin and Duncan for early review of this patch. I'm still
looking into whether there are further endianness issues, please let me
know if anyone sees BE failures persisting past this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165219 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-04 10:39:28 +00:00
..
ADCE.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
BasicBlockPlacement.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
CMakeLists.txt Introduce a new SROA implementation. 2012-09-14 09:22:59 +00:00
CodeGenPrepare.cpp Use method to query for attributes. 2012-10-04 06:58:52 +00:00
ConstantProp.cpp Last bit of TargetLibraryInfo propagation. Also fixed a case for TargetData 2011-12-01 21:29:16 +00:00
CorrelatedValuePropagation.cpp CorrelatedPropagation: BasicBlock::removePredecessor can simplify PHI nodes. If the it's the condition of a SwitchInst, reload it. 2012-09-28 10:42:50 +00:00
DCE.cpp Make MemoryBuiltins aware of TargetLibraryInfo. 2012-08-29 15:32:21 +00:00
DeadStoreElimination.cpp Don't forget that strcpy and friends return a pointer to the destination, so 2012-09-25 01:55:59 +00:00
EarlyCSE.cpp Use LLVM_DELETED_FUNCTION in place of 'DO NOT IMPLEMENT' comments. 2012-09-15 17:09:36 +00:00
GlobalMerge.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
GVN.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
IndVarSimplify.cpp Fix PR13967. 2012-10-03 23:59:47 +00:00
JumpThreading.cpp Make MemoryBuiltins aware of TargetLibraryInfo. 2012-08-29 15:32:21 +00:00
LICM.cpp LICM may hoist an instruction with undefined behavior above a trap. 2012-09-04 10:25:04 +00:00
LLVMBuild.txt LLVMBuild: Remove trailing newline, which irked me. 2011-12-12 19:48:00 +00:00
LoopDeletion.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
LoopIdiomRecognize.cpp LoopIdiom: Give up when the loop is not in canonical form. 2012-09-21 17:27:23 +00:00
LoopInstSimplify.cpp Make MemoryBuiltins aware of TargetLibraryInfo. 2012-08-29 15:32:21 +00:00
LoopRotation.cpp LoopRotation: Make the brute force DomTree update more brute force. 2012-09-02 11:57:22 +00:00
LoopStrengthReduce.cpp LSR critical edge splitting fix for PR13756. 2012-09-18 17:51:33 +00:00
LoopUnrollPass.cpp Remove the `hasFnAttr' method from Function. 2012-09-26 21:48:26 +00:00
LoopUnswitch.cpp Remove the `hasFnAttr' method from Function. 2012-09-26 21:48:26 +00:00
LowerAtomic.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
Makefile make -fno-rtti the default unless a directory builds with REQUIRES_RTTI. 2010-01-24 20:43:08 +00:00
MemCpyOptimizer.cpp MemCpyOpt: When forming a memset from stores also take GEP constexprs into account. 2012-09-13 16:29:49 +00:00
ObjCARC.cpp Mark unimplemented copy constructors and copy assignment operators as LLVM_DELETED_FUNCTION. 2012-09-18 02:01:41 +00:00
Reassociate.cpp Stop reassociate from looking through expressions of arbitrary complexity. This 2012-07-26 09:26:40 +00:00
Reg2Mem.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
Scalar.cpp Introduce a new SROA implementation. 2012-09-14 09:22:59 +00:00
ScalarReplAggregates.cpp Port the global copy optimization from the SROA pass to InstCombine. 2012-08-21 08:39:44 +00:00
SCCP.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
SimplifyCFGPass.cpp Update function names to conform to guidelines. 2012-09-06 00:59:08 +00:00
SimplifyLibCalls.cpp SimplifyLibCalls: Give all safely-shrinkable libcalls the same treatment. 2012-08-22 19:39:15 +00:00
Sink.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
SROA.cpp Teach the integer-promotion rewrite strategy to be endianness aware. 2012-10-04 10:39:28 +00:00
TailRecursionElimination.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00