xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/sse42-intrinsics-fast-isel.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=i386-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=ALL --check-prefix=X32
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=ALL --check-prefix=X64
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/sse42-builtins.c
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpestra(<2 x i64> %a0, i32 %a1, <2 x i64> %a2, i32 %a3) nounwind {
8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpestra:
9*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
10*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebx
11*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
12*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
13*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %ebx, %ebx
14*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpestri $7, %xmm1, %xmm0
15*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seta %bl
16*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ebx, %eax
17*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebx
18*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
19*9880d681SAndroid Build Coastguard Worker;
20*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpestra:
21*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
22*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %r8d, %r8d
23*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
24*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, %edx
25*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpestri $7, %xmm1, %xmm0
26*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seta %r8b
27*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %r8d, %eax
28*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
29*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
30*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <16 x i8>
31*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpestria128(<16 x i8> %arg0, i32 %a1, <16 x i8> %arg2, i32 %a3, i8 7)
32*9880d681SAndroid Build Coastguard Worker  ret i32 %res
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpestria128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpestrc(<2 x i64> %a0, i32 %a1, <2 x i64> %a2, i32 %a3) {
37*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpestrc:
38*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
39*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
40*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
41*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpestri $7, %xmm1, %xmm0
42*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sbbl %eax, %eax
43*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $1, %eax
44*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
45*9880d681SAndroid Build Coastguard Worker;
46*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpestrc:
47*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
48*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
49*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, %edx
50*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpestri $7, %xmm1, %xmm0
51*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sbbl %eax, %eax
52*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $1, %eax
53*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
54*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
55*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <16 x i8>
56*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpestric128(<16 x i8> %arg0, i32 %a1, <16 x i8> %arg2, i32 %a3, i8 7)
57*9880d681SAndroid Build Coastguard Worker  ret i32 %res
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpestric128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpestri(<2 x i64> %a0, i32 %a1, <2 x i64> %a2, i32 %a3) {
62*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpestri:
63*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
64*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
65*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
66*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpestri $7, %xmm1, %xmm0
67*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ecx, %eax
68*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
69*9880d681SAndroid Build Coastguard Worker;
70*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpestri:
71*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
72*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
73*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, %edx
74*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpestri $7, %xmm1, %xmm0
75*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, %eax
76*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
77*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
78*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <16 x i8>
79*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %arg0, i32 %a1, <16 x i8> %arg2, i32 %a3, i8 7)
80*9880d681SAndroid Build Coastguard Worker  ret i32 %res
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cmpestrm(<2 x i64> %a0, i32 %a1, <2 x i64> %a2, i32 %a3) {
85*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpestrm:
86*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
87*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
88*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
89*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpestrm $7, %xmm1, %xmm0
90*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
91*9880d681SAndroid Build Coastguard Worker;
92*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpestrm:
93*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
94*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
95*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, %edx
96*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpestrm $7, %xmm1, %xmm0
97*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
98*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
99*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <16 x i8>
100*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %arg0, i32 %a1, <16 x i8> %arg2, i32 %a3, i8 7)
101*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
102*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpestro(<2 x i64> %a0, i32 %a1, <2 x i64> %a2, i32 %a3) nounwind {
107*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpestro:
108*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
109*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebx
110*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
111*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
112*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %ebx, %ebx
113*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpestri $7, %xmm1, %xmm0
114*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seto %bl
115*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ebx, %eax
116*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebx
117*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
118*9880d681SAndroid Build Coastguard Worker;
119*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpestro:
120*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
121*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %r8d, %r8d
122*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
123*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, %edx
124*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpestri $7, %xmm1, %xmm0
125*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seto %r8b
126*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %r8d, %eax
127*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
128*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
129*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <16 x i8>
130*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8> %arg0, i32 %a1, <16 x i8> %arg2, i32 %a3, i8 7)
131*9880d681SAndroid Build Coastguard Worker  ret i32 %res
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpestrs(<2 x i64> %a0, i32 %a1, <2 x i64> %a2, i32 %a3) nounwind {
136*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpestrs:
137*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
138*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebx
139*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
140*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
141*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %ebx, %ebx
142*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpestri $7, %xmm1, %xmm0
143*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sets %bl
144*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ebx, %eax
145*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebx
146*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
147*9880d681SAndroid Build Coastguard Worker;
148*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpestrs:
149*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
150*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %r8d, %r8d
151*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
152*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, %edx
153*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpestri $7, %xmm1, %xmm0
154*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sets %r8b
155*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %r8d, %eax
156*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
157*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
158*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <16 x i8>
159*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpestris128(<16 x i8> %arg0, i32 %a1, <16 x i8> %arg2, i32 %a3, i8 7)
160*9880d681SAndroid Build Coastguard Worker  ret i32 %res
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpestris128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpestrz(<2 x i64> %a0, i32 %a1, <2 x i64> %a2, i32 %a3) nounwind {
165*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpestrz:
166*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
167*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebx
168*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
169*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
170*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %ebx, %ebx
171*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpestri $7, %xmm1, %xmm0
172*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sete %bl
173*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ebx, %eax
174*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebx
175*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
176*9880d681SAndroid Build Coastguard Worker;
177*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpestrz:
178*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
179*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %r8d, %r8d
180*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
181*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, %edx
182*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpestri $7, %xmm1, %xmm0
183*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sete %r8b
184*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %r8d, %eax
185*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
186*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
187*9880d681SAndroid Build Coastguard Worker  %arg2 = bitcast <2 x i64> %a2 to <16 x i8>
188*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8> %arg0, i32 %a1, <16 x i8> %arg2, i32 %a3, i8 7)
189*9880d681SAndroid Build Coastguard Worker  ret i32 %res
190*9880d681SAndroid Build Coastguard Worker}
191*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cmpgt_epi64(<2 x i64> %a0, <2 x i64> %a1) {
194*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpgt_epi64:
195*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
196*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpgtq %xmm1, %xmm0
197*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
198*9880d681SAndroid Build Coastguard Worker;
199*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpgt_epi64:
200*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
201*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpgtq %xmm1, %xmm0
202*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
203*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt <2 x i64> %a0, %a1
204*9880d681SAndroid Build Coastguard Worker  %res = sext <2 x i1> %cmp to <2 x i64>
205*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
206*9880d681SAndroid Build Coastguard Worker}
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpistra(<2 x i64> %a0, <2 x i64> %a1) {
209*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpistra:
210*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
211*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
212*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpistri $7, %xmm1, %xmm0
213*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seta %al
214*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
215*9880d681SAndroid Build Coastguard Worker;
216*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpistra:
217*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
218*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
219*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpistri $7, %xmm1, %xmm0
220*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seta %al
221*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
222*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
223*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
224*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpistria128(<16 x i8> %arg0, <16 x i8> %arg1, i8 7)
225*9880d681SAndroid Build Coastguard Worker  ret i32 %res
226*9880d681SAndroid Build Coastguard Worker}
227*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpistria128(<16 x i8>, <16 x i8>, i8) nounwind readnone
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpistrc(<2 x i64> %a0, <2 x i64> %a1) {
230*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpistrc:
231*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
232*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpistri $7, %xmm1, %xmm0
233*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sbbl %eax, %eax
234*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $1, %eax
235*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
236*9880d681SAndroid Build Coastguard Worker;
237*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpistrc:
238*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
239*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpistri $7, %xmm1, %xmm0
240*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sbbl %eax, %eax
241*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $1, %eax
242*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
243*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
244*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
245*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpistric128(<16 x i8> %arg0, <16 x i8> %arg1, i8 7)
246*9880d681SAndroid Build Coastguard Worker  ret i32 %res
247*9880d681SAndroid Build Coastguard Worker}
248*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpistric128(<16 x i8>, <16 x i8>, i8) nounwind readnone
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpistri(<2 x i64> %a0, <2 x i64> %a1) {
251*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpistri:
252*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
253*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpistri $7, %xmm1, %xmm0
254*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ecx, %eax
255*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
256*9880d681SAndroid Build Coastguard Worker;
257*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpistri:
258*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
259*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpistri $7, %xmm1, %xmm0
260*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, %eax
261*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
262*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
263*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
264*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %arg0, <16 x i8> %arg1, i8 7)
265*9880d681SAndroid Build Coastguard Worker  ret i32 %res
266*9880d681SAndroid Build Coastguard Worker}
267*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone
268*9880d681SAndroid Build Coastguard Worker
269*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_cmpistrm(<2 x i64> %a0, <2 x i64> %a1) {
270*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpistrm:
271*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
272*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpistrm $7, %xmm1, %xmm0
273*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
274*9880d681SAndroid Build Coastguard Worker;
275*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpistrm:
276*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
277*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpistrm $7, %xmm1, %xmm0
278*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
279*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
280*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
281*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %arg0, <16 x i8> %arg1, i8 7)
282*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <16 x i8> %res to <2 x i64>
283*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %bc
284*9880d681SAndroid Build Coastguard Worker}
285*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone
286*9880d681SAndroid Build Coastguard Worker
287*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpistro(<2 x i64> %a0, <2 x i64> %a1) {
288*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpistro:
289*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
290*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
291*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpistri $7, %xmm1, %xmm0
292*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seto %al
293*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
294*9880d681SAndroid Build Coastguard Worker;
295*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpistro:
296*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
297*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
298*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpistri $7, %xmm1, %xmm0
299*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seto %al
300*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
301*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
302*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
303*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8> %arg0, <16 x i8> %arg1, i8 7)
304*9880d681SAndroid Build Coastguard Worker  ret i32 %res
305*9880d681SAndroid Build Coastguard Worker}
306*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8>, <16 x i8>, i8) nounwind readnone
307*9880d681SAndroid Build Coastguard Worker
308*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpistrs(<2 x i64> %a0, <2 x i64> %a1) {
309*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpistrs:
310*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
311*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
312*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpistri $7, %xmm1, %xmm0
313*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sets %al
314*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
315*9880d681SAndroid Build Coastguard Worker;
316*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpistrs:
317*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
318*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
319*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpistri $7, %xmm1, %xmm0
320*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sets %al
321*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
322*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
323*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
324*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpistris128(<16 x i8> %arg0, <16 x i8> %arg1, i8 7)
325*9880d681SAndroid Build Coastguard Worker  ret i32 %res
326*9880d681SAndroid Build Coastguard Worker}
327*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpistris128(<16 x i8>, <16 x i8>, i8) nounwind readnone
328*9880d681SAndroid Build Coastguard Worker
329*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cmpistrz(<2 x i64> %a0, <2 x i64> %a1) {
330*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpistrz:
331*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
332*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
333*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pcmpistri $7, %xmm1, %xmm0
334*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sete %al
335*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
336*9880d681SAndroid Build Coastguard Worker;
337*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpistrz:
338*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
339*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
340*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pcmpistri $7, %xmm1, %xmm0
341*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sete %al
342*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
343*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <2 x i64> %a0 to <16 x i8>
344*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <2 x i64> %a1 to <16 x i8>
345*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8> %arg0, <16 x i8> %arg1, i8 7)
346*9880d681SAndroid Build Coastguard Worker  ret i32 %res
347*9880d681SAndroid Build Coastguard Worker}
348*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8>, <16 x i8>, i8) nounwind readnone
349*9880d681SAndroid Build Coastguard Worker
350*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_crc32_u8(i32 %a0, i8 %a1) {
351*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_crc32_u8:
352*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
353*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movb {{[0-9]+}}(%esp), %cl
354*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
355*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    crc32b %cl, %eax
356*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
357*9880d681SAndroid Build Coastguard Worker;
358*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_crc32_u8:
359*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
360*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    crc32b %sil, %edi
361*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
362*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
363*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.crc32.32.8(i32 %a0, i8 %a1)
364*9880d681SAndroid Build Coastguard Worker  ret i32 %res
365*9880d681SAndroid Build Coastguard Worker}
366*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.crc32.32.8(i32, i8) nounwind readnone
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_crc32_u16(i32 %a0, i16 %a1) {
369*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_crc32_u16:
370*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
371*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
372*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
373*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    crc32w %cx, %eax
374*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
375*9880d681SAndroid Build Coastguard Worker;
376*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_crc32_u16:
377*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
378*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    crc32w %si, %edi
379*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
380*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
381*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.crc32.32.16(i32 %a0, i16 %a1)
382*9880d681SAndroid Build Coastguard Worker  ret i32 %res
383*9880d681SAndroid Build Coastguard Worker}
384*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.crc32.32.16(i32, i16) nounwind readnone
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_crc32_u32(i32 %a0, i32 %a1) {
387*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_crc32_u32:
388*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
389*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
390*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    crc32l {{[0-9]+}}(%esp), %eax
391*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
392*9880d681SAndroid Build Coastguard Worker;
393*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_crc32_u32:
394*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
395*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    crc32l %esi, %edi
396*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, %eax
397*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
398*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse42.crc32.32.32(i32 %a0, i32 %a1)
399*9880d681SAndroid Build Coastguard Worker  ret i32 %res
400*9880d681SAndroid Build Coastguard Worker}
401*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.crc32.32.32(i32, i32) nounwind readnone
402