another missed SSE optimization

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39772 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2007-07-12 06:31:38 +00:00
parent 1cb960a4bb
commit ca23e17adf

View File

@ -598,3 +598,32 @@ entry:
}
//===---------------------------------------------------------------------===//
These functions should produce the same code:
#include <emmintrin.h>
typedef long long __m128i __attribute__ ((__vector_size__ (16)));
int foo(__m128i* val) {
return __builtin_ia32_vec_ext_v4si(*val, 1);
}
int bar(__m128i* val) {
union vs {
__m128i *_v;
int* _s;
} v = {val};
return v._s[1];
}
We currently produce (with -m64):
_foo:
pshufd $1, (%rdi), %xmm0
movd %xmm0, %eax
ret
_bar:
movl 4(%rdi), %eax
ret
//===---------------------------------------------------------------------===//