blob: f2b8010d4138b89c0ab4ab07da6751f473751768 [file] [log] [blame]
Chris Lattner11dd24d2009-08-15 17:28:09 +00001; Tests for SSE2 and below, without SSE3+.
Dan Gohmanad1cc9c2009-12-07 19:04:31 +00002; RUN: llc < %s -mtriple=i386-apple-darwin10 -mcpu=pentium4 -O3 | FileCheck %s
Evan Chengab7c50b2008-05-24 00:10:02 +00003
4define void @t1(<2 x double>* %r, <2 x double>* %A, double %B) nounwind {
5 %tmp3 = load <2 x double>* %A, align 16
6 %tmp7 = insertelement <2 x double> undef, double %B, i32 0
7 %tmp9 = shufflevector <2 x double> %tmp3, <2 x double> %tmp7, <2 x i32> < i32 2, i32 1 >
8 store <2 x double> %tmp9, <2 x double>* %r, align 16
9 ret void
Chris Lattner11dd24d2009-08-15 17:28:09 +000010
11; CHECK: t1:
12; CHECK: movl 8(%esp), %eax
Evan Chengbb5d7af2009-10-23 05:58:34 +000013; CHECK-NEXT: movl 4(%esp), %ecx
Chris Lattner23372912009-08-15 18:32:21 +000014; CHECK-NEXT: movapd (%eax), %xmm0
15; CHECK-NEXT: movlpd 12(%esp), %xmm0
Evan Chengbb5d7af2009-10-23 05:58:34 +000016; CHECK-NEXT: movapd %xmm0, (%ecx)
Chris Lattner23372912009-08-15 18:32:21 +000017; CHECK-NEXT: ret
Evan Chengab7c50b2008-05-24 00:10:02 +000018}
19
20define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) nounwind {
21 %tmp3 = load <2 x double>* %A, align 16
22 %tmp7 = insertelement <2 x double> undef, double %B, i32 0
23 %tmp9 = shufflevector <2 x double> %tmp3, <2 x double> %tmp7, <2 x i32> < i32 0, i32 2 >
24 store <2 x double> %tmp9, <2 x double>* %r, align 16
25 ret void
Chris Lattner11dd24d2009-08-15 17:28:09 +000026
27; CHECK: t2:
28; CHECK: movl 8(%esp), %eax
Evan Chengbb5d7af2009-10-23 05:58:34 +000029; CHECK-NEXT: movl 4(%esp), %ecx
Chris Lattner23372912009-08-15 18:32:21 +000030; CHECK-NEXT: movapd (%eax), %xmm0
31; CHECK-NEXT: movhpd 12(%esp), %xmm0
Evan Chengbb5d7af2009-10-23 05:58:34 +000032; CHECK-NEXT: movapd %xmm0, (%ecx)
Chris Lattner23372912009-08-15 18:32:21 +000033; CHECK-NEXT: ret
Evan Chengab7c50b2008-05-24 00:10:02 +000034}