another missed SSE optimization

llvm-svn: 39772
This commit is contained in:
Chris Lattner 2007-07-12 06:31:38 +00:00
parent 07eb733ef8
commit bdc69595d9
1 changed files with 29 additions and 0 deletions

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
//===---------------------------------------------------------------------===//