xref: /llvm-project/llvm/test/CodeGen/X86/vec_zero_cse.ll (revision f1200ca7ac88c6ff9aa4fe3b560cf326dc3d4e25)
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=X86
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 dso_local global <1 x i64>
8@M2 = external dso_local global <2 x i32>
9
10@S1 = external dso_local global <2 x i64>
11@S2 = external dso_local global <4 x i32>
12
13define void @test1() {
14; X86-LABEL: test1:
15; X86:       # %bb.0:
16; X86-NEXT:    movl $0, M1+4
17; X86-NEXT:    movl $0, M1
18; X86-NEXT:    xorps %xmm0, %xmm0
19; X86-NEXT:    movsd %xmm0, M2
20; X86-NEXT:    retl
21;
22; X64-LABEL: test1:
23; X64:       # %bb.0:
24; X64-NEXT:    movq $0, M1(%rip)
25; X64-NEXT:    movq $0, M2(%rip)
26; X64-NEXT:    retq
27  store <1 x i64> zeroinitializer, ptr @M1
28  store <2 x i32> zeroinitializer, ptr @M2
29  ret void
30}
31
32define void @test2() {
33; X86-LABEL: test2:
34; X86:       # %bb.0:
35; X86-NEXT:    movl $-1, M1+4
36; X86-NEXT:    movl $-1, M1
37; X86-NEXT:    pcmpeqd %xmm0, %xmm0
38; X86-NEXT:    movq %xmm0, M2
39; X86-NEXT:    retl
40;
41; X64-LABEL: test2:
42; X64:       # %bb.0:
43; X64-NEXT:    movq $-1, M1(%rip)
44; X64-NEXT:    movq $-1, M2(%rip)
45; X64-NEXT:    retq
46  store <1 x i64> < i64 -1 >, ptr @M1
47  store <2 x i32> < i32 -1, i32 -1 >, ptr @M2
48  ret void
49}
50
51define void @test3() {
52; X86-LABEL: test3:
53; X86:       # %bb.0:
54; X86-NEXT:    xorps %xmm0, %xmm0
55; X86-NEXT:    movaps %xmm0, S1
56; X86-NEXT:    movaps %xmm0, S2
57; X86-NEXT:    retl
58;
59; X64-LABEL: test3:
60; X64:       # %bb.0:
61; X64-NEXT:    xorps %xmm0, %xmm0
62; X64-NEXT:    movaps %xmm0, S1(%rip)
63; X64-NEXT:    movaps %xmm0, S2(%rip)
64; X64-NEXT:    retq
65  store <2 x i64> zeroinitializer, ptr @S1
66  store <4 x i32> zeroinitializer, ptr @S2
67  ret void
68}
69
70define void @test4() {
71; X86-LABEL: test4:
72; X86:       # %bb.0:
73; X86-NEXT:    pcmpeqd %xmm0, %xmm0
74; X86-NEXT:    movdqa %xmm0, S1
75; X86-NEXT:    movdqa %xmm0, S2
76; X86-NEXT:    retl
77;
78; X64-LABEL: test4:
79; X64:       # %bb.0:
80; X64-NEXT:    pcmpeqd %xmm0, %xmm0
81; X64-NEXT:    movdqa %xmm0, S1(%rip)
82; X64-NEXT:    movdqa %xmm0, S2(%rip)
83; X64-NEXT:    retq
84  store <2 x i64> < i64 -1, i64 -1>, ptr @S1
85  store <4 x i32> < i32 -1, i32 -1, i32 -1, i32 -1 >, ptr @S2
86  ret void
87}
88