llvm-6502/lib/Transforms/InstCombine
Quentin Colombet 0119f3df9c [InstCombiner] Slice a big load in two loads when the elements are next to each
other in memory.

The motivation was to get rid of truncate and shift right instructions that get
in the way of paired load or floating point load.
E.g.,
Consider the following example:
struct Complex {
  float real;
  float imm;
};

When accessing a complex, llvm was generating a 64-bits load and the imm field
was obtained by a trunc(lshr) sequence, resulting in poor code generation, at
least for x86.

The idea is to declare that two load instructions is the canonical form for
loading two arithmetic type, which are next to each other in memory.

Two scalar loads at a constant offset from each other are pretty
easy to detect for the sorts of passes that like to mess with loads. 

<rdar://problem/14477220>


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190870 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-17 16:57:34 +00:00
..
CMakeLists.txt Tidy up a bit. No functional change. 2013-04-05 21:20:12 +00:00
InstCombine.h Consistently use dbgs() in debug printing 2013-09-05 19:48:28 +00:00
InstCombineAddSub.cpp Preserve fast-math flags when folding (fsub x, (fneg y)) to (fadd x, y). 2013-07-30 23:53:17 +00:00
InstCombineAndOrXor.cpp InstCombine: allow unmasked icmps to be combined with logical ops 2013-09-04 11:57:17 +00:00
InstCombineCalls.cpp Change behavior of calling bitcasted alias functions. 2013-07-30 20:45:05 +00:00
InstCombineCasts.cpp Teach InstCombine about address spaces 2013-08-21 19:53:10 +00:00
InstCombineCompares.cpp [InstCombiner] Expose opportunities to merge subtract and comparison. 2013-09-09 20:56:48 +00:00
InstCombineLoadStoreAlloca.cpp [InstCombiner] Slice a big load in two loads when the elements are next to each 2013-09-17 16:57:34 +00:00
InstCombineMulDivRem.cpp Correct case of m_UIToFp to m_UIToFP to match instruction name, add m_SIToFP for consistency. 2013-07-26 17:55:00 +00:00
InstCombinePHI.cpp Get rid of unused isPodLike definitions. 2013-09-11 00:36:54 +00:00
InstCombineSelect.cpp InstCombine: Also turn selects fed by an and into arithmetic when the types don't match. 2013-06-29 21:17:04 +00:00
InstCombineShifts.cpp Revert r174152. The shift amount may overflow and in that case this transformation is illegal. 2013-02-01 07:59:33 +00:00
InstCombineSimplifyDemanded.cpp InstCombine: Check for zero shift amounts before subtracting one causing integer overflow. 2013-08-30 14:35:35 +00:00
InstCombineVectorOps.cpp Use type helper functions. 2013-09-06 00:37:24 +00:00
InstCombineWorklist.h Consistently use dbgs() in debug printing 2013-09-05 19:48:28 +00:00
InstructionCombining.cpp Consistently use dbgs() in debug printing 2013-09-05 19:48:28 +00:00
LLVMBuild.txt
Makefile