blob: 8f6d5192826eda799c4b16ea24d42ecccc7b8523 [file] [log] [blame]
Sanjay Patel7c615072016-03-29 17:09:27 +00001; NOTE: Assertions have been autogenerated by update_test_checks.py
2; RUN: llc -mtriple=x86_64-unknown-unknown < %s -mattr=sse2 | FileCheck %s --check-prefix=ANY --check-prefix=SSE2
3; RUN: llc -mtriple=x86_64-unknown-unknown < %s -mattr=avx | FileCheck %s --check-prefix=ANY --check-prefix=AVX --check-prefix=AVX1
4; RUN: llc -mtriple=x86_64-unknown-unknown < %s -mattr=avx2 | FileCheck %s --check-prefix=ANY --check-prefix=AVX --check-prefix=AVX2
5
6define void @memset_16_nonzero_bytes(i8* %x) {
Sanjay Patel92d5ea5e2016-03-31 17:30:06 +00007; SSE2-LABEL: memset_16_nonzero_bytes:
8; SSE2: movabsq $3038287259199220266, %rax # imm = 0x2A2A2A2A2A2A2A2A
9; SSE2-NEXT: movq %rax, 8(%rdi)
10; SSE2-NEXT: movq %rax, (%rdi)
11; SSE2-NEXT: retq
12;
13; AVX1-LABEL: memset_16_nonzero_bytes:
14; AVX1: vmovaps {{.*#+}} xmm0 = [707406378,707406378,707406378,707406378]
15; AVX1-NEXT: vmovups %xmm0, (%rdi)
16; AVX1-NEXT: retq
17;
18; AVX2-LABEL: memset_16_nonzero_bytes:
19; AVX2: vbroadcastss {{.*}}(%rip), %xmm0
20; AVX2-NEXT: vmovups %xmm0, (%rdi)
21; AVX2-NEXT: retq
Sanjay Patel7c615072016-03-29 17:09:27 +000022;
23 %call = tail call i8* @__memset_chk(i8* %x, i32 42, i64 16, i64 -1)
24 ret void
25}
26
27define void @memset_32_nonzero_bytes(i8* %x) {
Sanjay Patel92d5ea5e2016-03-31 17:30:06 +000028; SSE2-LABEL: memset_32_nonzero_bytes:
29; SSE2: movabsq $3038287259199220266, %rax # imm = 0x2A2A2A2A2A2A2A2A
30; SSE2-NEXT: movq %rax, 24(%rdi)
31; SSE2-NEXT: movq %rax, 16(%rdi)
32; SSE2-NEXT: movq %rax, 8(%rdi)
33; SSE2-NEXT: movq %rax, (%rdi)
34; SSE2-NEXT: retq
35;
36; AVX1-LABEL: memset_32_nonzero_bytes:
37; AVX1: vmovaps {{.*#+}} ymm0 = [1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13]
38; AVX1-NEXT: vmovups %ymm0, (%rdi)
39; AVX1-NEXT: vzeroupper
40; AVX1-NEXT: retq
41;
42; AVX2-LABEL: memset_32_nonzero_bytes:
43; AVX2: vbroadcastss {{.*}}(%rip), %ymm0
44; AVX2-NEXT: vmovups %ymm0, (%rdi)
45; AVX2-NEXT: vzeroupper
46; AVX2-NEXT: retq
Sanjay Patel7c615072016-03-29 17:09:27 +000047;
48 %call = tail call i8* @__memset_chk(i8* %x, i32 42, i64 32, i64 -1)
49 ret void
50}
51
52define void @memset_64_nonzero_bytes(i8* %x) {
Sanjay Patel92d5ea5e2016-03-31 17:30:06 +000053; SSE2-LABEL: memset_64_nonzero_bytes:
54; SSE2: movabsq $3038287259199220266, %rax # imm = 0x2A2A2A2A2A2A2A2A
55; SSE2-NEXT: movq %rax, 56(%rdi)
56; SSE2-NEXT: movq %rax, 48(%rdi)
57; SSE2-NEXT: movq %rax, 40(%rdi)
58; SSE2-NEXT: movq %rax, 32(%rdi)
59; SSE2-NEXT: movq %rax, 24(%rdi)
60; SSE2-NEXT: movq %rax, 16(%rdi)
61; SSE2-NEXT: movq %rax, 8(%rdi)
62; SSE2-NEXT: movq %rax, (%rdi)
63; SSE2-NEXT: retq
64;
65; AVX1-LABEL: memset_64_nonzero_bytes:
66; AVX1: vmovaps {{.*#+}} ymm0 = [1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13]
67; AVX1-NEXT: vmovups %ymm0, 32(%rdi)
68; AVX1-NEXT: vmovups %ymm0, (%rdi)
69; AVX1-NEXT: vzeroupper
70; AVX1-NEXT: retq
71;
72; AVX2-LABEL: memset_64_nonzero_bytes:
73; AVX2: vbroadcastss {{.*}}(%rip), %ymm0
74; AVX2-NEXT: vmovups %ymm0, 32(%rdi)
75; AVX2-NEXT: vmovups %ymm0, (%rdi)
76; AVX2-NEXT: vzeroupper
77; AVX2-NEXT: retq
Sanjay Patel7c615072016-03-29 17:09:27 +000078;
79 %call = tail call i8* @__memset_chk(i8* %x, i32 42, i64 64, i64 -1)
80 ret void
81}
82
83define void @memset_128_nonzero_bytes(i8* %x) {
Sanjay Patel92d5ea5e2016-03-31 17:30:06 +000084; SSE2-LABEL: memset_128_nonzero_bytes:
85; SSE2: movabsq $3038287259199220266, %rax # imm = 0x2A2A2A2A2A2A2A2A
86; SSE2-NEXT: movq %rax, 120(%rdi)
87; SSE2-NEXT: movq %rax, 112(%rdi)
88; SSE2-NEXT: movq %rax, 104(%rdi)
89; SSE2-NEXT: movq %rax, 96(%rdi)
90; SSE2-NEXT: movq %rax, 88(%rdi)
91; SSE2-NEXT: movq %rax, 80(%rdi)
92; SSE2-NEXT: movq %rax, 72(%rdi)
93; SSE2-NEXT: movq %rax, 64(%rdi)
94; SSE2-NEXT: movq %rax, 56(%rdi)
95; SSE2-NEXT: movq %rax, 48(%rdi)
96; SSE2-NEXT: movq %rax, 40(%rdi)
97; SSE2-NEXT: movq %rax, 32(%rdi)
98; SSE2-NEXT: movq %rax, 24(%rdi)
99; SSE2-NEXT: movq %rax, 16(%rdi)
100; SSE2-NEXT: movq %rax, 8(%rdi)
101; SSE2-NEXT: movq %rax, (%rdi)
102; SSE2-NEXT: retq
103;
104; AVX1-LABEL: memset_128_nonzero_bytes:
105; AVX1: vmovaps {{.*#+}} ymm0 = [1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13]
106; AVX1-NEXT: vmovups %ymm0, 96(%rdi)
107; AVX1-NEXT: vmovups %ymm0, 64(%rdi)
108; AVX1-NEXT: vmovups %ymm0, 32(%rdi)
109; AVX1-NEXT: vmovups %ymm0, (%rdi)
110; AVX1-NEXT: vzeroupper
111; AVX1-NEXT: retq
112;
113; AVX2-LABEL: memset_128_nonzero_bytes:
114; AVX2: vbroadcastss {{.*}}(%rip), %ymm0
115; AVX2-NEXT: vmovups %ymm0, 96(%rdi)
116; AVX2-NEXT: vmovups %ymm0, 64(%rdi)
117; AVX2-NEXT: vmovups %ymm0, 32(%rdi)
118; AVX2-NEXT: vmovups %ymm0, (%rdi)
119; AVX2-NEXT: vzeroupper
120; AVX2-NEXT: retq
Sanjay Patel7c615072016-03-29 17:09:27 +0000121;
122 %call = tail call i8* @__memset_chk(i8* %x, i32 42, i64 128, i64 -1)
123 ret void
124}
125
126define void @memset_256_nonzero_bytes(i8* %x) {
Sanjay Patel92d5ea5e2016-03-31 17:30:06 +0000127; SSE2-LABEL: memset_256_nonzero_bytes:
128; SSE2: pushq %rax
129; SSE2-NEXT: .Ltmp0:
130; SSE2-NEXT: .cfi_def_cfa_offset 16
131; SSE2-NEXT: movl $42, %esi
132; SSE2-NEXT: movl $256, %edx # imm = 0x100
133; SSE2-NEXT: callq memset
134; SSE2-NEXT: popq %rax
135; SSE2-NEXT: retq
136;
137; AVX1-LABEL: memset_256_nonzero_bytes:
138; AVX1: vmovaps {{.*#+}} ymm0 = [1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13,1.511366e-13]
139; AVX1-NEXT: vmovups %ymm0, 224(%rdi)
140; AVX1-NEXT: vmovups %ymm0, 192(%rdi)
141; AVX1-NEXT: vmovups %ymm0, 160(%rdi)
142; AVX1-NEXT: vmovups %ymm0, 128(%rdi)
143; AVX1-NEXT: vmovups %ymm0, 96(%rdi)
144; AVX1-NEXT: vmovups %ymm0, 64(%rdi)
145; AVX1-NEXT: vmovups %ymm0, 32(%rdi)
146; AVX1-NEXT: vmovups %ymm0, (%rdi)
147; AVX1-NEXT: vzeroupper
148; AVX1-NEXT: retq
149;
150; AVX2-LABEL: memset_256_nonzero_bytes:
151; AVX2: vbroadcastss {{.*}}(%rip), %ymm0
152; AVX2-NEXT: vmovups %ymm0, 224(%rdi)
153; AVX2-NEXT: vmovups %ymm0, 192(%rdi)
154; AVX2-NEXT: vmovups %ymm0, 160(%rdi)
155; AVX2-NEXT: vmovups %ymm0, 128(%rdi)
156; AVX2-NEXT: vmovups %ymm0, 96(%rdi)
157; AVX2-NEXT: vmovups %ymm0, 64(%rdi)
158; AVX2-NEXT: vmovups %ymm0, 32(%rdi)
159; AVX2-NEXT: vmovups %ymm0, (%rdi)
160; AVX2-NEXT: vzeroupper
161; AVX2-NEXT: retq
Sanjay Patel7c615072016-03-29 17:09:27 +0000162;
163 %call = tail call i8* @__memset_chk(i8* %x, i32 42, i64 256, i64 -1)
164 ret void
165}
166
167declare i8* @__memset_chk(i8*, i32, i64, i64)
168