xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/sse42-intrinsics-x86.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=-avx,+sse4.2 | FileCheck %s
3
4define i32 @test_x86_sse42_pcmpestri128(<16 x i8> %a0, <16 x i8> %a2) {
5; CHECK-LABEL: test_x86_sse42_pcmpestri128:
6; CHECK:       ## BB#0:
7; CHECK-NEXT:    movl $7, %eax
8; CHECK-NEXT:    movl $7, %edx
9; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
10; CHECK-NEXT:    movl %ecx, %eax
11; CHECK-NEXT:    retl
12  %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
13  ret i32 %res
14}
15declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
16
17
18define i32 @test_x86_sse42_pcmpestri128_load(<16 x i8>* %a0, <16 x i8>* %a2) {
19; CHECK-LABEL: test_x86_sse42_pcmpestri128_load:
20; CHECK:       ## BB#0:
21; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
22; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
23; CHECK-NEXT:    movdqa (%eax), %xmm0
24; CHECK-NEXT:    movl $7, %eax
25; CHECK-NEXT:    movl $7, %edx
26; CHECK-NEXT:    pcmpestri $7, (%ecx), %xmm0
27; CHECK-NEXT:    movl %ecx, %eax
28; CHECK-NEXT:    retl
29  %1 = load <16 x i8>, <16 x i8>* %a0
30  %2 = load <16 x i8>, <16 x i8>* %a2
31  %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %1, i32 7, <16 x i8> %2, i32 7, i8 7) ; <i32> [#uses=1]
32  ret i32 %res
33}
34
35
36define i32 @test_x86_sse42_pcmpestria128(<16 x i8> %a0, <16 x i8> %a2) nounwind {
37; CHECK-LABEL: test_x86_sse42_pcmpestria128:
38; CHECK:       ## BB#0:
39; CHECK-NEXT:    pushl %ebx
40; CHECK-NEXT:    movl $7, %eax
41; CHECK-NEXT:    movl $7, %edx
42; CHECK-NEXT:    xorl %ebx, %ebx
43; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
44; CHECK-NEXT:    seta %bl
45; CHECK-NEXT:    movl %ebx, %eax
46; CHECK-NEXT:    popl %ebx
47; CHECK-NEXT:    retl
48  %res = call i32 @llvm.x86.sse42.pcmpestria128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
49  ret i32 %res
50}
51declare i32 @llvm.x86.sse42.pcmpestria128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
52
53
54define i32 @test_x86_sse42_pcmpestric128(<16 x i8> %a0, <16 x i8> %a2) {
55; CHECK-LABEL: test_x86_sse42_pcmpestric128:
56; CHECK:       ## BB#0:
57; CHECK-NEXT:    movl $7, %eax
58; CHECK-NEXT:    movl $7, %edx
59; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
60; CHECK-NEXT:    sbbl %eax, %eax
61; CHECK-NEXT:    andl $1, %eax
62; CHECK-NEXT:    retl
63  %res = call i32 @llvm.x86.sse42.pcmpestric128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
64  ret i32 %res
65}
66declare i32 @llvm.x86.sse42.pcmpestric128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
67
68
69define i32 @test_x86_sse42_pcmpestrio128(<16 x i8> %a0, <16 x i8> %a2) nounwind {
70; CHECK-LABEL: test_x86_sse42_pcmpestrio128:
71; CHECK:       ## BB#0:
72; CHECK-NEXT:    pushl %ebx
73; CHECK-NEXT:    movl $7, %eax
74; CHECK-NEXT:    movl $7, %edx
75; CHECK-NEXT:    xorl %ebx, %ebx
76; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
77; CHECK-NEXT:    seto %bl
78; CHECK-NEXT:    movl %ebx, %eax
79; CHECK-NEXT:    popl %ebx
80; CHECK-NEXT:    retl
81  %res = call i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
82  ret i32 %res
83}
84declare i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
85
86
87define i32 @test_x86_sse42_pcmpestris128(<16 x i8> %a0, <16 x i8> %a2) nounwind {
88; CHECK-LABEL: test_x86_sse42_pcmpestris128:
89; CHECK:       ## BB#0:
90; CHECK-NEXT:    pushl %ebx
91; CHECK-NEXT:    movl $7, %eax
92; CHECK-NEXT:    movl $7, %edx
93; CHECK-NEXT:    xorl %ebx, %ebx
94; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
95; CHECK-NEXT:    sets %bl
96; CHECK-NEXT:    movl %ebx, %eax
97; CHECK-NEXT:    popl %ebx
98; CHECK-NEXT:    retl
99  %res = call i32 @llvm.x86.sse42.pcmpestris128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
100  ret i32 %res
101}
102declare i32 @llvm.x86.sse42.pcmpestris128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
103
104
105define i32 @test_x86_sse42_pcmpestriz128(<16 x i8> %a0, <16 x i8> %a2) nounwind {
106; CHECK-LABEL: test_x86_sse42_pcmpestriz128:
107; CHECK:       ## BB#0:
108; CHECK-NEXT:    pushl %ebx
109; CHECK-NEXT:    movl $7, %eax
110; CHECK-NEXT:    movl $7, %edx
111; CHECK-NEXT:    xorl %ebx, %ebx
112; CHECK-NEXT:    pcmpestri $7, %xmm1, %xmm0
113; CHECK-NEXT:    sete %bl
114; CHECK-NEXT:    movl %ebx, %eax
115; CHECK-NEXT:    popl %ebx
116; CHECK-NEXT:    retl
117  %res = call i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1]
118  ret i32 %res
119}
120declare i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
121
122
123define <16 x i8> @test_x86_sse42_pcmpestrm128(<16 x i8> %a0, <16 x i8> %a2) {
124; CHECK-LABEL: test_x86_sse42_pcmpestrm128:
125; CHECK:       ## BB#0:
126; CHECK-NEXT:    movl $7, %eax
127; CHECK-NEXT:    movl $7, %edx
128; CHECK-NEXT:    pcmpestrm $7, %xmm1, %xmm0
129; CHECK-NEXT:    retl
130  %res = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <<16 x i8>> [#uses=1]
131  ret <16 x i8> %res
132}
133declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
134
135
136define <16 x i8> @test_x86_sse42_pcmpestrm128_load(<16 x i8> %a0, <16 x i8>* %a2) {
137; CHECK-LABEL: test_x86_sse42_pcmpestrm128_load:
138; CHECK:       ## BB#0:
139; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
140; CHECK-NEXT:    movl $7, %eax
141; CHECK-NEXT:    movl $7, %edx
142; CHECK-NEXT:    pcmpestrm $7, (%ecx), %xmm0
143; CHECK-NEXT:    retl
144  %1 = load <16 x i8>, <16 x i8>* %a2
145  %res = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %1, i32 7, i8 7) ; <<16 x i8>> [#uses=1]
146  ret <16 x i8> %res
147}
148
149
150define i32 @test_x86_sse42_pcmpistri128(<16 x i8> %a0, <16 x i8> %a1) {
151; CHECK-LABEL: test_x86_sse42_pcmpistri128:
152; CHECK:       ## BB#0:
153; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
154; CHECK-NEXT:    movl %ecx, %eax
155; CHECK-NEXT:    retl
156  %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
157  ret i32 %res
158}
159declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone
160
161
162define i32 @test_x86_sse42_pcmpistri128_load(<16 x i8>* %a0, <16 x i8>* %a1) {
163; CHECK-LABEL: test_x86_sse42_pcmpistri128_load:
164; CHECK:       ## BB#0:
165; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
166; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
167; CHECK-NEXT:    movdqa (%ecx), %xmm0
168; CHECK-NEXT:    pcmpistri $7, (%eax), %xmm0
169; CHECK-NEXT:    movl %ecx, %eax
170; CHECK-NEXT:    retl
171  %1 = load <16 x i8>, <16 x i8>* %a0
172  %2 = load <16 x i8>, <16 x i8>* %a1
173  %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %1, <16 x i8> %2, i8 7) ; <i32> [#uses=1]
174  ret i32 %res
175}
176
177
178define i32 @test_x86_sse42_pcmpistria128(<16 x i8> %a0, <16 x i8> %a1) {
179; CHECK-LABEL: test_x86_sse42_pcmpistria128:
180; CHECK:       ## BB#0:
181; CHECK-NEXT:    xorl %eax, %eax
182; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
183; CHECK-NEXT:    seta %al
184; CHECK-NEXT:    retl
185  %res = call i32 @llvm.x86.sse42.pcmpistria128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
186  ret i32 %res
187}
188declare i32 @llvm.x86.sse42.pcmpistria128(<16 x i8>, <16 x i8>, i8) nounwind readnone
189
190
191define i32 @test_x86_sse42_pcmpistric128(<16 x i8> %a0, <16 x i8> %a1) {
192; CHECK-LABEL: test_x86_sse42_pcmpistric128:
193; CHECK:       ## BB#0:
194; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
195; CHECK-NEXT:    sbbl %eax, %eax
196; CHECK-NEXT:    andl $1, %eax
197; CHECK-NEXT:    retl
198  %res = call i32 @llvm.x86.sse42.pcmpistric128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
199  ret i32 %res
200}
201declare i32 @llvm.x86.sse42.pcmpistric128(<16 x i8>, <16 x i8>, i8) nounwind readnone
202
203
204define i32 @test_x86_sse42_pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1) {
205; CHECK-LABEL: test_x86_sse42_pcmpistrio128:
206; CHECK:       ## BB#0:
207; CHECK-NEXT:    xorl %eax, %eax
208; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
209; CHECK-NEXT:    seto %al
210; CHECK-NEXT:    retl
211  %res = call i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
212  ret i32 %res
213}
214declare i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8>, <16 x i8>, i8) nounwind readnone
215
216
217define i32 @test_x86_sse42_pcmpistris128(<16 x i8> %a0, <16 x i8> %a1) {
218; CHECK-LABEL: test_x86_sse42_pcmpistris128:
219; CHECK:       ## BB#0:
220; CHECK-NEXT:    xorl %eax, %eax
221; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
222; CHECK-NEXT:    sets %al
223; CHECK-NEXT:    retl
224  %res = call i32 @llvm.x86.sse42.pcmpistris128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
225  ret i32 %res
226}
227declare i32 @llvm.x86.sse42.pcmpistris128(<16 x i8>, <16 x i8>, i8) nounwind readnone
228
229
230define i32 @test_x86_sse42_pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1) {
231; CHECK-LABEL: test_x86_sse42_pcmpistriz128:
232; CHECK:       ## BB#0:
233; CHECK-NEXT:    xorl %eax, %eax
234; CHECK-NEXT:    pcmpistri $7, %xmm1, %xmm0
235; CHECK-NEXT:    sete %al
236; CHECK-NEXT:    retl
237  %res = call i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1]
238  ret i32 %res
239}
240declare i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8>, <16 x i8>, i8) nounwind readnone
241
242
243define <16 x i8> @test_x86_sse42_pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1) {
244; CHECK-LABEL: test_x86_sse42_pcmpistrm128:
245; CHECK:       ## BB#0:
246; CHECK-NEXT:    pcmpistrm $7, %xmm1, %xmm0
247; CHECK-NEXT:    retl
248  %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <<16 x i8>> [#uses=1]
249  ret <16 x i8> %res
250}
251declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone
252
253
254define <16 x i8> @test_x86_sse42_pcmpistrm128_load(<16 x i8> %a0, <16 x i8>* %a1) {
255; CHECK-LABEL: test_x86_sse42_pcmpistrm128_load:
256; CHECK:       ## BB#0:
257; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
258; CHECK-NEXT:    pcmpistrm $7, (%eax), %xmm0
259; CHECK-NEXT:    retl
260  %1 = load <16 x i8>, <16 x i8>* %a1
261  %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %1, i8 7) ; <<16 x i8>> [#uses=1]
262  ret <16 x i8> %res
263}
264