From ca23e17adfabc79629194c3d55ac1fca6dd73ba1 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 12 Jul 2007 06:31:38 +0000 Subject: [PATCH] another missed SSE optimization git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39772 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/README-SSE.txt | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) 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 + +//===---------------------------------------------------------------------===//