4870434a8aefe187c786ab924ff77daf034e82f7
[lldb.git] / llvm / test / CodeGen / X86 / sse41-schedule.ll
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+sse4.1 | FileCheck %s --check-prefixes=CHECK,GENERIC
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,SLM
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,SANDY-SSE
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-avx2   | FileCheck %s --check-prefixes=CHECK,SANDY
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,SANDY-SSE
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-avx2   | FileCheck %s --check-prefixes=CHECK,SANDY
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,HASWELL-SSE
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-avx2   | FileCheck %s --check-prefixes=CHECK,HASWELL
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,BROADWELL-SSE
11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-avx2   | FileCheck %s --check-prefixes=CHECK,BROADWELL
12 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,SKYLAKE-SSE
13 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-avx2   | FileCheck %s --check-prefixes=CHECK,SKYLAKE
14 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,SKX-SSE
15 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-avx2   | FileCheck %s --check-prefixes=CHECK,SKX
16 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=bdver2 -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,BDVER2-SSE
17 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=bdver2 -mattr=-avx2,-xop   | FileCheck %s --check-prefixes=CHECK,BDVER2
18 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,BTVER2-SSE
19 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-avx2   | FileCheck %s --check-prefixes=CHECK,BTVER2
20 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-sse4.2 | FileCheck %s --check-prefixes=CHECK,ZNVER1-SSE
21 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-avx2   | FileCheck %s --check-prefixes=CHECK,ZNVER1
22
23 define <2 x double> @test_blendpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
24 ; GENERIC-LABEL: test_blendpd:
25 ; GENERIC:       # %bb.0:
26 ; GENERIC-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.50]
27 ; GENERIC-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
28 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
29 ; GENERIC-NEXT:    retq # sched: [1:1.00]
30 ;
31 ; SLM-LABEL: test_blendpd:
32 ; SLM:       # %bb.0:
33 ; SLM-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:1.00]
34 ; SLM-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [4:1.00]
35 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
36 ; SLM-NEXT:    retq # sched: [4:1.00]
37 ;
38 ; SANDY-SSE-LABEL: test_blendpd:
39 ; SANDY-SSE:       # %bb.0:
40 ; SANDY-SSE-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.50]
41 ; SANDY-SSE-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
42 ; SANDY-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
43 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
44 ;
45 ; SANDY-LABEL: test_blendpd:
46 ; SANDY:       # %bb.0:
47 ; SANDY-NEXT:    vblendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.50]
48 ; SANDY-NEXT:    vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
49 ; SANDY-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
50 ; SANDY-NEXT:    retq # sched: [1:1.00]
51 ;
52 ; HASWELL-SSE-LABEL: test_blendpd:
53 ; HASWELL-SSE:       # %bb.0:
54 ; HASWELL-SSE-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.33]
55 ; HASWELL-SSE-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
56 ; HASWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
57 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
58 ;
59 ; HASWELL-LABEL: test_blendpd:
60 ; HASWELL:       # %bb.0:
61 ; HASWELL-NEXT:    vblendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.33]
62 ; HASWELL-NEXT:    vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
63 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
64 ; HASWELL-NEXT:    retq # sched: [7:1.00]
65 ;
66 ; BROADWELL-SSE-LABEL: test_blendpd:
67 ; BROADWELL-SSE:       # %bb.0:
68 ; BROADWELL-SSE-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.33]
69 ; BROADWELL-SSE-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [6:0.50]
70 ; BROADWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
71 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
72 ;
73 ; BROADWELL-LABEL: test_blendpd:
74 ; BROADWELL:       # %bb.0:
75 ; BROADWELL-NEXT:    vblendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.33]
76 ; BROADWELL-NEXT:    vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [6:0.50]
77 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
78 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
79 ;
80 ; SKYLAKE-SSE-LABEL: test_blendpd:
81 ; SKYLAKE-SSE:       # %bb.0:
82 ; SKYLAKE-SSE-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.33]
83 ; SKYLAKE-SSE-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
84 ; SKYLAKE-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
85 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
86 ;
87 ; SKYLAKE-LABEL: test_blendpd:
88 ; SKYLAKE:       # %bb.0:
89 ; SKYLAKE-NEXT:    vblendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.33]
90 ; SKYLAKE-NEXT:    vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
91 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
92 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
93 ;
94 ; SKX-SSE-LABEL: test_blendpd:
95 ; SKX-SSE:       # %bb.0:
96 ; SKX-SSE-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.33]
97 ; SKX-SSE-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
98 ; SKX-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
99 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
100 ;
101 ; SKX-LABEL: test_blendpd:
102 ; SKX:       # %bb.0:
103 ; SKX-NEXT:    vblendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.33]
104 ; SKX-NEXT:    vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
105 ; SKX-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
106 ; SKX-NEXT:    retq # sched: [7:1.00]
107 ;
108 ; BDVER2-SSE-LABEL: test_blendpd:
109 ; BDVER2-SSE:       # %bb.0:
110 ; BDVER2-SSE-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [2:0.50]
111 ; BDVER2-SSE-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
112 ; BDVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [5:1.00]
113 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
114 ;
115 ; BDVER2-LABEL: test_blendpd:
116 ; BDVER2:       # %bb.0:
117 ; BDVER2-NEXT:    vblendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [2:0.50]
118 ; BDVER2-NEXT:    vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [7:0.50]
119 ; BDVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [5:1.00]
120 ; BDVER2-NEXT:    retq # sched: [5:1.00]
121 ;
122 ; BTVER2-SSE-LABEL: test_blendpd:
123 ; BTVER2-SSE:       # %bb.0:
124 ; BTVER2-SSE-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.50]
125 ; BTVER2-SSE-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [6:1.00]
126 ; BTVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
127 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
128 ;
129 ; BTVER2-LABEL: test_blendpd:
130 ; BTVER2:       # %bb.0:
131 ; BTVER2-NEXT:    vblendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.50]
132 ; BTVER2-NEXT:    vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [6:1.00]
133 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
134 ; BTVER2-NEXT:    retq # sched: [4:1.00]
135 ;
136 ; ZNVER1-SSE-LABEL: test_blendpd:
137 ; ZNVER1-SSE:       # %bb.0:
138 ; ZNVER1-SSE-NEXT:    blendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.50]
139 ; ZNVER1-SSE-NEXT:    blendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [8:0.50]
140 ; ZNVER1-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
141 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
142 ;
143 ; ZNVER1-LABEL: test_blendpd:
144 ; ZNVER1:       # %bb.0:
145 ; ZNVER1-NEXT:    vblendpd {{.*#+}} xmm1 = xmm0[0],xmm1[1] sched: [1:0.50]
146 ; ZNVER1-NEXT:    vblendpd {{.*#+}} xmm0 = xmm0[0],mem[1] sched: [8:0.50]
147 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
148 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
149   %1 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 0, i32 3>
150   %2 = load <2 x double>, <2 x double> *%a2, align 16
151   %3 = shufflevector <2 x double> %1, <2 x double> %2, <2 x i32> <i32 0, i32 3>
152   %4 = fadd <2 x double> %1, %3
153   ret <2 x double> %4
154 }
155
156 define <4 x float> @test_blendps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
157 ; GENERIC-LABEL: test_blendps:
158 ; GENERIC:       # %bb.0:
159 ; GENERIC-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.50]
160 ; GENERIC-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
161 ; GENERIC-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
162 ; GENERIC-NEXT:    retq # sched: [1:1.00]
163 ;
164 ; SLM-LABEL: test_blendps:
165 ; SLM:       # %bb.0:
166 ; SLM-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:1.00]
167 ; SLM-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [4:1.00]
168 ; SLM-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
169 ; SLM-NEXT:    retq # sched: [4:1.00]
170 ;
171 ; SANDY-SSE-LABEL: test_blendps:
172 ; SANDY-SSE:       # %bb.0:
173 ; SANDY-SSE-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.50]
174 ; SANDY-SSE-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
175 ; SANDY-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
176 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
177 ;
178 ; SANDY-LABEL: test_blendps:
179 ; SANDY:       # %bb.0:
180 ; SANDY-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.50]
181 ; SANDY-NEXT:    vblendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
182 ; SANDY-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
183 ; SANDY-NEXT:    retq # sched: [1:1.00]
184 ;
185 ; HASWELL-SSE-LABEL: test_blendps:
186 ; HASWELL-SSE:       # %bb.0:
187 ; HASWELL-SSE-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.33]
188 ; HASWELL-SSE-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
189 ; HASWELL-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
190 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
191 ;
192 ; HASWELL-LABEL: test_blendps:
193 ; HASWELL:       # %bb.0:
194 ; HASWELL-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.33]
195 ; HASWELL-NEXT:    vblendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
196 ; HASWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
197 ; HASWELL-NEXT:    retq # sched: [7:1.00]
198 ;
199 ; BROADWELL-SSE-LABEL: test_blendps:
200 ; BROADWELL-SSE:       # %bb.0:
201 ; BROADWELL-SSE-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.33]
202 ; BROADWELL-SSE-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [6:0.50]
203 ; BROADWELL-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
204 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
205 ;
206 ; BROADWELL-LABEL: test_blendps:
207 ; BROADWELL:       # %bb.0:
208 ; BROADWELL-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.33]
209 ; BROADWELL-NEXT:    vblendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [6:0.50]
210 ; BROADWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
211 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
212 ;
213 ; SKYLAKE-SSE-LABEL: test_blendps:
214 ; SKYLAKE-SSE:       # %bb.0:
215 ; SKYLAKE-SSE-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.33]
216 ; SKYLAKE-SSE-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
217 ; SKYLAKE-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [4:0.50]
218 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
219 ;
220 ; SKYLAKE-LABEL: test_blendps:
221 ; SKYLAKE:       # %bb.0:
222 ; SKYLAKE-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.33]
223 ; SKYLAKE-NEXT:    vblendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
224 ; SKYLAKE-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
225 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
226 ;
227 ; SKX-SSE-LABEL: test_blendps:
228 ; SKX-SSE:       # %bb.0:
229 ; SKX-SSE-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.33]
230 ; SKX-SSE-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
231 ; SKX-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [4:0.50]
232 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
233 ;
234 ; SKX-LABEL: test_blendps:
235 ; SKX:       # %bb.0:
236 ; SKX-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.33]
237 ; SKX-NEXT:    vblendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
238 ; SKX-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
239 ; SKX-NEXT:    retq # sched: [7:1.00]
240 ;
241 ; BDVER2-SSE-LABEL: test_blendps:
242 ; BDVER2-SSE:       # %bb.0:
243 ; BDVER2-SSE-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [2:0.50]
244 ; BDVER2-SSE-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
245 ; BDVER2-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [5:1.00]
246 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
247 ;
248 ; BDVER2-LABEL: test_blendps:
249 ; BDVER2:       # %bb.0:
250 ; BDVER2-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [2:0.50]
251 ; BDVER2-NEXT:    vblendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [7:0.50]
252 ; BDVER2-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
253 ; BDVER2-NEXT:    retq # sched: [5:1.00]
254 ;
255 ; BTVER2-SSE-LABEL: test_blendps:
256 ; BTVER2-SSE:       # %bb.0:
257 ; BTVER2-SSE-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.50]
258 ; BTVER2-SSE-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [6:1.00]
259 ; BTVER2-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
260 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
261 ;
262 ; BTVER2-LABEL: test_blendps:
263 ; BTVER2:       # %bb.0:
264 ; BTVER2-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.50]
265 ; BTVER2-NEXT:    vblendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [6:1.00]
266 ; BTVER2-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
267 ; BTVER2-NEXT:    retq # sched: [4:1.00]
268 ;
269 ; ZNVER1-SSE-LABEL: test_blendps:
270 ; ZNVER1-SSE:       # %bb.0:
271 ; ZNVER1-SSE-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.50]
272 ; ZNVER1-SSE-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [8:0.50]
273 ; ZNVER1-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
274 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
275 ;
276 ; ZNVER1-LABEL: test_blendps:
277 ; ZNVER1:       # %bb.0:
278 ; ZNVER1-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2],xmm0[3] sched: [1:0.50]
279 ; ZNVER1-NEXT:    vblendps {{.*#+}} xmm1 = xmm1[0],mem[1],xmm1[2,3] sched: [8:0.50]
280 ; ZNVER1-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
281 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
282   %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 5, i32 6, i32 3>
283   %2 = load <4 x float>, <4 x float> *%a2, align 16
284   %3 = shufflevector <4 x float> %a1, <4 x float> %2, <4 x i32> <i32 0, i32 5, i32 2, i32 3>
285   %4 = fadd <4 x float> %1, %3
286   ret <4 x float> %4
287 }
288
289 define <2 x double> @test_blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) {
290 ; GENERIC-LABEL: test_blendvpd:
291 ; GENERIC:       # %bb.0:
292 ; GENERIC-NEXT:    movapd %xmm0, %xmm3 # sched: [1:1.00]
293 ; GENERIC-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
294 ; GENERIC-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [2:1.00]
295 ; GENERIC-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [8:1.00]
296 ; GENERIC-NEXT:    movapd %xmm3, %xmm0 # sched: [1:1.00]
297 ; GENERIC-NEXT:    retq # sched: [1:1.00]
298 ;
299 ; SLM-LABEL: test_blendvpd:
300 ; SLM:       # %bb.0:
301 ; SLM-NEXT:    movapd %xmm0, %xmm3 # sched: [1:0.50]
302 ; SLM-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.50]
303 ; SLM-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [1:1.00]
304 ; SLM-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [4:1.00]
305 ; SLM-NEXT:    movapd %xmm3, %xmm0 # sched: [1:0.50]
306 ; SLM-NEXT:    retq # sched: [4:1.00]
307 ;
308 ; SANDY-SSE-LABEL: test_blendvpd:
309 ; SANDY-SSE:       # %bb.0:
310 ; SANDY-SSE-NEXT:    movapd %xmm0, %xmm3 # sched: [1:1.00]
311 ; SANDY-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
312 ; SANDY-SSE-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [2:1.00]
313 ; SANDY-SSE-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [8:1.00]
314 ; SANDY-SSE-NEXT:    movapd %xmm3, %xmm0 # sched: [1:1.00]
315 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
316 ;
317 ; SANDY-LABEL: test_blendvpd:
318 ; SANDY:       # %bb.0:
319 ; SANDY-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
320 ; SANDY-NEXT:    vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
321 ; SANDY-NEXT:    retq # sched: [1:1.00]
322 ;
323 ; HASWELL-SSE-LABEL: test_blendvpd:
324 ; HASWELL-SSE:       # %bb.0:
325 ; HASWELL-SSE-NEXT:    movapd %xmm0, %xmm3 # sched: [1:1.00]
326 ; HASWELL-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
327 ; HASWELL-SSE-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
328 ; HASWELL-SSE-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [8:2.00]
329 ; HASWELL-SSE-NEXT:    movapd %xmm3, %xmm0 # sched: [1:1.00]
330 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
331 ;
332 ; HASWELL-LABEL: test_blendvpd:
333 ; HASWELL:       # %bb.0:
334 ; HASWELL-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
335 ; HASWELL-NEXT:    vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:2.00]
336 ; HASWELL-NEXT:    retq # sched: [7:1.00]
337 ;
338 ; BROADWELL-SSE-LABEL: test_blendvpd:
339 ; BROADWELL-SSE:       # %bb.0:
340 ; BROADWELL-SSE-NEXT:    movapd %xmm0, %xmm3 # sched: [1:1.00]
341 ; BROADWELL-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
342 ; BROADWELL-SSE-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
343 ; BROADWELL-SSE-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [7:2.00]
344 ; BROADWELL-SSE-NEXT:    movapd %xmm3, %xmm0 # sched: [1:1.00]
345 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
346 ;
347 ; BROADWELL-LABEL: test_blendvpd:
348 ; BROADWELL:       # %bb.0:
349 ; BROADWELL-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
350 ; BROADWELL-NEXT:    vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
351 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
352 ;
353 ; SKYLAKE-SSE-LABEL: test_blendvpd:
354 ; SKYLAKE-SSE:       # %bb.0:
355 ; SKYLAKE-SSE-NEXT:    movapd %xmm0, %xmm3 # sched: [1:0.33]
356 ; SKYLAKE-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.33]
357 ; SKYLAKE-SSE-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [2:0.67]
358 ; SKYLAKE-SSE-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [8:0.67]
359 ; SKYLAKE-SSE-NEXT:    movapd %xmm3, %xmm0 # sched: [1:0.33]
360 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
361 ;
362 ; SKYLAKE-LABEL: test_blendvpd:
363 ; SKYLAKE:       # %bb.0:
364 ; SKYLAKE-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:0.67]
365 ; SKYLAKE-NEXT:    vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:0.67]
366 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
367 ;
368 ; SKX-SSE-LABEL: test_blendvpd:
369 ; SKX-SSE:       # %bb.0:
370 ; SKX-SSE-NEXT:    movapd %xmm0, %xmm3 # sched: [1:0.33]
371 ; SKX-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.33]
372 ; SKX-SSE-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [2:0.67]
373 ; SKX-SSE-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [8:0.67]
374 ; SKX-SSE-NEXT:    movapd %xmm3, %xmm0 # sched: [1:0.33]
375 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
376 ;
377 ; SKX-LABEL: test_blendvpd:
378 ; SKX:       # %bb.0:
379 ; SKX-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:0.67]
380 ; SKX-NEXT:    vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:0.67]
381 ; SKX-NEXT:    retq # sched: [7:1.00]
382 ;
383 ; BDVER2-SSE-LABEL: test_blendvpd:
384 ; BDVER2-SSE:       # %bb.0:
385 ; BDVER2-SSE-NEXT:    movapd %xmm0, %xmm3 # sched: [1:0.50]
386 ; BDVER2-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.50]
387 ; BDVER2-SSE-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
388 ; BDVER2-SSE-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [7:2.00]
389 ; BDVER2-SSE-NEXT:    movapd %xmm3, %xmm0 # sched: [1:0.50]
390 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
391 ;
392 ; BDVER2-LABEL: test_blendvpd:
393 ; BDVER2:       # %bb.0:
394 ; BDVER2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
395 ; BDVER2-NEXT:    vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
396 ; BDVER2-NEXT:    retq # sched: [5:1.00]
397 ;
398 ; BTVER2-SSE-LABEL: test_blendvpd:
399 ; BTVER2-SSE:       # %bb.0:
400 ; BTVER2-SSE-NEXT:    movapd %xmm0, %xmm3 # sched: [1:0.50]
401 ; BTVER2-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.50]
402 ; BTVER2-SSE-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
403 ; BTVER2-SSE-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [7:2.00]
404 ; BTVER2-SSE-NEXT:    movapd %xmm3, %xmm0 # sched: [1:0.50]
405 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
406 ;
407 ; BTVER2-LABEL: test_blendvpd:
408 ; BTVER2:       # %bb.0:
409 ; BTVER2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
410 ; BTVER2-NEXT:    vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
411 ; BTVER2-NEXT:    retq # sched: [4:1.00]
412 ;
413 ; ZNVER1-SSE-LABEL: test_blendvpd:
414 ; ZNVER1-SSE:       # %bb.0:
415 ; ZNVER1-SSE-NEXT:    movapd %xmm0, %xmm3 # sched: [1:0.25]
416 ; ZNVER1-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.25]
417 ; ZNVER1-SSE-NEXT:    blendvpd %xmm0, %xmm1, %xmm3 # sched: [1:0.50]
418 ; ZNVER1-SSE-NEXT:    blendvpd %xmm0, (%rdi), %xmm3 # sched: [8:0.50]
419 ; ZNVER1-SSE-NEXT:    movapd %xmm3, %xmm0 # sched: [1:0.25]
420 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
421 ;
422 ; ZNVER1-LABEL: test_blendvpd:
423 ; ZNVER1:       # %bb.0:
424 ; ZNVER1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
425 ; ZNVER1-NEXT:    vblendvpd %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
426 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
427   %1 = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
428   %2 = load <2 x double>, <2 x double> *%a3, align 16
429   %3 = call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %1, <2 x double> %2, <2 x double> %a2)
430   ret <2 x double> %3
431 }
432 declare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
433
434 define <4 x float> @test_blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) {
435 ; GENERIC-LABEL: test_blendvps:
436 ; GENERIC:       # %bb.0:
437 ; GENERIC-NEXT:    movaps %xmm0, %xmm3 # sched: [1:1.00]
438 ; GENERIC-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
439 ; GENERIC-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [2:1.00]
440 ; GENERIC-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [8:1.00]
441 ; GENERIC-NEXT:    movaps %xmm3, %xmm0 # sched: [1:1.00]
442 ; GENERIC-NEXT:    retq # sched: [1:1.00]
443 ;
444 ; SLM-LABEL: test_blendvps:
445 ; SLM:       # %bb.0:
446 ; SLM-NEXT:    movaps %xmm0, %xmm3 # sched: [1:0.50]
447 ; SLM-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.50]
448 ; SLM-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [1:1.00]
449 ; SLM-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [4:1.00]
450 ; SLM-NEXT:    movaps %xmm3, %xmm0 # sched: [1:0.50]
451 ; SLM-NEXT:    retq # sched: [4:1.00]
452 ;
453 ; SANDY-SSE-LABEL: test_blendvps:
454 ; SANDY-SSE:       # %bb.0:
455 ; SANDY-SSE-NEXT:    movaps %xmm0, %xmm3 # sched: [1:1.00]
456 ; SANDY-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
457 ; SANDY-SSE-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [2:1.00]
458 ; SANDY-SSE-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [8:1.00]
459 ; SANDY-SSE-NEXT:    movaps %xmm3, %xmm0 # sched: [1:1.00]
460 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
461 ;
462 ; SANDY-LABEL: test_blendvps:
463 ; SANDY:       # %bb.0:
464 ; SANDY-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
465 ; SANDY-NEXT:    vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
466 ; SANDY-NEXT:    retq # sched: [1:1.00]
467 ;
468 ; HASWELL-SSE-LABEL: test_blendvps:
469 ; HASWELL-SSE:       # %bb.0:
470 ; HASWELL-SSE-NEXT:    movaps %xmm0, %xmm3 # sched: [1:1.00]
471 ; HASWELL-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
472 ; HASWELL-SSE-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
473 ; HASWELL-SSE-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [8:2.00]
474 ; HASWELL-SSE-NEXT:    movaps %xmm3, %xmm0 # sched: [1:1.00]
475 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
476 ;
477 ; HASWELL-LABEL: test_blendvps:
478 ; HASWELL:       # %bb.0:
479 ; HASWELL-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
480 ; HASWELL-NEXT:    vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:2.00]
481 ; HASWELL-NEXT:    retq # sched: [7:1.00]
482 ;
483 ; BROADWELL-SSE-LABEL: test_blendvps:
484 ; BROADWELL-SSE:       # %bb.0:
485 ; BROADWELL-SSE-NEXT:    movaps %xmm0, %xmm3 # sched: [1:1.00]
486 ; BROADWELL-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
487 ; BROADWELL-SSE-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
488 ; BROADWELL-SSE-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [7:2.00]
489 ; BROADWELL-SSE-NEXT:    movaps %xmm3, %xmm0 # sched: [1:1.00]
490 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
491 ;
492 ; BROADWELL-LABEL: test_blendvps:
493 ; BROADWELL:       # %bb.0:
494 ; BROADWELL-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
495 ; BROADWELL-NEXT:    vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
496 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
497 ;
498 ; SKYLAKE-SSE-LABEL: test_blendvps:
499 ; SKYLAKE-SSE:       # %bb.0:
500 ; SKYLAKE-SSE-NEXT:    movaps %xmm0, %xmm3 # sched: [1:0.33]
501 ; SKYLAKE-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.33]
502 ; SKYLAKE-SSE-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [2:0.67]
503 ; SKYLAKE-SSE-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [8:0.67]
504 ; SKYLAKE-SSE-NEXT:    movaps %xmm3, %xmm0 # sched: [1:0.33]
505 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
506 ;
507 ; SKYLAKE-LABEL: test_blendvps:
508 ; SKYLAKE:       # %bb.0:
509 ; SKYLAKE-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:0.67]
510 ; SKYLAKE-NEXT:    vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:0.67]
511 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
512 ;
513 ; SKX-SSE-LABEL: test_blendvps:
514 ; SKX-SSE:       # %bb.0:
515 ; SKX-SSE-NEXT:    movaps %xmm0, %xmm3 # sched: [1:0.33]
516 ; SKX-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.33]
517 ; SKX-SSE-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [2:0.67]
518 ; SKX-SSE-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [8:0.67]
519 ; SKX-SSE-NEXT:    movaps %xmm3, %xmm0 # sched: [1:0.33]
520 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
521 ;
522 ; SKX-LABEL: test_blendvps:
523 ; SKX:       # %bb.0:
524 ; SKX-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:0.67]
525 ; SKX-NEXT:    vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:0.67]
526 ; SKX-NEXT:    retq # sched: [7:1.00]
527 ;
528 ; BDVER2-SSE-LABEL: test_blendvps:
529 ; BDVER2-SSE:       # %bb.0:
530 ; BDVER2-SSE-NEXT:    movaps %xmm0, %xmm3 # sched: [1:0.50]
531 ; BDVER2-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.50]
532 ; BDVER2-SSE-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
533 ; BDVER2-SSE-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [7:2.00]
534 ; BDVER2-SSE-NEXT:    movaps %xmm3, %xmm0 # sched: [1:0.50]
535 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
536 ;
537 ; BDVER2-LABEL: test_blendvps:
538 ; BDVER2:       # %bb.0:
539 ; BDVER2-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
540 ; BDVER2-NEXT:    vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
541 ; BDVER2-NEXT:    retq # sched: [5:1.00]
542 ;
543 ; BTVER2-SSE-LABEL: test_blendvps:
544 ; BTVER2-SSE:       # %bb.0:
545 ; BTVER2-SSE-NEXT:    movaps %xmm0, %xmm3 # sched: [1:0.50]
546 ; BTVER2-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.50]
547 ; BTVER2-SSE-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
548 ; BTVER2-SSE-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [7:2.00]
549 ; BTVER2-SSE-NEXT:    movaps %xmm3, %xmm0 # sched: [1:0.50]
550 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
551 ;
552 ; BTVER2-LABEL: test_blendvps:
553 ; BTVER2:       # %bb.0:
554 ; BTVER2-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
555 ; BTVER2-NEXT:    vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
556 ; BTVER2-NEXT:    retq # sched: [4:1.00]
557 ;
558 ; ZNVER1-SSE-LABEL: test_blendvps:
559 ; ZNVER1-SSE:       # %bb.0:
560 ; ZNVER1-SSE-NEXT:    movaps %xmm0, %xmm3 # sched: [1:0.25]
561 ; ZNVER1-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.25]
562 ; ZNVER1-SSE-NEXT:    blendvps %xmm0, %xmm1, %xmm3 # sched: [1:0.50]
563 ; ZNVER1-SSE-NEXT:    blendvps %xmm0, (%rdi), %xmm3 # sched: [8:0.50]
564 ; ZNVER1-SSE-NEXT:    movaps %xmm3, %xmm0 # sched: [1:0.25]
565 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
566 ;
567 ; ZNVER1-LABEL: test_blendvps:
568 ; ZNVER1:       # %bb.0:
569 ; ZNVER1-NEXT:    vblendvps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
570 ; ZNVER1-NEXT:    vblendvps %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
571 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
572   %1 = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
573   %2 = load <4 x float>, <4 x float> *%a3
574   %3 = call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %1, <4 x float> %2, <4 x float> %a2)
575   ret <4 x float> %3
576 }
577 declare <4 x float> @llvm.x86.sse41.blendvps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
578
579 define <2 x double> @test_dppd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
580 ; GENERIC-LABEL: test_dppd:
581 ; GENERIC:       # %bb.0:
582 ; GENERIC-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [9:1.00]
583 ; GENERIC-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [15:1.00]
584 ; GENERIC-NEXT:    retq # sched: [1:1.00]
585 ;
586 ; SLM-LABEL: test_dppd:
587 ; SLM:       # %bb.0:
588 ; SLM-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [3:1.00]
589 ; SLM-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [6:1.00]
590 ; SLM-NEXT:    retq # sched: [4:1.00]
591 ;
592 ; SANDY-SSE-LABEL: test_dppd:
593 ; SANDY-SSE:       # %bb.0:
594 ; SANDY-SSE-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [9:1.00]
595 ; SANDY-SSE-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [15:1.00]
596 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
597 ;
598 ; SANDY-LABEL: test_dppd:
599 ; SANDY:       # %bb.0:
600 ; SANDY-NEXT:    vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [9:1.00]
601 ; SANDY-NEXT:    vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [15:1.00]
602 ; SANDY-NEXT:    retq # sched: [1:1.00]
603 ;
604 ; HASWELL-SSE-LABEL: test_dppd:
605 ; HASWELL-SSE:       # %bb.0:
606 ; HASWELL-SSE-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [9:1.00]
607 ; HASWELL-SSE-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [15:1.00]
608 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
609 ;
610 ; HASWELL-LABEL: test_dppd:
611 ; HASWELL:       # %bb.0:
612 ; HASWELL-NEXT:    vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [9:1.00]
613 ; HASWELL-NEXT:    vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [15:1.00]
614 ; HASWELL-NEXT:    retq # sched: [7:1.00]
615 ;
616 ; BROADWELL-SSE-LABEL: test_dppd:
617 ; BROADWELL-SSE:       # %bb.0:
618 ; BROADWELL-SSE-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [9:1.00]
619 ; BROADWELL-SSE-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [14:1.00]
620 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
621 ;
622 ; BROADWELL-LABEL: test_dppd:
623 ; BROADWELL:       # %bb.0:
624 ; BROADWELL-NEXT:    vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [9:1.00]
625 ; BROADWELL-NEXT:    vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [14:1.00]
626 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
627 ;
628 ; SKYLAKE-SSE-LABEL: test_dppd:
629 ; SKYLAKE-SSE:       # %bb.0:
630 ; SKYLAKE-SSE-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [9:1.00]
631 ; SKYLAKE-SSE-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [15:1.00]
632 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
633 ;
634 ; SKYLAKE-LABEL: test_dppd:
635 ; SKYLAKE:       # %bb.0:
636 ; SKYLAKE-NEXT:    vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [9:1.00]
637 ; SKYLAKE-NEXT:    vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [15:1.00]
638 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
639 ;
640 ; SKX-SSE-LABEL: test_dppd:
641 ; SKX-SSE:       # %bb.0:
642 ; SKX-SSE-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [9:1.00]
643 ; SKX-SSE-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [15:1.00]
644 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
645 ;
646 ; SKX-LABEL: test_dppd:
647 ; SKX:       # %bb.0:
648 ; SKX-NEXT:    vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [9:1.00]
649 ; SKX-NEXT:    vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [15:1.00]
650 ; SKX-NEXT:    retq # sched: [7:1.00]
651 ;
652 ; BDVER2-SSE-LABEL: test_dppd:
653 ; BDVER2-SSE:       # %bb.0:
654 ; BDVER2-SSE-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [15:1.50]
655 ; BDVER2-SSE-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [20:1.50]
656 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
657 ;
658 ; BDVER2-LABEL: test_dppd:
659 ; BDVER2:       # %bb.0:
660 ; BDVER2-NEXT:    vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [15:1.50]
661 ; BDVER2-NEXT:    vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [20:1.50]
662 ; BDVER2-NEXT:    retq # sched: [5:1.00]
663 ;
664 ; BTVER2-SSE-LABEL: test_dppd:
665 ; BTVER2-SSE:       # %bb.0:
666 ; BTVER2-SSE-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [9:3.00]
667 ; BTVER2-SSE-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [14:3.00]
668 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
669 ;
670 ; BTVER2-LABEL: test_dppd:
671 ; BTVER2:       # %bb.0:
672 ; BTVER2-NEXT:    vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [9:3.00]
673 ; BTVER2-NEXT:    vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [14:3.00]
674 ; BTVER2-NEXT:    retq # sched: [4:1.00]
675 ;
676 ; ZNVER1-SSE-LABEL: test_dppd:
677 ; ZNVER1-SSE:       # %bb.0:
678 ; ZNVER1-SSE-NEXT:    dppd $7, %xmm1, %xmm0 # sched: [100:0.25]
679 ; ZNVER1-SSE-NEXT:    dppd $7, (%rdi), %xmm0 # sched: [100:0.25]
680 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
681 ;
682 ; ZNVER1-LABEL: test_dppd:
683 ; ZNVER1:       # %bb.0:
684 ; ZNVER1-NEXT:    vdppd $7, %xmm1, %xmm0, %xmm0 # sched: [100:0.25]
685 ; ZNVER1-NEXT:    vdppd $7, (%rdi), %xmm0, %xmm0 # sched: [100:0.25]
686 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
687   %1 = call <2 x double> @llvm.x86.sse41.dppd(<2 x double> %a0, <2 x double> %a1, i8 7)
688   %2 = load <2 x double>, <2 x double> *%a2, align 16
689   %3 = call <2 x double> @llvm.x86.sse41.dppd(<2 x double> %1, <2 x double> %2, i8 7)
690   ret <2 x double> %3
691 }
692 declare <2 x double> @llvm.x86.sse41.dppd(<2 x double>, <2 x double>, i8) nounwind readnone
693
694 define <4 x float> @test_dpps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
695 ; GENERIC-LABEL: test_dpps:
696 ; GENERIC:       # %bb.0:
697 ; GENERIC-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [12:2.00]
698 ; GENERIC-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [18:2.00]
699 ; GENERIC-NEXT:    retq # sched: [1:1.00]
700 ;
701 ; SLM-LABEL: test_dpps:
702 ; SLM:       # %bb.0:
703 ; SLM-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [3:1.00]
704 ; SLM-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [6:1.00]
705 ; SLM-NEXT:    retq # sched: [4:1.00]
706 ;
707 ; SANDY-SSE-LABEL: test_dpps:
708 ; SANDY-SSE:       # %bb.0:
709 ; SANDY-SSE-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [12:2.00]
710 ; SANDY-SSE-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [18:2.00]
711 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
712 ;
713 ; SANDY-LABEL: test_dpps:
714 ; SANDY:       # %bb.0:
715 ; SANDY-NEXT:    vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [12:2.00]
716 ; SANDY-NEXT:    vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [18:2.00]
717 ; SANDY-NEXT:    retq # sched: [1:1.00]
718 ;
719 ; HASWELL-SSE-LABEL: test_dpps:
720 ; HASWELL-SSE:       # %bb.0:
721 ; HASWELL-SSE-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [14:2.00]
722 ; HASWELL-SSE-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [20:2.00]
723 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
724 ;
725 ; HASWELL-LABEL: test_dpps:
726 ; HASWELL:       # %bb.0:
727 ; HASWELL-NEXT:    vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [14:2.00]
728 ; HASWELL-NEXT:    vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [20:2.00]
729 ; HASWELL-NEXT:    retq # sched: [7:1.00]
730 ;
731 ; BROADWELL-SSE-LABEL: test_dpps:
732 ; BROADWELL-SSE:       # %bb.0:
733 ; BROADWELL-SSE-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [14:2.00]
734 ; BROADWELL-SSE-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [19:2.00]
735 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
736 ;
737 ; BROADWELL-LABEL: test_dpps:
738 ; BROADWELL:       # %bb.0:
739 ; BROADWELL-NEXT:    vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [14:2.00]
740 ; BROADWELL-NEXT:    vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [19:2.00]
741 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
742 ;
743 ; SKYLAKE-SSE-LABEL: test_dpps:
744 ; SKYLAKE-SSE:       # %bb.0:
745 ; SKYLAKE-SSE-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [13:1.50]
746 ; SKYLAKE-SSE-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [19:1.50]
747 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
748 ;
749 ; SKYLAKE-LABEL: test_dpps:
750 ; SKYLAKE:       # %bb.0:
751 ; SKYLAKE-NEXT:    vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [13:1.50]
752 ; SKYLAKE-NEXT:    vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [19:1.50]
753 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
754 ;
755 ; SKX-SSE-LABEL: test_dpps:
756 ; SKX-SSE:       # %bb.0:
757 ; SKX-SSE-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [13:1.33]
758 ; SKX-SSE-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [19:1.33]
759 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
760 ;
761 ; SKX-LABEL: test_dpps:
762 ; SKX:       # %bb.0:
763 ; SKX-NEXT:    vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [13:1.33]
764 ; SKX-NEXT:    vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [19:1.33]
765 ; SKX-NEXT:    retq # sched: [7:1.00]
766 ;
767 ; BDVER2-SSE-LABEL: test_dpps:
768 ; BDVER2-SSE:       # %bb.0:
769 ; BDVER2-SSE-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [25:1.50]
770 ; BDVER2-SSE-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [30:1.50]
771 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
772 ;
773 ; BDVER2-LABEL: test_dpps:
774 ; BDVER2:       # %bb.0:
775 ; BDVER2-NEXT:    vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [25:1.50]
776 ; BDVER2-NEXT:    vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [30:1.50]
777 ; BDVER2-NEXT:    retq # sched: [5:1.00]
778 ;
779 ; BTVER2-SSE-LABEL: test_dpps:
780 ; BTVER2-SSE:       # %bb.0:
781 ; BTVER2-SSE-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [11:3.00]
782 ; BTVER2-SSE-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [16:3.00]
783 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
784 ;
785 ; BTVER2-LABEL: test_dpps:
786 ; BTVER2:       # %bb.0:
787 ; BTVER2-NEXT:    vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [11:3.00]
788 ; BTVER2-NEXT:    vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [16:3.00]
789 ; BTVER2-NEXT:    retq # sched: [4:1.00]
790 ;
791 ; ZNVER1-SSE-LABEL: test_dpps:
792 ; ZNVER1-SSE:       # %bb.0:
793 ; ZNVER1-SSE-NEXT:    dpps $7, %xmm1, %xmm0 # sched: [100:0.25]
794 ; ZNVER1-SSE-NEXT:    dpps $7, (%rdi), %xmm0 # sched: [100:0.25]
795 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
796 ;
797 ; ZNVER1-LABEL: test_dpps:
798 ; ZNVER1:       # %bb.0:
799 ; ZNVER1-NEXT:    vdpps $7, %xmm1, %xmm0, %xmm0 # sched: [100:0.25]
800 ; ZNVER1-NEXT:    vdpps $7, (%rdi), %xmm0, %xmm0 # sched: [100:0.25]
801 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
802   %1 = call <4 x float> @llvm.x86.sse41.dpps(<4 x float> %a0, <4 x float> %a1, i8 7)
803   %2 = load <4 x float>, <4 x float> *%a2, align 16
804   %3 = call <4 x float> @llvm.x86.sse41.dpps(<4 x float> %1, <4 x float> %2, i8 7)
805   ret <4 x float> %3
806 }
807 declare <4 x float> @llvm.x86.sse41.dpps(<4 x float>, <4 x float>, i8) nounwind readnone
808
809 define i32 @test_extractps(<4 x float> %a0, i32 *%a1) {
810 ; GENERIC-LABEL: test_extractps:
811 ; GENERIC:       # %bb.0:
812 ; GENERIC-NEXT:    extractps $3, %xmm0, %eax # sched: [3:1.00]
813 ; GENERIC-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [5:1.00]
814 ; GENERIC-NEXT:    retq # sched: [1:1.00]
815 ;
816 ; SLM-LABEL: test_extractps:
817 ; SLM:       # %bb.0:
818 ; SLM-NEXT:    extractps $3, %xmm0, %eax # sched: [1:1.00]
819 ; SLM-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [4:2.00]
820 ; SLM-NEXT:    retq # sched: [4:1.00]
821 ;
822 ; SANDY-SSE-LABEL: test_extractps:
823 ; SANDY-SSE:       # %bb.0:
824 ; SANDY-SSE-NEXT:    extractps $3, %xmm0, %eax # sched: [3:1.00]
825 ; SANDY-SSE-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [5:1.00]
826 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
827 ;
828 ; SANDY-LABEL: test_extractps:
829 ; SANDY:       # %bb.0:
830 ; SANDY-NEXT:    vextractps $3, %xmm0, %eax # sched: [3:1.00]
831 ; SANDY-NEXT:    vextractps $1, %xmm0, (%rdi) # sched: [5:1.00]
832 ; SANDY-NEXT:    retq # sched: [1:1.00]
833 ;
834 ; HASWELL-SSE-LABEL: test_extractps:
835 ; HASWELL-SSE:       # %bb.0:
836 ; HASWELL-SSE-NEXT:    extractps $3, %xmm0, %eax # sched: [2:1.00]
837 ; HASWELL-SSE-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [2:1.00]
838 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
839 ;
840 ; HASWELL-LABEL: test_extractps:
841 ; HASWELL:       # %bb.0:
842 ; HASWELL-NEXT:    vextractps $3, %xmm0, %eax # sched: [2:1.00]
843 ; HASWELL-NEXT:    vextractps $1, %xmm0, (%rdi) # sched: [2:1.00]
844 ; HASWELL-NEXT:    retq # sched: [7:1.00]
845 ;
846 ; BROADWELL-SSE-LABEL: test_extractps:
847 ; BROADWELL-SSE:       # %bb.0:
848 ; BROADWELL-SSE-NEXT:    extractps $3, %xmm0, %eax # sched: [2:1.00]
849 ; BROADWELL-SSE-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [2:1.00]
850 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
851 ;
852 ; BROADWELL-LABEL: test_extractps:
853 ; BROADWELL:       # %bb.0:
854 ; BROADWELL-NEXT:    vextractps $3, %xmm0, %eax # sched: [2:1.00]
855 ; BROADWELL-NEXT:    vextractps $1, %xmm0, (%rdi) # sched: [2:1.00]
856 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
857 ;
858 ; SKYLAKE-SSE-LABEL: test_extractps:
859 ; SKYLAKE-SSE:       # %bb.0:
860 ; SKYLAKE-SSE-NEXT:    extractps $3, %xmm0, %eax # sched: [3:1.00]
861 ; SKYLAKE-SSE-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [2:1.00]
862 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
863 ;
864 ; SKYLAKE-LABEL: test_extractps:
865 ; SKYLAKE:       # %bb.0:
866 ; SKYLAKE-NEXT:    vextractps $3, %xmm0, %eax # sched: [3:1.00]
867 ; SKYLAKE-NEXT:    vextractps $1, %xmm0, (%rdi) # sched: [2:1.00]
868 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
869 ;
870 ; SKX-SSE-LABEL: test_extractps:
871 ; SKX-SSE:       # %bb.0:
872 ; SKX-SSE-NEXT:    extractps $3, %xmm0, %eax # sched: [3:1.00]
873 ; SKX-SSE-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [2:1.00]
874 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
875 ;
876 ; SKX-LABEL: test_extractps:
877 ; SKX:       # %bb.0:
878 ; SKX-NEXT:    vextractps $3, %xmm0, %eax # sched: [3:1.00]
879 ; SKX-NEXT:    vextractps $1, %xmm0, (%rdi) # sched: [2:1.00]
880 ; SKX-NEXT:    retq # sched: [7:1.00]
881 ;
882 ; BDVER2-SSE-LABEL: test_extractps:
883 ; BDVER2-SSE:       # %bb.0:
884 ; BDVER2-SSE-NEXT:    extractps $3, %xmm0, %eax # sched: [13:1.00]
885 ; BDVER2-SSE-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [13:1.00]
886 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
887 ;
888 ; BDVER2-LABEL: test_extractps:
889 ; BDVER2:       # %bb.0:
890 ; BDVER2-NEXT:    vextractps $3, %xmm0, %eax # sched: [13:1.00]
891 ; BDVER2-NEXT:    vextractps $1, %xmm0, (%rdi) # sched: [13:1.00]
892 ; BDVER2-NEXT:    retq # sched: [5:1.00]
893 ;
894 ; BTVER2-SSE-LABEL: test_extractps:
895 ; BTVER2-SSE:       # %bb.0:
896 ; BTVER2-SSE-NEXT:    extractps $3, %xmm0, %eax # sched: [3:1.00]
897 ; BTVER2-SSE-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [3:1.00]
898 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
899 ;
900 ; BTVER2-LABEL: test_extractps:
901 ; BTVER2:       # %bb.0:
902 ; BTVER2-NEXT:    vextractps $3, %xmm0, %eax # sched: [3:1.00]
903 ; BTVER2-NEXT:    vextractps $1, %xmm0, (%rdi) # sched: [3:1.00]
904 ; BTVER2-NEXT:    retq # sched: [4:1.00]
905 ;
906 ; ZNVER1-SSE-LABEL: test_extractps:
907 ; ZNVER1-SSE:       # %bb.0:
908 ; ZNVER1-SSE-NEXT:    extractps $3, %xmm0, %eax # sched: [2:2.00]
909 ; ZNVER1-SSE-NEXT:    extractps $1, %xmm0, (%rdi) # sched: [5:2.50]
910 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
911 ;
912 ; ZNVER1-LABEL: test_extractps:
913 ; ZNVER1:       # %bb.0:
914 ; ZNVER1-NEXT:    vextractps $3, %xmm0, %eax # sched: [2:2.00]
915 ; ZNVER1-NEXT:    vextractps $1, %xmm0, (%rdi) # sched: [5:2.50]
916 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
917   %1 = extractelement <4 x float> %a0, i32 3
918   %2 = extractelement <4 x float> %a0, i32 1
919   %3 = bitcast float %1 to i32
920   %4 = bitcast float %2 to i32
921   store i32 %4, i32 *%a1
922   ret i32 %3
923 }
924
925 define <4 x float> @test_insertps(<4 x float> %a0, <4 x float> %a1, float *%a2) {
926 ; GENERIC-LABEL: test_insertps:
927 ; GENERIC:       # %bb.0:
928 ; GENERIC-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
929 ; GENERIC-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:1.00]
930 ; GENERIC-NEXT:    retq # sched: [1:1.00]
931 ;
932 ; SLM-LABEL: test_insertps:
933 ; SLM:       # %bb.0:
934 ; SLM-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
935 ; SLM-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [4:1.00]
936 ; SLM-NEXT:    retq # sched: [4:1.00]
937 ;
938 ; SANDY-SSE-LABEL: test_insertps:
939 ; SANDY-SSE:       # %bb.0:
940 ; SANDY-SSE-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
941 ; SANDY-SSE-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:1.00]
942 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
943 ;
944 ; SANDY-LABEL: test_insertps:
945 ; SANDY:       # %bb.0:
946 ; SANDY-NEXT:    vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
947 ; SANDY-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:1.00]
948 ; SANDY-NEXT:    retq # sched: [1:1.00]
949 ;
950 ; HASWELL-SSE-LABEL: test_insertps:
951 ; HASWELL-SSE:       # %bb.0:
952 ; HASWELL-SSE-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
953 ; HASWELL-SSE-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:1.00]
954 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
955 ;
956 ; HASWELL-LABEL: test_insertps:
957 ; HASWELL:       # %bb.0:
958 ; HASWELL-NEXT:    vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
959 ; HASWELL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:1.00]
960 ; HASWELL-NEXT:    retq # sched: [7:1.00]
961 ;
962 ; BROADWELL-SSE-LABEL: test_insertps:
963 ; BROADWELL-SSE:       # %bb.0:
964 ; BROADWELL-SSE-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
965 ; BROADWELL-SSE-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [6:1.00]
966 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
967 ;
968 ; BROADWELL-LABEL: test_insertps:
969 ; BROADWELL:       # %bb.0:
970 ; BROADWELL-NEXT:    vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
971 ; BROADWELL-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [6:1.00]
972 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
973 ;
974 ; SKYLAKE-SSE-LABEL: test_insertps:
975 ; SKYLAKE-SSE:       # %bb.0:
976 ; SKYLAKE-SSE-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
977 ; SKYLAKE-SSE-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:1.00]
978 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
979 ;
980 ; SKYLAKE-LABEL: test_insertps:
981 ; SKYLAKE:       # %bb.0:
982 ; SKYLAKE-NEXT:    vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
983 ; SKYLAKE-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:1.00]
984 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
985 ;
986 ; SKX-SSE-LABEL: test_insertps:
987 ; SKX-SSE:       # %bb.0:
988 ; SKX-SSE-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
989 ; SKX-SSE-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:1.00]
990 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
991 ;
992 ; SKX-LABEL: test_insertps:
993 ; SKX:       # %bb.0:
994 ; SKX-NEXT:    vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:1.00]
995 ; SKX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:1.00]
996 ; SKX-NEXT:    retq # sched: [7:1.00]
997 ;
998 ; BDVER2-SSE-LABEL: test_insertps:
999 ; BDVER2-SSE:       # %bb.0:
1000 ; BDVER2-SSE-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [2:0.50]
1001 ; BDVER2-SSE-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:0.50]
1002 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1003 ;
1004 ; BDVER2-LABEL: test_insertps:
1005 ; BDVER2:       # %bb.0:
1006 ; BDVER2-NEXT:    vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [2:0.50]
1007 ; BDVER2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [7:0.50]
1008 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1009 ;
1010 ; BTVER2-SSE-LABEL: test_insertps:
1011 ; BTVER2-SSE:       # %bb.0:
1012 ; BTVER2-SSE-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:0.50]
1013 ; BTVER2-SSE-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [6:1.00]
1014 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1015 ;
1016 ; BTVER2-LABEL: test_insertps:
1017 ; BTVER2:       # %bb.0:
1018 ; BTVER2-NEXT:    vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:0.50]
1019 ; BTVER2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [6:1.00]
1020 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1021 ;
1022 ; ZNVER1-SSE-LABEL: test_insertps:
1023 ; ZNVER1-SSE:       # %bb.0:
1024 ; ZNVER1-SSE-NEXT:    insertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:0.50]
1025 ; ZNVER1-SSE-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [8:0.50]
1026 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1027 ;
1028 ; ZNVER1-LABEL: test_insertps:
1029 ; ZNVER1:       # %bb.0:
1030 ; ZNVER1-NEXT:    vinsertps {{.*#+}} xmm0 = zero,xmm1[0],xmm0[2,3] sched: [1:0.50]
1031 ; ZNVER1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0] sched: [8:0.50]
1032 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1033   %1 = call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %a0, <4 x float> %a1, i8 17)
1034   %2 = load float, float *%a2
1035   %3 = insertelement <4 x float> %1, float %2, i32 3
1036   ret <4 x float> %3
1037 }
1038 declare <4 x float> @llvm.x86.sse41.insertps(<4 x float>, <4 x float>, i8) nounwind readnone
1039
1040 define <2 x i64> @test_movntdqa(i8* %a0) {
1041 ; GENERIC-LABEL: test_movntdqa:
1042 ; GENERIC:       # %bb.0:
1043 ; GENERIC-NEXT:    movntdqa (%rdi), %xmm0 # sched: [6:0.50]
1044 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1045 ;
1046 ; SLM-LABEL: test_movntdqa:
1047 ; SLM:       # %bb.0:
1048 ; SLM-NEXT:    movntdqa (%rdi), %xmm0 # sched: [3:1.00]
1049 ; SLM-NEXT:    retq # sched: [4:1.00]
1050 ;
1051 ; SANDY-SSE-LABEL: test_movntdqa:
1052 ; SANDY-SSE:       # %bb.0:
1053 ; SANDY-SSE-NEXT:    movntdqa (%rdi), %xmm0 # sched: [6:0.50]
1054 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1055 ;
1056 ; SANDY-LABEL: test_movntdqa:
1057 ; SANDY:       # %bb.0:
1058 ; SANDY-NEXT:    vmovntdqa (%rdi), %xmm0 # sched: [6:0.50]
1059 ; SANDY-NEXT:    retq # sched: [1:1.00]
1060 ;
1061 ; HASWELL-SSE-LABEL: test_movntdqa:
1062 ; HASWELL-SSE:       # %bb.0:
1063 ; HASWELL-SSE-NEXT:    movntdqa (%rdi), %xmm0 # sched: [6:0.50]
1064 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1065 ;
1066 ; HASWELL-LABEL: test_movntdqa:
1067 ; HASWELL:       # %bb.0:
1068 ; HASWELL-NEXT:    vmovntdqa (%rdi), %xmm0 # sched: [6:0.50]
1069 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1070 ;
1071 ; BROADWELL-SSE-LABEL: test_movntdqa:
1072 ; BROADWELL-SSE:       # %bb.0:
1073 ; BROADWELL-SSE-NEXT:    movntdqa (%rdi), %xmm0 # sched: [5:0.50]
1074 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1075 ;
1076 ; BROADWELL-LABEL: test_movntdqa:
1077 ; BROADWELL:       # %bb.0:
1078 ; BROADWELL-NEXT:    vmovntdqa (%rdi), %xmm0 # sched: [5:0.50]
1079 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1080 ;
1081 ; SKYLAKE-SSE-LABEL: test_movntdqa:
1082 ; SKYLAKE-SSE:       # %bb.0:
1083 ; SKYLAKE-SSE-NEXT:    movntdqa (%rdi), %xmm0 # sched: [6:0.50]
1084 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1085 ;
1086 ; SKYLAKE-LABEL: test_movntdqa:
1087 ; SKYLAKE:       # %bb.0:
1088 ; SKYLAKE-NEXT:    vmovntdqa (%rdi), %xmm0 # sched: [6:0.50]
1089 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1090 ;
1091 ; SKX-SSE-LABEL: test_movntdqa:
1092 ; SKX-SSE:       # %bb.0:
1093 ; SKX-SSE-NEXT:    movntdqa (%rdi), %xmm0 # sched: [6:0.50]
1094 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1095 ;
1096 ; SKX-LABEL: test_movntdqa:
1097 ; SKX:       # %bb.0:
1098 ; SKX-NEXT:    vmovntdqa (%rdi), %xmm0 # sched: [6:0.50]
1099 ; SKX-NEXT:    retq # sched: [7:1.00]
1100 ;
1101 ; BDVER2-SSE-LABEL: test_movntdqa:
1102 ; BDVER2-SSE:       # %bb.0:
1103 ; BDVER2-SSE-NEXT:    movntdqa (%rdi), %xmm0 # sched: [5:0.50]
1104 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1105 ;
1106 ; BDVER2-LABEL: test_movntdqa:
1107 ; BDVER2:       # %bb.0:
1108 ; BDVER2-NEXT:    vmovntdqa (%rdi), %xmm0 # sched: [5:0.50]
1109 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1110 ;
1111 ; BTVER2-SSE-LABEL: test_movntdqa:
1112 ; BTVER2-SSE:       # %bb.0:
1113 ; BTVER2-SSE-NEXT:    movntdqa (%rdi), %xmm0 # sched: [5:1.00]
1114 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1115 ;
1116 ; BTVER2-LABEL: test_movntdqa:
1117 ; BTVER2:       # %bb.0:
1118 ; BTVER2-NEXT:    vmovntdqa (%rdi), %xmm0 # sched: [5:1.00]
1119 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1120 ;
1121 ; ZNVER1-SSE-LABEL: test_movntdqa:
1122 ; ZNVER1-SSE:       # %bb.0:
1123 ; ZNVER1-SSE-NEXT:    movntdqa (%rdi), %xmm0 # sched: [8:0.50]
1124 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1125 ;
1126 ; ZNVER1-LABEL: test_movntdqa:
1127 ; ZNVER1:       # %bb.0:
1128 ; ZNVER1-NEXT:    vmovntdqa (%rdi), %xmm0 # sched: [8:0.50]
1129 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1130   %1 = call <2 x i64> @llvm.x86.sse41.movntdqa(i8* %a0)
1131   ret <2 x i64> %1
1132 }
1133 declare <2 x i64> @llvm.x86.sse41.movntdqa(i8*) nounwind readnone
1134
1135 define <8 x i16> @test_mpsadbw(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
1136 ; GENERIC-LABEL: test_mpsadbw:
1137 ; GENERIC:       # %bb.0:
1138 ; GENERIC-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [7:1.00]
1139 ; GENERIC-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [13:1.00]
1140 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1141 ;
1142 ; SLM-LABEL: test_mpsadbw:
1143 ; SLM:       # %bb.0:
1144 ; SLM-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [7:1.00]
1145 ; SLM-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [10:1.00]
1146 ; SLM-NEXT:    retq # sched: [4:1.00]
1147 ;
1148 ; SANDY-SSE-LABEL: test_mpsadbw:
1149 ; SANDY-SSE:       # %bb.0:
1150 ; SANDY-SSE-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [7:1.00]
1151 ; SANDY-SSE-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [13:1.00]
1152 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1153 ;
1154 ; SANDY-LABEL: test_mpsadbw:
1155 ; SANDY:       # %bb.0:
1156 ; SANDY-NEXT:    vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [7:1.00]
1157 ; SANDY-NEXT:    vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [13:1.00]
1158 ; SANDY-NEXT:    retq # sched: [1:1.00]
1159 ;
1160 ; HASWELL-SSE-LABEL: test_mpsadbw:
1161 ; HASWELL-SSE:       # %bb.0:
1162 ; HASWELL-SSE-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [7:2.00]
1163 ; HASWELL-SSE-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [13:2.00]
1164 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1165 ;
1166 ; HASWELL-LABEL: test_mpsadbw:
1167 ; HASWELL:       # %bb.0:
1168 ; HASWELL-NEXT:    vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [7:2.00]
1169 ; HASWELL-NEXT:    vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [13:2.00]
1170 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1171 ;
1172 ; BROADWELL-SSE-LABEL: test_mpsadbw:
1173 ; BROADWELL-SSE:       # %bb.0:
1174 ; BROADWELL-SSE-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [7:2.00]
1175 ; BROADWELL-SSE-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [12:2.00]
1176 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1177 ;
1178 ; BROADWELL-LABEL: test_mpsadbw:
1179 ; BROADWELL:       # %bb.0:
1180 ; BROADWELL-NEXT:    vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [7:2.00]
1181 ; BROADWELL-NEXT:    vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [12:2.00]
1182 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1183 ;
1184 ; SKYLAKE-SSE-LABEL: test_mpsadbw:
1185 ; SKYLAKE-SSE:       # %bb.0:
1186 ; SKYLAKE-SSE-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [4:2.00]
1187 ; SKYLAKE-SSE-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [10:2.00]
1188 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1189 ;
1190 ; SKYLAKE-LABEL: test_mpsadbw:
1191 ; SKYLAKE:       # %bb.0:
1192 ; SKYLAKE-NEXT:    vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [4:2.00]
1193 ; SKYLAKE-NEXT:    vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [10:2.00]
1194 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1195 ;
1196 ; SKX-SSE-LABEL: test_mpsadbw:
1197 ; SKX-SSE:       # %bb.0:
1198 ; SKX-SSE-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [4:2.00]
1199 ; SKX-SSE-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [10:2.00]
1200 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1201 ;
1202 ; SKX-LABEL: test_mpsadbw:
1203 ; SKX:       # %bb.0:
1204 ; SKX-NEXT:    vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [4:2.00]
1205 ; SKX-NEXT:    vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [10:2.00]
1206 ; SKX-NEXT:    retq # sched: [7:1.00]
1207 ;
1208 ; BDVER2-SSE-LABEL: test_mpsadbw:
1209 ; BDVER2-SSE:       # %bb.0:
1210 ; BDVER2-SSE-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [9:2.00]
1211 ; BDVER2-SSE-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [14:2.00]
1212 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1213 ;
1214 ; BDVER2-LABEL: test_mpsadbw:
1215 ; BDVER2:       # %bb.0:
1216 ; BDVER2-NEXT:    vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [9:2.00]
1217 ; BDVER2-NEXT:    vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [14:2.00]
1218 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1219 ;
1220 ; BTVER2-SSE-LABEL: test_mpsadbw:
1221 ; BTVER2-SSE:       # %bb.0:
1222 ; BTVER2-SSE-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [3:2.00]
1223 ; BTVER2-SSE-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [8:2.00]
1224 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1225 ;
1226 ; BTVER2-LABEL: test_mpsadbw:
1227 ; BTVER2:       # %bb.0:
1228 ; BTVER2-NEXT:    vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [3:2.00]
1229 ; BTVER2-NEXT:    vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [8:2.00]
1230 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1231 ;
1232 ; ZNVER1-SSE-LABEL: test_mpsadbw:
1233 ; ZNVER1-SSE:       # %bb.0:
1234 ; ZNVER1-SSE-NEXT:    mpsadbw $7, %xmm1, %xmm0 # sched: [100:0.25]
1235 ; ZNVER1-SSE-NEXT:    mpsadbw $7, (%rdi), %xmm0 # sched: [100:0.25]
1236 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1237 ;
1238 ; ZNVER1-LABEL: test_mpsadbw:
1239 ; ZNVER1:       # %bb.0:
1240 ; ZNVER1-NEXT:    vmpsadbw $7, %xmm1, %xmm0, %xmm0 # sched: [100:0.25]
1241 ; ZNVER1-NEXT:    vmpsadbw $7, (%rdi), %xmm0, %xmm0 # sched: [100:0.25]
1242 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1243   %1 = call <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8> %a0, <16 x i8> %a1, i8 7)
1244   %2 = bitcast <8 x i16> %1 to <16 x i8>
1245   %3 = load <16 x i8>, <16 x i8> *%a2, align 16
1246   %4 = call <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8> %2, <16 x i8> %3, i8 7)
1247   ret <8 x i16> %4
1248 }
1249 declare <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8>, <16 x i8>, i8) nounwind readnone
1250
1251 define <8 x i16> @test_packusdw(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
1252 ; GENERIC-LABEL: test_packusdw:
1253 ; GENERIC:       # %bb.0:
1254 ; GENERIC-NEXT:    packusdw %xmm1, %xmm0 # sched: [1:0.50]
1255 ; GENERIC-NEXT:    packusdw (%rdi), %xmm0 # sched: [7:0.50]
1256 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1257 ;
1258 ; SLM-LABEL: test_packusdw:
1259 ; SLM:       # %bb.0:
1260 ; SLM-NEXT:    packusdw %xmm1, %xmm0 # sched: [1:1.00]
1261 ; SLM-NEXT:    packusdw (%rdi), %xmm0 # sched: [4:1.00]
1262 ; SLM-NEXT:    retq # sched: [4:1.00]
1263 ;
1264 ; SANDY-SSE-LABEL: test_packusdw:
1265 ; SANDY-SSE:       # %bb.0:
1266 ; SANDY-SSE-NEXT:    packusdw %xmm1, %xmm0 # sched: [1:0.50]
1267 ; SANDY-SSE-NEXT:    packusdw (%rdi), %xmm0 # sched: [7:0.50]
1268 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1269 ;
1270 ; SANDY-LABEL: test_packusdw:
1271 ; SANDY:       # %bb.0:
1272 ; SANDY-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1273 ; SANDY-NEXT:    vpackusdw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
1274 ; SANDY-NEXT:    retq # sched: [1:1.00]
1275 ;
1276 ; HASWELL-SSE-LABEL: test_packusdw:
1277 ; HASWELL-SSE:       # %bb.0:
1278 ; HASWELL-SSE-NEXT:    packusdw %xmm1, %xmm0 # sched: [1:1.00]
1279 ; HASWELL-SSE-NEXT:    packusdw (%rdi), %xmm0 # sched: [7:1.00]
1280 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1281 ;
1282 ; HASWELL-LABEL: test_packusdw:
1283 ; HASWELL:       # %bb.0:
1284 ; HASWELL-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
1285 ; HASWELL-NEXT:    vpackusdw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
1286 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1287 ;
1288 ; BROADWELL-SSE-LABEL: test_packusdw:
1289 ; BROADWELL-SSE:       # %bb.0:
1290 ; BROADWELL-SSE-NEXT:    packusdw %xmm1, %xmm0 # sched: [1:1.00]
1291 ; BROADWELL-SSE-NEXT:    packusdw (%rdi), %xmm0 # sched: [6:1.00]
1292 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1293 ;
1294 ; BROADWELL-LABEL: test_packusdw:
1295 ; BROADWELL:       # %bb.0:
1296 ; BROADWELL-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
1297 ; BROADWELL-NEXT:    vpackusdw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
1298 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1299 ;
1300 ; SKYLAKE-SSE-LABEL: test_packusdw:
1301 ; SKYLAKE-SSE:       # %bb.0:
1302 ; SKYLAKE-SSE-NEXT:    packusdw %xmm1, %xmm0 # sched: [1:1.00]
1303 ; SKYLAKE-SSE-NEXT:    packusdw (%rdi), %xmm0 # sched: [7:1.00]
1304 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1305 ;
1306 ; SKYLAKE-LABEL: test_packusdw:
1307 ; SKYLAKE:       # %bb.0:
1308 ; SKYLAKE-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
1309 ; SKYLAKE-NEXT:    vpackusdw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
1310 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1311 ;
1312 ; SKX-SSE-LABEL: test_packusdw:
1313 ; SKX-SSE:       # %bb.0:
1314 ; SKX-SSE-NEXT:    packusdw %xmm1, %xmm0 # sched: [1:1.00]
1315 ; SKX-SSE-NEXT:    packusdw (%rdi), %xmm0 # sched: [7:1.00]
1316 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1317 ;
1318 ; SKX-LABEL: test_packusdw:
1319 ; SKX:       # %bb.0:
1320 ; SKX-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
1321 ; SKX-NEXT:    vpackusdw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
1322 ; SKX-NEXT:    retq # sched: [7:1.00]
1323 ;
1324 ; BDVER2-SSE-LABEL: test_packusdw:
1325 ; BDVER2-SSE:       # %bb.0:
1326 ; BDVER2-SSE-NEXT:    packusdw %xmm1, %xmm0 # sched: [2:0.50]
1327 ; BDVER2-SSE-NEXT:    packusdw (%rdi), %xmm0 # sched: [7:0.50]
1328 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1329 ;
1330 ; BDVER2-LABEL: test_packusdw:
1331 ; BDVER2:       # %bb.0:
1332 ; BDVER2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
1333 ; BDVER2-NEXT:    vpackusdw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
1334 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1335 ;
1336 ; BTVER2-SSE-LABEL: test_packusdw:
1337 ; BTVER2-SSE:       # %bb.0:
1338 ; BTVER2-SSE-NEXT:    packusdw %xmm1, %xmm0 # sched: [1:0.50]
1339 ; BTVER2-SSE-NEXT:    packusdw (%rdi), %xmm0 # sched: [6:1.00]
1340 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1341 ;
1342 ; BTVER2-LABEL: test_packusdw:
1343 ; BTVER2:       # %bb.0:
1344 ; BTVER2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1345 ; BTVER2-NEXT:    vpackusdw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
1346 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1347 ;
1348 ; ZNVER1-SSE-LABEL: test_packusdw:
1349 ; ZNVER1-SSE:       # %bb.0:
1350 ; ZNVER1-SSE-NEXT:    packusdw %xmm1, %xmm0 # sched: [1:0.25]
1351 ; ZNVER1-SSE-NEXT:    packusdw (%rdi), %xmm0 # sched: [8:0.50]
1352 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1353 ;
1354 ; ZNVER1-LABEL: test_packusdw:
1355 ; ZNVER1:       # %bb.0:
1356 ; ZNVER1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
1357 ; ZNVER1-NEXT:    vpackusdw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
1358 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1359   %1 = call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %a0, <4 x i32> %a1)
1360   %2 = bitcast <8 x i16> %1 to <4 x i32>
1361   %3 = load <4 x i32>, <4 x i32> *%a2, align 16
1362   %4 = call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %2, <4 x i32> %3)
1363   ret <8 x i16> %4
1364 }
1365 declare <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32>, <4 x i32>) nounwind readnone
1366
1367 define <16 x i8> @test_pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2, <16 x i8> *%a3) {
1368 ; GENERIC-LABEL: test_pblendvb:
1369 ; GENERIC:       # %bb.0:
1370 ; GENERIC-NEXT:    movdqa %xmm0, %xmm3 # sched: [1:0.33]
1371 ; GENERIC-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
1372 ; GENERIC-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [2:1.00]
1373 ; GENERIC-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [8:1.00]
1374 ; GENERIC-NEXT:    movdqa %xmm3, %xmm0 # sched: [1:0.33]
1375 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1376 ;
1377 ; SLM-LABEL: test_pblendvb:
1378 ; SLM:       # %bb.0:
1379 ; SLM-NEXT:    movdqa %xmm0, %xmm3 # sched: [1:0.50]
1380 ; SLM-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.50]
1381 ; SLM-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [1:1.00]
1382 ; SLM-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [4:1.00]
1383 ; SLM-NEXT:    movdqa %xmm3, %xmm0 # sched: [1:0.50]
1384 ; SLM-NEXT:    retq # sched: [4:1.00]
1385 ;
1386 ; SANDY-SSE-LABEL: test_pblendvb:
1387 ; SANDY-SSE:       # %bb.0:
1388 ; SANDY-SSE-NEXT:    movdqa %xmm0, %xmm3 # sched: [1:0.33]
1389 ; SANDY-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
1390 ; SANDY-SSE-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [2:1.00]
1391 ; SANDY-SSE-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [8:1.00]
1392 ; SANDY-SSE-NEXT:    movdqa %xmm3, %xmm0 # sched: [1:0.33]
1393 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1394 ;
1395 ; SANDY-LABEL: test_pblendvb:
1396 ; SANDY:       # %bb.0:
1397 ; SANDY-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
1398 ; SANDY-NEXT:    vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1399 ; SANDY-NEXT:    retq # sched: [1:1.00]
1400 ;
1401 ; HASWELL-SSE-LABEL: test_pblendvb:
1402 ; HASWELL-SSE:       # %bb.0:
1403 ; HASWELL-SSE-NEXT:    movdqa %xmm0, %xmm3 # sched: [1:0.33]
1404 ; HASWELL-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
1405 ; HASWELL-SSE-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
1406 ; HASWELL-SSE-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [8:2.00]
1407 ; HASWELL-SSE-NEXT:    movdqa %xmm3, %xmm0 # sched: [1:0.33]
1408 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1409 ;
1410 ; HASWELL-LABEL: test_pblendvb:
1411 ; HASWELL:       # %bb.0:
1412 ; HASWELL-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
1413 ; HASWELL-NEXT:    vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:2.00]
1414 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1415 ;
1416 ; BROADWELL-SSE-LABEL: test_pblendvb:
1417 ; BROADWELL-SSE:       # %bb.0:
1418 ; BROADWELL-SSE-NEXT:    movdqa %xmm0, %xmm3 # sched: [1:0.33]
1419 ; BROADWELL-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:1.00]
1420 ; BROADWELL-SSE-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
1421 ; BROADWELL-SSE-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [7:2.00]
1422 ; BROADWELL-SSE-NEXT:    movdqa %xmm3, %xmm0 # sched: [1:0.33]
1423 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1424 ;
1425 ; BROADWELL-LABEL: test_pblendvb:
1426 ; BROADWELL:       # %bb.0:
1427 ; BROADWELL-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
1428 ; BROADWELL-NEXT:    vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
1429 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1430 ;
1431 ; SKYLAKE-SSE-LABEL: test_pblendvb:
1432 ; SKYLAKE-SSE:       # %bb.0:
1433 ; SKYLAKE-SSE-NEXT:    movdqa %xmm0, %xmm3 # sched: [1:0.33]
1434 ; SKYLAKE-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.33]
1435 ; SKYLAKE-SSE-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [2:0.67]
1436 ; SKYLAKE-SSE-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [8:0.67]
1437 ; SKYLAKE-SSE-NEXT:    movdqa %xmm3, %xmm0 # sched: [1:0.33]
1438 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1439 ;
1440 ; SKYLAKE-LABEL: test_pblendvb:
1441 ; SKYLAKE:       # %bb.0:
1442 ; SKYLAKE-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:0.67]
1443 ; SKYLAKE-NEXT:    vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:0.67]
1444 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1445 ;
1446 ; SKX-SSE-LABEL: test_pblendvb:
1447 ; SKX-SSE:       # %bb.0:
1448 ; SKX-SSE-NEXT:    movdqa %xmm0, %xmm3 # sched: [1:0.33]
1449 ; SKX-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.33]
1450 ; SKX-SSE-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [2:0.67]
1451 ; SKX-SSE-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [8:0.67]
1452 ; SKX-SSE-NEXT:    movdqa %xmm3, %xmm0 # sched: [1:0.33]
1453 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1454 ;
1455 ; SKX-LABEL: test_pblendvb:
1456 ; SKX:       # %bb.0:
1457 ; SKX-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:0.67]
1458 ; SKX-NEXT:    vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:0.67]
1459 ; SKX-NEXT:    retq # sched: [7:1.00]
1460 ;
1461 ; BDVER2-SSE-LABEL: test_pblendvb:
1462 ; BDVER2-SSE:       # %bb.0:
1463 ; BDVER2-SSE-NEXT:    movdqa %xmm0, %xmm3 # sched: [2:0.50]
1464 ; BDVER2-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.50]
1465 ; BDVER2-SSE-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
1466 ; BDVER2-SSE-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [7:2.00]
1467 ; BDVER2-SSE-NEXT:    movdqa %xmm3, %xmm0 # sched: [2:0.50]
1468 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1469 ;
1470 ; BDVER2-LABEL: test_pblendvb:
1471 ; BDVER2:       # %bb.0:
1472 ; BDVER2-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
1473 ; BDVER2-NEXT:    vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
1474 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1475 ;
1476 ; BTVER2-SSE-LABEL: test_pblendvb:
1477 ; BTVER2-SSE:       # %bb.0:
1478 ; BTVER2-SSE-NEXT:    movdqa %xmm0, %xmm3 # sched: [1:0.50]
1479 ; BTVER2-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.50]
1480 ; BTVER2-SSE-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [2:2.00]
1481 ; BTVER2-SSE-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [7:2.00]
1482 ; BTVER2-SSE-NEXT:    movdqa %xmm3, %xmm0 # sched: [1:0.50]
1483 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1484 ;
1485 ; BTVER2-LABEL: test_pblendvb:
1486 ; BTVER2:       # %bb.0:
1487 ; BTVER2-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [2:2.00]
1488 ; BTVER2-NEXT:    vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [7:2.00]
1489 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1490 ;
1491 ; ZNVER1-SSE-LABEL: test_pblendvb:
1492 ; ZNVER1-SSE:       # %bb.0:
1493 ; ZNVER1-SSE-NEXT:    movdqa %xmm0, %xmm3 # sched: [1:0.25]
1494 ; ZNVER1-SSE-NEXT:    movaps %xmm2, %xmm0 # sched: [1:0.25]
1495 ; ZNVER1-SSE-NEXT:    pblendvb %xmm0, %xmm1, %xmm3 # sched: [1:1.00]
1496 ; ZNVER1-SSE-NEXT:    pblendvb %xmm0, (%rdi), %xmm3 # sched: [8:1.00]
1497 ; ZNVER1-SSE-NEXT:    movdqa %xmm3, %xmm0 # sched: [1:0.25]
1498 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1499 ;
1500 ; ZNVER1-LABEL: test_pblendvb:
1501 ; ZNVER1:       # %bb.0:
1502 ; ZNVER1-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
1503 ; ZNVER1-NEXT:    vpblendvb %xmm2, (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1504 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1505   %1 = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> %a2)
1506   %2 = load <16 x i8>, <16 x i8> *%a3, align 16
1507   %3 = call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %1, <16 x i8> %2, <16 x i8> %a2)
1508   ret <16 x i8> %3
1509 }
1510 declare <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone
1511
1512 define <8 x i16> @test_pblendw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
1513 ; GENERIC-LABEL: test_pblendw:
1514 ; GENERIC:       # %bb.0:
1515 ; GENERIC-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:0.50]
1516 ; GENERIC-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:0.50]
1517 ; GENERIC-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
1518 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1519 ;
1520 ; SLM-LABEL: test_pblendw:
1521 ; SLM:       # %bb.0:
1522 ; SLM-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00]
1523 ; SLM-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [4:1.00]
1524 ; SLM-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
1525 ; SLM-NEXT:    retq # sched: [4:1.00]
1526 ;
1527 ; SANDY-SSE-LABEL: test_pblendw:
1528 ; SANDY-SSE:       # %bb.0:
1529 ; SANDY-SSE-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:0.50]
1530 ; SANDY-SSE-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:0.50]
1531 ; SANDY-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
1532 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1533 ;
1534 ; SANDY-LABEL: test_pblendw:
1535 ; SANDY:       # %bb.0:
1536 ; SANDY-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:0.50]
1537 ; SANDY-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:0.50]
1538 ; SANDY-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1539 ; SANDY-NEXT:    retq # sched: [1:1.00]
1540 ;
1541 ; HASWELL-SSE-LABEL: test_pblendw:
1542 ; HASWELL-SSE:       # %bb.0:
1543 ; HASWELL-SSE-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00]
1544 ; HASWELL-SSE-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:1.00]
1545 ; HASWELL-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
1546 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1547 ;
1548 ; HASWELL-LABEL: test_pblendw:
1549 ; HASWELL:       # %bb.0:
1550 ; HASWELL-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00]
1551 ; HASWELL-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:1.00]
1552 ; HASWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1553 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1554 ;
1555 ; BROADWELL-SSE-LABEL: test_pblendw:
1556 ; BROADWELL-SSE:       # %bb.0:
1557 ; BROADWELL-SSE-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00]
1558 ; BROADWELL-SSE-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [6:1.00]
1559 ; BROADWELL-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
1560 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1561 ;
1562 ; BROADWELL-LABEL: test_pblendw:
1563 ; BROADWELL:       # %bb.0:
1564 ; BROADWELL-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00]
1565 ; BROADWELL-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [6:1.00]
1566 ; BROADWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1567 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1568 ;
1569 ; SKYLAKE-SSE-LABEL: test_pblendw:
1570 ; SKYLAKE-SSE:       # %bb.0:
1571 ; SKYLAKE-SSE-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00]
1572 ; SKYLAKE-SSE-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:1.00]
1573 ; SKYLAKE-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.33]
1574 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1575 ;
1576 ; SKYLAKE-LABEL: test_pblendw:
1577 ; SKYLAKE:       # %bb.0:
1578 ; SKYLAKE-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00]
1579 ; SKYLAKE-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:1.00]
1580 ; SKYLAKE-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1581 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1582 ;
1583 ; SKX-SSE-LABEL: test_pblendw:
1584 ; SKX-SSE:       # %bb.0:
1585 ; SKX-SSE-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00]
1586 ; SKX-SSE-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:1.00]
1587 ; SKX-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.33]
1588 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1589 ;
1590 ; SKX-LABEL: test_pblendw:
1591 ; SKX:       # %bb.0:
1592 ; SKX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:1.00]
1593 ; SKX-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:1.00]
1594 ; SKX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1595 ; SKX-NEXT:    retq # sched: [7:1.00]
1596 ;
1597 ; BDVER2-SSE-LABEL: test_pblendw:
1598 ; BDVER2-SSE:       # %bb.0:
1599 ; BDVER2-SSE-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [2:0.50]
1600 ; BDVER2-SSE-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:0.50]
1601 ; BDVER2-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [2:0.50]
1602 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1603 ;
1604 ; BDVER2-LABEL: test_pblendw:
1605 ; BDVER2:       # %bb.0:
1606 ; BDVER2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [2:0.50]
1607 ; BDVER2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [7:0.50]
1608 ; BDVER2-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
1609 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1610 ;
1611 ; BTVER2-SSE-LABEL: test_pblendw:
1612 ; BTVER2-SSE:       # %bb.0:
1613 ; BTVER2-SSE-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:0.50]
1614 ; BTVER2-SSE-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [6:1.00]
1615 ; BTVER2-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
1616 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1617 ;
1618 ; BTVER2-LABEL: test_pblendw:
1619 ; BTVER2:       # %bb.0:
1620 ; BTVER2-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:0.50]
1621 ; BTVER2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [6:1.00]
1622 ; BTVER2-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1623 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1624 ;
1625 ; ZNVER1-SSE-LABEL: test_pblendw:
1626 ; ZNVER1-SSE:       # %bb.0:
1627 ; ZNVER1-SSE-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:0.33]
1628 ; ZNVER1-SSE-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [8:0.50]
1629 ; ZNVER1-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.25]
1630 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1631 ;
1632 ; ZNVER1-LABEL: test_pblendw:
1633 ; ZNVER1:       # %bb.0:
1634 ; ZNVER1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] sched: [1:0.33]
1635 ; ZNVER1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],mem[2,3],xmm1[4,5,6],mem[7] sched: [8:0.50]
1636 ; ZNVER1-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
1637 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1638   %1 = shufflevector <8 x i16> %a0, <8 x i16> %a1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
1639   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
1640   %3 = shufflevector <8 x i16> %a1, <8 x i16> %2, <8 x i32> <i32 0, i32 1, i32 10, i32 11, i32 4, i32 5, i32 6, i32 15>
1641   %4 = add <8 x i16> %1, %3
1642   ret <8 x i16> %4
1643 }
1644
1645 define <2 x i64> @test_pcmpeqq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
1646 ; GENERIC-LABEL: test_pcmpeqq:
1647 ; GENERIC:       # %bb.0:
1648 ; GENERIC-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [1:0.50]
1649 ; GENERIC-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [7:0.50]
1650 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1651 ;
1652 ; SLM-LABEL: test_pcmpeqq:
1653 ; SLM:       # %bb.0:
1654 ; SLM-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [1:0.50]
1655 ; SLM-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [4:1.00]
1656 ; SLM-NEXT:    retq # sched: [4:1.00]
1657 ;
1658 ; SANDY-SSE-LABEL: test_pcmpeqq:
1659 ; SANDY-SSE:       # %bb.0:
1660 ; SANDY-SSE-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [1:0.50]
1661 ; SANDY-SSE-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [7:0.50]
1662 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1663 ;
1664 ; SANDY-LABEL: test_pcmpeqq:
1665 ; SANDY:       # %bb.0:
1666 ; SANDY-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1667 ; SANDY-NEXT:    vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
1668 ; SANDY-NEXT:    retq # sched: [1:1.00]
1669 ;
1670 ; HASWELL-SSE-LABEL: test_pcmpeqq:
1671 ; HASWELL-SSE:       # %bb.0:
1672 ; HASWELL-SSE-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [1:0.50]
1673 ; HASWELL-SSE-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [7:0.50]
1674 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1675 ;
1676 ; HASWELL-LABEL: test_pcmpeqq:
1677 ; HASWELL:       # %bb.0:
1678 ; HASWELL-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1679 ; HASWELL-NEXT:    vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
1680 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1681 ;
1682 ; BROADWELL-SSE-LABEL: test_pcmpeqq:
1683 ; BROADWELL-SSE:       # %bb.0:
1684 ; BROADWELL-SSE-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [1:0.50]
1685 ; BROADWELL-SSE-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [6:0.50]
1686 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1687 ;
1688 ; BROADWELL-LABEL: test_pcmpeqq:
1689 ; BROADWELL:       # %bb.0:
1690 ; BROADWELL-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1691 ; BROADWELL-NEXT:    vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
1692 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1693 ;
1694 ; SKYLAKE-SSE-LABEL: test_pcmpeqq:
1695 ; SKYLAKE-SSE:       # %bb.0:
1696 ; SKYLAKE-SSE-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [1:0.50]
1697 ; SKYLAKE-SSE-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [7:0.50]
1698 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1699 ;
1700 ; SKYLAKE-LABEL: test_pcmpeqq:
1701 ; SKYLAKE:       # %bb.0:
1702 ; SKYLAKE-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1703 ; SKYLAKE-NEXT:    vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
1704 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1705 ;
1706 ; SKX-SSE-LABEL: test_pcmpeqq:
1707 ; SKX-SSE:       # %bb.0:
1708 ; SKX-SSE-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [1:0.50]
1709 ; SKX-SSE-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [7:0.50]
1710 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1711 ;
1712 ; SKX-LABEL: test_pcmpeqq:
1713 ; SKX:       # %bb.0:
1714 ; SKX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1715 ; SKX-NEXT:    vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
1716 ; SKX-NEXT:    retq # sched: [7:1.00]
1717 ;
1718 ; BDVER2-SSE-LABEL: test_pcmpeqq:
1719 ; BDVER2-SSE:       # %bb.0:
1720 ; BDVER2-SSE-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [2:0.50]
1721 ; BDVER2-SSE-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [7:0.50]
1722 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1723 ;
1724 ; BDVER2-LABEL: test_pcmpeqq:
1725 ; BDVER2:       # %bb.0:
1726 ; BDVER2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
1727 ; BDVER2-NEXT:    vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
1728 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1729 ;
1730 ; BTVER2-SSE-LABEL: test_pcmpeqq:
1731 ; BTVER2-SSE:       # %bb.0:
1732 ; BTVER2-SSE-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [1:0.50]
1733 ; BTVER2-SSE-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [6:1.00]
1734 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1735 ;
1736 ; BTVER2-LABEL: test_pcmpeqq:
1737 ; BTVER2:       # %bb.0:
1738 ; BTVER2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1739 ; BTVER2-NEXT:    vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
1740 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1741 ;
1742 ; ZNVER1-SSE-LABEL: test_pcmpeqq:
1743 ; ZNVER1-SSE:       # %bb.0:
1744 ; ZNVER1-SSE-NEXT:    pcmpeqq %xmm1, %xmm0 # sched: [1:0.25]
1745 ; ZNVER1-SSE-NEXT:    pcmpeqq (%rdi), %xmm0 # sched: [8:0.50]
1746 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1747 ;
1748 ; ZNVER1-LABEL: test_pcmpeqq:
1749 ; ZNVER1:       # %bb.0:
1750 ; ZNVER1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
1751 ; ZNVER1-NEXT:    vpcmpeqq (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
1752 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1753   %1 = icmp eq <2 x i64> %a0, %a1
1754   %2 = sext <2 x i1> %1 to <2 x i64>
1755   %3 = load <2 x i64>, <2 x i64>*%a2, align 16
1756   %4 = icmp eq <2 x i64> %2, %3
1757   %5 = sext <2 x i1> %4 to <2 x i64>
1758   ret <2 x i64> %5
1759 }
1760
1761 define i32 @test_pextrb(<16 x i8> %a0, i8 *%a1) {
1762 ; GENERIC-LABEL: test_pextrb:
1763 ; GENERIC:       # %bb.0:
1764 ; GENERIC-NEXT:    pextrb $3, %xmm0, %eax # sched: [3:1.00]
1765 ; GENERIC-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [5:1.00]
1766 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1767 ;
1768 ; SLM-LABEL: test_pextrb:
1769 ; SLM:       # %bb.0:
1770 ; SLM-NEXT:    pextrb $3, %xmm0, %eax # sched: [1:1.00]
1771 ; SLM-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [4:2.00]
1772 ; SLM-NEXT:    retq # sched: [4:1.00]
1773 ;
1774 ; SANDY-SSE-LABEL: test_pextrb:
1775 ; SANDY-SSE:       # %bb.0:
1776 ; SANDY-SSE-NEXT:    pextrb $3, %xmm0, %eax # sched: [3:1.00]
1777 ; SANDY-SSE-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [5:1.00]
1778 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1779 ;
1780 ; SANDY-LABEL: test_pextrb:
1781 ; SANDY:       # %bb.0:
1782 ; SANDY-NEXT:    vpextrb $3, %xmm0, %eax # sched: [3:1.00]
1783 ; SANDY-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [5:1.00]
1784 ; SANDY-NEXT:    retq # sched: [1:1.00]
1785 ;
1786 ; HASWELL-SSE-LABEL: test_pextrb:
1787 ; HASWELL-SSE:       # %bb.0:
1788 ; HASWELL-SSE-NEXT:    pextrb $3, %xmm0, %eax # sched: [2:1.00]
1789 ; HASWELL-SSE-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [2:1.00]
1790 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1791 ;
1792 ; HASWELL-LABEL: test_pextrb:
1793 ; HASWELL:       # %bb.0:
1794 ; HASWELL-NEXT:    vpextrb $3, %xmm0, %eax # sched: [2:1.00]
1795 ; HASWELL-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [2:1.00]
1796 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1797 ;
1798 ; BROADWELL-SSE-LABEL: test_pextrb:
1799 ; BROADWELL-SSE:       # %bb.0:
1800 ; BROADWELL-SSE-NEXT:    pextrb $3, %xmm0, %eax # sched: [2:1.00]
1801 ; BROADWELL-SSE-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [2:1.00]
1802 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1803 ;
1804 ; BROADWELL-LABEL: test_pextrb:
1805 ; BROADWELL:       # %bb.0:
1806 ; BROADWELL-NEXT:    vpextrb $3, %xmm0, %eax # sched: [2:1.00]
1807 ; BROADWELL-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [2:1.00]
1808 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1809 ;
1810 ; SKYLAKE-SSE-LABEL: test_pextrb:
1811 ; SKYLAKE-SSE:       # %bb.0:
1812 ; SKYLAKE-SSE-NEXT:    pextrb $3, %xmm0, %eax # sched: [3:1.00]
1813 ; SKYLAKE-SSE-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [2:1.00]
1814 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1815 ;
1816 ; SKYLAKE-LABEL: test_pextrb:
1817 ; SKYLAKE:       # %bb.0:
1818 ; SKYLAKE-NEXT:    vpextrb $3, %xmm0, %eax # sched: [3:1.00]
1819 ; SKYLAKE-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [2:1.00]
1820 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1821 ;
1822 ; SKX-SSE-LABEL: test_pextrb:
1823 ; SKX-SSE:       # %bb.0:
1824 ; SKX-SSE-NEXT:    pextrb $3, %xmm0, %eax # sched: [3:1.00]
1825 ; SKX-SSE-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [2:1.00]
1826 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1827 ;
1828 ; SKX-LABEL: test_pextrb:
1829 ; SKX:       # %bb.0:
1830 ; SKX-NEXT:    vpextrb $3, %xmm0, %eax # sched: [3:1.00]
1831 ; SKX-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [2:1.00]
1832 ; SKX-NEXT:    retq # sched: [7:1.00]
1833 ;
1834 ; BDVER2-SSE-LABEL: test_pextrb:
1835 ; BDVER2-SSE:       # %bb.0:
1836 ; BDVER2-SSE-NEXT:    pextrb $3, %xmm0, %eax # sched: [13:1.00]
1837 ; BDVER2-SSE-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [13:1.00]
1838 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1839 ;
1840 ; BDVER2-LABEL: test_pextrb:
1841 ; BDVER2:       # %bb.0:
1842 ; BDVER2-NEXT:    vpextrb $3, %xmm0, %eax # sched: [13:1.00]
1843 ; BDVER2-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [13:1.00]
1844 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1845 ;
1846 ; BTVER2-SSE-LABEL: test_pextrb:
1847 ; BTVER2-SSE:       # %bb.0:
1848 ; BTVER2-SSE-NEXT:    pextrb $3, %xmm0, %eax # sched: [3:1.00]
1849 ; BTVER2-SSE-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [3:1.00]
1850 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1851 ;
1852 ; BTVER2-LABEL: test_pextrb:
1853 ; BTVER2:       # %bb.0:
1854 ; BTVER2-NEXT:    vpextrb $3, %xmm0, %eax # sched: [3:1.00]
1855 ; BTVER2-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [3:1.00]
1856 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1857 ;
1858 ; ZNVER1-SSE-LABEL: test_pextrb:
1859 ; ZNVER1-SSE:       # %bb.0:
1860 ; ZNVER1-SSE-NEXT:    pextrb $3, %xmm0, %eax # sched: [2:2.00]
1861 ; ZNVER1-SSE-NEXT:    pextrb $1, %xmm0, (%rdi) # sched: [5:3.00]
1862 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1863 ;
1864 ; ZNVER1-LABEL: test_pextrb:
1865 ; ZNVER1:       # %bb.0:
1866 ; ZNVER1-NEXT:    vpextrb $3, %xmm0, %eax # sched: [2:2.00]
1867 ; ZNVER1-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [5:3.00]
1868 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1869   %1 = extractelement <16 x i8> %a0, i32 3
1870   %2 = extractelement <16 x i8> %a0, i32 1
1871   store i8 %2, i8 *%a1
1872   %3 = zext i8 %1 to i32
1873   ret i32 %3
1874 }
1875
1876 define i32 @test_pextrd(<4 x i32> %a0, i32 *%a1) {
1877 ; GENERIC-LABEL: test_pextrd:
1878 ; GENERIC:       # %bb.0:
1879 ; GENERIC-NEXT:    paddd %xmm0, %xmm0 # sched: [1:0.50]
1880 ; GENERIC-NEXT:    pextrd $3, %xmm0, %eax # sched: [3:1.00]
1881 ; GENERIC-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [5:1.00]
1882 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1883 ;
1884 ; SLM-LABEL: test_pextrd:
1885 ; SLM:       # %bb.0:
1886 ; SLM-NEXT:    paddd %xmm0, %xmm0 # sched: [1:0.50]
1887 ; SLM-NEXT:    pextrd $3, %xmm0, %eax # sched: [1:1.00]
1888 ; SLM-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [4:2.00]
1889 ; SLM-NEXT:    retq # sched: [4:1.00]
1890 ;
1891 ; SANDY-SSE-LABEL: test_pextrd:
1892 ; SANDY-SSE:       # %bb.0:
1893 ; SANDY-SSE-NEXT:    paddd %xmm0, %xmm0 # sched: [1:0.50]
1894 ; SANDY-SSE-NEXT:    pextrd $3, %xmm0, %eax # sched: [3:1.00]
1895 ; SANDY-SSE-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [5:1.00]
1896 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1897 ;
1898 ; SANDY-LABEL: test_pextrd:
1899 ; SANDY:       # %bb.0:
1900 ; SANDY-NEXT:    vpaddd %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
1901 ; SANDY-NEXT:    vpextrd $3, %xmm0, %eax # sched: [3:1.00]
1902 ; SANDY-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [5:1.00]
1903 ; SANDY-NEXT:    retq # sched: [1:1.00]
1904 ;
1905 ; HASWELL-SSE-LABEL: test_pextrd:
1906 ; HASWELL-SSE:       # %bb.0:
1907 ; HASWELL-SSE-NEXT:    paddd %xmm0, %xmm0 # sched: [1:0.50]
1908 ; HASWELL-SSE-NEXT:    pextrd $3, %xmm0, %eax # sched: [2:1.00]
1909 ; HASWELL-SSE-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [2:1.00]
1910 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1911 ;
1912 ; HASWELL-LABEL: test_pextrd:
1913 ; HASWELL:       # %bb.0:
1914 ; HASWELL-NEXT:    vpaddd %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
1915 ; HASWELL-NEXT:    vpextrd $3, %xmm0, %eax # sched: [2:1.00]
1916 ; HASWELL-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [2:1.00]
1917 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1918 ;
1919 ; BROADWELL-SSE-LABEL: test_pextrd:
1920 ; BROADWELL-SSE:       # %bb.0:
1921 ; BROADWELL-SSE-NEXT:    paddd %xmm0, %xmm0 # sched: [1:0.50]
1922 ; BROADWELL-SSE-NEXT:    pextrd $3, %xmm0, %eax # sched: [2:1.00]
1923 ; BROADWELL-SSE-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [2:1.00]
1924 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1925 ;
1926 ; BROADWELL-LABEL: test_pextrd:
1927 ; BROADWELL:       # %bb.0:
1928 ; BROADWELL-NEXT:    vpaddd %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
1929 ; BROADWELL-NEXT:    vpextrd $3, %xmm0, %eax # sched: [2:1.00]
1930 ; BROADWELL-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [2:1.00]
1931 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1932 ;
1933 ; SKYLAKE-SSE-LABEL: test_pextrd:
1934 ; SKYLAKE-SSE:       # %bb.0:
1935 ; SKYLAKE-SSE-NEXT:    paddd %xmm0, %xmm0 # sched: [1:0.33]
1936 ; SKYLAKE-SSE-NEXT:    pextrd $3, %xmm0, %eax # sched: [3:1.00]
1937 ; SKYLAKE-SSE-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [2:1.00]
1938 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1939 ;
1940 ; SKYLAKE-LABEL: test_pextrd:
1941 ; SKYLAKE:       # %bb.0:
1942 ; SKYLAKE-NEXT:    vpaddd %xmm0, %xmm0, %xmm0 # sched: [1:0.33]
1943 ; SKYLAKE-NEXT:    vpextrd $3, %xmm0, %eax # sched: [3:1.00]
1944 ; SKYLAKE-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [2:1.00]
1945 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1946 ;
1947 ; SKX-SSE-LABEL: test_pextrd:
1948 ; SKX-SSE:       # %bb.0:
1949 ; SKX-SSE-NEXT:    paddd %xmm0, %xmm0 # sched: [1:0.33]
1950 ; SKX-SSE-NEXT:    pextrd $3, %xmm0, %eax # sched: [3:1.00]
1951 ; SKX-SSE-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [2:1.00]
1952 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1953 ;
1954 ; SKX-LABEL: test_pextrd:
1955 ; SKX:       # %bb.0:
1956 ; SKX-NEXT:    vpaddd %xmm0, %xmm0, %xmm0 # sched: [1:0.33]
1957 ; SKX-NEXT:    vpextrd $3, %xmm0, %eax # sched: [3:1.00]
1958 ; SKX-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [2:1.00]
1959 ; SKX-NEXT:    retq # sched: [7:1.00]
1960 ;
1961 ; BDVER2-SSE-LABEL: test_pextrd:
1962 ; BDVER2-SSE:       # %bb.0:
1963 ; BDVER2-SSE-NEXT:    paddd %xmm0, %xmm0 # sched: [2:0.50]
1964 ; BDVER2-SSE-NEXT:    pextrd $3, %xmm0, %eax # sched: [13:1.00]
1965 ; BDVER2-SSE-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [13:1.00]
1966 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1967 ;
1968 ; BDVER2-LABEL: test_pextrd:
1969 ; BDVER2:       # %bb.0:
1970 ; BDVER2-NEXT:    vpaddd %xmm0, %xmm0, %xmm0 # sched: [2:0.50]
1971 ; BDVER2-NEXT:    vpextrd $3, %xmm0, %eax # sched: [13:1.00]
1972 ; BDVER2-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [13:1.00]
1973 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1974 ;
1975 ; BTVER2-SSE-LABEL: test_pextrd:
1976 ; BTVER2-SSE:       # %bb.0:
1977 ; BTVER2-SSE-NEXT:    paddd %xmm0, %xmm0 # sched: [1:0.50]
1978 ; BTVER2-SSE-NEXT:    pextrd $3, %xmm0, %eax # sched: [3:1.00]
1979 ; BTVER2-SSE-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [3:1.00]
1980 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1981 ;
1982 ; BTVER2-LABEL: test_pextrd:
1983 ; BTVER2:       # %bb.0:
1984 ; BTVER2-NEXT:    vpaddd %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
1985 ; BTVER2-NEXT:    vpextrd $3, %xmm0, %eax # sched: [3:1.00]
1986 ; BTVER2-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [3:1.00]
1987 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1988 ;
1989 ; ZNVER1-SSE-LABEL: test_pextrd:
1990 ; ZNVER1-SSE:       # %bb.0:
1991 ; ZNVER1-SSE-NEXT:    paddd %xmm0, %xmm0 # sched: [1:0.25]
1992 ; ZNVER1-SSE-NEXT:    pextrd $3, %xmm0, %eax # sched: [2:2.00]
1993 ; ZNVER1-SSE-NEXT:    pextrd $1, %xmm0, (%rdi) # sched: [5:3.00]
1994 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1995 ;
1996 ; ZNVER1-LABEL: test_pextrd:
1997 ; ZNVER1:       # %bb.0:
1998 ; ZNVER1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0 # sched: [1:0.25]
1999 ; ZNVER1-NEXT:    vpextrd $3, %xmm0, %eax # sched: [2:2.00]
2000 ; ZNVER1-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [5:3.00]
2001 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2002   %1 = add <4 x i32> %a0, %a0
2003   %2 = extractelement <4 x i32> %1, i32 3
2004   %3 = extractelement <4 x i32> %1, i32 1
2005   store i32 %3, i32 *%a1
2006   ret i32 %2
2007 }
2008
2009 define i64 @test_pextrq(<2 x i64> %a0, <2 x i64> %a1, i64 *%a2) {
2010 ; GENERIC-LABEL: test_pextrq:
2011 ; GENERIC:       # %bb.0:
2012 ; GENERIC-NEXT:    pextrq $1, %xmm0, %rax # sched: [3:1.00]
2013 ; GENERIC-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [5:1.00]
2014 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2015 ;
2016 ; SLM-LABEL: test_pextrq:
2017 ; SLM:       # %bb.0:
2018 ; SLM-NEXT:    pextrq $1, %xmm0, %rax # sched: [1:1.00]
2019 ; SLM-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [4:2.00]
2020 ; SLM-NEXT:    retq # sched: [4:1.00]
2021 ;
2022 ; SANDY-SSE-LABEL: test_pextrq:
2023 ; SANDY-SSE:       # %bb.0:
2024 ; SANDY-SSE-NEXT:    pextrq $1, %xmm0, %rax # sched: [3:1.00]
2025 ; SANDY-SSE-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [5:1.00]
2026 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2027 ;
2028 ; SANDY-LABEL: test_pextrq:
2029 ; SANDY:       # %bb.0:
2030 ; SANDY-NEXT:    vpextrq $1, %xmm0, %rax # sched: [3:1.00]
2031 ; SANDY-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [5:1.00]
2032 ; SANDY-NEXT:    retq # sched: [1:1.00]
2033 ;
2034 ; HASWELL-SSE-LABEL: test_pextrq:
2035 ; HASWELL-SSE:       # %bb.0:
2036 ; HASWELL-SSE-NEXT:    pextrq $1, %xmm0, %rax # sched: [2:1.00]
2037 ; HASWELL-SSE-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
2038 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2039 ;
2040 ; HASWELL-LABEL: test_pextrq:
2041 ; HASWELL:       # %bb.0:
2042 ; HASWELL-NEXT:    vpextrq $1, %xmm0, %rax # sched: [2:1.00]
2043 ; HASWELL-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
2044 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2045 ;
2046 ; BROADWELL-SSE-LABEL: test_pextrq:
2047 ; BROADWELL-SSE:       # %bb.0:
2048 ; BROADWELL-SSE-NEXT:    pextrq $1, %xmm0, %rax # sched: [2:1.00]
2049 ; BROADWELL-SSE-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
2050 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2051 ;
2052 ; BROADWELL-LABEL: test_pextrq:
2053 ; BROADWELL:       # %bb.0:
2054 ; BROADWELL-NEXT:    vpextrq $1, %xmm0, %rax # sched: [2:1.00]
2055 ; BROADWELL-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
2056 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2057 ;
2058 ; SKYLAKE-SSE-LABEL: test_pextrq:
2059 ; SKYLAKE-SSE:       # %bb.0:
2060 ; SKYLAKE-SSE-NEXT:    pextrq $1, %xmm0, %rax # sched: [3:1.00]
2061 ; SKYLAKE-SSE-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
2062 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2063 ;
2064 ; SKYLAKE-LABEL: test_pextrq:
2065 ; SKYLAKE:       # %bb.0:
2066 ; SKYLAKE-NEXT:    vpextrq $1, %xmm0, %rax # sched: [3:1.00]
2067 ; SKYLAKE-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
2068 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2069 ;
2070 ; SKX-SSE-LABEL: test_pextrq:
2071 ; SKX-SSE:       # %bb.0:
2072 ; SKX-SSE-NEXT:    pextrq $1, %xmm0, %rax # sched: [3:1.00]
2073 ; SKX-SSE-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
2074 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2075 ;
2076 ; SKX-LABEL: test_pextrq:
2077 ; SKX:       # %bb.0:
2078 ; SKX-NEXT:    vpextrq $1, %xmm0, %rax # sched: [3:1.00]
2079 ; SKX-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
2080 ; SKX-NEXT:    retq # sched: [7:1.00]
2081 ;
2082 ; BDVER2-SSE-LABEL: test_pextrq:
2083 ; BDVER2-SSE:       # %bb.0:
2084 ; BDVER2-SSE-NEXT:    pextrq $1, %xmm0, %rax # sched: [13:1.00]
2085 ; BDVER2-SSE-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [13:1.00]
2086 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2087 ;
2088 ; BDVER2-LABEL: test_pextrq:
2089 ; BDVER2:       # %bb.0:
2090 ; BDVER2-NEXT:    vpextrq $1, %xmm0, %rax # sched: [13:1.00]
2091 ; BDVER2-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [13:1.00]
2092 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2093 ;
2094 ; BTVER2-SSE-LABEL: test_pextrq:
2095 ; BTVER2-SSE:       # %bb.0:
2096 ; BTVER2-SSE-NEXT:    pextrq $1, %xmm0, %rax # sched: [3:1.00]
2097 ; BTVER2-SSE-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [3:1.00]
2098 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2099 ;
2100 ; BTVER2-LABEL: test_pextrq:
2101 ; BTVER2:       # %bb.0:
2102 ; BTVER2-NEXT:    vpextrq $1, %xmm0, %rax # sched: [3:1.00]
2103 ; BTVER2-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [3:1.00]
2104 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2105 ;
2106 ; ZNVER1-SSE-LABEL: test_pextrq:
2107 ; ZNVER1-SSE:       # %bb.0:
2108 ; ZNVER1-SSE-NEXT:    pextrq $1, %xmm0, %rax # sched: [2:2.00]
2109 ; ZNVER1-SSE-NEXT:    pextrq $1, %xmm0, (%rdi) # sched: [5:3.00]
2110 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2111 ;
2112 ; ZNVER1-LABEL: test_pextrq:
2113 ; ZNVER1:       # %bb.0:
2114 ; ZNVER1-NEXT:    vpextrq $1, %xmm0, %rax # sched: [2:2.00]
2115 ; ZNVER1-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [5:3.00]
2116 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2117   %1 = extractelement <2 x i64> %a0, i32 1
2118   %2 = extractelement <2 x i64> %a0, i32 1
2119   store i64 %2, i64 *%a2
2120   ret i64 %1
2121 }
2122
2123 define i32 @test_pextrw(<8 x i16> %a0, i16 *%a1) {
2124 ; GENERIC-LABEL: test_pextrw:
2125 ; GENERIC:       # %bb.0:
2126 ; GENERIC-NEXT:    pextrw $3, %xmm0, %eax # sched: [3:1.00]
2127 ; GENERIC-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [5:1.00]
2128 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2129 ;
2130 ; SLM-LABEL: test_pextrw:
2131 ; SLM:       # %bb.0:
2132 ; SLM-NEXT:    pextrw $3, %xmm0, %eax # sched: [1:1.00]
2133 ; SLM-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [4:2.00]
2134 ; SLM-NEXT:    retq # sched: [4:1.00]
2135 ;
2136 ; SANDY-SSE-LABEL: test_pextrw:
2137 ; SANDY-SSE:       # %bb.0:
2138 ; SANDY-SSE-NEXT:    pextrw $3, %xmm0, %eax # sched: [3:1.00]
2139 ; SANDY-SSE-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [5:1.00]
2140 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2141 ;
2142 ; SANDY-LABEL: test_pextrw:
2143 ; SANDY:       # %bb.0:
2144 ; SANDY-NEXT:    vpextrw $3, %xmm0, %eax # sched: [3:1.00]
2145 ; SANDY-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [5:1.00]
2146 ; SANDY-NEXT:    retq # sched: [1:1.00]
2147 ;
2148 ; HASWELL-SSE-LABEL: test_pextrw:
2149 ; HASWELL-SSE:       # %bb.0:
2150 ; HASWELL-SSE-NEXT:    pextrw $3, %xmm0, %eax # sched: [2:1.00]
2151 ; HASWELL-SSE-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [2:1.00]
2152 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2153 ;
2154 ; HASWELL-LABEL: test_pextrw:
2155 ; HASWELL:       # %bb.0:
2156 ; HASWELL-NEXT:    vpextrw $3, %xmm0, %eax # sched: [2:1.00]
2157 ; HASWELL-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [2:1.00]
2158 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2159 ;
2160 ; BROADWELL-SSE-LABEL: test_pextrw:
2161 ; BROADWELL-SSE:       # %bb.0:
2162 ; BROADWELL-SSE-NEXT:    pextrw $3, %xmm0, %eax # sched: [2:1.00]
2163 ; BROADWELL-SSE-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [2:1.00]
2164 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2165 ;
2166 ; BROADWELL-LABEL: test_pextrw:
2167 ; BROADWELL:       # %bb.0:
2168 ; BROADWELL-NEXT:    vpextrw $3, %xmm0, %eax # sched: [2:1.00]
2169 ; BROADWELL-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [2:1.00]
2170 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2171 ;
2172 ; SKYLAKE-SSE-LABEL: test_pextrw:
2173 ; SKYLAKE-SSE:       # %bb.0:
2174 ; SKYLAKE-SSE-NEXT:    pextrw $3, %xmm0, %eax # sched: [3:1.00]
2175 ; SKYLAKE-SSE-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [2:1.00]
2176 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2177 ;
2178 ; SKYLAKE-LABEL: test_pextrw:
2179 ; SKYLAKE:       # %bb.0:
2180 ; SKYLAKE-NEXT:    vpextrw $3, %xmm0, %eax # sched: [3:1.00]
2181 ; SKYLAKE-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [2:1.00]
2182 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2183 ;
2184 ; SKX-SSE-LABEL: test_pextrw:
2185 ; SKX-SSE:       # %bb.0:
2186 ; SKX-SSE-NEXT:    pextrw $3, %xmm0, %eax # sched: [3:1.00]
2187 ; SKX-SSE-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [2:1.00]
2188 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2189 ;
2190 ; SKX-LABEL: test_pextrw:
2191 ; SKX:       # %bb.0:
2192 ; SKX-NEXT:    vpextrw $3, %xmm0, %eax # sched: [3:1.00]
2193 ; SKX-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [2:1.00]
2194 ; SKX-NEXT:    retq # sched: [7:1.00]
2195 ;
2196 ; BDVER2-SSE-LABEL: test_pextrw:
2197 ; BDVER2-SSE:       # %bb.0:
2198 ; BDVER2-SSE-NEXT:    pextrw $3, %xmm0, %eax # sched: [13:1.00]
2199 ; BDVER2-SSE-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [13:1.00]
2200 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2201 ;
2202 ; BDVER2-LABEL: test_pextrw:
2203 ; BDVER2:       # %bb.0:
2204 ; BDVER2-NEXT:    vpextrw $3, %xmm0, %eax # sched: [13:1.00]
2205 ; BDVER2-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [13:1.00]
2206 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2207 ;
2208 ; BTVER2-SSE-LABEL: test_pextrw:
2209 ; BTVER2-SSE:       # %bb.0:
2210 ; BTVER2-SSE-NEXT:    pextrw $3, %xmm0, %eax # sched: [3:1.00]
2211 ; BTVER2-SSE-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [3:1.00]
2212 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2213 ;
2214 ; BTVER2-LABEL: test_pextrw:
2215 ; BTVER2:       # %bb.0:
2216 ; BTVER2-NEXT:    vpextrw $3, %xmm0, %eax # sched: [3:1.00]
2217 ; BTVER2-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [3:1.00]
2218 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2219 ;
2220 ; ZNVER1-SSE-LABEL: test_pextrw:
2221 ; ZNVER1-SSE:       # %bb.0:
2222 ; ZNVER1-SSE-NEXT:    pextrw $3, %xmm0, %eax # sched: [2:2.00]
2223 ; ZNVER1-SSE-NEXT:    pextrw $1, %xmm0, (%rdi) # sched: [5:3.00]
2224 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2225 ;
2226 ; ZNVER1-LABEL: test_pextrw:
2227 ; ZNVER1:       # %bb.0:
2228 ; ZNVER1-NEXT:    vpextrw $3, %xmm0, %eax # sched: [2:2.00]
2229 ; ZNVER1-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [5:3.00]
2230 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2231   %1 = extractelement <8 x i16> %a0, i32 3
2232   %2 = extractelement <8 x i16> %a0, i32 1
2233   store i16 %2, i16 *%a1
2234   %3 = zext i16 %1 to i32
2235   ret i32 %3
2236 }
2237
2238 define <8 x i16> @test_phminposuw(<8 x i16> *%a0) {
2239 ; GENERIC-LABEL: test_phminposuw:
2240 ; GENERIC:       # %bb.0:
2241 ; GENERIC-NEXT:    phminposuw (%rdi), %xmm0 # sched: [11:1.00]
2242 ; GENERIC-NEXT:    phminposuw %xmm0, %xmm0 # sched: [5:1.00]
2243 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2244 ;
2245 ; SLM-LABEL: test_phminposuw:
2246 ; SLM:       # %bb.0:
2247 ; SLM-NEXT:    phminposuw (%rdi), %xmm0 # sched: [7:1.00]
2248 ; SLM-NEXT:    phminposuw %xmm0, %xmm0 # sched: [4:1.00]
2249 ; SLM-NEXT:    retq # sched: [4:1.00]
2250 ;
2251 ; SANDY-SSE-LABEL: test_phminposuw:
2252 ; SANDY-SSE:       # %bb.0:
2253 ; SANDY-SSE-NEXT:    phminposuw (%rdi), %xmm0 # sched: [11:1.00]
2254 ; SANDY-SSE-NEXT:    phminposuw %xmm0, %xmm0 # sched: [5:1.00]
2255 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2256 ;
2257 ; SANDY-LABEL: test_phminposuw:
2258 ; SANDY:       # %bb.0:
2259 ; SANDY-NEXT:    vphminposuw (%rdi), %xmm0 # sched: [11:1.00]
2260 ; SANDY-NEXT:    vphminposuw %xmm0, %xmm0 # sched: [5:1.00]
2261 ; SANDY-NEXT:    retq # sched: [1:1.00]
2262 ;
2263 ; HASWELL-SSE-LABEL: test_phminposuw:
2264 ; HASWELL-SSE:       # %bb.0:
2265 ; HASWELL-SSE-NEXT:    phminposuw (%rdi), %xmm0 # sched: [11:1.00]
2266 ; HASWELL-SSE-NEXT:    phminposuw %xmm0, %xmm0 # sched: [5:1.00]
2267 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2268 ;
2269 ; HASWELL-LABEL: test_phminposuw:
2270 ; HASWELL:       # %bb.0:
2271 ; HASWELL-NEXT:    vphminposuw (%rdi), %xmm0 # sched: [11:1.00]
2272 ; HASWELL-NEXT:    vphminposuw %xmm0, %xmm0 # sched: [5:1.00]
2273 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2274 ;
2275 ; BROADWELL-SSE-LABEL: test_phminposuw:
2276 ; BROADWELL-SSE:       # %bb.0:
2277 ; BROADWELL-SSE-NEXT:    phminposuw (%rdi), %xmm0 # sched: [10:1.00]
2278 ; BROADWELL-SSE-NEXT:    phminposuw %xmm0, %xmm0 # sched: [5:1.00]
2279 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2280 ;
2281 ; BROADWELL-LABEL: test_phminposuw:
2282 ; BROADWELL:       # %bb.0:
2283 ; BROADWELL-NEXT:    vphminposuw (%rdi), %xmm0 # sched: [10:1.00]
2284 ; BROADWELL-NEXT:    vphminposuw %xmm0, %xmm0 # sched: [5:1.00]
2285 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2286 ;
2287 ; SKYLAKE-SSE-LABEL: test_phminposuw:
2288 ; SKYLAKE-SSE:       # %bb.0:
2289 ; SKYLAKE-SSE-NEXT:    phminposuw (%rdi), %xmm0 # sched: [10:0.50]
2290 ; SKYLAKE-SSE-NEXT:    phminposuw %xmm0, %xmm0 # sched: [4:0.50]
2291 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2292 ;
2293 ; SKYLAKE-LABEL: test_phminposuw:
2294 ; SKYLAKE:       # %bb.0:
2295 ; SKYLAKE-NEXT:    vphminposuw (%rdi), %xmm0 # sched: [10:0.50]
2296 ; SKYLAKE-NEXT:    vphminposuw %xmm0, %xmm0 # sched: [4:0.50]
2297 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2298 ;
2299 ; SKX-SSE-LABEL: test_phminposuw:
2300 ; SKX-SSE:       # %bb.0:
2301 ; SKX-SSE-NEXT:    phminposuw (%rdi), %xmm0 # sched: [10:1.00]
2302 ; SKX-SSE-NEXT:    phminposuw %xmm0, %xmm0 # sched: [4:1.00]
2303 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2304 ;
2305 ; SKX-LABEL: test_phminposuw:
2306 ; SKX:       # %bb.0:
2307 ; SKX-NEXT:    vphminposuw (%rdi), %xmm0 # sched: [10:1.00]
2308 ; SKX-NEXT:    vphminposuw %xmm0, %xmm0 # sched: [4:1.00]
2309 ; SKX-NEXT:    retq # sched: [7:1.00]
2310 ;
2311 ; BDVER2-SSE-LABEL: test_phminposuw:
2312 ; BDVER2-SSE:       # %bb.0:
2313 ; BDVER2-SSE-NEXT:    phminposuw (%rdi), %xmm0 # sched: [9:1.00]
2314 ; BDVER2-SSE-NEXT:    phminposuw %xmm0, %xmm0 # sched: [4:1.00]
2315 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2316 ;
2317 ; BDVER2-LABEL: test_phminposuw:
2318 ; BDVER2:       # %bb.0:
2319 ; BDVER2-NEXT:    vphminposuw (%rdi), %xmm0 # sched: [9:1.00]
2320 ; BDVER2-NEXT:    vphminposuw %xmm0, %xmm0 # sched: [4:1.00]
2321 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2322 ;
2323 ; BTVER2-SSE-LABEL: test_phminposuw:
2324 ; BTVER2-SSE:       # %bb.0:
2325 ; BTVER2-SSE-NEXT:    phminposuw (%rdi), %xmm0 # sched: [7:1.00]
2326 ; BTVER2-SSE-NEXT:    phminposuw %xmm0, %xmm0 # sched: [2:0.50]
2327 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2328 ;
2329 ; BTVER2-LABEL: test_phminposuw:
2330 ; BTVER2:       # %bb.0:
2331 ; BTVER2-NEXT:    vphminposuw (%rdi), %xmm0 # sched: [7:1.00]
2332 ; BTVER2-NEXT:    vphminposuw %xmm0, %xmm0 # sched: [2:0.50]
2333 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2334 ;
2335 ; ZNVER1-SSE-LABEL: test_phminposuw:
2336 ; ZNVER1-SSE:       # %bb.0:
2337 ; ZNVER1-SSE-NEXT:    phminposuw (%rdi), %xmm0 # sched: [11:1.00]
2338 ; ZNVER1-SSE-NEXT:    phminposuw %xmm0, %xmm0 # sched: [4:1.00]
2339 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2340 ;
2341 ; ZNVER1-LABEL: test_phminposuw:
2342 ; ZNVER1:       # %bb.0:
2343 ; ZNVER1-NEXT:    vphminposuw (%rdi), %xmm0 # sched: [11:1.00]
2344 ; ZNVER1-NEXT:    vphminposuw %xmm0, %xmm0 # sched: [4:1.00]
2345 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2346   %1 = load <8 x i16>, <8 x i16> *%a0, align 16
2347   %2 = call <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16> %1)
2348   %3 = call <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16> %2)
2349   ret <8 x i16> %3
2350 }
2351 declare <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16>) nounwind readnone
2352
2353 define <16 x i8> @test_pinsrb(<16 x i8> %a0, i8 %a1, i8 *%a2) {
2354 ; GENERIC-LABEL: test_pinsrb:
2355 ; GENERIC:       # %bb.0:
2356 ; GENERIC-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [2:1.00]
2357 ; GENERIC-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [7:0.50]
2358 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2359 ;
2360 ; SLM-LABEL: test_pinsrb:
2361 ; SLM:       # %bb.0:
2362 ; SLM-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [1:1.00]
2363 ; SLM-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [4:1.00]
2364 ; SLM-NEXT:    retq # sched: [4:1.00]
2365 ;
2366 ; SANDY-SSE-LABEL: test_pinsrb:
2367 ; SANDY-SSE:       # %bb.0:
2368 ; SANDY-SSE-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [2:1.00]
2369 ; SANDY-SSE-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [7:0.50]
2370 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2371 ;
2372 ; SANDY-LABEL: test_pinsrb:
2373 ; SANDY:       # %bb.0:
2374 ; SANDY-NEXT:    vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [2:1.00]
2375 ; SANDY-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [7:0.50]
2376 ; SANDY-NEXT:    retq # sched: [1:1.00]
2377 ;
2378 ; HASWELL-SSE-LABEL: test_pinsrb:
2379 ; HASWELL-SSE:       # %bb.0:
2380 ; HASWELL-SSE-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [2:2.00]
2381 ; HASWELL-SSE-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [6:1.00]
2382 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2383 ;
2384 ; HASWELL-LABEL: test_pinsrb:
2385 ; HASWELL:       # %bb.0:
2386 ; HASWELL-NEXT:    vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
2387 ; HASWELL-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
2388 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2389 ;
2390 ; BROADWELL-SSE-LABEL: test_pinsrb:
2391 ; BROADWELL-SSE:       # %bb.0:
2392 ; BROADWELL-SSE-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [2:2.00]
2393 ; BROADWELL-SSE-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [6:1.00]
2394 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2395 ;
2396 ; BROADWELL-LABEL: test_pinsrb:
2397 ; BROADWELL:       # %bb.0:
2398 ; BROADWELL-NEXT:    vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
2399 ; BROADWELL-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
2400 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2401 ;
2402 ; SKYLAKE-SSE-LABEL: test_pinsrb:
2403 ; SKYLAKE-SSE:       # %bb.0:
2404 ; SKYLAKE-SSE-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [2:2.00]
2405 ; SKYLAKE-SSE-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [6:1.00]
2406 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2407 ;
2408 ; SKYLAKE-LABEL: test_pinsrb:
2409 ; SKYLAKE:       # %bb.0:
2410 ; SKYLAKE-NEXT:    vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
2411 ; SKYLAKE-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
2412 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2413 ;
2414 ; SKX-SSE-LABEL: test_pinsrb:
2415 ; SKX-SSE:       # %bb.0:
2416 ; SKX-SSE-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [2:2.00]
2417 ; SKX-SSE-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [6:1.00]
2418 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2419 ;
2420 ; SKX-LABEL: test_pinsrb:
2421 ; SKX:       # %bb.0:
2422 ; SKX-NEXT:    vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
2423 ; SKX-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
2424 ; SKX-NEXT:    retq # sched: [7:1.00]
2425 ;
2426 ; BDVER2-SSE-LABEL: test_pinsrb:
2427 ; BDVER2-SSE:       # %bb.0:
2428 ; BDVER2-SSE-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [2:0.50]
2429 ; BDVER2-SSE-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [6:0.50]
2430 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2431 ;
2432 ; BDVER2-LABEL: test_pinsrb:
2433 ; BDVER2:       # %bb.0:
2434 ; BDVER2-NEXT:    vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [2:0.50]
2435 ; BDVER2-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [6:0.50]
2436 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2437 ;
2438 ; BTVER2-SSE-LABEL: test_pinsrb:
2439 ; BTVER2-SSE:       # %bb.0:
2440 ; BTVER2-SSE-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [7:0.50]
2441 ; BTVER2-SSE-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [4:1.00]
2442 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2443 ;
2444 ; BTVER2-LABEL: test_pinsrb:
2445 ; BTVER2:       # %bb.0:
2446 ; BTVER2-NEXT:    vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [7:0.50]
2447 ; BTVER2-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [4:1.00]
2448 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2449 ;
2450 ; ZNVER1-SSE-LABEL: test_pinsrb:
2451 ; ZNVER1-SSE:       # %bb.0:
2452 ; ZNVER1-SSE-NEXT:    pinsrb $1, %edi, %xmm0 # sched: [1:0.25]
2453 ; ZNVER1-SSE-NEXT:    pinsrb $3, (%rsi), %xmm0 # sched: [8:0.50]
2454 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2455 ;
2456 ; ZNVER1-LABEL: test_pinsrb:
2457 ; ZNVER1:       # %bb.0:
2458 ; ZNVER1-NEXT:    vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [1:0.25]
2459 ; ZNVER1-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [8:0.50]
2460 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2461   %1 = insertelement <16 x i8> %a0, i8 %a1, i32 1
2462   %2 = load i8, i8 *%a2
2463   %3 = insertelement <16 x i8> %1, i8 %2, i32 3
2464   ret <16 x i8> %3
2465 }
2466
2467 define <4 x i32> @test_pinsrd(<4 x i32> %a0, i32 %a1, i32 *%a2) {
2468 ; GENERIC-LABEL: test_pinsrd:
2469 ; GENERIC:       # %bb.0:
2470 ; GENERIC-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [2:1.00]
2471 ; GENERIC-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [7:0.50]
2472 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2473 ;
2474 ; SLM-LABEL: test_pinsrd:
2475 ; SLM:       # %bb.0:
2476 ; SLM-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [1:1.00]
2477 ; SLM-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [4:1.00]
2478 ; SLM-NEXT:    retq # sched: [4:1.00]
2479 ;
2480 ; SANDY-SSE-LABEL: test_pinsrd:
2481 ; SANDY-SSE:       # %bb.0:
2482 ; SANDY-SSE-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [2:1.00]
2483 ; SANDY-SSE-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [7:0.50]
2484 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2485 ;
2486 ; SANDY-LABEL: test_pinsrd:
2487 ; SANDY:       # %bb.0:
2488 ; SANDY-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [2:1.00]
2489 ; SANDY-NEXT:    vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [7:0.50]
2490 ; SANDY-NEXT:    retq # sched: [1:1.00]
2491 ;
2492 ; HASWELL-SSE-LABEL: test_pinsrd:
2493 ; HASWELL-SSE:       # %bb.0:
2494 ; HASWELL-SSE-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [2:2.00]
2495 ; HASWELL-SSE-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [6:1.00]
2496 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2497 ;
2498 ; HASWELL-LABEL: test_pinsrd:
2499 ; HASWELL:       # %bb.0:
2500 ; HASWELL-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
2501 ; HASWELL-NEXT:    vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
2502 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2503 ;
2504 ; BROADWELL-SSE-LABEL: test_pinsrd:
2505 ; BROADWELL-SSE:       # %bb.0:
2506 ; BROADWELL-SSE-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [2:2.00]
2507 ; BROADWELL-SSE-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [6:1.00]
2508 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2509 ;
2510 ; BROADWELL-LABEL: test_pinsrd:
2511 ; BROADWELL:       # %bb.0:
2512 ; BROADWELL-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
2513 ; BROADWELL-NEXT:    vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
2514 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2515 ;
2516 ; SKYLAKE-SSE-LABEL: test_pinsrd:
2517 ; SKYLAKE-SSE:       # %bb.0:
2518 ; SKYLAKE-SSE-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [2:2.00]
2519 ; SKYLAKE-SSE-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [6:1.00]
2520 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2521 ;
2522 ; SKYLAKE-LABEL: test_pinsrd:
2523 ; SKYLAKE:       # %bb.0:
2524 ; SKYLAKE-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
2525 ; SKYLAKE-NEXT:    vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
2526 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2527 ;
2528 ; SKX-SSE-LABEL: test_pinsrd:
2529 ; SKX-SSE:       # %bb.0:
2530 ; SKX-SSE-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [2:2.00]
2531 ; SKX-SSE-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [6:1.00]
2532 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2533 ;
2534 ; SKX-LABEL: test_pinsrd:
2535 ; SKX:       # %bb.0:
2536 ; SKX-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
2537 ; SKX-NEXT:    vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
2538 ; SKX-NEXT:    retq # sched: [7:1.00]
2539 ;
2540 ; BDVER2-SSE-LABEL: test_pinsrd:
2541 ; BDVER2-SSE:       # %bb.0:
2542 ; BDVER2-SSE-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [2:0.50]
2543 ; BDVER2-SSE-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [6:0.50]
2544 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2545 ;
2546 ; BDVER2-LABEL: test_pinsrd:
2547 ; BDVER2:       # %bb.0:
2548 ; BDVER2-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [2:0.50]
2549 ; BDVER2-NEXT:    vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [6:0.50]
2550 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2551 ;
2552 ; BTVER2-SSE-LABEL: test_pinsrd:
2553 ; BTVER2-SSE:       # %bb.0:
2554 ; BTVER2-SSE-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [7:0.50]
2555 ; BTVER2-SSE-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [4:1.00]
2556 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2557 ;
2558 ; BTVER2-LABEL: test_pinsrd:
2559 ; BTVER2:       # %bb.0:
2560 ; BTVER2-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [7:0.50]
2561 ; BTVER2-NEXT:    vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [4:1.00]
2562 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2563 ;
2564 ; ZNVER1-SSE-LABEL: test_pinsrd:
2565 ; ZNVER1-SSE:       # %bb.0:
2566 ; ZNVER1-SSE-NEXT:    pinsrd $1, %edi, %xmm0 # sched: [1:0.25]
2567 ; ZNVER1-SSE-NEXT:    pinsrd $3, (%rsi), %xmm0 # sched: [8:0.50]
2568 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2569 ;
2570 ; ZNVER1-LABEL: test_pinsrd:
2571 ; ZNVER1:       # %bb.0:
2572 ; ZNVER1-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [1:0.25]
2573 ; ZNVER1-NEXT:    vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [8:0.50]
2574 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2575   %1 = insertelement <4 x i32> %a0, i32 %a1, i32 1
2576   %2 = load i32, i32 *%a2
2577   %3 = insertelement <4 x i32> %1, i32 %2, i32 3
2578   ret <4 x i32> %3
2579 }
2580
2581 define <2 x i64> @test_pinsrq(<2 x i64> %a0, <2 x i64> %a1, i64 %a2, i64 *%a3) {
2582 ; GENERIC-LABEL: test_pinsrq:
2583 ; GENERIC:       # %bb.0:
2584 ; GENERIC-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [2:1.00]
2585 ; GENERIC-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [7:0.50]
2586 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
2587 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2588 ;
2589 ; SLM-LABEL: test_pinsrq:
2590 ; SLM:       # %bb.0:
2591 ; SLM-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [4:1.00]
2592 ; SLM-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [1:1.00]
2593 ; SLM-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
2594 ; SLM-NEXT:    retq # sched: [4:1.00]
2595 ;
2596 ; SANDY-SSE-LABEL: test_pinsrq:
2597 ; SANDY-SSE:       # %bb.0:
2598 ; SANDY-SSE-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [2:1.00]
2599 ; SANDY-SSE-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [7:0.50]
2600 ; SANDY-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
2601 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2602 ;
2603 ; SANDY-LABEL: test_pinsrq:
2604 ; SANDY:       # %bb.0:
2605 ; SANDY-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [2:1.00]
2606 ; SANDY-NEXT:    vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [7:0.50]
2607 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2608 ; SANDY-NEXT:    retq # sched: [1:1.00]
2609 ;
2610 ; HASWELL-SSE-LABEL: test_pinsrq:
2611 ; HASWELL-SSE:       # %bb.0:
2612 ; HASWELL-SSE-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [2:2.00]
2613 ; HASWELL-SSE-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [6:1.00]
2614 ; HASWELL-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
2615 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2616 ;
2617 ; HASWELL-LABEL: test_pinsrq:
2618 ; HASWELL:       # %bb.0:
2619 ; HASWELL-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [2:2.00]
2620 ; HASWELL-NEXT:    vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [6:1.00]
2621 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2622 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2623 ;
2624 ; BROADWELL-SSE-LABEL: test_pinsrq:
2625 ; BROADWELL-SSE:       # %bb.0:
2626 ; BROADWELL-SSE-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [2:2.00]
2627 ; BROADWELL-SSE-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [6:1.00]
2628 ; BROADWELL-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
2629 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2630 ;
2631 ; BROADWELL-LABEL: test_pinsrq:
2632 ; BROADWELL:       # %bb.0:
2633 ; BROADWELL-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [2:2.00]
2634 ; BROADWELL-NEXT:    vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [6:1.00]
2635 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2636 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2637 ;
2638 ; SKYLAKE-SSE-LABEL: test_pinsrq:
2639 ; SKYLAKE-SSE:       # %bb.0:
2640 ; SKYLAKE-SSE-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [2:2.00]
2641 ; SKYLAKE-SSE-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [6:1.00]
2642 ; SKYLAKE-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.33]
2643 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2644 ;
2645 ; SKYLAKE-LABEL: test_pinsrq:
2646 ; SKYLAKE:       # %bb.0:
2647 ; SKYLAKE-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [2:2.00]
2648 ; SKYLAKE-NEXT:    vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [6:1.00]
2649 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
2650 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2651 ;
2652 ; SKX-SSE-LABEL: test_pinsrq:
2653 ; SKX-SSE:       # %bb.0:
2654 ; SKX-SSE-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [2:2.00]
2655 ; SKX-SSE-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [6:1.00]
2656 ; SKX-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.33]
2657 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2658 ;
2659 ; SKX-LABEL: test_pinsrq:
2660 ; SKX:       # %bb.0:
2661 ; SKX-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [2:2.00]
2662 ; SKX-NEXT:    vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [6:1.00]
2663 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
2664 ; SKX-NEXT:    retq # sched: [7:1.00]
2665 ;
2666 ; BDVER2-SSE-LABEL: test_pinsrq:
2667 ; BDVER2-SSE:       # %bb.0:
2668 ; BDVER2-SSE-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [6:0.50]
2669 ; BDVER2-SSE-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [2:0.50]
2670 ; BDVER2-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [2:0.50]
2671 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2672 ;
2673 ; BDVER2-LABEL: test_pinsrq:
2674 ; BDVER2:       # %bb.0:
2675 ; BDVER2-NEXT:    vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [6:0.50]
2676 ; BDVER2-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [2:0.50]
2677 ; BDVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
2678 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2679 ;
2680 ; BTVER2-SSE-LABEL: test_pinsrq:
2681 ; BTVER2-SSE:       # %bb.0:
2682 ; BTVER2-SSE-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [4:1.00]
2683 ; BTVER2-SSE-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [7:0.50]
2684 ; BTVER2-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
2685 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2686 ;
2687 ; BTVER2-LABEL: test_pinsrq:
2688 ; BTVER2:       # %bb.0:
2689 ; BTVER2-NEXT:    vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [4:1.00]
2690 ; BTVER2-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [7:0.50]
2691 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2692 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2693 ;
2694 ; ZNVER1-SSE-LABEL: test_pinsrq:
2695 ; ZNVER1-SSE:       # %bb.0:
2696 ; ZNVER1-SSE-NEXT:    pinsrq $1, (%rsi), %xmm1 # sched: [8:0.50]
2697 ; ZNVER1-SSE-NEXT:    pinsrq $1, %rdi, %xmm0 # sched: [1:0.25]
2698 ; ZNVER1-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.25]
2699 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2700 ;
2701 ; ZNVER1-LABEL: test_pinsrq:
2702 ; ZNVER1:       # %bb.0:
2703 ; ZNVER1-NEXT:    vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [8:0.50]
2704 ; ZNVER1-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [1:0.25]
2705 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
2706 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2707   %1 = insertelement <2 x i64> %a0, i64 %a2, i32 1
2708   %2 = load i64, i64 *%a3
2709   %3 = insertelement <2 x i64> %a1, i64 %2, i32 1
2710   %4 = add <2 x i64> %1, %3
2711   ret <2 x i64> %4
2712 }
2713
2714 define <16 x i8> @test_pmaxsb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
2715 ; GENERIC-LABEL: test_pmaxsb:
2716 ; GENERIC:       # %bb.0:
2717 ; GENERIC-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [1:0.50]
2718 ; GENERIC-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [7:0.50]
2719 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2720 ;
2721 ; SLM-LABEL: test_pmaxsb:
2722 ; SLM:       # %bb.0:
2723 ; SLM-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [1:0.50]
2724 ; SLM-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [4:1.00]
2725 ; SLM-NEXT:    retq # sched: [4:1.00]
2726 ;
2727 ; SANDY-SSE-LABEL: test_pmaxsb:
2728 ; SANDY-SSE:       # %bb.0:
2729 ; SANDY-SSE-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [1:0.50]
2730 ; SANDY-SSE-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [7:0.50]
2731 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2732 ;
2733 ; SANDY-LABEL: test_pmaxsb:
2734 ; SANDY:       # %bb.0:
2735 ; SANDY-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2736 ; SANDY-NEXT:    vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2737 ; SANDY-NEXT:    retq # sched: [1:1.00]
2738 ;
2739 ; HASWELL-SSE-LABEL: test_pmaxsb:
2740 ; HASWELL-SSE:       # %bb.0:
2741 ; HASWELL-SSE-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [1:0.50]
2742 ; HASWELL-SSE-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [7:0.50]
2743 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2744 ;
2745 ; HASWELL-LABEL: test_pmaxsb:
2746 ; HASWELL:       # %bb.0:
2747 ; HASWELL-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2748 ; HASWELL-NEXT:    vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2749 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2750 ;
2751 ; BROADWELL-SSE-LABEL: test_pmaxsb:
2752 ; BROADWELL-SSE:       # %bb.0:
2753 ; BROADWELL-SSE-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [1:0.50]
2754 ; BROADWELL-SSE-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [6:0.50]
2755 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2756 ;
2757 ; BROADWELL-LABEL: test_pmaxsb:
2758 ; BROADWELL:       # %bb.0:
2759 ; BROADWELL-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2760 ; BROADWELL-NEXT:    vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
2761 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2762 ;
2763 ; SKYLAKE-SSE-LABEL: test_pmaxsb:
2764 ; SKYLAKE-SSE:       # %bb.0:
2765 ; SKYLAKE-SSE-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [1:0.50]
2766 ; SKYLAKE-SSE-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [7:0.50]
2767 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2768 ;
2769 ; SKYLAKE-LABEL: test_pmaxsb:
2770 ; SKYLAKE:       # %bb.0:
2771 ; SKYLAKE-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2772 ; SKYLAKE-NEXT:    vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2773 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2774 ;
2775 ; SKX-SSE-LABEL: test_pmaxsb:
2776 ; SKX-SSE:       # %bb.0:
2777 ; SKX-SSE-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [1:0.50]
2778 ; SKX-SSE-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [7:0.50]
2779 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2780 ;
2781 ; SKX-LABEL: test_pmaxsb:
2782 ; SKX:       # %bb.0:
2783 ; SKX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2784 ; SKX-NEXT:    vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2785 ; SKX-NEXT:    retq # sched: [7:1.00]
2786 ;
2787 ; BDVER2-SSE-LABEL: test_pmaxsb:
2788 ; BDVER2-SSE:       # %bb.0:
2789 ; BDVER2-SSE-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [2:0.50]
2790 ; BDVER2-SSE-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [7:0.50]
2791 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2792 ;
2793 ; BDVER2-LABEL: test_pmaxsb:
2794 ; BDVER2:       # %bb.0:
2795 ; BDVER2-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
2796 ; BDVER2-NEXT:    vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2797 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2798 ;
2799 ; BTVER2-SSE-LABEL: test_pmaxsb:
2800 ; BTVER2-SSE:       # %bb.0:
2801 ; BTVER2-SSE-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [1:0.50]
2802 ; BTVER2-SSE-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [6:1.00]
2803 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2804 ;
2805 ; BTVER2-LABEL: test_pmaxsb:
2806 ; BTVER2:       # %bb.0:
2807 ; BTVER2-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2808 ; BTVER2-NEXT:    vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
2809 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2810 ;
2811 ; ZNVER1-SSE-LABEL: test_pmaxsb:
2812 ; ZNVER1-SSE:       # %bb.0:
2813 ; ZNVER1-SSE-NEXT:    pmaxsb %xmm1, %xmm0 # sched: [1:0.25]
2814 ; ZNVER1-SSE-NEXT:    pmaxsb (%rdi), %xmm0 # sched: [8:0.50]
2815 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2816 ;
2817 ; ZNVER1-LABEL: test_pmaxsb:
2818 ; ZNVER1:       # %bb.0:
2819 ; ZNVER1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
2820 ; ZNVER1-NEXT:    vpmaxsb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
2821 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2822   %1 = call <16 x i8> @llvm.x86.sse41.pmaxsb(<16 x i8> %a0, <16 x i8> %a1)
2823   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
2824   %3 = call <16 x i8> @llvm.x86.sse41.pmaxsb(<16 x i8> %1, <16 x i8> %2)
2825   ret <16 x i8> %3
2826 }
2827 declare <16 x i8> @llvm.x86.sse41.pmaxsb(<16 x i8>, <16 x i8>) nounwind readnone
2828
2829 define <4 x i32> @test_pmaxsd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
2830 ; GENERIC-LABEL: test_pmaxsd:
2831 ; GENERIC:       # %bb.0:
2832 ; GENERIC-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [1:0.50]
2833 ; GENERIC-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [7:0.50]
2834 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2835 ;
2836 ; SLM-LABEL: test_pmaxsd:
2837 ; SLM:       # %bb.0:
2838 ; SLM-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [1:0.50]
2839 ; SLM-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [4:1.00]
2840 ; SLM-NEXT:    retq # sched: [4:1.00]
2841 ;
2842 ; SANDY-SSE-LABEL: test_pmaxsd:
2843 ; SANDY-SSE:       # %bb.0:
2844 ; SANDY-SSE-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [1:0.50]
2845 ; SANDY-SSE-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [7:0.50]
2846 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2847 ;
2848 ; SANDY-LABEL: test_pmaxsd:
2849 ; SANDY:       # %bb.0:
2850 ; SANDY-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2851 ; SANDY-NEXT:    vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2852 ; SANDY-NEXT:    retq # sched: [1:1.00]
2853 ;
2854 ; HASWELL-SSE-LABEL: test_pmaxsd:
2855 ; HASWELL-SSE:       # %bb.0:
2856 ; HASWELL-SSE-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [1:0.50]
2857 ; HASWELL-SSE-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [7:0.50]
2858 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2859 ;
2860 ; HASWELL-LABEL: test_pmaxsd:
2861 ; HASWELL:       # %bb.0:
2862 ; HASWELL-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2863 ; HASWELL-NEXT:    vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2864 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2865 ;
2866 ; BROADWELL-SSE-LABEL: test_pmaxsd:
2867 ; BROADWELL-SSE:       # %bb.0:
2868 ; BROADWELL-SSE-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [1:0.50]
2869 ; BROADWELL-SSE-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [6:0.50]
2870 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2871 ;
2872 ; BROADWELL-LABEL: test_pmaxsd:
2873 ; BROADWELL:       # %bb.0:
2874 ; BROADWELL-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2875 ; BROADWELL-NEXT:    vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
2876 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2877 ;
2878 ; SKYLAKE-SSE-LABEL: test_pmaxsd:
2879 ; SKYLAKE-SSE:       # %bb.0:
2880 ; SKYLAKE-SSE-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [1:0.50]
2881 ; SKYLAKE-SSE-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [7:0.50]
2882 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2883 ;
2884 ; SKYLAKE-LABEL: test_pmaxsd:
2885 ; SKYLAKE:       # %bb.0:
2886 ; SKYLAKE-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2887 ; SKYLAKE-NEXT:    vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2888 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2889 ;
2890 ; SKX-SSE-LABEL: test_pmaxsd:
2891 ; SKX-SSE:       # %bb.0:
2892 ; SKX-SSE-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [1:0.50]
2893 ; SKX-SSE-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [7:0.50]
2894 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2895 ;
2896 ; SKX-LABEL: test_pmaxsd:
2897 ; SKX:       # %bb.0:
2898 ; SKX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2899 ; SKX-NEXT:    vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2900 ; SKX-NEXT:    retq # sched: [7:1.00]
2901 ;
2902 ; BDVER2-SSE-LABEL: test_pmaxsd:
2903 ; BDVER2-SSE:       # %bb.0:
2904 ; BDVER2-SSE-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [2:0.50]
2905 ; BDVER2-SSE-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [7:0.50]
2906 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2907 ;
2908 ; BDVER2-LABEL: test_pmaxsd:
2909 ; BDVER2:       # %bb.0:
2910 ; BDVER2-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
2911 ; BDVER2-NEXT:    vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2912 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2913 ;
2914 ; BTVER2-SSE-LABEL: test_pmaxsd:
2915 ; BTVER2-SSE:       # %bb.0:
2916 ; BTVER2-SSE-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [1:0.50]
2917 ; BTVER2-SSE-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [6:1.00]
2918 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2919 ;
2920 ; BTVER2-LABEL: test_pmaxsd:
2921 ; BTVER2:       # %bb.0:
2922 ; BTVER2-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2923 ; BTVER2-NEXT:    vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
2924 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2925 ;
2926 ; ZNVER1-SSE-LABEL: test_pmaxsd:
2927 ; ZNVER1-SSE:       # %bb.0:
2928 ; ZNVER1-SSE-NEXT:    pmaxsd %xmm1, %xmm0 # sched: [1:0.25]
2929 ; ZNVER1-SSE-NEXT:    pmaxsd (%rdi), %xmm0 # sched: [8:0.50]
2930 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2931 ;
2932 ; ZNVER1-LABEL: test_pmaxsd:
2933 ; ZNVER1:       # %bb.0:
2934 ; ZNVER1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
2935 ; ZNVER1-NEXT:    vpmaxsd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
2936 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2937   %1 = call <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32> %a0, <4 x i32> %a1)
2938   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
2939   %3 = call <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32> %1, <4 x i32> %2)
2940   ret <4 x i32> %3
2941 }
2942 declare <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32>, <4 x i32>) nounwind readnone
2943
2944 define <4 x i32> @test_pmaxud(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
2945 ; GENERIC-LABEL: test_pmaxud:
2946 ; GENERIC:       # %bb.0:
2947 ; GENERIC-NEXT:    pmaxud %xmm1, %xmm0 # sched: [1:0.50]
2948 ; GENERIC-NEXT:    pmaxud (%rdi), %xmm0 # sched: [7:0.50]
2949 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2950 ;
2951 ; SLM-LABEL: test_pmaxud:
2952 ; SLM:       # %bb.0:
2953 ; SLM-NEXT:    pmaxud %xmm1, %xmm0 # sched: [1:0.50]
2954 ; SLM-NEXT:    pmaxud (%rdi), %xmm0 # sched: [4:1.00]
2955 ; SLM-NEXT:    retq # sched: [4:1.00]
2956 ;
2957 ; SANDY-SSE-LABEL: test_pmaxud:
2958 ; SANDY-SSE:       # %bb.0:
2959 ; SANDY-SSE-NEXT:    pmaxud %xmm1, %xmm0 # sched: [1:0.50]
2960 ; SANDY-SSE-NEXT:    pmaxud (%rdi), %xmm0 # sched: [7:0.50]
2961 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2962 ;
2963 ; SANDY-LABEL: test_pmaxud:
2964 ; SANDY:       # %bb.0:
2965 ; SANDY-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2966 ; SANDY-NEXT:    vpmaxud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2967 ; SANDY-NEXT:    retq # sched: [1:1.00]
2968 ;
2969 ; HASWELL-SSE-LABEL: test_pmaxud:
2970 ; HASWELL-SSE:       # %bb.0:
2971 ; HASWELL-SSE-NEXT:    pmaxud %xmm1, %xmm0 # sched: [1:0.50]
2972 ; HASWELL-SSE-NEXT:    pmaxud (%rdi), %xmm0 # sched: [7:0.50]
2973 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2974 ;
2975 ; HASWELL-LABEL: test_pmaxud:
2976 ; HASWELL:       # %bb.0:
2977 ; HASWELL-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2978 ; HASWELL-NEXT:    vpmaxud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2979 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2980 ;
2981 ; BROADWELL-SSE-LABEL: test_pmaxud:
2982 ; BROADWELL-SSE:       # %bb.0:
2983 ; BROADWELL-SSE-NEXT:    pmaxud %xmm1, %xmm0 # sched: [1:0.50]
2984 ; BROADWELL-SSE-NEXT:    pmaxud (%rdi), %xmm0 # sched: [6:0.50]
2985 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2986 ;
2987 ; BROADWELL-LABEL: test_pmaxud:
2988 ; BROADWELL:       # %bb.0:
2989 ; BROADWELL-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2990 ; BROADWELL-NEXT:    vpmaxud (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
2991 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2992 ;
2993 ; SKYLAKE-SSE-LABEL: test_pmaxud:
2994 ; SKYLAKE-SSE:       # %bb.0:
2995 ; SKYLAKE-SSE-NEXT:    pmaxud %xmm1, %xmm0 # sched: [1:0.50]
2996 ; SKYLAKE-SSE-NEXT:    pmaxud (%rdi), %xmm0 # sched: [7:0.50]
2997 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2998 ;
2999 ; SKYLAKE-LABEL: test_pmaxud:
3000 ; SKYLAKE:       # %bb.0:
3001 ; SKYLAKE-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3002 ; SKYLAKE-NEXT:    vpmaxud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3003 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3004 ;
3005 ; SKX-SSE-LABEL: test_pmaxud:
3006 ; SKX-SSE:       # %bb.0:
3007 ; SKX-SSE-NEXT:    pmaxud %xmm1, %xmm0 # sched: [1:0.50]
3008 ; SKX-SSE-NEXT:    pmaxud (%rdi), %xmm0 # sched: [7:0.50]
3009 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3010 ;
3011 ; SKX-LABEL: test_pmaxud:
3012 ; SKX:       # %bb.0:
3013 ; SKX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3014 ; SKX-NEXT:    vpmaxud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3015 ; SKX-NEXT:    retq # sched: [7:1.00]
3016 ;
3017 ; BDVER2-SSE-LABEL: test_pmaxud:
3018 ; BDVER2-SSE:       # %bb.0:
3019 ; BDVER2-SSE-NEXT:    pmaxud %xmm1, %xmm0 # sched: [2:0.50]
3020 ; BDVER2-SSE-NEXT:    pmaxud (%rdi), %xmm0 # sched: [7:0.50]
3021 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3022 ;
3023 ; BDVER2-LABEL: test_pmaxud:
3024 ; BDVER2:       # %bb.0:
3025 ; BDVER2-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3026 ; BDVER2-NEXT:    vpmaxud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3027 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3028 ;
3029 ; BTVER2-SSE-LABEL: test_pmaxud:
3030 ; BTVER2-SSE:       # %bb.0:
3031 ; BTVER2-SSE-NEXT:    pmaxud %xmm1, %xmm0 # sched: [1:0.50]
3032 ; BTVER2-SSE-NEXT:    pmaxud (%rdi), %xmm0 # sched: [6:1.00]
3033 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3034 ;
3035 ; BTVER2-LABEL: test_pmaxud:
3036 ; BTVER2:       # %bb.0:
3037 ; BTVER2-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3038 ; BTVER2-NEXT:    vpmaxud (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3039 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3040 ;
3041 ; ZNVER1-SSE-LABEL: test_pmaxud:
3042 ; ZNVER1-SSE:       # %bb.0:
3043 ; ZNVER1-SSE-NEXT:    pmaxud %xmm1, %xmm0 # sched: [1:0.25]
3044 ; ZNVER1-SSE-NEXT:    pmaxud (%rdi), %xmm0 # sched: [8:0.50]
3045 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3046 ;
3047 ; ZNVER1-LABEL: test_pmaxud:
3048 ; ZNVER1:       # %bb.0:
3049 ; ZNVER1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3050 ; ZNVER1-NEXT:    vpmaxud (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3051 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3052   %1 = call <4 x i32> @llvm.x86.sse41.pmaxud(<4 x i32> %a0, <4 x i32> %a1)
3053   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
3054   %3 = call <4 x i32> @llvm.x86.sse41.pmaxud(<4 x i32> %1, <4 x i32> %2)
3055   ret <4 x i32> %3
3056 }
3057 declare <4 x i32> @llvm.x86.sse41.pmaxud(<4 x i32>, <4 x i32>) nounwind readnone
3058
3059 define <8 x i16> @test_pmaxuw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
3060 ; GENERIC-LABEL: test_pmaxuw:
3061 ; GENERIC:       # %bb.0:
3062 ; GENERIC-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [1:0.50]
3063 ; GENERIC-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [7:0.50]
3064 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3065 ;
3066 ; SLM-LABEL: test_pmaxuw:
3067 ; SLM:       # %bb.0:
3068 ; SLM-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [1:0.50]
3069 ; SLM-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [4:1.00]
3070 ; SLM-NEXT:    retq # sched: [4:1.00]
3071 ;
3072 ; SANDY-SSE-LABEL: test_pmaxuw:
3073 ; SANDY-SSE:       # %bb.0:
3074 ; SANDY-SSE-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [1:0.50]
3075 ; SANDY-SSE-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [7:0.50]
3076 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3077 ;
3078 ; SANDY-LABEL: test_pmaxuw:
3079 ; SANDY:       # %bb.0:
3080 ; SANDY-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3081 ; SANDY-NEXT:    vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3082 ; SANDY-NEXT:    retq # sched: [1:1.00]
3083 ;
3084 ; HASWELL-SSE-LABEL: test_pmaxuw:
3085 ; HASWELL-SSE:       # %bb.0:
3086 ; HASWELL-SSE-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [1:0.50]
3087 ; HASWELL-SSE-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [7:0.50]
3088 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3089 ;
3090 ; HASWELL-LABEL: test_pmaxuw:
3091 ; HASWELL:       # %bb.0:
3092 ; HASWELL-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3093 ; HASWELL-NEXT:    vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3094 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3095 ;
3096 ; BROADWELL-SSE-LABEL: test_pmaxuw:
3097 ; BROADWELL-SSE:       # %bb.0:
3098 ; BROADWELL-SSE-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [1:0.50]
3099 ; BROADWELL-SSE-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [6:0.50]
3100 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3101 ;
3102 ; BROADWELL-LABEL: test_pmaxuw:
3103 ; BROADWELL:       # %bb.0:
3104 ; BROADWELL-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3105 ; BROADWELL-NEXT:    vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
3106 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3107 ;
3108 ; SKYLAKE-SSE-LABEL: test_pmaxuw:
3109 ; SKYLAKE-SSE:       # %bb.0:
3110 ; SKYLAKE-SSE-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [1:0.50]
3111 ; SKYLAKE-SSE-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [7:0.50]
3112 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3113 ;
3114 ; SKYLAKE-LABEL: test_pmaxuw:
3115 ; SKYLAKE:       # %bb.0:
3116 ; SKYLAKE-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3117 ; SKYLAKE-NEXT:    vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3118 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3119 ;
3120 ; SKX-SSE-LABEL: test_pmaxuw:
3121 ; SKX-SSE:       # %bb.0:
3122 ; SKX-SSE-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [1:0.50]
3123 ; SKX-SSE-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [7:0.50]
3124 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3125 ;
3126 ; SKX-LABEL: test_pmaxuw:
3127 ; SKX:       # %bb.0:
3128 ; SKX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3129 ; SKX-NEXT:    vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3130 ; SKX-NEXT:    retq # sched: [7:1.00]
3131 ;
3132 ; BDVER2-SSE-LABEL: test_pmaxuw:
3133 ; BDVER2-SSE:       # %bb.0:
3134 ; BDVER2-SSE-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [2:0.50]
3135 ; BDVER2-SSE-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [7:0.50]
3136 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3137 ;
3138 ; BDVER2-LABEL: test_pmaxuw:
3139 ; BDVER2:       # %bb.0:
3140 ; BDVER2-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3141 ; BDVER2-NEXT:    vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3142 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3143 ;
3144 ; BTVER2-SSE-LABEL: test_pmaxuw:
3145 ; BTVER2-SSE:       # %bb.0:
3146 ; BTVER2-SSE-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [1:0.50]
3147 ; BTVER2-SSE-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [6:1.00]
3148 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3149 ;
3150 ; BTVER2-LABEL: test_pmaxuw:
3151 ; BTVER2:       # %bb.0:
3152 ; BTVER2-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3153 ; BTVER2-NEXT:    vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3154 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3155 ;
3156 ; ZNVER1-SSE-LABEL: test_pmaxuw:
3157 ; ZNVER1-SSE:       # %bb.0:
3158 ; ZNVER1-SSE-NEXT:    pmaxuw %xmm1, %xmm0 # sched: [1:0.25]
3159 ; ZNVER1-SSE-NEXT:    pmaxuw (%rdi), %xmm0 # sched: [8:0.50]
3160 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3161 ;
3162 ; ZNVER1-LABEL: test_pmaxuw:
3163 ; ZNVER1:       # %bb.0:
3164 ; ZNVER1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3165 ; ZNVER1-NEXT:    vpmaxuw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3166 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3167   %1 = call <8 x i16> @llvm.x86.sse41.pmaxuw(<8 x i16> %a0, <8 x i16> %a1)
3168   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
3169   %3 = call <8 x i16> @llvm.x86.sse41.pmaxuw(<8 x i16> %1, <8 x i16> %2)
3170   ret <8 x i16> %3
3171 }
3172 declare <8 x i16> @llvm.x86.sse41.pmaxuw(<8 x i16>, <8 x i16>) nounwind readnone
3173
3174 define <16 x i8> @test_pminsb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
3175 ; GENERIC-LABEL: test_pminsb:
3176 ; GENERIC:       # %bb.0:
3177 ; GENERIC-NEXT:    pminsb %xmm1, %xmm0 # sched: [1:0.50]
3178 ; GENERIC-NEXT:    pminsb (%rdi), %xmm0 # sched: [7:0.50]
3179 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3180 ;
3181 ; SLM-LABEL: test_pminsb:
3182 ; SLM:       # %bb.0:
3183 ; SLM-NEXT:    pminsb %xmm1, %xmm0 # sched: [1:0.50]
3184 ; SLM-NEXT:    pminsb (%rdi), %xmm0 # sched: [4:1.00]
3185 ; SLM-NEXT:    retq # sched: [4:1.00]
3186 ;
3187 ; SANDY-SSE-LABEL: test_pminsb:
3188 ; SANDY-SSE:       # %bb.0:
3189 ; SANDY-SSE-NEXT:    pminsb %xmm1, %xmm0 # sched: [1:0.50]
3190 ; SANDY-SSE-NEXT:    pminsb (%rdi), %xmm0 # sched: [7:0.50]
3191 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3192 ;
3193 ; SANDY-LABEL: test_pminsb:
3194 ; SANDY:       # %bb.0:
3195 ; SANDY-NEXT:    vpminsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3196 ; SANDY-NEXT:    vpminsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3197 ; SANDY-NEXT:    retq # sched: [1:1.00]
3198 ;
3199 ; HASWELL-SSE-LABEL: test_pminsb:
3200 ; HASWELL-SSE:       # %bb.0:
3201 ; HASWELL-SSE-NEXT:    pminsb %xmm1, %xmm0 # sched: [1:0.50]
3202 ; HASWELL-SSE-NEXT:    pminsb (%rdi), %xmm0 # sched: [7:0.50]
3203 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3204 ;
3205 ; HASWELL-LABEL: test_pminsb:
3206 ; HASWELL:       # %bb.0:
3207 ; HASWELL-NEXT:    vpminsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3208 ; HASWELL-NEXT:    vpminsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3209 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3210 ;
3211 ; BROADWELL-SSE-LABEL: test_pminsb:
3212 ; BROADWELL-SSE:       # %bb.0:
3213 ; BROADWELL-SSE-NEXT:    pminsb %xmm1, %xmm0 # sched: [1:0.50]
3214 ; BROADWELL-SSE-NEXT:    pminsb (%rdi), %xmm0 # sched: [6:0.50]
3215 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3216 ;
3217 ; BROADWELL-LABEL: test_pminsb:
3218 ; BROADWELL:       # %bb.0:
3219 ; BROADWELL-NEXT:    vpminsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3220 ; BROADWELL-NEXT:    vpminsb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
3221 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3222 ;
3223 ; SKYLAKE-SSE-LABEL: test_pminsb:
3224 ; SKYLAKE-SSE:       # %bb.0:
3225 ; SKYLAKE-SSE-NEXT:    pminsb %xmm1, %xmm0 # sched: [1:0.50]
3226 ; SKYLAKE-SSE-NEXT:    pminsb (%rdi), %xmm0 # sched: [7:0.50]
3227 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3228 ;
3229 ; SKYLAKE-LABEL: test_pminsb:
3230 ; SKYLAKE:       # %bb.0:
3231 ; SKYLAKE-NEXT:    vpminsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3232 ; SKYLAKE-NEXT:    vpminsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3233 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3234 ;
3235 ; SKX-SSE-LABEL: test_pminsb:
3236 ; SKX-SSE:       # %bb.0:
3237 ; SKX-SSE-NEXT:    pminsb %xmm1, %xmm0 # sched: [1:0.50]
3238 ; SKX-SSE-NEXT:    pminsb (%rdi), %xmm0 # sched: [7:0.50]
3239 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3240 ;
3241 ; SKX-LABEL: test_pminsb:
3242 ; SKX:       # %bb.0:
3243 ; SKX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3244 ; SKX-NEXT:    vpminsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3245 ; SKX-NEXT:    retq # sched: [7:1.00]
3246 ;
3247 ; BDVER2-SSE-LABEL: test_pminsb:
3248 ; BDVER2-SSE:       # %bb.0:
3249 ; BDVER2-SSE-NEXT:    pminsb %xmm1, %xmm0 # sched: [2:0.50]
3250 ; BDVER2-SSE-NEXT:    pminsb (%rdi), %xmm0 # sched: [7:0.50]
3251 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3252 ;
3253 ; BDVER2-LABEL: test_pminsb:
3254 ; BDVER2:       # %bb.0:
3255 ; BDVER2-NEXT:    vpminsb %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3256 ; BDVER2-NEXT:    vpminsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3257 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3258 ;
3259 ; BTVER2-SSE-LABEL: test_pminsb:
3260 ; BTVER2-SSE:       # %bb.0:
3261 ; BTVER2-SSE-NEXT:    pminsb %xmm1, %xmm0 # sched: [1:0.50]
3262 ; BTVER2-SSE-NEXT:    pminsb (%rdi), %xmm0 # sched: [6:1.00]
3263 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3264 ;
3265 ; BTVER2-LABEL: test_pminsb:
3266 ; BTVER2:       # %bb.0:
3267 ; BTVER2-NEXT:    vpminsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3268 ; BTVER2-NEXT:    vpminsb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3269 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3270 ;
3271 ; ZNVER1-SSE-LABEL: test_pminsb:
3272 ; ZNVER1-SSE:       # %bb.0:
3273 ; ZNVER1-SSE-NEXT:    pminsb %xmm1, %xmm0 # sched: [1:0.25]
3274 ; ZNVER1-SSE-NEXT:    pminsb (%rdi), %xmm0 # sched: [8:0.50]
3275 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3276 ;
3277 ; ZNVER1-LABEL: test_pminsb:
3278 ; ZNVER1:       # %bb.0:
3279 ; ZNVER1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3280 ; ZNVER1-NEXT:    vpminsb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3281 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3282   %1 = call <16 x i8> @llvm.x86.sse41.pminsb(<16 x i8> %a0, <16 x i8> %a1)
3283   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
3284   %3 = call <16 x i8> @llvm.x86.sse41.pminsb(<16 x i8> %1, <16 x i8> %2)
3285   ret <16 x i8> %3
3286 }
3287 declare <16 x i8> @llvm.x86.sse41.pminsb(<16 x i8>, <16 x i8>) nounwind readnone
3288
3289 define <4 x i32> @test_pminsd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
3290 ; GENERIC-LABEL: test_pminsd:
3291 ; GENERIC:       # %bb.0:
3292 ; GENERIC-NEXT:    pminsd %xmm1, %xmm0 # sched: [1:0.50]
3293 ; GENERIC-NEXT:    pminsd (%rdi), %xmm0 # sched: [7:0.50]
3294 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3295 ;
3296 ; SLM-LABEL: test_pminsd:
3297 ; SLM:       # %bb.0:
3298 ; SLM-NEXT:    pminsd %xmm1, %xmm0 # sched: [1:0.50]
3299 ; SLM-NEXT:    pminsd (%rdi), %xmm0 # sched: [4:1.00]
3300 ; SLM-NEXT:    retq # sched: [4:1.00]
3301 ;
3302 ; SANDY-SSE-LABEL: test_pminsd:
3303 ; SANDY-SSE:       # %bb.0:
3304 ; SANDY-SSE-NEXT:    pminsd %xmm1, %xmm0 # sched: [1:0.50]
3305 ; SANDY-SSE-NEXT:    pminsd (%rdi), %xmm0 # sched: [7:0.50]
3306 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3307 ;
3308 ; SANDY-LABEL: test_pminsd:
3309 ; SANDY:       # %bb.0:
3310 ; SANDY-NEXT:    vpminsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3311 ; SANDY-NEXT:    vpminsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3312 ; SANDY-NEXT:    retq # sched: [1:1.00]
3313 ;
3314 ; HASWELL-SSE-LABEL: test_pminsd:
3315 ; HASWELL-SSE:       # %bb.0:
3316 ; HASWELL-SSE-NEXT:    pminsd %xmm1, %xmm0 # sched: [1:0.50]
3317 ; HASWELL-SSE-NEXT:    pminsd (%rdi), %xmm0 # sched: [7:0.50]
3318 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3319 ;
3320 ; HASWELL-LABEL: test_pminsd:
3321 ; HASWELL:       # %bb.0:
3322 ; HASWELL-NEXT:    vpminsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3323 ; HASWELL-NEXT:    vpminsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3324 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3325 ;
3326 ; BROADWELL-SSE-LABEL: test_pminsd:
3327 ; BROADWELL-SSE:       # %bb.0:
3328 ; BROADWELL-SSE-NEXT:    pminsd %xmm1, %xmm0 # sched: [1:0.50]
3329 ; BROADWELL-SSE-NEXT:    pminsd (%rdi), %xmm0 # sched: [6:0.50]
3330 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3331 ;
3332 ; BROADWELL-LABEL: test_pminsd:
3333 ; BROADWELL:       # %bb.0:
3334 ; BROADWELL-NEXT:    vpminsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3335 ; BROADWELL-NEXT:    vpminsd (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
3336 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3337 ;
3338 ; SKYLAKE-SSE-LABEL: test_pminsd:
3339 ; SKYLAKE-SSE:       # %bb.0:
3340 ; SKYLAKE-SSE-NEXT:    pminsd %xmm1, %xmm0 # sched: [1:0.50]
3341 ; SKYLAKE-SSE-NEXT:    pminsd (%rdi), %xmm0 # sched: [7:0.50]
3342 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3343 ;
3344 ; SKYLAKE-LABEL: test_pminsd:
3345 ; SKYLAKE:       # %bb.0:
3346 ; SKYLAKE-NEXT:    vpminsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3347 ; SKYLAKE-NEXT:    vpminsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3348 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3349 ;
3350 ; SKX-SSE-LABEL: test_pminsd:
3351 ; SKX-SSE:       # %bb.0:
3352 ; SKX-SSE-NEXT:    pminsd %xmm1, %xmm0 # sched: [1:0.50]
3353 ; SKX-SSE-NEXT:    pminsd (%rdi), %xmm0 # sched: [7:0.50]
3354 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3355 ;
3356 ; SKX-LABEL: test_pminsd:
3357 ; SKX:       # %bb.0:
3358 ; SKX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3359 ; SKX-NEXT:    vpminsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3360 ; SKX-NEXT:    retq # sched: [7:1.00]
3361 ;
3362 ; BDVER2-SSE-LABEL: test_pminsd:
3363 ; BDVER2-SSE:       # %bb.0:
3364 ; BDVER2-SSE-NEXT:    pminsd %xmm1, %xmm0 # sched: [2:0.50]
3365 ; BDVER2-SSE-NEXT:    pminsd (%rdi), %xmm0 # sched: [7:0.50]
3366 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3367 ;
3368 ; BDVER2-LABEL: test_pminsd:
3369 ; BDVER2:       # %bb.0:
3370 ; BDVER2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3371 ; BDVER2-NEXT:    vpminsd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3372 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3373 ;
3374 ; BTVER2-SSE-LABEL: test_pminsd:
3375 ; BTVER2-SSE:       # %bb.0:
3376 ; BTVER2-SSE-NEXT:    pminsd %xmm1, %xmm0 # sched: [1:0.50]
3377 ; BTVER2-SSE-NEXT:    pminsd (%rdi), %xmm0 # sched: [6:1.00]
3378 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3379 ;
3380 ; BTVER2-LABEL: test_pminsd:
3381 ; BTVER2:       # %bb.0:
3382 ; BTVER2-NEXT:    vpminsd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3383 ; BTVER2-NEXT:    vpminsd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3384 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3385 ;
3386 ; ZNVER1-SSE-LABEL: test_pminsd:
3387 ; ZNVER1-SSE:       # %bb.0:
3388 ; ZNVER1-SSE-NEXT:    pminsd %xmm1, %xmm0 # sched: [1:0.25]
3389 ; ZNVER1-SSE-NEXT:    pminsd (%rdi), %xmm0 # sched: [8:0.50]
3390 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3391 ;
3392 ; ZNVER1-LABEL: test_pminsd:
3393 ; ZNVER1:       # %bb.0:
3394 ; ZNVER1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3395 ; ZNVER1-NEXT:    vpminsd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3396 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3397   %1 = call <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32> %a0, <4 x i32> %a1)
3398   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
3399   %3 = call <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32> %1, <4 x i32> %2)
3400   ret <4 x i32> %3
3401 }
3402 declare <4 x i32> @llvm.x86.sse41.pminsd(<4 x i32>, <4 x i32>) nounwind readnone
3403
3404 define <4 x i32> @test_pminud(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
3405 ; GENERIC-LABEL: test_pminud:
3406 ; GENERIC:       # %bb.0:
3407 ; GENERIC-NEXT:    pminud %xmm1, %xmm0 # sched: [1:0.50]
3408 ; GENERIC-NEXT:    pminud (%rdi), %xmm0 # sched: [7:0.50]
3409 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3410 ;
3411 ; SLM-LABEL: test_pminud:
3412 ; SLM:       # %bb.0:
3413 ; SLM-NEXT:    pminud %xmm1, %xmm0 # sched: [1:0.50]
3414 ; SLM-NEXT:    pminud (%rdi), %xmm0 # sched: [4:1.00]
3415 ; SLM-NEXT:    retq # sched: [4:1.00]
3416 ;
3417 ; SANDY-SSE-LABEL: test_pminud:
3418 ; SANDY-SSE:       # %bb.0:
3419 ; SANDY-SSE-NEXT:    pminud %xmm1, %xmm0 # sched: [1:0.50]
3420 ; SANDY-SSE-NEXT:    pminud (%rdi), %xmm0 # sched: [7:0.50]
3421 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3422 ;
3423 ; SANDY-LABEL: test_pminud:
3424 ; SANDY:       # %bb.0:
3425 ; SANDY-NEXT:    vpminud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3426 ; SANDY-NEXT:    vpminud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3427 ; SANDY-NEXT:    retq # sched: [1:1.00]
3428 ;
3429 ; HASWELL-SSE-LABEL: test_pminud:
3430 ; HASWELL-SSE:       # %bb.0:
3431 ; HASWELL-SSE-NEXT:    pminud %xmm1, %xmm0 # sched: [1:0.50]
3432 ; HASWELL-SSE-NEXT:    pminud (%rdi), %xmm0 # sched: [7:0.50]
3433 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3434 ;
3435 ; HASWELL-LABEL: test_pminud:
3436 ; HASWELL:       # %bb.0:
3437 ; HASWELL-NEXT:    vpminud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3438 ; HASWELL-NEXT:    vpminud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3439 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3440 ;
3441 ; BROADWELL-SSE-LABEL: test_pminud:
3442 ; BROADWELL-SSE:       # %bb.0:
3443 ; BROADWELL-SSE-NEXT:    pminud %xmm1, %xmm0 # sched: [1:0.50]
3444 ; BROADWELL-SSE-NEXT:    pminud (%rdi), %xmm0 # sched: [6:0.50]
3445 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3446 ;
3447 ; BROADWELL-LABEL: test_pminud:
3448 ; BROADWELL:       # %bb.0:
3449 ; BROADWELL-NEXT:    vpminud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3450 ; BROADWELL-NEXT:    vpminud (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
3451 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3452 ;
3453 ; SKYLAKE-SSE-LABEL: test_pminud:
3454 ; SKYLAKE-SSE:       # %bb.0:
3455 ; SKYLAKE-SSE-NEXT:    pminud %xmm1, %xmm0 # sched: [1:0.50]
3456 ; SKYLAKE-SSE-NEXT:    pminud (%rdi), %xmm0 # sched: [7:0.50]
3457 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3458 ;
3459 ; SKYLAKE-LABEL: test_pminud:
3460 ; SKYLAKE:       # %bb.0:
3461 ; SKYLAKE-NEXT:    vpminud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3462 ; SKYLAKE-NEXT:    vpminud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3463 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3464 ;
3465 ; SKX-SSE-LABEL: test_pminud:
3466 ; SKX-SSE:       # %bb.0:
3467 ; SKX-SSE-NEXT:    pminud %xmm1, %xmm0 # sched: [1:0.50]
3468 ; SKX-SSE-NEXT:    pminud (%rdi), %xmm0 # sched: [7:0.50]
3469 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3470 ;
3471 ; SKX-LABEL: test_pminud:
3472 ; SKX:       # %bb.0:
3473 ; SKX-NEXT:    vpminud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3474 ; SKX-NEXT:    vpminud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3475 ; SKX-NEXT:    retq # sched: [7:1.00]
3476 ;
3477 ; BDVER2-SSE-LABEL: test_pminud:
3478 ; BDVER2-SSE:       # %bb.0:
3479 ; BDVER2-SSE-NEXT:    pminud %xmm1, %xmm0 # sched: [2:0.50]
3480 ; BDVER2-SSE-NEXT:    pminud (%rdi), %xmm0 # sched: [7:0.50]
3481 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3482 ;
3483 ; BDVER2-LABEL: test_pminud:
3484 ; BDVER2:       # %bb.0:
3485 ; BDVER2-NEXT:    vpminud %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3486 ; BDVER2-NEXT:    vpminud (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3487 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3488 ;
3489 ; BTVER2-SSE-LABEL: test_pminud:
3490 ; BTVER2-SSE:       # %bb.0:
3491 ; BTVER2-SSE-NEXT:    pminud %xmm1, %xmm0 # sched: [1:0.50]
3492 ; BTVER2-SSE-NEXT:    pminud (%rdi), %xmm0 # sched: [6:1.00]
3493 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3494 ;
3495 ; BTVER2-LABEL: test_pminud:
3496 ; BTVER2:       # %bb.0:
3497 ; BTVER2-NEXT:    vpminud %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3498 ; BTVER2-NEXT:    vpminud (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3499 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3500 ;
3501 ; ZNVER1-SSE-LABEL: test_pminud:
3502 ; ZNVER1-SSE:       # %bb.0:
3503 ; ZNVER1-SSE-NEXT:    pminud %xmm1, %xmm0 # sched: [1:0.25]
3504 ; ZNVER1-SSE-NEXT:    pminud (%rdi), %xmm0 # sched: [8:0.50]
3505 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3506 ;
3507 ; ZNVER1-LABEL: test_pminud:
3508 ; ZNVER1:       # %bb.0:
3509 ; ZNVER1-NEXT:    vpminud %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3510 ; ZNVER1-NEXT:    vpminud (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3511 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3512   %1 = call <4 x i32> @llvm.x86.sse41.pminud(<4 x i32> %a0, <4 x i32> %a1)
3513   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
3514   %3 = call <4 x i32> @llvm.x86.sse41.pminud(<4 x i32> %1, <4 x i32> %2)
3515   ret <4 x i32> %3
3516 }
3517 declare <4 x i32> @llvm.x86.sse41.pminud(<4 x i32>, <4 x i32>) nounwind readnone
3518
3519 define <8 x i16> @test_pminuw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
3520 ; GENERIC-LABEL: test_pminuw:
3521 ; GENERIC:       # %bb.0:
3522 ; GENERIC-NEXT:    pminuw %xmm1, %xmm0 # sched: [1:0.50]
3523 ; GENERIC-NEXT:    pminuw (%rdi), %xmm0 # sched: [7:0.50]
3524 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3525 ;
3526 ; SLM-LABEL: test_pminuw:
3527 ; SLM:       # %bb.0:
3528 ; SLM-NEXT:    pminuw %xmm1, %xmm0 # sched: [1:0.50]
3529 ; SLM-NEXT:    pminuw (%rdi), %xmm0 # sched: [4:1.00]
3530 ; SLM-NEXT:    retq # sched: [4:1.00]
3531 ;
3532 ; SANDY-SSE-LABEL: test_pminuw:
3533 ; SANDY-SSE:       # %bb.0:
3534 ; SANDY-SSE-NEXT:    pminuw %xmm1, %xmm0 # sched: [1:0.50]
3535 ; SANDY-SSE-NEXT:    pminuw (%rdi), %xmm0 # sched: [7:0.50]
3536 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3537 ;
3538 ; SANDY-LABEL: test_pminuw:
3539 ; SANDY:       # %bb.0:
3540 ; SANDY-NEXT:    vpminuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3541 ; SANDY-NEXT:    vpminuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3542 ; SANDY-NEXT:    retq # sched: [1:1.00]
3543 ;
3544 ; HASWELL-SSE-LABEL: test_pminuw:
3545 ; HASWELL-SSE:       # %bb.0:
3546 ; HASWELL-SSE-NEXT:    pminuw %xmm1, %xmm0 # sched: [1:0.50]
3547 ; HASWELL-SSE-NEXT:    pminuw (%rdi), %xmm0 # sched: [7:0.50]
3548 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3549 ;
3550 ; HASWELL-LABEL: test_pminuw:
3551 ; HASWELL:       # %bb.0:
3552 ; HASWELL-NEXT:    vpminuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3553 ; HASWELL-NEXT:    vpminuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3554 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3555 ;
3556 ; BROADWELL-SSE-LABEL: test_pminuw:
3557 ; BROADWELL-SSE:       # %bb.0:
3558 ; BROADWELL-SSE-NEXT:    pminuw %xmm1, %xmm0 # sched: [1:0.50]
3559 ; BROADWELL-SSE-NEXT:    pminuw (%rdi), %xmm0 # sched: [6:0.50]
3560 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3561 ;
3562 ; BROADWELL-LABEL: test_pminuw:
3563 ; BROADWELL:       # %bb.0:
3564 ; BROADWELL-NEXT:    vpminuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3565 ; BROADWELL-NEXT:    vpminuw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
3566 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3567 ;
3568 ; SKYLAKE-SSE-LABEL: test_pminuw:
3569 ; SKYLAKE-SSE:       # %bb.0:
3570 ; SKYLAKE-SSE-NEXT:    pminuw %xmm1, %xmm0 # sched: [1:0.50]
3571 ; SKYLAKE-SSE-NEXT:    pminuw (%rdi), %xmm0 # sched: [7:0.50]
3572 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3573 ;
3574 ; SKYLAKE-LABEL: test_pminuw:
3575 ; SKYLAKE:       # %bb.0:
3576 ; SKYLAKE-NEXT:    vpminuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3577 ; SKYLAKE-NEXT:    vpminuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3578 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3579 ;
3580 ; SKX-SSE-LABEL: test_pminuw:
3581 ; SKX-SSE:       # %bb.0:
3582 ; SKX-SSE-NEXT:    pminuw %xmm1, %xmm0 # sched: [1:0.50]
3583 ; SKX-SSE-NEXT:    pminuw (%rdi), %xmm0 # sched: [7:0.50]
3584 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3585 ;
3586 ; SKX-LABEL: test_pminuw:
3587 ; SKX:       # %bb.0:
3588 ; SKX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3589 ; SKX-NEXT:    vpminuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3590 ; SKX-NEXT:    retq # sched: [7:1.00]
3591 ;
3592 ; BDVER2-SSE-LABEL: test_pminuw:
3593 ; BDVER2-SSE:       # %bb.0:
3594 ; BDVER2-SSE-NEXT:    pminuw %xmm1, %xmm0 # sched: [2:0.50]
3595 ; BDVER2-SSE-NEXT:    pminuw (%rdi), %xmm0 # sched: [7:0.50]
3596 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3597 ;
3598 ; BDVER2-LABEL: test_pminuw:
3599 ; BDVER2:       # %bb.0:
3600 ; BDVER2-NEXT:    vpminuw %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3601 ; BDVER2-NEXT:    vpminuw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3602 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3603 ;
3604 ; BTVER2-SSE-LABEL: test_pminuw:
3605 ; BTVER2-SSE:       # %bb.0:
3606 ; BTVER2-SSE-NEXT:    pminuw %xmm1, %xmm0 # sched: [1:0.50]
3607 ; BTVER2-SSE-NEXT:    pminuw (%rdi), %xmm0 # sched: [6:1.00]
3608 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3609 ;
3610 ; BTVER2-LABEL: test_pminuw:
3611 ; BTVER2:       # %bb.0:
3612 ; BTVER2-NEXT:    vpminuw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3613 ; BTVER2-NEXT:    vpminuw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3614 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3615 ;
3616 ; ZNVER1-SSE-LABEL: test_pminuw:
3617 ; ZNVER1-SSE:       # %bb.0:
3618 ; ZNVER1-SSE-NEXT:    pminuw %xmm1, %xmm0 # sched: [1:0.25]
3619 ; ZNVER1-SSE-NEXT:    pminuw (%rdi), %xmm0 # sched: [8:0.50]
3620 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3621 ;
3622 ; ZNVER1-LABEL: test_pminuw:
3623 ; ZNVER1:       # %bb.0:
3624 ; ZNVER1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3625 ; ZNVER1-NEXT:    vpminuw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3626 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3627   %1 = call <8 x i16> @llvm.x86.sse41.pminuw(<8 x i16> %a0, <8 x i16> %a1)
3628   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
3629   %3 = call <8 x i16> @llvm.x86.sse41.pminuw(<8 x i16> %1, <8 x i16> %2)
3630   ret <8 x i16> %3
3631 }
3632 declare <8 x i16> @llvm.x86.sse41.pminuw(<8 x i16>, <8 x i16>) nounwind readnone
3633
3634 define <8 x i16> @test_pmovsxbw(<16 x i8> %a0, <8 x i8> *%a1) {
3635 ; GENERIC-LABEL: test_pmovsxbw:
3636 ; GENERIC:       # %bb.0:
3637 ; GENERIC-NEXT:    pmovsxbw %xmm0, %xmm1 # sched: [1:0.50]
3638 ; GENERIC-NEXT:    pmovsxbw (%rdi), %xmm0 # sched: [7:0.50]
3639 ; GENERIC-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
3640 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3641 ;
3642 ; SLM-LABEL: test_pmovsxbw:
3643 ; SLM:       # %bb.0:
3644 ; SLM-NEXT:    pmovsxbw (%rdi), %xmm1 # sched: [4:1.00]
3645 ; SLM-NEXT:    pmovsxbw %xmm0, %xmm0 # sched: [1:1.00]
3646 ; SLM-NEXT:    paddw %xmm0, %xmm1 # sched: [1:0.50]
3647 ; SLM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
3648 ; SLM-NEXT:    retq # sched: [4:1.00]
3649 ;
3650 ; SANDY-SSE-LABEL: test_pmovsxbw:
3651 ; SANDY-SSE:       # %bb.0:
3652 ; SANDY-SSE-NEXT:    pmovsxbw %xmm0, %xmm1 # sched: [1:0.50]
3653 ; SANDY-SSE-NEXT:    pmovsxbw (%rdi), %xmm0 # sched: [7:0.50]
3654 ; SANDY-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
3655 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3656 ;
3657 ; SANDY-LABEL: test_pmovsxbw:
3658 ; SANDY:       # %bb.0:
3659 ; SANDY-NEXT:    vpmovsxbw %xmm0, %xmm0 # sched: [1:0.50]
3660 ; SANDY-NEXT:    vpmovsxbw (%rdi), %xmm1 # sched: [7:0.50]
3661 ; SANDY-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3662 ; SANDY-NEXT:    retq # sched: [1:1.00]
3663 ;
3664 ; HASWELL-SSE-LABEL: test_pmovsxbw:
3665 ; HASWELL-SSE:       # %bb.0:
3666 ; HASWELL-SSE-NEXT:    pmovsxbw %xmm0, %xmm1 # sched: [1:1.00]
3667 ; HASWELL-SSE-NEXT:    pmovsxbw (%rdi), %xmm0 # sched: [6:1.00]
3668 ; HASWELL-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
3669 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3670 ;
3671 ; HASWELL-LABEL: test_pmovsxbw:
3672 ; HASWELL:       # %bb.0:
3673 ; HASWELL-NEXT:    vpmovsxbw %xmm0, %xmm0 # sched: [1:1.00]
3674 ; HASWELL-NEXT:    vpmovsxbw (%rdi), %xmm1 # sched: [6:1.00]
3675 ; HASWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3676 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3677 ;
3678 ; BROADWELL-SSE-LABEL: test_pmovsxbw:
3679 ; BROADWELL-SSE:       # %bb.0:
3680 ; BROADWELL-SSE-NEXT:    pmovsxbw %xmm0, %xmm1 # sched: [1:1.00]
3681 ; BROADWELL-SSE-NEXT:    pmovsxbw (%rdi), %xmm0 # sched: [6:1.00]
3682 ; BROADWELL-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
3683 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3684 ;
3685 ; BROADWELL-LABEL: test_pmovsxbw:
3686 ; BROADWELL:       # %bb.0:
3687 ; BROADWELL-NEXT:    vpmovsxbw %xmm0, %xmm0 # sched: [1:1.00]
3688 ; BROADWELL-NEXT:    vpmovsxbw (%rdi), %xmm1 # sched: [6:1.00]
3689 ; BROADWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3690 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3691 ;
3692 ; SKYLAKE-SSE-LABEL: test_pmovsxbw:
3693 ; SKYLAKE-SSE:       # %bb.0:
3694 ; SKYLAKE-SSE-NEXT:    pmovsxbw %xmm0, %xmm1 # sched: [1:1.00]
3695 ; SKYLAKE-SSE-NEXT:    pmovsxbw (%rdi), %xmm0 # sched: [6:1.00]
3696 ; SKYLAKE-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.33]
3697 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3698 ;
3699 ; SKYLAKE-LABEL: test_pmovsxbw:
3700 ; SKYLAKE:       # %bb.0:
3701 ; SKYLAKE-NEXT:    vpmovsxbw %xmm0, %xmm0 # sched: [1:1.00]
3702 ; SKYLAKE-NEXT:    vpmovsxbw (%rdi), %xmm1 # sched: [6:1.00]
3703 ; SKYLAKE-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3704 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3705 ;
3706 ; SKX-SSE-LABEL: test_pmovsxbw:
3707 ; SKX-SSE:       # %bb.0:
3708 ; SKX-SSE-NEXT:    pmovsxbw %xmm0, %xmm1 # sched: [1:1.00]
3709 ; SKX-SSE-NEXT:    pmovsxbw (%rdi), %xmm0 # sched: [6:1.00]
3710 ; SKX-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.33]
3711 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3712 ;
3713 ; SKX-LABEL: test_pmovsxbw:
3714 ; SKX:       # %bb.0:
3715 ; SKX-NEXT:    vpmovsxbw %xmm0, %xmm0 # sched: [1:1.00]
3716 ; SKX-NEXT:    vpmovsxbw (%rdi), %xmm1 # sched: [6:1.00]
3717 ; SKX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3718 ; SKX-NEXT:    retq # sched: [7:1.00]
3719 ;
3720 ; BDVER2-SSE-LABEL: test_pmovsxbw:
3721 ; BDVER2-SSE:       # %bb.0:
3722 ; BDVER2-SSE-NEXT:    pmovsxbw %xmm0, %xmm1 # sched: [2:0.50]
3723 ; BDVER2-SSE-NEXT:    pmovsxbw (%rdi), %xmm0 # sched: [7:0.50]
3724 ; BDVER2-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [2:0.50]
3725 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3726 ;
3727 ; BDVER2-LABEL: test_pmovsxbw:
3728 ; BDVER2:       # %bb.0:
3729 ; BDVER2-NEXT:    vpmovsxbw (%rdi), %xmm1 # sched: [7:0.50]
3730 ; BDVER2-NEXT:    vpmovsxbw %xmm0, %xmm0 # sched: [2:0.50]
3731 ; BDVER2-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3732 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3733 ;
3734 ; BTVER2-SSE-LABEL: test_pmovsxbw:
3735 ; BTVER2-SSE:       # %bb.0:
3736 ; BTVER2-SSE-NEXT:    pmovsxbw %xmm0, %xmm1 # sched: [1:0.50]
3737 ; BTVER2-SSE-NEXT:    pmovsxbw (%rdi), %xmm0 # sched: [6:1.00]
3738 ; BTVER2-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
3739 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3740 ;
3741 ; BTVER2-LABEL: test_pmovsxbw:
3742 ; BTVER2:       # %bb.0:
3743 ; BTVER2-NEXT:    vpmovsxbw (%rdi), %xmm1 # sched: [6:1.00]
3744 ; BTVER2-NEXT:    vpmovsxbw %xmm0, %xmm0 # sched: [1:0.50]
3745 ; BTVER2-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3746 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3747 ;
3748 ; ZNVER1-SSE-LABEL: test_pmovsxbw:
3749 ; ZNVER1-SSE:       # %bb.0:
3750 ; ZNVER1-SSE-NEXT:    pmovsxbw %xmm0, %xmm1 # sched: [1:0.25]
3751 ; ZNVER1-SSE-NEXT:    pmovsxbw (%rdi), %xmm0 # sched: [8:0.50]
3752 ; ZNVER1-SSE-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.25]
3753 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3754 ;
3755 ; ZNVER1-LABEL: test_pmovsxbw:
3756 ; ZNVER1:       # %bb.0:
3757 ; ZNVER1-NEXT:    vpmovsxbw (%rdi), %xmm1 # sched: [8:0.50]
3758 ; ZNVER1-NEXT:    vpmovsxbw %xmm0, %xmm0 # sched: [1:0.25]
3759 ; ZNVER1-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3760 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3761   %1 = shufflevector <16 x i8> %a0, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
3762   %2 = sext <8 x i8> %1 to <8 x i16>
3763   %3 = load <8 x i8>, <8 x i8>* %a1, align 1
3764   %4 = sext <8 x i8> %3 to <8 x i16>
3765   %5 = add <8 x i16> %2, %4
3766   ret <8 x i16> %5
3767 }
3768
3769 define <4 x i32> @test_pmovsxbd(<16 x i8> %a0, <4 x i8> *%a1) {
3770 ; GENERIC-LABEL: test_pmovsxbd:
3771 ; GENERIC:       # %bb.0:
3772 ; GENERIC-NEXT:    pmovsxbd %xmm0, %xmm1 # sched: [1:0.50]
3773 ; GENERIC-NEXT:    pmovsxbd (%rdi), %xmm0 # sched: [7:0.50]
3774 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3775 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3776 ;
3777 ; SLM-LABEL: test_pmovsxbd:
3778 ; SLM:       # %bb.0:
3779 ; SLM-NEXT:    pmovsxbd (%rdi), %xmm1 # sched: [4:1.00]
3780 ; SLM-NEXT:    pmovsxbd %xmm0, %xmm0 # sched: [1:1.00]
3781 ; SLM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
3782 ; SLM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
3783 ; SLM-NEXT:    retq # sched: [4:1.00]
3784 ;
3785 ; SANDY-SSE-LABEL: test_pmovsxbd:
3786 ; SANDY-SSE:       # %bb.0:
3787 ; SANDY-SSE-NEXT:    pmovsxbd %xmm0, %xmm1 # sched: [1:0.50]
3788 ; SANDY-SSE-NEXT:    pmovsxbd (%rdi), %xmm0 # sched: [7:0.50]
3789 ; SANDY-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3790 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3791 ;
3792 ; SANDY-LABEL: test_pmovsxbd:
3793 ; SANDY:       # %bb.0:
3794 ; SANDY-NEXT:    vpmovsxbd %xmm0, %xmm0 # sched: [1:0.50]
3795 ; SANDY-NEXT:    vpmovsxbd (%rdi), %xmm1 # sched: [7:0.50]
3796 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3797 ; SANDY-NEXT:    retq # sched: [1:1.00]
3798 ;
3799 ; HASWELL-SSE-LABEL: test_pmovsxbd:
3800 ; HASWELL-SSE:       # %bb.0:
3801 ; HASWELL-SSE-NEXT:    pmovsxbd %xmm0, %xmm1 # sched: [1:1.00]
3802 ; HASWELL-SSE-NEXT:    pmovsxbd (%rdi), %xmm0 # sched: [6:1.00]
3803 ; HASWELL-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3804 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3805 ;
3806 ; HASWELL-LABEL: test_pmovsxbd:
3807 ; HASWELL:       # %bb.0:
3808 ; HASWELL-NEXT:    vpmovsxbd %xmm0, %xmm0 # sched: [1:1.00]
3809 ; HASWELL-NEXT:    vpmovsxbd (%rdi), %xmm1 # sched: [6:1.00]
3810 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3811 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3812 ;
3813 ; BROADWELL-SSE-LABEL: test_pmovsxbd:
3814 ; BROADWELL-SSE:       # %bb.0:
3815 ; BROADWELL-SSE-NEXT:    pmovsxbd %xmm0, %xmm1 # sched: [1:1.00]
3816 ; BROADWELL-SSE-NEXT:    pmovsxbd (%rdi), %xmm0 # sched: [6:1.00]
3817 ; BROADWELL-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3818 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3819 ;
3820 ; BROADWELL-LABEL: test_pmovsxbd:
3821 ; BROADWELL:       # %bb.0:
3822 ; BROADWELL-NEXT:    vpmovsxbd %xmm0, %xmm0 # sched: [1:1.00]
3823 ; BROADWELL-NEXT:    vpmovsxbd (%rdi), %xmm1 # sched: [6:1.00]
3824 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3825 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3826 ;
3827 ; SKYLAKE-SSE-LABEL: test_pmovsxbd:
3828 ; SKYLAKE-SSE:       # %bb.0:
3829 ; SKYLAKE-SSE-NEXT:    pmovsxbd %xmm0, %xmm1 # sched: [1:1.00]
3830 ; SKYLAKE-SSE-NEXT:    pmovsxbd (%rdi), %xmm0 # sched: [6:1.00]
3831 ; SKYLAKE-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
3832 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3833 ;
3834 ; SKYLAKE-LABEL: test_pmovsxbd:
3835 ; SKYLAKE:       # %bb.0:
3836 ; SKYLAKE-NEXT:    vpmovsxbd %xmm0, %xmm0 # sched: [1:1.00]
3837 ; SKYLAKE-NEXT:    vpmovsxbd (%rdi), %xmm1 # sched: [6:1.00]
3838 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3839 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3840 ;
3841 ; SKX-SSE-LABEL: test_pmovsxbd:
3842 ; SKX-SSE:       # %bb.0:
3843 ; SKX-SSE-NEXT:    pmovsxbd %xmm0, %xmm1 # sched: [1:1.00]
3844 ; SKX-SSE-NEXT:    pmovsxbd (%rdi), %xmm0 # sched: [6:1.00]
3845 ; SKX-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
3846 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3847 ;
3848 ; SKX-LABEL: test_pmovsxbd:
3849 ; SKX:       # %bb.0:
3850 ; SKX-NEXT:    vpmovsxbd %xmm0, %xmm0 # sched: [1:1.00]
3851 ; SKX-NEXT:    vpmovsxbd (%rdi), %xmm1 # sched: [6:1.00]
3852 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3853 ; SKX-NEXT:    retq # sched: [7:1.00]
3854 ;
3855 ; BDVER2-SSE-LABEL: test_pmovsxbd:
3856 ; BDVER2-SSE:       # %bb.0:
3857 ; BDVER2-SSE-NEXT:    pmovsxbd %xmm0, %xmm1 # sched: [2:0.50]
3858 ; BDVER2-SSE-NEXT:    pmovsxbd (%rdi), %xmm0 # sched: [7:0.50]
3859 ; BDVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [2:0.50]
3860 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3861 ;
3862 ; BDVER2-LABEL: test_pmovsxbd:
3863 ; BDVER2:       # %bb.0:
3864 ; BDVER2-NEXT:    vpmovsxbd (%rdi), %xmm1 # sched: [7:0.50]
3865 ; BDVER2-NEXT:    vpmovsxbd %xmm0, %xmm0 # sched: [2:0.50]
3866 ; BDVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3867 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3868 ;
3869 ; BTVER2-SSE-LABEL: test_pmovsxbd:
3870 ; BTVER2-SSE:       # %bb.0:
3871 ; BTVER2-SSE-NEXT:    pmovsxbd %xmm0, %xmm1 # sched: [1:0.50]
3872 ; BTVER2-SSE-NEXT:    pmovsxbd (%rdi), %xmm0 # sched: [6:1.00]
3873 ; BTVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3874 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3875 ;
3876 ; BTVER2-LABEL: test_pmovsxbd:
3877 ; BTVER2:       # %bb.0:
3878 ; BTVER2-NEXT:    vpmovsxbd (%rdi), %xmm1 # sched: [6:1.00]
3879 ; BTVER2-NEXT:    vpmovsxbd %xmm0, %xmm0 # sched: [1:0.50]
3880 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3881 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3882 ;
3883 ; ZNVER1-SSE-LABEL: test_pmovsxbd:
3884 ; ZNVER1-SSE:       # %bb.0:
3885 ; ZNVER1-SSE-NEXT:    pmovsxbd %xmm0, %xmm1 # sched: [1:0.25]
3886 ; ZNVER1-SSE-NEXT:    pmovsxbd (%rdi), %xmm0 # sched: [8:0.50]
3887 ; ZNVER1-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.25]
3888 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3889 ;
3890 ; ZNVER1-LABEL: test_pmovsxbd:
3891 ; ZNVER1:       # %bb.0:
3892 ; ZNVER1-NEXT:    vpmovsxbd (%rdi), %xmm1 # sched: [8:0.50]
3893 ; ZNVER1-NEXT:    vpmovsxbd %xmm0, %xmm0 # sched: [1:0.25]
3894 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3895 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3896   %1 = shufflevector <16 x i8> %a0, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
3897   %2 = sext <4 x i8> %1 to <4 x i32>
3898   %3 = load <4 x i8>, <4 x i8>* %a1, align 1
3899   %4 = sext <4 x i8> %3 to <4 x i32>
3900   %5 = add <4 x i32> %2, %4
3901   ret <4 x i32> %5
3902 }
3903
3904 define <2 x i64> @test_pmovsxbq(<16 x i8> %a0, <2 x i8> *%a1) {
3905 ; GENERIC-LABEL: test_pmovsxbq:
3906 ; GENERIC:       # %bb.0:
3907 ; GENERIC-NEXT:    pmovsxbq %xmm0, %xmm1 # sched: [1:0.50]
3908 ; GENERIC-NEXT:    pmovsxbq (%rdi), %xmm0 # sched: [7:0.50]
3909 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
3910 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3911 ;
3912 ; SLM-LABEL: test_pmovsxbq:
3913 ; SLM:       # %bb.0:
3914 ; SLM-NEXT:    pmovsxbq (%rdi), %xmm1 # sched: [4:1.00]
3915 ; SLM-NEXT:    pmovsxbq %xmm0, %xmm0 # sched: [1:1.00]
3916 ; SLM-NEXT:    paddq %xmm0, %xmm1 # sched: [1:0.50]
3917 ; SLM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
3918 ; SLM-NEXT:    retq # sched: [4:1.00]
3919 ;
3920 ; SANDY-SSE-LABEL: test_pmovsxbq:
3921 ; SANDY-SSE:       # %bb.0:
3922 ; SANDY-SSE-NEXT:    pmovsxbq %xmm0, %xmm1 # sched: [1:0.50]
3923 ; SANDY-SSE-NEXT:    pmovsxbq (%rdi), %xmm0 # sched: [7:0.50]
3924 ; SANDY-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
3925 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3926 ;
3927 ; SANDY-LABEL: test_pmovsxbq:
3928 ; SANDY:       # %bb.0:
3929 ; SANDY-NEXT:    vpmovsxbq %xmm0, %xmm0 # sched: [1:0.50]
3930 ; SANDY-NEXT:    vpmovsxbq (%rdi), %xmm1 # sched: [7:0.50]
3931 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3932 ; SANDY-NEXT:    retq # sched: [1:1.00]
3933 ;
3934 ; HASWELL-SSE-LABEL: test_pmovsxbq:
3935 ; HASWELL-SSE:       # %bb.0:
3936 ; HASWELL-SSE-NEXT:    pmovsxbq %xmm0, %xmm1 # sched: [1:1.00]
3937 ; HASWELL-SSE-NEXT:    pmovsxbq (%rdi), %xmm0 # sched: [6:1.00]
3938 ; HASWELL-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
3939 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3940 ;
3941 ; HASWELL-LABEL: test_pmovsxbq:
3942 ; HASWELL:       # %bb.0:
3943 ; HASWELL-NEXT:    vpmovsxbq %xmm0, %xmm0 # sched: [1:1.00]
3944 ; HASWELL-NEXT:    vpmovsxbq (%rdi), %xmm1 # sched: [6:1.00]
3945 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3946 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3947 ;
3948 ; BROADWELL-SSE-LABEL: test_pmovsxbq:
3949 ; BROADWELL-SSE:       # %bb.0:
3950 ; BROADWELL-SSE-NEXT:    pmovsxbq %xmm0, %xmm1 # sched: [1:1.00]
3951 ; BROADWELL-SSE-NEXT:    pmovsxbq (%rdi), %xmm0 # sched: [6:1.00]
3952 ; BROADWELL-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
3953 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3954 ;
3955 ; BROADWELL-LABEL: test_pmovsxbq:
3956 ; BROADWELL:       # %bb.0:
3957 ; BROADWELL-NEXT:    vpmovsxbq %xmm0, %xmm0 # sched: [1:1.00]
3958 ; BROADWELL-NEXT:    vpmovsxbq (%rdi), %xmm1 # sched: [6:1.00]
3959 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3960 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3961 ;
3962 ; SKYLAKE-SSE-LABEL: test_pmovsxbq:
3963 ; SKYLAKE-SSE:       # %bb.0:
3964 ; SKYLAKE-SSE-NEXT:    pmovsxbq %xmm0, %xmm1 # sched: [1:1.00]
3965 ; SKYLAKE-SSE-NEXT:    pmovsxbq (%rdi), %xmm0 # sched: [6:1.00]
3966 ; SKYLAKE-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.33]
3967 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3968 ;
3969 ; SKYLAKE-LABEL: test_pmovsxbq:
3970 ; SKYLAKE:       # %bb.0:
3971 ; SKYLAKE-NEXT:    vpmovsxbq %xmm0, %xmm0 # sched: [1:1.00]
3972 ; SKYLAKE-NEXT:    vpmovsxbq (%rdi), %xmm1 # sched: [6:1.00]
3973 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3974 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3975 ;
3976 ; SKX-SSE-LABEL: test_pmovsxbq:
3977 ; SKX-SSE:       # %bb.0:
3978 ; SKX-SSE-NEXT:    pmovsxbq %xmm0, %xmm1 # sched: [1:1.00]
3979 ; SKX-SSE-NEXT:    pmovsxbq (%rdi), %xmm0 # sched: [6:1.00]
3980 ; SKX-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.33]
3981 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3982 ;
3983 ; SKX-LABEL: test_pmovsxbq:
3984 ; SKX:       # %bb.0:
3985 ; SKX-NEXT:    vpmovsxbq %xmm0, %xmm0 # sched: [1:1.00]
3986 ; SKX-NEXT:    vpmovsxbq (%rdi), %xmm1 # sched: [6:1.00]
3987 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3988 ; SKX-NEXT:    retq # sched: [7:1.00]
3989 ;
3990 ; BDVER2-SSE-LABEL: test_pmovsxbq:
3991 ; BDVER2-SSE:       # %bb.0:
3992 ; BDVER2-SSE-NEXT:    pmovsxbq %xmm0, %xmm1 # sched: [2:0.50]
3993 ; BDVER2-SSE-NEXT:    pmovsxbq (%rdi), %xmm0 # sched: [7:0.50]
3994 ; BDVER2-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [2:0.50]
3995 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3996 ;
3997 ; BDVER2-LABEL: test_pmovsxbq:
3998 ; BDVER2:       # %bb.0:
3999 ; BDVER2-NEXT:    vpmovsxbq (%rdi), %xmm1 # sched: [7:0.50]
4000 ; BDVER2-NEXT:    vpmovsxbq %xmm0, %xmm0 # sched: [2:0.50]
4001 ; BDVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
4002 ; BDVER2-NEXT:    retq # sched: [5:1.00]
4003 ;
4004 ; BTVER2-SSE-LABEL: test_pmovsxbq:
4005 ; BTVER2-SSE:       # %bb.0:
4006 ; BTVER2-SSE-NEXT:    pmovsxbq %xmm0, %xmm1 # sched: [1:0.50]
4007 ; BTVER2-SSE-NEXT:    pmovsxbq (%rdi), %xmm0 # sched: [6:1.00]
4008 ; BTVER2-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
4009 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
4010 ;
4011 ; BTVER2-LABEL: test_pmovsxbq:
4012 ; BTVER2:       # %bb.0:
4013 ; BTVER2-NEXT:    vpmovsxbq (%rdi), %xmm1 # sched: [6:1.00]
4014 ; BTVER2-NEXT:    vpmovsxbq %xmm0, %xmm0 # sched: [1:0.50]
4015 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4016 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4017 ;
4018 ; ZNVER1-SSE-LABEL: test_pmovsxbq:
4019 ; ZNVER1-SSE:       # %bb.0:
4020 ; ZNVER1-SSE-NEXT:    pmovsxbq %xmm0, %xmm1 # sched: [1:0.25]
4021 ; ZNVER1-SSE-NEXT:    pmovsxbq (%rdi), %xmm0 # sched: [8:0.50]
4022 ; ZNVER1-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.25]
4023 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
4024 ;
4025 ; ZNVER1-LABEL: test_pmovsxbq:
4026 ; ZNVER1:       # %bb.0:
4027 ; ZNVER1-NEXT:    vpmovsxbq (%rdi), %xmm1 # sched: [8:0.50]
4028 ; ZNVER1-NEXT:    vpmovsxbq %xmm0, %xmm0 # sched: [1:0.25]
4029 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4030 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4031   %1 = shufflevector <16 x i8> %a0, <16 x i8> undef, <2 x i32> <i32 0, i32 1>
4032   %2 = sext <2 x i8> %1 to <2 x i64>
4033   %3 = load <2 x i8>, <2 x i8>* %a1, align 1
4034   %4 = sext <2 x i8> %3 to <2 x i64>
4035   %5 = add <2 x i64> %2, %4
4036   ret <2 x i64> %5
4037 }
4038
4039 define <2 x i64> @test_pmovsxdq(<4 x i32> %a0, <2 x i32> *%a1) {
4040 ; GENERIC-LABEL: test_pmovsxdq:
4041 ; GENERIC:       # %bb.0:
4042 ; GENERIC-NEXT:    pmovsxdq %xmm0, %xmm1 # sched: [1:0.50]
4043 ; GENERIC-NEXT:    pmovsxdq (%rdi), %xmm0 # sched: [7:0.50]
4044 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
4045 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4046 ;
4047 ; SLM-LABEL: test_pmovsxdq:
4048 ; SLM:       # %bb.0:
4049 ; SLM-NEXT:    pmovsxdq (%rdi), %xmm1 # sched: [4:1.00]
4050 ; SLM-NEXT:    pmovsxdq %xmm0, %xmm0 # sched: [1:1.00]
4051 ; SLM-NEXT:    paddq %xmm0, %xmm1 # sched: [1:0.50]
4052 ; SLM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
4053 ; SLM-NEXT:    retq # sched: [4:1.00]
4054 ;
4055 ; SANDY-SSE-LABEL: test_pmovsxdq:
4056 ; SANDY-SSE:       # %bb.0:
4057 ; SANDY-SSE-NEXT:    pmovsxdq %xmm0, %xmm1 # sched: [1:0.50]
4058 ; SANDY-SSE-NEXT:    pmovsxdq (%rdi), %xmm0 # sched: [7:0.50]
4059 ; SANDY-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
4060 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
4061 ;
4062 ; SANDY-LABEL: test_pmovsxdq:
4063 ; SANDY:       # %bb.0:
4064 ; SANDY-NEXT:    vpmovsxdq %xmm0, %xmm0 # sched: [1:0.50]
4065 ; SANDY-NEXT:    vpmovsxdq (%rdi), %xmm1 # sched: [7:0.50]
4066 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4067 ; SANDY-NEXT:    retq # sched: [1:1.00]
4068 ;
4069 ; HASWELL-SSE-LABEL: test_pmovsxdq:
4070 ; HASWELL-SSE:       # %bb.0:
4071 ; HASWELL-SSE-NEXT:    pmovsxdq %xmm0, %xmm1 # sched: [1:1.00]
4072 ; HASWELL-SSE-NEXT:    pmovsxdq (%rdi), %xmm0 # sched: [6:1.00]
4073 ; HASWELL-SSE-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
4074 ; HASWELL-SSE-