1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2 3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41 4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE42 5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1 6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2 7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F 8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW 9 10 ; 11 ; Unsigned Maximum (GT) 12 ; 13 14 define <2 x i64> @max_gt_v2i64(<2 x i64> %a, <2 x i64> %b) { 15 ; SSE2-LABEL: max_gt_v2i64: 16 ; SSE2: # BB#0: 17 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 18 ; SSE2-NEXT: movdqa %xmm1, %xmm3 19 ; SSE2-NEXT: pxor %xmm2, %xmm3 20 ; SSE2-NEXT: pxor %xmm0, %xmm2 21 ; SSE2-NEXT: movdqa %xmm2, %xmm4 22 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 23 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 24 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 25 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 26 ; SSE2-NEXT: pand %xmm5, %xmm2 27 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 28 ; SSE2-NEXT: por %xmm2, %xmm3 29 ; SSE2-NEXT: pand %xmm3, %xmm0 30 ; SSE2-NEXT: pandn %xmm1, %xmm3 31 ; SSE2-NEXT: por %xmm3, %xmm0 32 ; SSE2-NEXT: retq 33 ; 34 ; SSE41-LABEL: max_gt_v2i64: 35 ; SSE41: # BB#0: 36 ; SSE41-NEXT: movdqa %xmm0, %xmm2 37 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 38 ; SSE41-NEXT: movdqa %xmm1, %xmm3 39 ; SSE41-NEXT: pxor %xmm0, %xmm3 40 ; SSE41-NEXT: pxor %xmm2, %xmm0 41 ; SSE41-NEXT: movdqa %xmm0, %xmm4 42 ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4 43 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 44 ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 45 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 46 ; SSE41-NEXT: pand %xmm5, %xmm3 47 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 48 ; SSE41-NEXT: por %xmm3, %xmm0 49 ; SSE41-NEXT: blendvpd %xmm2, %xmm1 50 ; SSE41-NEXT: movapd %xmm1, %xmm0 51 ; SSE41-NEXT: retq 52 ; 53 ; SSE42-LABEL: max_gt_v2i64: 54 ; SSE42: # BB#0: 55 ; SSE42-NEXT: movdqa %xmm0, %xmm2 56 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 57 ; SSE42-NEXT: movdqa %xmm1, %xmm3 58 ; SSE42-NEXT: pxor %xmm0, %xmm3 59 ; SSE42-NEXT: pxor %xmm2, %xmm0 60 ; SSE42-NEXT: pcmpgtq %xmm3, %xmm0 61 ; SSE42-NEXT: blendvpd %xmm2, %xmm1 62 ; SSE42-NEXT: movapd %xmm1, %xmm0 63 ; SSE42-NEXT: retq 64 ; 65 ; AVX-LABEL: max_gt_v2i64: 66 ; AVX: # BB#0: 67 ; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 68 ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm3 69 ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm2 70 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 71 ; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 72 ; AVX-NEXT: retq 73 %1 = icmp ugt <2 x i64> %a, %b 74 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b 75 ret <2 x i64> %2 76 } 77 78 define <4 x i64> @max_gt_v4i64(<4 x i64> %a, <4 x i64> %b) { 79 ; SSE2-LABEL: max_gt_v4i64: 80 ; SSE2: # BB#0: 81 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 82 ; SSE2-NEXT: movdqa %xmm3, %xmm5 83 ; SSE2-NEXT: pxor %xmm4, %xmm5 84 ; SSE2-NEXT: movdqa %xmm1, %xmm6 85 ; SSE2-NEXT: pxor %xmm4, %xmm6 86 ; SSE2-NEXT: movdqa %xmm6, %xmm7 87 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 88 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 89 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 90 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 91 ; SSE2-NEXT: pand %xmm8, %xmm5 92 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 93 ; SSE2-NEXT: por %xmm5, %xmm6 94 ; SSE2-NEXT: movdqa %xmm2, %xmm5 95 ; SSE2-NEXT: pxor %xmm4, %xmm5 96 ; SSE2-NEXT: pxor %xmm0, %xmm4 97 ; SSE2-NEXT: movdqa %xmm4, %xmm7 98 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 99 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 100 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 101 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 102 ; SSE2-NEXT: pand %xmm8, %xmm4 103 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 104 ; SSE2-NEXT: por %xmm4, %xmm5 105 ; SSE2-NEXT: pand %xmm5, %xmm0 106 ; SSE2-NEXT: pandn %xmm2, %xmm5 107 ; SSE2-NEXT: por %xmm5, %xmm0 108 ; SSE2-NEXT: pand %xmm6, %xmm1 109 ; SSE2-NEXT: pandn %xmm3, %xmm6 110 ; SSE2-NEXT: por %xmm6, %xmm1 111 ; SSE2-NEXT: retq 112 ; 113 ; SSE41-LABEL: max_gt_v4i64: 114 ; SSE41: # BB#0: 115 ; SSE41-NEXT: movdqa %xmm0, %xmm8 116 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 117 ; SSE41-NEXT: movdqa %xmm3, %xmm5 118 ; SSE41-NEXT: pxor %xmm0, %xmm5 119 ; SSE41-NEXT: movdqa %xmm1, %xmm6 120 ; SSE41-NEXT: pxor %xmm0, %xmm6 121 ; SSE41-NEXT: movdqa %xmm6, %xmm7 122 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7 123 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] 124 ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6 125 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 126 ; SSE41-NEXT: pand %xmm4, %xmm6 127 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 128 ; SSE41-NEXT: por %xmm6, %xmm5 129 ; SSE41-NEXT: movdqa %xmm2, %xmm4 130 ; SSE41-NEXT: pxor %xmm0, %xmm4 131 ; SSE41-NEXT: pxor %xmm8, %xmm0 132 ; SSE41-NEXT: movdqa %xmm0, %xmm6 133 ; SSE41-NEXT: pcmpgtd %xmm4, %xmm6 134 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 135 ; SSE41-NEXT: pcmpeqd %xmm4, %xmm0 136 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 137 ; SSE41-NEXT: pand %xmm7, %xmm4 138 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 139 ; SSE41-NEXT: por %xmm4, %xmm0 140 ; SSE41-NEXT: blendvpd %xmm8, %xmm2 141 ; SSE41-NEXT: movdqa %xmm5, %xmm0 142 ; SSE41-NEXT: blendvpd %xmm1, %xmm3 143 ; SSE41-NEXT: movapd %xmm2, %xmm0 144 ; SSE41-NEXT: movapd %xmm3, %xmm1 145 ; SSE41-NEXT: retq 146 ; 147 ; SSE42-LABEL: max_gt_v4i64: 148 ; SSE42: # BB#0: 149 ; SSE42-NEXT: movdqa %xmm0, %xmm4 150 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 151 ; SSE42-NEXT: movdqa %xmm3, %xmm6 152 ; SSE42-NEXT: pxor %xmm0, %xmm6 153 ; SSE42-NEXT: movdqa %xmm1, %xmm5 154 ; SSE42-NEXT: pxor %xmm0, %xmm5 155 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5 156 ; SSE42-NEXT: movdqa %xmm2, %xmm6 157 ; SSE42-NEXT: pxor %xmm0, %xmm6 158 ; SSE42-NEXT: pxor %xmm4, %xmm0 159 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm0 160 ; SSE42-NEXT: blendvpd %xmm4, %xmm2 161 ; SSE42-NEXT: movdqa %xmm5, %xmm0 162 ; SSE42-NEXT: blendvpd %xmm1, %xmm3 163 ; SSE42-NEXT: movapd %xmm2, %xmm0 164 ; SSE42-NEXT: movapd %xmm3, %xmm1 165 ; SSE42-NEXT: retq 166 ; 167 ; AVX1-LABEL: max_gt_v4i64: 168 ; AVX1: # BB#0: 169 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 170 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 171 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 172 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 173 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 174 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 175 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4 176 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 177 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 178 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 179 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 180 ; AVX1-NEXT: retq 181 ; 182 ; AVX2-LABEL: max_gt_v4i64: 183 ; AVX2: # BB#0: 184 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 185 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 186 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 187 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 188 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 189 ; AVX2-NEXT: retq 190 ; 191 ; AVX512-LABEL: max_gt_v4i64: 192 ; AVX512: # BB#0: 193 ; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 194 ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm3 195 ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm2 196 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 197 ; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 198 ; AVX512-NEXT: retq 199 %1 = icmp ugt <4 x i64> %a, %b 200 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b 201 ret <4 x i64> %2 202 } 203 204 define <4 x i32> @max_gt_v4i32(<4 x i32> %a, <4 x i32> %b) { 205 ; SSE2-LABEL: max_gt_v4i32: 206 ; SSE2: # BB#0: 207 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 208 ; SSE2-NEXT: movdqa %xmm1, %xmm3 209 ; SSE2-NEXT: pxor %xmm2, %xmm3 210 ; SSE2-NEXT: pxor %xmm0, %xmm2 211 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 212 ; SSE2-NEXT: pand %xmm2, %xmm0 213 ; SSE2-NEXT: pandn %xmm1, %xmm2 214 ; SSE2-NEXT: por %xmm2, %xmm0 215 ; SSE2-NEXT: retq 216 ; 217 ; SSE41-LABEL: max_gt_v4i32: 218 ; SSE41: # BB#0: 219 ; SSE41-NEXT: pmaxud %xmm1, %xmm0 220 ; SSE41-NEXT: retq 221 ; 222 ; SSE42-LABEL: max_gt_v4i32: 223 ; SSE42: # BB#0: 224 ; SSE42-NEXT: pmaxud %xmm1, %xmm0 225 ; SSE42-NEXT: retq 226 ; 227 ; AVX-LABEL: max_gt_v4i32: 228 ; AVX: # BB#0: 229 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 230 ; AVX-NEXT: retq 231 %1 = icmp ugt <4 x i32> %a, %b 232 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b 233 ret <4 x i32> %2 234 } 235 236 define <8 x i32> @max_gt_v8i32(<8 x i32> %a, <8 x i32> %b) { 237 ; SSE2-LABEL: max_gt_v8i32: 238 ; SSE2: # BB#0: 239 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648] 240 ; SSE2-NEXT: movdqa %xmm3, %xmm6 241 ; SSE2-NEXT: pxor %xmm5, %xmm6 242 ; SSE2-NEXT: movdqa %xmm1, %xmm4 243 ; SSE2-NEXT: pxor %xmm5, %xmm4 244 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4 245 ; SSE2-NEXT: movdqa %xmm2, %xmm6 246 ; SSE2-NEXT: pxor %xmm5, %xmm6 247 ; SSE2-NEXT: pxor %xmm0, %xmm5 248 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 249 ; SSE2-NEXT: pand %xmm5, %xmm0 250 ; SSE2-NEXT: pandn %xmm2, %xmm5 251 ; SSE2-NEXT: por %xmm5, %xmm0 252 ; SSE2-NEXT: pand %xmm4, %xmm1 253 ; SSE2-NEXT: pandn %xmm3, %xmm4 254 ; SSE2-NEXT: por %xmm1, %xmm4 255 ; SSE2-NEXT: movdqa %xmm4, %xmm1 256 ; SSE2-NEXT: retq 257 ; 258 ; SSE41-LABEL: max_gt_v8i32: 259 ; SSE41: # BB#0: 260 ; SSE41-NEXT: pmaxud %xmm2, %xmm0 261 ; SSE41-NEXT: pmaxud %xmm3, %xmm1 262 ; SSE41-NEXT: retq 263 ; 264 ; SSE42-LABEL: max_gt_v8i32: 265 ; SSE42: # BB#0: 266 ; SSE42-NEXT: pmaxud %xmm2, %xmm0 267 ; SSE42-NEXT: pmaxud %xmm3, %xmm1 268 ; SSE42-NEXT: retq 269 ; 270 ; AVX1-LABEL: max_gt_v8i32: 271 ; AVX1: # BB#0: 272 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 273 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 274 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 275 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 276 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 277 ; AVX1-NEXT: retq 278 ; 279 ; AVX2-LABEL: max_gt_v8i32: 280 ; AVX2: # BB#0: 281 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 282 ; AVX2-NEXT: retq 283 ; 284 ; AVX512-LABEL: max_gt_v8i32: 285 ; AVX512: # BB#0: 286 ; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 287 ; AVX512-NEXT: retq 288 %1 = icmp ugt <8 x i32> %a, %b 289 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b 290 ret <8 x i32> %2 291 } 292 293 define <8 x i16> @max_gt_v8i16(<8 x i16> %a, <8 x i16> %b) { 294 ; SSE2-LABEL: max_gt_v8i16: 295 ; SSE2: # BB#0: 296 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 297 ; SSE2-NEXT: movdqa %xmm1, %xmm3 298 ; SSE2-NEXT: pxor %xmm2, %xmm3 299 ; SSE2-NEXT: pxor %xmm0, %xmm2 300 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 301 ; SSE2-NEXT: pand %xmm2, %xmm0 302 ; SSE2-NEXT: pandn %xmm1, %xmm2 303 ; SSE2-NEXT: por %xmm2, %xmm0 304 ; SSE2-NEXT: retq 305 ; 306 ; SSE41-LABEL: max_gt_v8i16: 307 ; SSE41: # BB#0: 308 ; SSE41-NEXT: pmaxuw %xmm1, %xmm0 309 ; SSE41-NEXT: retq 310 ; 311 ; SSE42-LABEL: max_gt_v8i16: 312 ; SSE42: # BB#0: 313 ; SSE42-NEXT: pmaxuw %xmm1, %xmm0 314 ; SSE42-NEXT: retq 315 ; 316 ; AVX-LABEL: max_gt_v8i16: 317 ; AVX: # BB#0: 318 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 319 ; AVX-NEXT: retq 320 %1 = icmp ugt <8 x i16> %a, %b 321 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b 322 ret <8 x i16> %2 323 } 324 325 define <16 x i16> @max_gt_v16i16(<16 x i16> %a, <16 x i16> %b) { 326 ; SSE2-LABEL: max_gt_v16i16: 327 ; SSE2: # BB#0: 328 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768] 329 ; SSE2-NEXT: movdqa %xmm3, %xmm6 330 ; SSE2-NEXT: pxor %xmm5, %xmm6 331 ; SSE2-NEXT: movdqa %xmm1, %xmm4 332 ; SSE2-NEXT: pxor %xmm5, %xmm4 333 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4 334 ; SSE2-NEXT: movdqa %xmm2, %xmm6 335 ; SSE2-NEXT: pxor %xmm5, %xmm6 336 ; SSE2-NEXT: pxor %xmm0, %xmm5 337 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5 338 ; SSE2-NEXT: pand %xmm5, %xmm0 339 ; SSE2-NEXT: pandn %xmm2, %xmm5 340 ; SSE2-NEXT: por %xmm5, %xmm0 341 ; SSE2-NEXT: pand %xmm4, %xmm1 342 ; SSE2-NEXT: pandn %xmm3, %xmm4 343 ; SSE2-NEXT: por %xmm1, %xmm4 344 ; SSE2-NEXT: movdqa %xmm4, %xmm1 345 ; SSE2-NEXT: retq 346 ; 347 ; SSE41-LABEL: max_gt_v16i16: 348 ; SSE41: # BB#0: 349 ; SSE41-NEXT: pmaxuw %xmm2, %xmm0 350 ; SSE41-NEXT: pmaxuw %xmm3, %xmm1 351 ; SSE41-NEXT: retq 352 ; 353 ; SSE42-LABEL: max_gt_v16i16: 354 ; SSE42: # BB#0: 355 ; SSE42-NEXT: pmaxuw %xmm2, %xmm0 356 ; SSE42-NEXT: pmaxuw %xmm3, %xmm1 357 ; SSE42-NEXT: retq 358 ; 359 ; AVX1-LABEL: max_gt_v16i16: 360 ; AVX1: # BB#0: 361 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 362 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 363 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 364 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 365 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 366 ; AVX1-NEXT: retq 367 ; 368 ; AVX2-LABEL: max_gt_v16i16: 369 ; AVX2: # BB#0: 370 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 371 ; AVX2-NEXT: retq 372 ; 373 ; AVX512-LABEL: max_gt_v16i16: 374 ; AVX512: # BB#0: 375 ; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 376 ; AVX512-NEXT: retq 377 %1 = icmp ugt <16 x i16> %a, %b 378 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b 379 ret <16 x i16> %2 380 } 381 382 define <16 x i8> @max_gt_v16i8(<16 x i8> %a, <16 x i8> %b) { 383 ; SSE-LABEL: max_gt_v16i8: 384 ; SSE: # BB#0: 385 ; SSE-NEXT: pmaxub %xmm1, %xmm0 386 ; SSE-NEXT: retq 387 ; 388 ; AVX-LABEL: max_gt_v16i8: 389 ; AVX: # BB#0: 390 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 391 ; AVX-NEXT: retq 392 %1 = icmp ugt <16 x i8> %a, %b 393 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b 394 ret <16 x i8> %2 395 } 396 397 define <32 x i8> @max_gt_v32i8(<32 x i8> %a, <32 x i8> %b) { 398 ; SSE-LABEL: max_gt_v32i8: 399 ; SSE: # BB#0: 400 ; SSE-NEXT: pmaxub %xmm2, %xmm0 401 ; SSE-NEXT: pmaxub %xmm3, %xmm1 402 ; SSE-NEXT: retq 403 ; 404 ; AVX1-LABEL: max_gt_v32i8: 405 ; AVX1: # BB#0: 406 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 407 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 408 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 409 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 410 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 411 ; AVX1-NEXT: retq 412 ; 413 ; AVX2-LABEL: max_gt_v32i8: 414 ; AVX2: # BB#0: 415 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 416 ; AVX2-NEXT: retq 417 ; 418 ; AVX512-LABEL: max_gt_v32i8: 419 ; AVX512: # BB#0: 420 ; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 421 ; AVX512-NEXT: retq 422 %1 = icmp ugt <32 x i8> %a, %b 423 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b 424 ret <32 x i8> %2 425 } 426 427 ; 428 ; Unsigned Maximum (GE) 429 ; 430 431 define <2 x i64> @max_ge_v2i64(<2 x i64> %a, <2 x i64> %b) { 432 ; SSE2-LABEL: max_ge_v2i64: 433 ; SSE2: # BB#0: 434 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 435 ; SSE2-NEXT: movdqa %xmm0, %xmm3 436 ; SSE2-NEXT: pxor %xmm2, %xmm3 437 ; SSE2-NEXT: pxor %xmm1, %xmm2 438 ; SSE2-NEXT: movdqa %xmm2, %xmm4 439 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 440 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 441 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 442 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 443 ; SSE2-NEXT: pand %xmm5, %xmm2 444 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 445 ; SSE2-NEXT: por %xmm2, %xmm3 446 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 447 ; SSE2-NEXT: pxor %xmm3, %xmm2 448 ; SSE2-NEXT: pandn %xmm0, %xmm3 449 ; SSE2-NEXT: pandn %xmm1, %xmm2 450 ; SSE2-NEXT: por %xmm3, %xmm2 451 ; SSE2-NEXT: movdqa %xmm2, %xmm0 452 ; SSE2-NEXT: retq 453 ; 454 ; SSE41-LABEL: max_ge_v2i64: 455 ; SSE41: # BB#0: 456 ; SSE41-NEXT: movdqa %xmm0, %xmm2 457 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 458 ; SSE41-NEXT: movdqa %xmm2, %xmm3 459 ; SSE41-NEXT: pxor %xmm0, %xmm3 460 ; SSE41-NEXT: pxor %xmm1, %xmm0 461 ; SSE41-NEXT: movdqa %xmm0, %xmm4 462 ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4 463 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 464 ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 465 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 466 ; SSE41-NEXT: pand %xmm5, %xmm0 467 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 468 ; SSE41-NEXT: por %xmm0, %xmm3 469 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0 470 ; SSE41-NEXT: pxor %xmm3, %xmm0 471 ; SSE41-NEXT: blendvpd %xmm2, %xmm1 472 ; SSE41-NEXT: movapd %xmm1, %xmm0 473 ; SSE41-NEXT: retq 474 ; 475 ; SSE42-LABEL: max_ge_v2i64: 476 ; SSE42: # BB#0: 477 ; SSE42-NEXT: movdqa %xmm0, %xmm2 478 ; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 479 ; SSE42-NEXT: pxor %xmm3, %xmm0 480 ; SSE42-NEXT: pxor %xmm1, %xmm3 481 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm3 482 ; SSE42-NEXT: pcmpeqd %xmm0, %xmm0 483 ; SSE42-NEXT: pxor %xmm3, %xmm0 484 ; SSE42-NEXT: blendvpd %xmm2, %xmm1 485 ; SSE42-NEXT: movapd %xmm1, %xmm0 486 ; SSE42-NEXT: retq 487 ; 488 ; AVX-LABEL: max_ge_v2i64: 489 ; AVX: # BB#0: 490 ; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 491 ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm3 492 ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm2 493 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 494 ; AVX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 495 ; AVX-NEXT: vpxor %xmm3, %xmm2, %xmm2 496 ; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 497 ; AVX-NEXT: retq 498 %1 = icmp uge <2 x i64> %a, %b 499 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b 500 ret <2 x i64> %2 501 } 502 503 define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) { 504 ; SSE2-LABEL: max_ge_v4i64: 505 ; SSE2: # BB#0: 506 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 507 ; SSE2-NEXT: movdqa %xmm1, %xmm4 508 ; SSE2-NEXT: pxor %xmm7, %xmm4 509 ; SSE2-NEXT: movdqa %xmm3, %xmm5 510 ; SSE2-NEXT: pxor %xmm7, %xmm5 511 ; SSE2-NEXT: movdqa %xmm5, %xmm6 512 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 513 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 514 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 515 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 516 ; SSE2-NEXT: pand %xmm8, %xmm4 517 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 518 ; SSE2-NEXT: por %xmm4, %xmm8 519 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 520 ; SSE2-NEXT: movdqa %xmm8, %xmm9 521 ; SSE2-NEXT: pxor %xmm4, %xmm9 522 ; SSE2-NEXT: movdqa %xmm0, %xmm6 523 ; SSE2-NEXT: pxor %xmm7, %xmm6 524 ; SSE2-NEXT: pxor %xmm2, %xmm7 525 ; SSE2-NEXT: movdqa %xmm7, %xmm5 526 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 527 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 528 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 529 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 530 ; SSE2-NEXT: pand %xmm10, %xmm6 531 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 532 ; SSE2-NEXT: por %xmm6, %xmm5 533 ; SSE2-NEXT: pxor %xmm5, %xmm4 534 ; SSE2-NEXT: pandn %xmm0, %xmm5 535 ; SSE2-NEXT: pandn %xmm2, %xmm4 536 ; SSE2-NEXT: por %xmm5, %xmm4 537 ; SSE2-NEXT: pandn %xmm1, %xmm8 538 ; SSE2-NEXT: pandn %xmm3, %xmm9 539 ; SSE2-NEXT: por %xmm8, %xmm9 540 ; SSE2-NEXT: movdqa %xmm4, %xmm0 541 ; SSE2-NEXT: movdqa %xmm9, %xmm1 542 ; SSE2-NEXT: retq 543 ; 544 ; SSE41-LABEL: max_ge_v4i64: 545 ; SSE41: # BB#0: 546 ; SSE41-NEXT: movdqa %xmm0, %xmm8 547 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 548 ; SSE41-NEXT: movdqa %xmm1, %xmm5 549 ; SSE41-NEXT: pxor %xmm0, %xmm5 550 ; SSE41-NEXT: movdqa %xmm3, %xmm6 551 ; SSE41-NEXT: pxor %xmm0, %xmm6 552 ; SSE41-NEXT: movdqa %xmm6, %xmm7 553 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7 554 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] 555 ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6 556 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 557 ; SSE41-NEXT: pand %xmm4, %xmm6 558 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 559 ; SSE41-NEXT: por %xmm6, %xmm5 560 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm9 561 ; SSE41-NEXT: pxor %xmm9, %xmm5 562 ; SSE41-NEXT: movdqa %xmm8, %xmm6 563 ; SSE41-NEXT: pxor %xmm0, %xmm6 564 ; SSE41-NEXT: pxor %xmm2, %xmm0 565 ; SSE41-NEXT: movdqa %xmm0, %xmm7 566 ; SSE41-NEXT: pcmpgtd %xmm6, %xmm7 567 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] 568 ; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 569 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 570 ; SSE41-NEXT: pand %xmm4, %xmm6 571 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3] 572 ; SSE41-NEXT: por %xmm6, %xmm0 573 ; SSE41-NEXT: pxor %xmm9, %xmm0 574 ; SSE41-NEXT: blendvpd %xmm8, %xmm2 575 ; SSE41-NEXT: movdqa %xmm5, %xmm0 576 ; SSE41-NEXT: blendvpd %xmm1, %xmm3 577 ; SSE41-NEXT: movapd %xmm2, %xmm0 578 ; SSE41-NEXT: movapd %xmm3, %xmm1 579 ; SSE41-NEXT: retq 580 ; 581 ; SSE42-LABEL: max_ge_v4i64: 582 ; SSE42: # BB#0: 583 ; SSE42-NEXT: movdqa %xmm0, %xmm4 584 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 585 ; SSE42-NEXT: movdqa %xmm1, %xmm6 586 ; SSE42-NEXT: pxor %xmm0, %xmm6 587 ; SSE42-NEXT: movdqa %xmm3, %xmm5 588 ; SSE42-NEXT: pxor %xmm0, %xmm5 589 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5 590 ; SSE42-NEXT: pcmpeqd %xmm6, %xmm6 591 ; SSE42-NEXT: pxor %xmm6, %xmm5 592 ; SSE42-NEXT: movdqa %xmm4, %xmm7 593 ; SSE42-NEXT: pxor %xmm0, %xmm7 594 ; SSE42-NEXT: pxor %xmm2, %xmm0 595 ; SSE42-NEXT: pcmpgtq %xmm7, %xmm0 596 ; SSE42-NEXT: pxor %xmm6, %xmm0 597 ; SSE42-NEXT: blendvpd %xmm4, %xmm2 598 ; SSE42-NEXT: movdqa %xmm5, %xmm0 599 ; SSE42-NEXT: blendvpd %xmm1, %xmm3 600 ; SSE42-NEXT: movapd %xmm2, %xmm0 601 ; SSE42-NEXT: movapd %xmm3, %xmm1 602 ; SSE42-NEXT: retq 603 ; 604 ; AVX1-LABEL: max_ge_v4i64: 605 ; AVX1: # BB#0: 606 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 607 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 608 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 609 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 610 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 611 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 612 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 613 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 614 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5 615 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 616 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 617 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 618 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 619 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 620 ; AVX1-NEXT: retq 621 ; 622 ; AVX2-LABEL: max_ge_v4i64: 623 ; AVX2: # BB#0: 624 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 625 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 626 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 627 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 628 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 629 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 630 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 631 ; AVX2-NEXT: retq 632 ; 633 ; AVX512-LABEL: max_ge_v4i64: 634 ; AVX512: # BB#0: 635 ; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 636 ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm3 637 ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm2 638 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 639 ; AVX512-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 640 ; AVX512-NEXT: vpxor %ymm3, %ymm2, %ymm2 641 ; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 642 ; AVX512-NEXT: retq 643 %1 = icmp uge <4 x i64> %a, %b 644 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b 645 ret <4 x i64> %2 646 } 647 648 define <4 x i32> @max_ge_v4i32(<4 x i32> %a, <4 x i32> %b) { 649 ; SSE2-LABEL: max_ge_v4i32: 650 ; SSE2: # BB#0: 651 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 652 ; SSE2-NEXT: movdqa %xmm0, %xmm2 653 ; SSE2-NEXT: pxor %xmm3, %xmm2 654 ; SSE2-NEXT: pxor %xmm1, %xmm3 655 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 656 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 657 ; SSE2-NEXT: pxor %xmm3, %xmm2 658 ; SSE2-NEXT: pandn %xmm0, %xmm3 659 ; SSE2-NEXT: pandn %xmm1, %xmm2 660 ; SSE2-NEXT: por %xmm3, %xmm2 661 ; SSE2-NEXT: movdqa %xmm2, %xmm0 662 ; SSE2-NEXT: retq 663 ; 664 ; SSE41-LABEL: max_ge_v4i32: 665 ; SSE41: # BB#0: 666 ; SSE41-NEXT: pmaxud %xmm1, %xmm0 667 ; SSE41-NEXT: retq 668 ; 669 ; SSE42-LABEL: max_ge_v4i32: 670 ; SSE42: # BB#0: 671 ; SSE42-NEXT: pmaxud %xmm1, %xmm0 672 ; SSE42-NEXT: retq 673 ; 674 ; AVX-LABEL: max_ge_v4i32: 675 ; AVX: # BB#0: 676 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 677 ; AVX-NEXT: retq 678 %1 = icmp uge <4 x i32> %a, %b 679 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b 680 ret <4 x i32> %2 681 } 682 683 define <8 x i32> @max_ge_v8i32(<8 x i32> %a, <8 x i32> %b) { 684 ; SSE2-LABEL: max_ge_v8i32: 685 ; SSE2: # BB#0: 686 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 687 ; SSE2-NEXT: movdqa %xmm1, %xmm4 688 ; SSE2-NEXT: pxor %xmm6, %xmm4 689 ; SSE2-NEXT: movdqa %xmm3, %xmm7 690 ; SSE2-NEXT: pxor %xmm6, %xmm7 691 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 692 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 693 ; SSE2-NEXT: movdqa %xmm7, %xmm5 694 ; SSE2-NEXT: pxor %xmm4, %xmm5 695 ; SSE2-NEXT: movdqa %xmm0, %xmm8 696 ; SSE2-NEXT: pxor %xmm6, %xmm8 697 ; SSE2-NEXT: pxor %xmm2, %xmm6 698 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 699 ; SSE2-NEXT: pxor %xmm6, %xmm4 700 ; SSE2-NEXT: pandn %xmm0, %xmm6 701 ; SSE2-NEXT: pandn %xmm2, %xmm4 702 ; SSE2-NEXT: por %xmm6, %xmm4 703 ; SSE2-NEXT: pandn %xmm1, %xmm7 704 ; SSE2-NEXT: pandn %xmm3, %xmm5 705 ; SSE2-NEXT: por %xmm7, %xmm5 706 ; SSE2-NEXT: movdqa %xmm4, %xmm0 707 ; SSE2-NEXT: movdqa %xmm5, %xmm1 708 ; SSE2-NEXT: retq 709 ; 710 ; SSE41-LABEL: max_ge_v8i32: 711 ; SSE41: # BB#0: 712 ; SSE41-NEXT: pmaxud %xmm2, %xmm0 713 ; SSE41-NEXT: pmaxud %xmm3, %xmm1 714 ; SSE41-NEXT: retq 715 ; 716 ; SSE42-LABEL: max_ge_v8i32: 717 ; SSE42: # BB#0: 718 ; SSE42-NEXT: pmaxud %xmm2, %xmm0 719 ; SSE42-NEXT: pmaxud %xmm3, %xmm1 720 ; SSE42-NEXT: retq 721 ; 722 ; AVX1-LABEL: max_ge_v8i32: 723 ; AVX1: # BB#0: 724 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 725 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 726 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2 727 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0 728 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 729 ; AVX1-NEXT: retq 730 ; 731 ; AVX2-LABEL: max_ge_v8i32: 732 ; AVX2: # BB#0: 733 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 734 ; AVX2-NEXT: retq 735 ; 736 ; AVX512-LABEL: max_ge_v8i32: 737 ; AVX512: # BB#0: 738 ; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0 739 ; AVX512-NEXT: retq 740 %1 = icmp uge <8 x i32> %a, %b 741 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b 742 ret <8 x i32> %2 743 } 744 745 define <8 x i16> @max_ge_v8i16(<8 x i16> %a, <8 x i16> %b) { 746 ; SSE2-LABEL: max_ge_v8i16: 747 ; SSE2: # BB#0: 748 ; SSE2-NEXT: movdqa %xmm1, %xmm2 749 ; SSE2-NEXT: psubusw %xmm0, %xmm2 750 ; SSE2-NEXT: pxor %xmm3, %xmm3 751 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3 752 ; SSE2-NEXT: pand %xmm3, %xmm0 753 ; SSE2-NEXT: pandn %xmm1, %xmm3 754 ; SSE2-NEXT: por %xmm3, %xmm0 755 ; SSE2-NEXT: retq 756 ; 757 ; SSE41-LABEL: max_ge_v8i16: 758 ; SSE41: # BB#0: 759 ; SSE41-NEXT: pmaxuw %xmm1, %xmm0 760 ; SSE41-NEXT: retq 761 ; 762 ; SSE42-LABEL: max_ge_v8i16: 763 ; SSE42: # BB#0: 764 ; SSE42-NEXT: pmaxuw %xmm1, %xmm0 765 ; SSE42-NEXT: retq 766 ; 767 ; AVX-LABEL: max_ge_v8i16: 768 ; AVX: # BB#0: 769 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 770 ; AVX-NEXT: retq 771 %1 = icmp uge <8 x i16> %a, %b 772 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b 773 ret <8 x i16> %2 774 } 775 776 define <16 x i16> @max_ge_v16i16(<16 x i16> %a, <16 x i16> %b) { 777 ; SSE2-LABEL: max_ge_v16i16: 778 ; SSE2: # BB#0: 779 ; SSE2-NEXT: movdqa %xmm3, %xmm4 780 ; SSE2-NEXT: psubusw %xmm1, %xmm4 781 ; SSE2-NEXT: pxor %xmm5, %xmm5 782 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm4 783 ; SSE2-NEXT: movdqa %xmm2, %xmm6 784 ; SSE2-NEXT: psubusw %xmm0, %xmm6 785 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm6 786 ; SSE2-NEXT: pand %xmm6, %xmm0 787 ; SSE2-NEXT: pandn %xmm2, %xmm6 788 ; SSE2-NEXT: por %xmm6, %xmm0 789 ; SSE2-NEXT: pand %xmm4, %xmm1 790 ; SSE2-NEXT: pandn %xmm3, %xmm4 791 ; SSE2-NEXT: por %xmm4, %xmm1 792 ; SSE2-NEXT: retq 793 ; 794 ; SSE41-LABEL: max_ge_v16i16: 795 ; SSE41: # BB#0: 796 ; SSE41-NEXT: pmaxuw %xmm2, %xmm0 797 ; SSE41-NEXT: pmaxuw %xmm3, %xmm1 798 ; SSE41-NEXT: retq 799 ; 800 ; SSE42-LABEL: max_ge_v16i16: 801 ; SSE42: # BB#0: 802 ; SSE42-NEXT: pmaxuw %xmm2, %xmm0 803 ; SSE42-NEXT: pmaxuw %xmm3, %xmm1 804 ; SSE42-NEXT: retq 805 ; 806 ; AVX1-LABEL: max_ge_v16i16: 807 ; AVX1: # BB#0: 808 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 809 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 810 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2 811 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0 812 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 813 ; AVX1-NEXT: retq 814 ; 815 ; AVX2-LABEL: max_ge_v16i16: 816 ; AVX2: # BB#0: 817 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 818 ; AVX2-NEXT: retq 819 ; 820 ; AVX512-LABEL: max_ge_v16i16: 821 ; AVX512: # BB#0: 822 ; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0 823 ; AVX512-NEXT: retq 824 %1 = icmp uge <16 x i16> %a, %b 825 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b 826 ret <16 x i16> %2 827 } 828 829 define <16 x i8> @max_ge_v16i8(<16 x i8> %a, <16 x i8> %b) { 830 ; SSE-LABEL: max_ge_v16i8: 831 ; SSE: # BB#0: 832 ; SSE-NEXT: pmaxub %xmm1, %xmm0 833 ; SSE-NEXT: retq 834 ; 835 ; AVX-LABEL: max_ge_v16i8: 836 ; AVX: # BB#0: 837 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 838 ; AVX-NEXT: retq 839 %1 = icmp uge <16 x i8> %a, %b 840 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b 841 ret <16 x i8> %2 842 } 843 844 define <32 x i8> @max_ge_v32i8(<32 x i8> %a, <32 x i8> %b) { 845 ; SSE-LABEL: max_ge_v32i8: 846 ; SSE: # BB#0: 847 ; SSE-NEXT: pmaxub %xmm2, %xmm0 848 ; SSE-NEXT: pmaxub %xmm3, %xmm1 849 ; SSE-NEXT: retq 850 ; 851 ; AVX1-LABEL: max_ge_v32i8: 852 ; AVX1: # BB#0: 853 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 854 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 855 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2 856 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0 857 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 858 ; AVX1-NEXT: retq 859 ; 860 ; AVX2-LABEL: max_ge_v32i8: 861 ; AVX2: # BB#0: 862 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 863 ; AVX2-NEXT: retq 864 ; 865 ; AVX512-LABEL: max_ge_v32i8: 866 ; AVX512: # BB#0: 867 ; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0 868 ; AVX512-NEXT: retq 869 %1 = icmp uge <32 x i8> %a, %b 870 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b 871 ret <32 x i8> %2 872 } 873 874 ; 875 ; Unsigned Minimum (LT) 876 ; 877 878 define <2 x i64> @min_lt_v2i64(<2 x i64> %a, <2 x i64> %b) { 879 ; SSE2-LABEL: min_lt_v2i64: 880 ; SSE2: # BB#0: 881 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 882 ; SSE2-NEXT: movdqa %xmm0, %xmm3 883 ; SSE2-NEXT: pxor %xmm2, %xmm3 884 ; SSE2-NEXT: pxor %xmm1, %xmm2 885 ; SSE2-NEXT: movdqa %xmm2, %xmm4 886 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 887 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 888 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 889 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 890 ; SSE2-NEXT: pand %xmm5, %xmm2 891 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 892 ; SSE2-NEXT: por %xmm2, %xmm3 893 ; SSE2-NEXT: pand %xmm3, %xmm0 894 ; SSE2-NEXT: pandn %xmm1, %xmm3 895 ; SSE2-NEXT: por %xmm3, %xmm0 896 ; SSE2-NEXT: retq 897 ; 898 ; SSE41-LABEL: min_lt_v2i64: 899 ; SSE41: # BB#0: 900 ; SSE41-NEXT: movdqa %xmm0, %xmm2 901 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 902 ; SSE41-NEXT: movdqa %xmm2, %xmm3 903 ; SSE41-NEXT: pxor %xmm0, %xmm3 904 ; SSE41-NEXT: pxor %xmm1, %xmm0 905 ; SSE41-NEXT: movdqa %xmm0, %xmm4 906 ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4 907 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 908 ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 909 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 910 ; SSE41-NEXT: pand %xmm5, %xmm3 911 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 912 ; SSE41-NEXT: por %xmm3, %xmm0 913 ; SSE41-NEXT: blendvpd %xmm2, %xmm1 914 ; SSE41-NEXT: movapd %xmm1, %xmm0 915 ; SSE41-NEXT: retq 916 ; 917 ; SSE42-LABEL: min_lt_v2i64: 918 ; SSE42: # BB#0: 919 ; SSE42-NEXT: movdqa %xmm0, %xmm2 920 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 921 ; SSE42-NEXT: movdqa %xmm2, %xmm3 922 ; SSE42-NEXT: pxor %xmm0, %xmm3 923 ; SSE42-NEXT: pxor %xmm1, %xmm0 924 ; SSE42-NEXT: pcmpgtq %xmm3, %xmm0 925 ; SSE42-NEXT: blendvpd %xmm2, %xmm1 926 ; SSE42-NEXT: movapd %xmm1, %xmm0 927 ; SSE42-NEXT: retq 928 ; 929 ; AVX-LABEL: min_lt_v2i64: 930 ; AVX: # BB#0: 931 ; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 932 ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm3 933 ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm2 934 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 935 ; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 936 ; AVX-NEXT: retq 937 %1 = icmp ult <2 x i64> %a, %b 938 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b 939 ret <2 x i64> %2 940 } 941 942 define <4 x i64> @min_lt_v4i64(<4 x i64> %a, <4 x i64> %b) { 943 ; SSE2-LABEL: min_lt_v4i64: 944 ; SSE2: # BB#0: 945 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 946 ; SSE2-NEXT: movdqa %xmm1, %xmm5 947 ; SSE2-NEXT: pxor %xmm4, %xmm5 948 ; SSE2-NEXT: movdqa %xmm3, %xmm6 949 ; SSE2-NEXT: pxor %xmm4, %xmm6 950 ; SSE2-NEXT: movdqa %xmm6, %xmm7 951 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 952 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 953 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6 954 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 955 ; SSE2-NEXT: pand %xmm8, %xmm5 956 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 957 ; SSE2-NEXT: por %xmm5, %xmm6 958 ; SSE2-NEXT: movdqa %xmm0, %xmm5 959 ; SSE2-NEXT: pxor %xmm4, %xmm5 960 ; SSE2-NEXT: pxor %xmm2, %xmm4 961 ; SSE2-NEXT: movdqa %xmm4, %xmm7 962 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 963 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2] 964 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4 965 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 966 ; SSE2-NEXT: pand %xmm8, %xmm4 967 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 968 ; SSE2-NEXT: por %xmm4, %xmm5 969 ; SSE2-NEXT: pand %xmm5, %xmm0 970 ; SSE2-NEXT: pandn %xmm2, %xmm5 971 ; SSE2-NEXT: por %xmm5, %xmm0 972 ; SSE2-NEXT: pand %xmm6, %xmm1 973 ; SSE2-NEXT: pandn %xmm3, %xmm6 974 ; SSE2-NEXT: por %xmm6, %xmm1 975 ; SSE2-NEXT: retq 976 ; 977 ; SSE41-LABEL: min_lt_v4i64: 978 ; SSE41: # BB#0: 979 ; SSE41-NEXT: movdqa %xmm0, %xmm8 980 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 981 ; SSE41-NEXT: movdqa %xmm1, %xmm5 982 ; SSE41-NEXT: pxor %xmm0, %xmm5 983 ; SSE41-NEXT: movdqa %xmm3, %xmm6 984 ; SSE41-NEXT: pxor %xmm0, %xmm6 985 ; SSE41-NEXT: movdqa %xmm6, %xmm7 986 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7 987 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] 988 ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6 989 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 990 ; SSE41-NEXT: pand %xmm4, %xmm6 991 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 992 ; SSE41-NEXT: por %xmm6, %xmm5 993 ; SSE41-NEXT: movdqa %xmm8, %xmm4 994 ; SSE41-NEXT: pxor %xmm0, %xmm4 995 ; SSE41-NEXT: pxor %xmm2, %xmm0 996 ; SSE41-NEXT: movdqa %xmm0, %xmm6 997 ; SSE41-NEXT: pcmpgtd %xmm4, %xmm6 998 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 999 ; SSE41-NEXT: pcmpeqd %xmm4, %xmm0 1000 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 1001 ; SSE41-NEXT: pand %xmm7, %xmm4 1002 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 1003 ; SSE41-NEXT: por %xmm4, %xmm0 1004 ; SSE41-NEXT: blendvpd %xmm8, %xmm2 1005 ; SSE41-NEXT: movdqa %xmm5, %xmm0 1006 ; SSE41-NEXT: blendvpd %xmm1, %xmm3 1007 ; SSE41-NEXT: movapd %xmm2, %xmm0 1008 ; SSE41-NEXT: movapd %xmm3, %xmm1 1009 ; SSE41-NEXT: retq 1010 ; 1011 ; SSE42-LABEL: min_lt_v4i64: 1012 ; SSE42: # BB#0: 1013 ; SSE42-NEXT: movdqa %xmm0, %xmm4 1014 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 1015 ; SSE42-NEXT: movdqa %xmm1, %xmm6 1016 ; SSE42-NEXT: pxor %xmm0, %xmm6 1017 ; SSE42-NEXT: movdqa %xmm3, %xmm5 1018 ; SSE42-NEXT: pxor %xmm0, %xmm5 1019 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5 1020 ; SSE42-NEXT: movdqa %xmm4, %xmm6 1021 ; SSE42-NEXT: pxor %xmm0, %xmm6 1022 ; SSE42-NEXT: pxor %xmm2, %xmm0 1023 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm0 1024 ; SSE42-NEXT: blendvpd %xmm4, %xmm2 1025 ; SSE42-NEXT: movdqa %xmm5, %xmm0 1026 ; SSE42-NEXT: blendvpd %xmm1, %xmm3 1027 ; SSE42-NEXT: movapd %xmm2, %xmm0 1028 ; SSE42-NEXT: movapd %xmm3, %xmm1 1029 ; SSE42-NEXT: retq 1030 ; 1031 ; AVX1-LABEL: min_lt_v4i64: 1032 ; AVX1: # BB#0: 1033 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1034 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 1035 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 1036 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 1037 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 1038 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 1039 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4 1040 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3 1041 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 1042 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 1043 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1044 ; AVX1-NEXT: retq 1045 ; 1046 ; AVX2-LABEL: min_lt_v4i64: 1047 ; AVX2: # BB#0: 1048 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 1049 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3 1050 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2 1051 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 1052 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1053 ; AVX2-NEXT: retq 1054 ; 1055 ; AVX512-LABEL: min_lt_v4i64: 1056 ; AVX512: # BB#0: 1057 ; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 1058 ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm3 1059 ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm2 1060 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 1061 ; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1062 ; AVX512-NEXT: retq 1063 %1 = icmp ult <4 x i64> %a, %b 1064 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b 1065 ret <4 x i64> %2 1066 } 1067 1068 define <4 x i32> @min_lt_v4i32(<4 x i32> %a, <4 x i32> %b) { 1069 ; SSE2-LABEL: min_lt_v4i32: 1070 ; SSE2: # BB#0: 1071 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 1072 ; SSE2-NEXT: movdqa %xmm0, %xmm3 1073 ; SSE2-NEXT: pxor %xmm2, %xmm3 1074 ; SSE2-NEXT: pxor %xmm1, %xmm2 1075 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2 1076 ; SSE2-NEXT: pand %xmm2, %xmm0 1077 ; SSE2-NEXT: pandn %xmm1, %xmm2 1078 ; SSE2-NEXT: por %xmm2, %xmm0 1079 ; SSE2-NEXT: retq 1080 ; 1081 ; SSE41-LABEL: min_lt_v4i32: 1082 ; SSE41: # BB#0: 1083 ; SSE41-NEXT: pminud %xmm1, %xmm0 1084 ; SSE41-NEXT: retq 1085 ; 1086 ; SSE42-LABEL: min_lt_v4i32: 1087 ; SSE42: # BB#0: 1088 ; SSE42-NEXT: pminud %xmm1, %xmm0 1089 ; SSE42-NEXT: retq 1090 ; 1091 ; AVX-LABEL: min_lt_v4i32: 1092 ; AVX: # BB#0: 1093 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 1094 ; AVX-NEXT: retq 1095 %1 = icmp ult <4 x i32> %a, %b 1096 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b 1097 ret <4 x i32> %2 1098 } 1099 1100 define <8 x i32> @min_lt_v8i32(<8 x i32> %a, <8 x i32> %b) { 1101 ; SSE2-LABEL: min_lt_v8i32: 1102 ; SSE2: # BB#0: 1103 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648] 1104 ; SSE2-NEXT: movdqa %xmm1, %xmm5 1105 ; SSE2-NEXT: pxor %xmm4, %xmm5 1106 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1107 ; SSE2-NEXT: pxor %xmm4, %xmm6 1108 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 1109 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1110 ; SSE2-NEXT: pxor %xmm4, %xmm5 1111 ; SSE2-NEXT: pxor %xmm2, %xmm4 1112 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4 1113 ; SSE2-NEXT: pand %xmm4, %xmm0 1114 ; SSE2-NEXT: pandn %xmm2, %xmm4 1115 ; SSE2-NEXT: por %xmm4, %xmm0 1116 ; SSE2-NEXT: pand %xmm6, %xmm1 1117 ; SSE2-NEXT: pandn %xmm3, %xmm6 1118 ; SSE2-NEXT: por %xmm6, %xmm1 1119 ; SSE2-NEXT: retq 1120 ; 1121 ; SSE41-LABEL: min_lt_v8i32: 1122 ; SSE41: # BB#0: 1123 ; SSE41-NEXT: pminud %xmm2, %xmm0 1124 ; SSE41-NEXT: pminud %xmm3, %xmm1 1125 ; SSE41-NEXT: retq 1126 ; 1127 ; SSE42-LABEL: min_lt_v8i32: 1128 ; SSE42: # BB#0: 1129 ; SSE42-NEXT: pminud %xmm2, %xmm0 1130 ; SSE42-NEXT: pminud %xmm3, %xmm1 1131 ; SSE42-NEXT: retq 1132 ; 1133 ; AVX1-LABEL: min_lt_v8i32: 1134 ; AVX1: # BB#0: 1135 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1136 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1137 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1138 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1139 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1140 ; AVX1-NEXT: retq 1141 ; 1142 ; AVX2-LABEL: min_lt_v8i32: 1143 ; AVX2: # BB#0: 1144 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1145 ; AVX2-NEXT: retq 1146 ; 1147 ; AVX512-LABEL: min_lt_v8i32: 1148 ; AVX512: # BB#0: 1149 ; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 1150 ; AVX512-NEXT: retq 1151 %1 = icmp ult <8 x i32> %a, %b 1152 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b 1153 ret <8 x i32> %2 1154 } 1155 1156 define <8 x i16> @min_lt_v8i16(<8 x i16> %a, <8 x i16> %b) { 1157 ; SSE2-LABEL: min_lt_v8i16: 1158 ; SSE2: # BB#0: 1159 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768] 1160 ; SSE2-NEXT: movdqa %xmm0, %xmm3 1161 ; SSE2-NEXT: pxor %xmm2, %xmm3 1162 ; SSE2-NEXT: pxor %xmm1, %xmm2 1163 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2 1164 ; SSE2-NEXT: pand %xmm2, %xmm0 1165 ; SSE2-NEXT: pandn %xmm1, %xmm2 1166 ; SSE2-NEXT: por %xmm2, %xmm0 1167 ; SSE2-NEXT: retq 1168 ; 1169 ; SSE41-LABEL: min_lt_v8i16: 1170 ; SSE41: # BB#0: 1171 ; SSE41-NEXT: pminuw %xmm1, %xmm0 1172 ; SSE41-NEXT: retq 1173 ; 1174 ; SSE42-LABEL: min_lt_v8i16: 1175 ; SSE42: # BB#0: 1176 ; SSE42-NEXT: pminuw %xmm1, %xmm0 1177 ; SSE42-NEXT: retq 1178 ; 1179 ; AVX-LABEL: min_lt_v8i16: 1180 ; AVX: # BB#0: 1181 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1182 ; AVX-NEXT: retq 1183 %1 = icmp ult <8 x i16> %a, %b 1184 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b 1185 ret <8 x i16> %2 1186 } 1187 1188 define <16 x i16> @min_lt_v16i16(<16 x i16> %a, <16 x i16> %b) { 1189 ; SSE2-LABEL: min_lt_v16i16: 1190 ; SSE2: # BB#0: 1191 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768] 1192 ; SSE2-NEXT: movdqa %xmm1, %xmm5 1193 ; SSE2-NEXT: pxor %xmm4, %xmm5 1194 ; SSE2-NEXT: movdqa %xmm3, %xmm6 1195 ; SSE2-NEXT: pxor %xmm4, %xmm6 1196 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm6 1197 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1198 ; SSE2-NEXT: pxor %xmm4, %xmm5 1199 ; SSE2-NEXT: pxor %xmm2, %xmm4 1200 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm4 1201 ; SSE2-NEXT: pand %xmm4, %xmm0 1202 ; SSE2-NEXT: pandn %xmm2, %xmm4 1203 ; SSE2-NEXT: por %xmm4, %xmm0 1204 ; SSE2-NEXT: pand %xmm6, %xmm1 1205 ; SSE2-NEXT: pandn %xmm3, %xmm6 1206 ; SSE2-NEXT: por %xmm6, %xmm1 1207 ; SSE2-NEXT: retq 1208 ; 1209 ; SSE41-LABEL: min_lt_v16i16: 1210 ; SSE41: # BB#0: 1211 ; SSE41-NEXT: pminuw %xmm2, %xmm0 1212 ; SSE41-NEXT: pminuw %xmm3, %xmm1 1213 ; SSE41-NEXT: retq 1214 ; 1215 ; SSE42-LABEL: min_lt_v16i16: 1216 ; SSE42: # BB#0: 1217 ; SSE42-NEXT: pminuw %xmm2, %xmm0 1218 ; SSE42-NEXT: pminuw %xmm3, %xmm1 1219 ; SSE42-NEXT: retq 1220 ; 1221 ; AVX1-LABEL: min_lt_v16i16: 1222 ; AVX1: # BB#0: 1223 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1224 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1225 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1226 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1227 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1228 ; AVX1-NEXT: retq 1229 ; 1230 ; AVX2-LABEL: min_lt_v16i16: 1231 ; AVX2: # BB#0: 1232 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1233 ; AVX2-NEXT: retq 1234 ; 1235 ; AVX512-LABEL: min_lt_v16i16: 1236 ; AVX512: # BB#0: 1237 ; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1238 ; AVX512-NEXT: retq 1239 %1 = icmp ult <16 x i16> %a, %b 1240 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b 1241 ret <16 x i16> %2 1242 } 1243 1244 define <16 x i8> @min_lt_v16i8(<16 x i8> %a, <16 x i8> %b) { 1245 ; SSE-LABEL: min_lt_v16i8: 1246 ; SSE: # BB#0: 1247 ; SSE-NEXT: pminub %xmm1, %xmm0 1248 ; SSE-NEXT: retq 1249 ; 1250 ; AVX-LABEL: min_lt_v16i8: 1251 ; AVX: # BB#0: 1252 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1253 ; AVX-NEXT: retq 1254 %1 = icmp ult <16 x i8> %a, %b 1255 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b 1256 ret <16 x i8> %2 1257 } 1258 1259 define <32 x i8> @min_lt_v32i8(<32 x i8> %a, <32 x i8> %b) { 1260 ; SSE-LABEL: min_lt_v32i8: 1261 ; SSE: # BB#0: 1262 ; SSE-NEXT: pminub %xmm2, %xmm0 1263 ; SSE-NEXT: pminub %xmm3, %xmm1 1264 ; SSE-NEXT: retq 1265 ; 1266 ; AVX1-LABEL: min_lt_v32i8: 1267 ; AVX1: # BB#0: 1268 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1269 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1270 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 1271 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 1272 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1273 ; AVX1-NEXT: retq 1274 ; 1275 ; AVX2-LABEL: min_lt_v32i8: 1276 ; AVX2: # BB#0: 1277 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 1278 ; AVX2-NEXT: retq 1279 ; 1280 ; AVX512-LABEL: min_lt_v32i8: 1281 ; AVX512: # BB#0: 1282 ; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 1283 ; AVX512-NEXT: retq 1284 %1 = icmp ult <32 x i8> %a, %b 1285 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b 1286 ret <32 x i8> %2 1287 } 1288 1289 ; 1290 ; Unsigned Minimum (LE) 1291 ; 1292 1293 define <2 x i64> @min_le_v2i64(<2 x i64> %a, <2 x i64> %b) { 1294 ; SSE2-LABEL: min_le_v2i64: 1295 ; SSE2: # BB#0: 1296 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648] 1297 ; SSE2-NEXT: movdqa %xmm1, %xmm3 1298 ; SSE2-NEXT: pxor %xmm2, %xmm3 1299 ; SSE2-NEXT: pxor %xmm0, %xmm2 1300 ; SSE2-NEXT: movdqa %xmm2, %xmm4 1301 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4 1302 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1303 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2 1304 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 1305 ; SSE2-NEXT: pand %xmm5, %xmm2 1306 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 1307 ; SSE2-NEXT: por %xmm2, %xmm3 1308 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 1309 ; SSE2-NEXT: pxor %xmm3, %xmm2 1310 ; SSE2-NEXT: pandn %xmm0, %xmm3 1311 ; SSE2-NEXT: pandn %xmm1, %xmm2 1312 ; SSE2-NEXT: por %xmm3, %xmm2 1313 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1314 ; SSE2-NEXT: retq 1315 ; 1316 ; SSE41-LABEL: min_le_v2i64: 1317 ; SSE41: # BB#0: 1318 ; SSE41-NEXT: movdqa %xmm0, %xmm2 1319 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 1320 ; SSE41-NEXT: movdqa %xmm1, %xmm3 1321 ; SSE41-NEXT: pxor %xmm0, %xmm3 1322 ; SSE41-NEXT: pxor %xmm2, %xmm0 1323 ; SSE41-NEXT: movdqa %xmm0, %xmm4 1324 ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4 1325 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 1326 ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0 1327 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1328 ; SSE41-NEXT: pand %xmm5, %xmm0 1329 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3] 1330 ; SSE41-NEXT: por %xmm0, %xmm3 1331 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0 1332 ; SSE41-NEXT: pxor %xmm3, %xmm0 1333 ; SSE41-NEXT: blendvpd %xmm2, %xmm1 1334 ; SSE41-NEXT: movapd %xmm1, %xmm0 1335 ; SSE41-NEXT: retq 1336 ; 1337 ; SSE42-LABEL: min_le_v2i64: 1338 ; SSE42: # BB#0: 1339 ; SSE42-NEXT: movdqa %xmm0, %xmm2 1340 ; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 1341 ; SSE42-NEXT: movdqa %xmm1, %xmm0 1342 ; SSE42-NEXT: pxor %xmm3, %xmm0 1343 ; SSE42-NEXT: pxor %xmm2, %xmm3 1344 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm3 1345 ; SSE42-NEXT: pcmpeqd %xmm0, %xmm0 1346 ; SSE42-NEXT: pxor %xmm3, %xmm0 1347 ; SSE42-NEXT: blendvpd %xmm2, %xmm1 1348 ; SSE42-NEXT: movapd %xmm1, %xmm0 1349 ; SSE42-NEXT: retq 1350 ; 1351 ; AVX-LABEL: min_le_v2i64: 1352 ; AVX: # BB#0: 1353 ; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808] 1354 ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm3 1355 ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm2 1356 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 1357 ; AVX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3 1358 ; AVX-NEXT: vpxor %xmm3, %xmm2, %xmm2 1359 ; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0 1360 ; AVX-NEXT: retq 1361 %1 = icmp ule <2 x i64> %a, %b 1362 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b 1363 ret <2 x i64> %2 1364 } 1365 1366 define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) { 1367 ; SSE2-LABEL: min_le_v4i64: 1368 ; SSE2: # BB#0: 1369 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648] 1370 ; SSE2-NEXT: movdqa %xmm3, %xmm4 1371 ; SSE2-NEXT: pxor %xmm7, %xmm4 1372 ; SSE2-NEXT: movdqa %xmm1, %xmm5 1373 ; SSE2-NEXT: pxor %xmm7, %xmm5 1374 ; SSE2-NEXT: movdqa %xmm5, %xmm6 1375 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 1376 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 1377 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5 1378 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3] 1379 ; SSE2-NEXT: pand %xmm8, %xmm4 1380 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3] 1381 ; SSE2-NEXT: por %xmm4, %xmm8 1382 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1383 ; SSE2-NEXT: movdqa %xmm8, %xmm9 1384 ; SSE2-NEXT: pxor %xmm4, %xmm9 1385 ; SSE2-NEXT: movdqa %xmm2, %xmm6 1386 ; SSE2-NEXT: pxor %xmm7, %xmm6 1387 ; SSE2-NEXT: pxor %xmm0, %xmm7 1388 ; SSE2-NEXT: movdqa %xmm7, %xmm5 1389 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5 1390 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2] 1391 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7 1392 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3] 1393 ; SSE2-NEXT: pand %xmm10, %xmm6 1394 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 1395 ; SSE2-NEXT: por %xmm6, %xmm5 1396 ; SSE2-NEXT: pxor %xmm5, %xmm4 1397 ; SSE2-NEXT: pandn %xmm0, %xmm5 1398 ; SSE2-NEXT: pandn %xmm2, %xmm4 1399 ; SSE2-NEXT: por %xmm5, %xmm4 1400 ; SSE2-NEXT: pandn %xmm1, %xmm8 1401 ; SSE2-NEXT: pandn %xmm3, %xmm9 1402 ; SSE2-NEXT: por %xmm8, %xmm9 1403 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1404 ; SSE2-NEXT: movdqa %xmm9, %xmm1 1405 ; SSE2-NEXT: retq 1406 ; 1407 ; SSE41-LABEL: min_le_v4i64: 1408 ; SSE41: # BB#0: 1409 ; SSE41-NEXT: movdqa %xmm0, %xmm8 1410 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648] 1411 ; SSE41-NEXT: movdqa %xmm3, %xmm5 1412 ; SSE41-NEXT: pxor %xmm0, %xmm5 1413 ; SSE41-NEXT: movdqa %xmm1, %xmm6 1414 ; SSE41-NEXT: pxor %xmm0, %xmm6 1415 ; SSE41-NEXT: movdqa %xmm6, %xmm7 1416 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7 1417 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] 1418 ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6 1419 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 1420 ; SSE41-NEXT: pand %xmm4, %xmm6 1421 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 1422 ; SSE41-NEXT: por %xmm6, %xmm5 1423 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm9 1424 ; SSE41-NEXT: pxor %xmm9, %xmm5 1425 ; SSE41-NEXT: movdqa %xmm2, %xmm6 1426 ; SSE41-NEXT: pxor %xmm0, %xmm6 1427 ; SSE41-NEXT: pxor %xmm8, %xmm0 1428 ; SSE41-NEXT: movdqa %xmm0, %xmm7 1429 ; SSE41-NEXT: pcmpgtd %xmm6, %xmm7 1430 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2] 1431 ; SSE41-NEXT: pcmpeqd %xmm6, %xmm0 1432 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1433 ; SSE41-NEXT: pand %xmm4, %xmm6 1434 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3] 1435 ; SSE41-NEXT: por %xmm6, %xmm0 1436 ; SSE41-NEXT: pxor %xmm9, %xmm0 1437 ; SSE41-NEXT: blendvpd %xmm8, %xmm2 1438 ; SSE41-NEXT: movdqa %xmm5, %xmm0 1439 ; SSE41-NEXT: blendvpd %xmm1, %xmm3 1440 ; SSE41-NEXT: movapd %xmm2, %xmm0 1441 ; SSE41-NEXT: movapd %xmm3, %xmm1 1442 ; SSE41-NEXT: retq 1443 ; 1444 ; SSE42-LABEL: min_le_v4i64: 1445 ; SSE42: # BB#0: 1446 ; SSE42-NEXT: movdqa %xmm0, %xmm4 1447 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808] 1448 ; SSE42-NEXT: movdqa %xmm3, %xmm6 1449 ; SSE42-NEXT: pxor %xmm0, %xmm6 1450 ; SSE42-NEXT: movdqa %xmm1, %xmm5 1451 ; SSE42-NEXT: pxor %xmm0, %xmm5 1452 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5 1453 ; SSE42-NEXT: pcmpeqd %xmm6, %xmm6 1454 ; SSE42-NEXT: pxor %xmm6, %xmm5 1455 ; SSE42-NEXT: movdqa %xmm2, %xmm7 1456 ; SSE42-NEXT: pxor %xmm0, %xmm7 1457 ; SSE42-NEXT: pxor %xmm4, %xmm0 1458 ; SSE42-NEXT: pcmpgtq %xmm7, %xmm0 1459 ; SSE42-NEXT: pxor %xmm6, %xmm0 1460 ; SSE42-NEXT: blendvpd %xmm4, %xmm2 1461 ; SSE42-NEXT: movdqa %xmm5, %xmm0 1462 ; SSE42-NEXT: blendvpd %xmm1, %xmm3 1463 ; SSE42-NEXT: movapd %xmm2, %xmm0 1464 ; SSE42-NEXT: movapd %xmm3, %xmm1 1465 ; SSE42-NEXT: retq 1466 ; 1467 ; AVX1-LABEL: min_le_v4i64: 1468 ; AVX1: # BB#0: 1469 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1470 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808] 1471 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2 1472 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 1473 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4 1474 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2 1475 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4 1476 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2 1477 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5 1478 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3 1479 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3 1480 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3 1481 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 1482 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1483 ; AVX1-NEXT: retq 1484 ; 1485 ; AVX2-LABEL: min_le_v4i64: 1486 ; AVX2: # BB#0: 1487 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 1488 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 1489 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 1490 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 1491 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 1492 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2 1493 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1494 ; AVX2-NEXT: retq 1495 ; 1496 ; AVX512-LABEL: min_le_v4i64: 1497 ; AVX512: # BB#0: 1498 ; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 1499 ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm3 1500 ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm2 1501 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2 1502 ; AVX512-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3 1503 ; AVX512-NEXT: vpxor %ymm3, %ymm2, %ymm2 1504 ; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 1505 ; AVX512-NEXT: retq 1506 %1 = icmp ule <4 x i64> %a, %b 1507 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b 1508 ret <4 x i64> %2 1509 } 1510 1511 define <4 x i32> @min_le_v4i32(<4 x i32> %a, <4 x i32> %b) { 1512 ; SSE2-LABEL: min_le_v4i32: 1513 ; SSE2: # BB#0: 1514 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648] 1515 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1516 ; SSE2-NEXT: pxor %xmm3, %xmm2 1517 ; SSE2-NEXT: pxor %xmm0, %xmm3 1518 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 1519 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 1520 ; SSE2-NEXT: pxor %xmm3, %xmm2 1521 ; SSE2-NEXT: pandn %xmm0, %xmm3 1522 ; SSE2-NEXT: pandn %xmm1, %xmm2 1523 ; SSE2-NEXT: por %xmm3, %xmm2 1524 ; SSE2-NEXT: movdqa %xmm2, %xmm0 1525 ; SSE2-NEXT: retq 1526 ; 1527 ; SSE41-LABEL: min_le_v4i32: 1528 ; SSE41: # BB#0: 1529 ; SSE41-NEXT: pminud %xmm1, %xmm0 1530 ; SSE41-NEXT: retq 1531 ; 1532 ; SSE42-LABEL: min_le_v4i32: 1533 ; SSE42: # BB#0: 1534 ; SSE42-NEXT: pminud %xmm1, %xmm0 1535 ; SSE42-NEXT: retq 1536 ; 1537 ; AVX-LABEL: min_le_v4i32: 1538 ; AVX: # BB#0: 1539 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0 1540 ; AVX-NEXT: retq 1541 %1 = icmp ule <4 x i32> %a, %b 1542 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b 1543 ret <4 x i32> %2 1544 } 1545 1546 define <8 x i32> @min_le_v8i32(<8 x i32> %a, <8 x i32> %b) { 1547 ; SSE2-LABEL: min_le_v8i32: 1548 ; SSE2: # BB#0: 1549 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648] 1550 ; SSE2-NEXT: movdqa %xmm3, %xmm4 1551 ; SSE2-NEXT: pxor %xmm6, %xmm4 1552 ; SSE2-NEXT: movdqa %xmm1, %xmm7 1553 ; SSE2-NEXT: pxor %xmm6, %xmm7 1554 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7 1555 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4 1556 ; SSE2-NEXT: movdqa %xmm7, %xmm5 1557 ; SSE2-NEXT: pxor %xmm4, %xmm5 1558 ; SSE2-NEXT: movdqa %xmm2, %xmm8 1559 ; SSE2-NEXT: pxor %xmm6, %xmm8 1560 ; SSE2-NEXT: pxor %xmm0, %xmm6 1561 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6 1562 ; SSE2-NEXT: pxor %xmm6, %xmm4 1563 ; SSE2-NEXT: pandn %xmm0, %xmm6 1564 ; SSE2-NEXT: pandn %xmm2, %xmm4 1565 ; SSE2-NEXT: por %xmm6, %xmm4 1566 ; SSE2-NEXT: pandn %xmm1, %xmm7 1567 ; SSE2-NEXT: pandn %xmm3, %xmm5 1568 ; SSE2-NEXT: por %xmm7, %xmm5 1569 ; SSE2-NEXT: movdqa %xmm4, %xmm0 1570 ; SSE2-NEXT: movdqa %xmm5, %xmm1 1571 ; SSE2-NEXT: retq 1572 ; 1573 ; SSE41-LABEL: min_le_v8i32: 1574 ; SSE41: # BB#0: 1575 ; SSE41-NEXT: pminud %xmm2, %xmm0 1576 ; SSE41-NEXT: pminud %xmm3, %xmm1 1577 ; SSE41-NEXT: retq 1578 ; 1579 ; SSE42-LABEL: min_le_v8i32: 1580 ; SSE42: # BB#0: 1581 ; SSE42-NEXT: pminud %xmm2, %xmm0 1582 ; SSE42-NEXT: pminud %xmm3, %xmm1 1583 ; SSE42-NEXT: retq 1584 ; 1585 ; AVX1-LABEL: min_le_v8i32: 1586 ; AVX1: # BB#0: 1587 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1588 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1589 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2 1590 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0 1591 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1592 ; AVX1-NEXT: retq 1593 ; 1594 ; AVX2-LABEL: min_le_v8i32: 1595 ; AVX2: # BB#0: 1596 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0 1597 ; AVX2-NEXT: retq 1598 ; 1599 ; AVX512-LABEL: min_le_v8i32: 1600 ; AVX512: # BB#0: 1601 ; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0 1602 ; AVX512-NEXT: retq 1603 %1 = icmp ule <8 x i32> %a, %b 1604 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b 1605 ret <8 x i32> %2 1606 } 1607 1608 define <8 x i16> @min_le_v8i16(<8 x i16> %a, <8 x i16> %b) { 1609 ; SSE2-LABEL: min_le_v8i16: 1610 ; SSE2: # BB#0: 1611 ; SSE2-NEXT: movdqa %xmm0, %xmm2 1612 ; SSE2-NEXT: psubusw %xmm1, %xmm2 1613 ; SSE2-NEXT: pxor %xmm3, %xmm3 1614 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3 1615 ; SSE2-NEXT: pand %xmm3, %xmm0 1616 ; SSE2-NEXT: pandn %xmm1, %xmm3 1617 ; SSE2-NEXT: por %xmm3, %xmm0 1618 ; SSE2-NEXT: retq 1619 ; 1620 ; SSE41-LABEL: min_le_v8i16: 1621 ; SSE41: # BB#0: 1622 ; SSE41-NEXT: pminuw %xmm1, %xmm0 1623 ; SSE41-NEXT: retq 1624 ; 1625 ; SSE42-LABEL: min_le_v8i16: 1626 ; SSE42: # BB#0: 1627 ; SSE42-NEXT: pminuw %xmm1, %xmm0 1628 ; SSE42-NEXT: retq 1629 ; 1630 ; AVX-LABEL: min_le_v8i16: 1631 ; AVX: # BB#0: 1632 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1633 ; AVX-NEXT: retq 1634 %1 = icmp ule <8 x i16> %a, %b 1635 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b 1636 ret <8 x i16> %2 1637 } 1638 1639 define <16 x i16> @min_le_v16i16(<16 x i16> %a, <16 x i16> %b) { 1640 ; SSE2-LABEL: min_le_v16i16: 1641 ; SSE2: # BB#0: 1642 ; SSE2-NEXT: movdqa %xmm1, %xmm4 1643 ; SSE2-NEXT: psubusw %xmm3, %xmm4 1644 ; SSE2-NEXT: pxor %xmm6, %xmm6 1645 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4 1646 ; SSE2-NEXT: movdqa %xmm0, %xmm5 1647 ; SSE2-NEXT: psubusw %xmm2, %xmm5 1648 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5 1649 ; SSE2-NEXT: pand %xmm5, %xmm0 1650 ; SSE2-NEXT: pandn %xmm2, %xmm5 1651 ; SSE2-NEXT: por %xmm0, %xmm5 1652 ; SSE2-NEXT: pand %xmm4, %xmm1 1653 ; SSE2-NEXT: pandn %xmm3, %xmm4 1654 ; SSE2-NEXT: por %xmm1, %xmm4 1655 ; SSE2-NEXT: movdqa %xmm5, %xmm0 1656 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1657 ; SSE2-NEXT: retq 1658 ; 1659 ; SSE41-LABEL: min_le_v16i16: 1660 ; SSE41: # BB#0: 1661 ; SSE41-NEXT: pminuw %xmm2, %xmm0 1662 ; SSE41-NEXT: pminuw %xmm3, %xmm1 1663 ; SSE41-NEXT: retq 1664 ; 1665 ; SSE42-LABEL: min_le_v16i16: 1666 ; SSE42: # BB#0: 1667 ; SSE42-NEXT: pminuw %xmm2, %xmm0 1668 ; SSE42-NEXT: pminuw %xmm3, %xmm1 1669 ; SSE42-NEXT: retq 1670 ; 1671 ; AVX1-LABEL: min_le_v16i16: 1672 ; AVX1: # BB#0: 1673 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1674 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1675 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2 1676 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0 1677 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1678 ; AVX1-NEXT: retq 1679 ; 1680 ; AVX2-LABEL: min_le_v16i16: 1681 ; AVX2: # BB#0: 1682 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1683 ; AVX2-NEXT: retq 1684 ; 1685 ; AVX512-LABEL: min_le_v16i16: 1686 ; AVX512: # BB#0: 1687 ; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0 1688 ; AVX512-NEXT: retq 1689 %1 = icmp ule <16 x i16> %a, %b 1690 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b 1691 ret <16 x i16> %2 1692 } 1693 1694 define <16 x i8> @min_le_v16i8(<16 x i8> %a, <16 x i8> %b) { 1695 ; SSE-LABEL: min_le_v16i8: 1696 ; SSE: # BB#0: 1697 ; SSE-NEXT: pminub %xmm1, %xmm0 1698 ; SSE-NEXT: retq 1699 ; 1700 ; AVX-LABEL: min_le_v16i8: 1701 ; AVX: # BB#0: 1702 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0 1703 ; AVX-NEXT: retq 1704 %1 = icmp ule <16 x i8> %a, %b 1705 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b 1706 ret <16 x i8> %2 1707 } 1708 1709 define <32 x i8> @min_le_v32i8(<32 x i8> %a, <32 x i8> %b) { 1710 ; SSE-LABEL: min_le_v32i8: 1711 ; SSE: # BB#0: 1712 ; SSE-NEXT: pminub %xmm2, %xmm0 1713 ; SSE-NEXT: pminub %xmm3, %xmm1 1714 ; SSE-NEXT: retq 1715 ; 1716 ; AVX1-LABEL: min_le_v32i8: 1717 ; AVX1: # BB#0: 1718 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1719 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1720 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2 1721 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 1722 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1723 ; AVX1-NEXT: retq 1724 ; 1725 ; AVX2-LABEL: min_le_v32i8: 1726 ; AVX2: # BB#0: 1727 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0 1728 ; AVX2-NEXT: retq 1729 ; 1730 ; AVX512-LABEL: min_le_v32i8: 1731 ; AVX512: # BB#0: 1732 ; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0 1733 ; AVX512-NEXT: retq 1734 %1 = icmp ule <32 x i8> %a, %b 1735 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b 1736 ret <32 x i8> %2 1737 } 1738 1739 ; 1740 ; Constant Folding 1741 ; 1742 1743 define <2 x i64> @max_gt_v2i64c() { 1744 ; SSE-LABEL: max_gt_v2i64c: 1745 ; SSE: # BB#0: 1746 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7] 1747 ; SSE-NEXT: retq 1748 ; 1749 ; AVX-LABEL: max_gt_v2i64c: 1750 ; AVX: # BB#0: 1751 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7] 1752 ; AVX-NEXT: retq 1753 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0 1754 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0 1755 %3 = icmp ugt <2 x i64> %1, %2 1756 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1757 ret <2 x i64> %4 1758 } 1759 1760 define <4 x i64> @max_gt_v4i64c() { 1761 ; SSE-LABEL: max_gt_v4i64c: 1762 ; SSE: # BB#0: 1763 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7] 1764 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0 1765 ; SSE-NEXT: retq 1766 ; 1767 ; AVX-LABEL: max_gt_v4i64c: 1768 ; AVX: # BB#0: 1769 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7] 1770 ; AVX-NEXT: retq 1771 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0 1772 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0 1773 %3 = icmp ugt <4 x i64> %1, %2 1774 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2 1775 ret <4 x i64> %4 1776 } 1777 1778 define <4 x i32> @max_gt_v4i32c() { 1779 ; SSE-LABEL: max_gt_v4i32c: 1780 ; SSE: # BB#0: 1781 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7] 1782 ; SSE-NEXT: retq 1783 ; 1784 ; AVX-LABEL: max_gt_v4i32c: 1785 ; AVX: # BB#0: 1786 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7] 1787 ; AVX-NEXT: retq 1788 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0 1789 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0 1790 %3 = icmp ugt <4 x i32> %1, %2 1791 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1792 ret <4 x i32> %4 1793 } 1794 1795 define <8 x i32> @max_gt_v8i32c() { 1796 ; SSE-LABEL: max_gt_v8i32c: 1797 ; SSE: # BB#0: 1798 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295] 1799 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7] 1800 ; SSE-NEXT: retq 1801 ; 1802 ; AVX-LABEL: max_gt_v8i32c: 1803 ; AVX: # BB#0: 1804 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7] 1805 ; AVX-NEXT: retq 1806 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0 1807 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0 1808 %3 = icmp ugt <8 x i32> %1, %2 1809 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2 1810 ret <8 x i32> %4 1811 } 1812 1813 define <8 x i16> @max_gt_v8i16c() { 1814 ; SSE-LABEL: max_gt_v8i16c: 1815 ; SSE: # BB#0: 1816 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7] 1817 ; SSE-NEXT: retq 1818 ; 1819 ; AVX-LABEL: max_gt_v8i16c: 1820 ; AVX: # BB#0: 1821 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7] 1822 ; AVX-NEXT: retq 1823 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0 1824 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0 1825 %3 = icmp ugt <8 x i16> %1, %2 1826 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1827 ret <8 x i16> %4 1828 } 1829 1830 define <16 x i16> @max_gt_v16i16c() { 1831 ; SSE-LABEL: max_gt_v16i16c: 1832 ; SSE: # BB#0: 1833 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0] 1834 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8] 1835 ; SSE-NEXT: retq 1836 ; 1837 ; AVX-LABEL: max_gt_v16i16c: 1838 ; AVX: # BB#0: 1839 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8] 1840 ; AVX-NEXT: retq 1841 %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0 1842 %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0 1843 %3 = icmp ugt <16 x i16> %1, %2 1844 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2 1845 ret <16 x i16> %4 1846 } 1847 1848 define <16 x i8> @max_gt_v16i8c() { 1849 ; SSE-LABEL: max_gt_v16i8c: 1850 ; SSE: # BB#0: 1851 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8] 1852 ; SSE-NEXT: retq 1853 ; 1854 ; AVX-LABEL: max_gt_v16i8c: 1855 ; AVX: # BB#0: 1856 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8] 1857 ; AVX-NEXT: retq 1858 %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0 1859 %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0 1860 %3 = icmp ugt <16 x i8> %1, %2 1861 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1862 ret <16 x i8> %4 1863 } 1864 1865 define <2 x i64> @max_ge_v2i64c() { 1866 ; SSE-LABEL: max_ge_v2i64c: 1867 ; SSE: # BB#0: 1868 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7] 1869 ; SSE-NEXT: retq 1870 ; 1871 ; AVX-LABEL: max_ge_v2i64c: 1872 ; AVX: # BB#0: 1873 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7] 1874 ; AVX-NEXT: retq 1875 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0 1876 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0 1877 %3 = icmp uge <2 x i64> %1, %2 1878 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 1879 ret <2 x i64> %4 1880 } 1881 1882 define <4 x i64> @max_ge_v4i64c() { 1883 ; SSE-LABEL: max_ge_v4i64c: 1884 ; SSE: # BB#0: 1885 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7] 1886 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0 1887 ; SSE-NEXT: retq 1888 ; 1889 ; AVX-LABEL: max_ge_v4i64c: 1890 ; AVX: # BB#0: 1891 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7] 1892 ; AVX-NEXT: retq 1893 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0 1894 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0 1895 %3 = icmp uge <4 x i64> %1, %2 1896 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2 1897 ret <4 x i64> %4 1898 } 1899 1900 define <4 x i32> @max_ge_v4i32c() { 1901 ; SSE-LABEL: max_ge_v4i32c: 1902 ; SSE: # BB#0: 1903 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7] 1904 ; SSE-NEXT: retq 1905 ; 1906 ; AVX-LABEL: max_ge_v4i32c: 1907 ; AVX: # BB#0: 1908 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7] 1909 ; AVX-NEXT: retq 1910 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0 1911 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0 1912 %3 = icmp uge <4 x i32> %1, %2 1913 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 1914 ret <4 x i32> %4 1915 } 1916 1917 define <8 x i32> @max_ge_v8i32c() { 1918 ; SSE-LABEL: max_ge_v8i32c: 1919 ; SSE: # BB#0: 1920 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295] 1921 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7] 1922 ; SSE-NEXT: retq 1923 ; 1924 ; AVX-LABEL: max_ge_v8i32c: 1925 ; AVX: # BB#0: 1926 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7] 1927 ; AVX-NEXT: retq 1928 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0 1929 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0 1930 %3 = icmp uge <8 x i32> %1, %2 1931 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2 1932 ret <8 x i32> %4 1933 } 1934 1935 define <8 x i16> @max_ge_v8i16c() { 1936 ; SSE-LABEL: max_ge_v8i16c: 1937 ; SSE: # BB#0: 1938 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7] 1939 ; SSE-NEXT: retq 1940 ; 1941 ; AVX-LABEL: max_ge_v8i16c: 1942 ; AVX: # BB#0: 1943 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7] 1944 ; AVX-NEXT: retq 1945 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0 1946 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0 1947 %3 = icmp uge <8 x i16> %1, %2 1948 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 1949 ret <8 x i16> %4 1950 } 1951 1952 define <16 x i16> @max_ge_v16i16c() { 1953 ; SSE-LABEL: max_ge_v16i16c: 1954 ; SSE: # BB#0: 1955 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0] 1956 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8] 1957 ; SSE-NEXT: retq 1958 ; 1959 ; AVX-LABEL: max_ge_v16i16c: 1960 ; AVX: # BB#0: 1961 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8] 1962 ; AVX-NEXT: retq 1963 %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0 1964 %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0 1965 %3 = icmp uge <16 x i16> %1, %2 1966 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2 1967 ret <16 x i16> %4 1968 } 1969 1970 define <16 x i8> @max_ge_v16i8c() { 1971 ; SSE-LABEL: max_ge_v16i8c: 1972 ; SSE: # BB#0: 1973 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8] 1974 ; SSE-NEXT: retq 1975 ; 1976 ; AVX-LABEL: max_ge_v16i8c: 1977 ; AVX: # BB#0: 1978 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8] 1979 ; AVX-NEXT: retq 1980 %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0 1981 %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0 1982 %3 = icmp uge <16 x i8> %1, %2 1983 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 1984 ret <16 x i8> %4 1985 } 1986 1987 define <2 x i64> @min_lt_v2i64c() { 1988 ; SSE-LABEL: min_lt_v2i64c: 1989 ; SSE: # BB#0: 1990 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1] 1991 ; SSE-NEXT: retq 1992 ; 1993 ; AVX-LABEL: min_lt_v2i64c: 1994 ; AVX: # BB#0: 1995 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1] 1996 ; AVX-NEXT: retq 1997 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0 1998 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0 1999 %3 = icmp ult <2 x i64> %1, %2 2000 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 2001 ret <2 x i64> %4 2002 } 2003 2004 define <4 x i64> @min_lt_v4i64c() { 2005 ; SSE-LABEL: min_lt_v4i64c: 2006 ; SSE: # BB#0: 2007 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609] 2008 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1] 2009 ; SSE-NEXT: retq 2010 ; 2011 ; AVX-LABEL: min_lt_v4i64c: 2012 ; AVX: # BB#0: 2013 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1] 2014 ; AVX-NEXT: retq 2015 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0 2016 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0 2017 %3 = icmp ult <4 x i64> %1, %2 2018 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2 2019 ret <4 x i64> %4 2020 } 2021 2022 define <4 x i32> @min_lt_v4i32c() { 2023 ; SSE-LABEL: min_lt_v4i32c: 2024 ; SSE: # BB#0: 2025 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1] 2026 ; SSE-NEXT: retq 2027 ; 2028 ; AVX-LABEL: min_lt_v4i32c: 2029 ; AVX: # BB#0: 2030 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1] 2031 ; AVX-NEXT: retq 2032 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0 2033 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0 2034 %3 = icmp ult <4 x i32> %1, %2 2035 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 2036 ret <4 x i32> %4 2037 } 2038 2039 define <8 x i32> @min_lt_v8i32c() { 2040 ; SSE-LABEL: min_lt_v8i32c: 2041 ; SSE: # BB#0: 2042 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289] 2043 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1] 2044 ; SSE-NEXT: retq 2045 ; 2046 ; AVX-LABEL: min_lt_v8i32c: 2047 ; AVX: # BB#0: 2048 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1] 2049 ; AVX-NEXT: retq 2050 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0 2051 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0 2052 %3 = icmp ult <8 x i32> %1, %2 2053 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2 2054 ret <8 x i32> %4 2055 } 2056 2057 define <8 x i16> @min_lt_v8i16c() { 2058 ; SSE-LABEL: min_lt_v8i16c: 2059 ; SSE: # BB#0: 2060 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1] 2061 ; SSE-NEXT: retq 2062 ; 2063 ; AVX-LABEL: min_lt_v8i16c: 2064 ; AVX: # BB#0: 2065 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1] 2066 ; AVX-NEXT: retq 2067 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0 2068 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 1, i32 0 2069 %3 = icmp ult <8 x i16> %1, %2 2070 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 2071 ret <8 x i16> %4 2072 } 2073 2074 define <16 x i16> @min_lt_v16i16c() { 2075 ; SSE-LABEL: min_lt_v16i16c: 2076 ; SSE: # BB#0: 2077 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,65530,65531,65532,65531,65530,65529,0] 2078 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0] 2079 ; SSE-NEXT: retq 2080 ; 2081 ; AVX-LABEL: min_lt_v16i16c: 2082 ; AVX: # BB#0: 2083 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [1,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0] 2084 ; AVX-NEXT: retq 2085 %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0 2086 %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 1, i32 0 2087 %3 = icmp ult <16 x i16> %1, %2 2088 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2 2089 ret <16 x i16> %4 2090 } 2091 2092 define <16 x i8> @min_lt_v16i8c() { 2093 ; SSE-LABEL: min_lt_v16i8c: 2094 ; SSE: # BB#0: 2095 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0] 2096 ; SSE-NEXT: retq 2097 ; 2098 ; AVX-LABEL: min_lt_v16i8c: 2099 ; AVX: # BB#0: 2100 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0] 2101 ; AVX-NEXT: retq 2102 %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0 2103 %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 1, i32 0 2104 %3 = icmp ult <16 x i8> %1, %2 2105 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 2106 ret <16 x i8> %4 2107 } 2108 2109 define <2 x i64> @min_le_v2i64c() { 2110 ; SSE-LABEL: min_le_v2i64c: 2111 ; SSE: # BB#0: 2112 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1] 2113 ; SSE-NEXT: retq 2114 ; 2115 ; AVX-LABEL: min_le_v2i64c: 2116 ; AVX: # BB#0: 2117 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1] 2118 ; AVX-NEXT: retq 2119 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0 2120 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0 2121 %3 = icmp ule <2 x i64> %1, %2 2122 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2 2123 ret <2 x i64> %4 2124 } 2125 2126 define <4 x i64> @min_le_v4i64c() { 2127 ; SSE-LABEL: min_le_v4i64c: 2128 ; SSE: # BB#0: 2129 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609] 2130 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1] 2131 ; SSE-NEXT: retq 2132 ; 2133 ; AVX-LABEL: min_le_v4i64c: 2134 ; AVX: # BB#0: 2135 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1] 2136 ; AVX-NEXT: retq 2137 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0 2138 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0 2139 %3 = icmp ule <4 x i64> %1, %2 2140 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2 2141 ret <4 x i64> %4 2142 } 2143 2144 define <4 x i32> @min_le_v4i32c() { 2145 ; SSE-LABEL: min_le_v4i32c: 2146 ; SSE: # BB#0: 2147 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1] 2148 ; SSE-NEXT: retq 2149 ; 2150 ; AVX-LABEL: min_le_v4i32c: 2151 ; AVX: # BB#0: 2152 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1] 2153 ; AVX-NEXT: retq 2154 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0 2155 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0 2156 %3 = icmp ule <4 x i32> %1, %2 2157 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2 2158 ret <4 x i32> %4 2159 } 2160 2161 define <8 x i32> @min_le_v8i32c() { 2162 ; SSE-LABEL: min_le_v8i32c: 2163 ; SSE: # BB#0: 2164 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289] 2165 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1] 2166 ; SSE-NEXT: retq 2167 ; 2168 ; AVX-LABEL: min_le_v8i32c: 2169 ; AVX: # BB#0: 2170 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1] 2171 ; AVX-NEXT: retq 2172 %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0 2173 %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0 2174 %3 = icmp ule <8 x i32> %1, %2 2175 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2 2176 ret <8 x i32> %4 2177 } 2178 2179 define <8 x i16> @min_le_v8i16c() { 2180 ; SSE-LABEL: min_le_v8i16c: 2181 ; SSE: # BB#0: 2182 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1] 2183 ; SSE-NEXT: retq 2184 ; 2185 ; AVX-LABEL: min_le_v8i16c: 2186 ; AVX: # BB#0: 2187 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1] 2188 ; AVX-NEXT: retq 2189 %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0 2190 %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0 2191 %3 = icmp ule <8 x i16> %1, %2 2192 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2 2193 ret <8 x i16> %4 2194 } 2195 2196 define <16 x i16> @min_le_v16i16c() { 2197 ; SSE-LABEL: min_le_v16i16c: 2198 ; SSE: # BB#0: 2199 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65530,65531,65532,65531,65530,65529,0] 2200 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0] 2201 ; SSE-NEXT: retq 2202 ; 2203 ; AVX-LABEL: min_le_v16i16c: 2204 ; AVX: # BB#0: 2205 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65529,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0] 2206 ; AVX-NEXT: retq 2207 %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0 2208 %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0 2209 %3 = icmp ule <16 x i16> %1, %2 2210 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2 2211 ret <16 x i16> %4 2212 } 2213 2214 define <16 x i8> @min_le_v16i8c() { 2215 ; SSE-LABEL: min_le_v16i8c: 2216 ; SSE: # BB#0: 2217 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0] 2218 ; SSE-NEXT: retq 2219 ; 2220 ; AVX-LABEL: min_le_v16i8c: 2221 ; AVX: # BB#0: 2222 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0] 2223 ; AVX-NEXT: retq 2224 %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0 2225 %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0 2226 %3 = icmp ule <16 x i8> %1, %2 2227 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2 2228 ret <16 x i8> %4 2229 } 2230