when we see a unaligned load from an insufficiently aligned global or
authorChris Lattner <sabre@nondot.org>
Thu, 9 Aug 2007 19:05:49 +0000 (19:05 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 9 Aug 2007 19:05:49 +0000 (19:05 +0000)
commitf2369f20427d0e74c36b1ee90ae7892b5eb55b95
tree37574ddaf2cf61216e33a11e16ab6aacf448d986
parenta333b41af93a8a7f81d1d3d80651cf014d0390b2
when we see a unaligned load from an insufficiently aligned global or
alloca, increase the alignment of the load, turning it into an aligned load.

This allows us to compile:

#include <xmmintrin.h>
__m128i foo(__m128i x){
 static const unsigned int c_0[4] = { 0, 0, 0, 0 };
  __m128i v_Zero = _mm_loadu_si128((__m128i*)c_0);
  x  = _mm_unpacklo_epi8(x,  v_Zero);
  return x;
}

into:

_foo:
punpcklbw _c_0.5944, %xmm0
ret
.data
.lcomm _c_0.5944,16,4 # c_0.5944

instead of:

_foo:
movdqu _c_0.5944, %xmm1
punpcklbw %xmm1, %xmm0
ret
.data
.lcomm _c_0.5944,16,2 # c_0.5944

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40971 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/InstructionCombining.cpp
test/Transforms/InstCombine/align-inc.ll [new file with mode: 0644]