From 4b5a352f255a448b73b6f728508ae01b9fd82f19 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 14 Jun 2006 21:26:18 +0000 Subject: [PATCH] add a note git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28787 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 ecf846c2818..5b741e6f7aa 100644 --- a/lib/Target/X86/README-SSE.txt +++ b/lib/Target/X86/README-SSE.txt @@ -664,3 +664,32 @@ e.g. SSE select using and, andnot, or. Various SSE compare translations. //===---------------------------------------------------------------------===// Add hooks to commute some CMPP operations. + +//===---------------------------------------------------------------------===// + +Implement some missing insert/extract element operations without going through +the stack. Testcase here: +CodeGen/X86/vec_ins_extract.ll +corresponds to this C code: + +typedef float vectorfloat __attribute__((vector_size(16))); +void test(vectorfloat *F, float f) { + vectorfloat G = *F + *F; + *((float*)&G) = f; + *F = G + G; +} +void test2(vectorfloat *F, float f) { + vectorfloat G = *F + *F; + ((float*)&G)[2] = f; + *F = G + G; +} +void test3(vectorfloat *F, float *f) { + vectorfloat G = *F + *F; + *f = ((float*)&G)[2]; +} +void test4(vectorfloat *F, float *f) { + vectorfloat G = *F + *F; + *f = *((float*)&G); +} + +//===---------------------------------------------------------------------===//