From 68e8b9e775db991486c38146536b6fe1100c7cca Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 4 Oct 2006 05:52:13 +0000 Subject: [PATCH] add a note :( git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30717 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/README-SSE.txt | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/Target/X86/README-SSE.txt b/lib/Target/X86/README-SSE.txt index e019afa966f..a22cebf165f 100644 --- a/lib/Target/X86/README-SSE.txt +++ b/lib/Target/X86/README-SSE.txt @@ -4,6 +4,30 @@ //===---------------------------------------------------------------------===// +There are serious issues folding loads into "scalar sse" intrinsics. For +example, this: + +float minss4( float x, float *y ) { + return _mm_cvtss_f32(_mm_min_ss(_mm_set_ss(x),_mm_set_ss(*y))); +} + +compiles to: + +_minss4: + subl $4, %esp + movl 12(%esp), %eax +*** movss 8(%esp), %xmm0 +*** movss (%eax), %xmm1 +*** minss %xmm1, %xmm0 + movss %xmm0, (%esp) + flds (%esp) + addl $4, %esp + ret + +Each operand of the minss is a load. At least one should be folded! + +//===---------------------------------------------------------------------===// + When compiled with unsafemath enabled, "main" should enable SSE DAZ mode and other fast SSE modes.