Fix operand type for int_x86_ssse3_phadd_sw_128 intrinsic
[oota-llvm.git] / test / CodeGen / X86 / sse-align-12.ll
1 ; RUN: llc < %s -march=x86-64 | FileCheck %s
2
3 ; CHECK: a:
4 ; CHECK: movdqu
5 ; CHECK: pshufd
6 define <4 x float> @a(<4 x float>* %y) nounwind {
7   %x = load <4 x float>* %y, align 4
8   %a = extractelement <4 x float> %x, i32 0
9   %b = extractelement <4 x float> %x, i32 1
10   %c = extractelement <4 x float> %x, i32 2
11   %d = extractelement <4 x float> %x, i32 3
12   %p = insertelement <4 x float> undef, float %d, i32 0
13   %q = insertelement <4 x float> %p, float %c, i32 1
14   %r = insertelement <4 x float> %q, float %b, i32 2
15   %s = insertelement <4 x float> %r, float %a, i32 3
16   ret <4 x float> %s
17 }
18
19 ; CHECK: b:
20 ; CHECK: movups
21 ; CHECK: unpckhps
22 define <4 x float> @b(<4 x float>* %y, <4 x float> %z) nounwind {
23   %x = load <4 x float>* %y, align 4
24   %a = extractelement <4 x float> %x, i32 2
25   %b = extractelement <4 x float> %x, i32 3
26   %c = extractelement <4 x float> %z, i32 2
27   %d = extractelement <4 x float> %z, i32 3
28   %p = insertelement <4 x float> undef, float %c, i32 0
29   %q = insertelement <4 x float> %p, float %a, i32 1
30   %r = insertelement <4 x float> %q, float %d, i32 2
31   %s = insertelement <4 x float> %r, float %b, i32 3
32   ret <4 x float> %s
33 }
34
35 ; CHECK: c:
36 ; CHECK: movupd
37 ; CHECK: shufpd
38 define <2 x double> @c(<2 x double>* %y) nounwind {
39   %x = load <2 x double>* %y, align 8
40   %a = extractelement <2 x double> %x, i32 0
41   %c = extractelement <2 x double> %x, i32 1
42   %p = insertelement <2 x double> undef, double %c, i32 0
43   %r = insertelement <2 x double> %p, double %a, i32 1
44   ret <2 x double> %r
45 }
46
47 ; CHECK: d:
48 ; CHECK: movupd
49 ; CHECK: unpckhpd
50 define <2 x double> @d(<2 x double>* %y, <2 x double> %z) nounwind {
51   %x = load <2 x double>* %y, align 8
52   %a = extractelement <2 x double> %x, i32 1
53   %c = extractelement <2 x double> %z, i32 1
54   %p = insertelement <2 x double> undef, double %c, i32 0
55   %r = insertelement <2 x double> %p, double %a, i32 1
56   ret <2 x double> %r
57 }