1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -relocation-model=static -mtriple=i686-unknown -mattr=+mmx,+sse3   | FileCheck %s --check-prefix=X32
3; RUN: llc < %s -relocation-model=static -mtriple=x86_64-unknown -mattr=+mmx,+sse3 | FileCheck %s --check-prefix=X64
4
5; 64-bit stores here do not use MMX.
6
7@M1 = external global <1 x i64>
8@M2 = external global <2 x i32>
9
10@S1 = external global <2 x i64>
11@S2 = external global <4 x i32>
12
13define void @test1() {
14; X32-LABEL: test1:
15; X32:       # BB#0:
16; X32-NEXT:    movl $0, M1+4
17; X32-NEXT:    movl $0, M1
18; X32-NEXT:    xorps %xmm0, %xmm0
19; X32-NEXT:    movlps %xmm0, M2
20; X32-NEXT:    retl
21;
22; X64-LABEL: test1:
23; X64:       # BB#0:
24; X64-NEXT:    movq $0, {{.*}}(%rip)
25; X64-NEXT:    movq $0, {{.*}}(%rip)
26; X64-NEXT:    retq
27  store <1 x i64> zeroinitializer, <1 x i64>* @M1
28  store <2 x i32> zeroinitializer, <2 x i32>* @M2
29  ret void
30}
31
32define void @test2() {
33; X32-LABEL: test2:
34; X32:       # BB#0:
35; X32-NEXT:    movl $-1, M1+4
36; X32-NEXT:    movl $-1, M1
37; X32-NEXT:    pcmpeqd %xmm0, %xmm0
38; X32-NEXT:    movq %xmm0, M2
39; X32-NEXT:    retl
40;
41; X64-LABEL: test2:
42; X64:       # BB#0:
43; X64-NEXT:    movq $-1, {{.*}}(%rip)
44; X64-NEXT:    movq {{.*}}(%rip), %rax
45; X64-NEXT:    movq %rax, {{.*}}(%rip)
46; X64-NEXT:    retq
47  store <1 x i64> < i64 -1 >, <1 x i64>* @M1
48  store <2 x i32> < i32 -1, i32 -1 >, <2 x i32>* @M2
49  ret void
50}
51
52define void @test3() {
53; X32-LABEL: test3:
54; X32:       # BB#0:
55; X32-NEXT:    xorps %xmm0, %xmm0
56; X32-NEXT:    movaps %xmm0, S1
57; X32-NEXT:    movaps %xmm0, S2
58; X32-NEXT:    retl
59;
60; X64-LABEL: test3:
61; X64:       # BB#0:
62; X64-NEXT:    xorps %xmm0, %xmm0
63; X64-NEXT:    movaps %xmm0, {{.*}}(%rip)
64; X64-NEXT:    movaps %xmm0, {{.*}}(%rip)
65; X64-NEXT:    retq
66  store <2 x i64> zeroinitializer, <2 x i64>* @S1
67  store <4 x i32> zeroinitializer, <4 x i32>* @S2
68  ret void
69}
70
71define void @test4() {
72; X32-LABEL: test4:
73; X32:       # BB#0:
74; X32-NEXT:    pcmpeqd %xmm0, %xmm0
75; X32-NEXT:    movdqa %xmm0, S1
76; X32-NEXT:    movdqa %xmm0, S2
77; X32-NEXT:    retl
78;
79; X64-LABEL: test4:
80; X64:       # BB#0:
81; X64-NEXT:    pcmpeqd %xmm0, %xmm0
82; X64-NEXT:    movdqa %xmm0, {{.*}}(%rip)
83; X64-NEXT:    movdqa %xmm0, {{.*}}(%rip)
84; X64-NEXT:    retq
85  store <2 x i64> < i64 -1, i64 -1>, <2 x i64>* @S1
86  store <4 x i32> < i32 -1, i32 -1, i32 -1, i32 -1 >, <4 x i32>* @S2
87  ret void
88}
89