diff --git a/lib/Target/X86/README-SSE.txt b/lib/Target/X86/README-SSE.txt index 20e6a53267e..f4b54c4dbbb 100644 --- a/lib/Target/X86/README-SSE.txt +++ b/lib/Target/X86/README-SSE.txt @@ -598,3 +598,32 @@ entry: } //===---------------------------------------------------------------------===// + +These functions should produce the same code: + +#include + +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 + +//===---------------------------------------------------------------------===//