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=SSE --check-prefix=SSE2 3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3 4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41 5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-SLOW 7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST 8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F 9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512VL 10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BW 11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BWVL 12 13 ; 14 ; Signed saturation truncation to vXi32 15 ; 16 17 define <4 x i32> @trunc_ssat_v4i64_v4i32(<4 x i64> %a0) { 18 ; SSE2-LABEL: trunc_ssat_v4i64_v4i32: 19 ; SSE2: # %bb.0: 20 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483647,2147483647] 21 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 22 ; SSE2-NEXT: movdqa %xmm0, %xmm3 23 ; SSE2-NEXT: pxor %xmm2, %xmm3 24 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [4294967295,4294967295] 25 ; SSE2-NEXT: movdqa %xmm5, %xmm6 26 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 27 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 28 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm3 29 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3] 30 ; SSE2-NEXT: pand %xmm7, %xmm4 31 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 32 ; SSE2-NEXT: por %xmm4, %xmm3 33 ; SSE2-NEXT: pand %xmm3, %xmm0 34 ; SSE2-NEXT: pandn %xmm8, %xmm3 35 ; SSE2-NEXT: por %xmm0, %xmm3 36 ; SSE2-NEXT: movdqa %xmm1, %xmm0 37 ; SSE2-NEXT: pxor %xmm2, %xmm0 38 ; SSE2-NEXT: movdqa %xmm5, %xmm4 39 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4 40 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 41 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm0 42 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 43 ; SSE2-NEXT: pand %xmm6, %xmm0 44 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 45 ; SSE2-NEXT: por %xmm0, %xmm4 46 ; SSE2-NEXT: pand %xmm4, %xmm1 47 ; SSE2-NEXT: pandn %xmm8, %xmm4 48 ; SSE2-NEXT: por %xmm1, %xmm4 49 ; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968] 50 ; SSE2-NEXT: movdqa %xmm4, %xmm0 51 ; SSE2-NEXT: pxor %xmm2, %xmm0 52 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [18446744069414584320,18446744069414584320] 53 ; SSE2-NEXT: movdqa %xmm0, %xmm6 54 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6 55 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 56 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm0 57 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 58 ; SSE2-NEXT: pand %xmm7, %xmm0 59 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 60 ; SSE2-NEXT: por %xmm0, %xmm6 61 ; SSE2-NEXT: pand %xmm6, %xmm4 62 ; SSE2-NEXT: pandn %xmm1, %xmm6 63 ; SSE2-NEXT: por %xmm4, %xmm6 64 ; SSE2-NEXT: pxor %xmm3, %xmm2 65 ; SSE2-NEXT: movdqa %xmm2, %xmm0 66 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm0 67 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2] 68 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm2 69 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 70 ; SSE2-NEXT: pand %xmm4, %xmm2 71 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 72 ; SSE2-NEXT: por %xmm2, %xmm0 73 ; SSE2-NEXT: pand %xmm0, %xmm3 74 ; SSE2-NEXT: pandn %xmm1, %xmm0 75 ; SSE2-NEXT: por %xmm3, %xmm0 76 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm6[0,2] 77 ; SSE2-NEXT: retq 78 ; 79 ; SSSE3-LABEL: trunc_ssat_v4i64_v4i32: 80 ; SSSE3: # %bb.0: 81 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [2147483647,2147483647] 82 ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] 83 ; SSSE3-NEXT: movdqa %xmm0, %xmm3 84 ; SSSE3-NEXT: pxor %xmm2, %xmm3 85 ; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [4294967295,4294967295] 86 ; SSSE3-NEXT: movdqa %xmm5, %xmm6 87 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm6 88 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 89 ; SSSE3-NEXT: pcmpeqd %xmm5, %xmm3 90 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3] 91 ; SSSE3-NEXT: pand %xmm7, %xmm4 92 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 93 ; SSSE3-NEXT: por %xmm4, %xmm3 94 ; SSSE3-NEXT: pand %xmm3, %xmm0 95 ; SSSE3-NEXT: pandn %xmm8, %xmm3 96 ; SSSE3-NEXT: por %xmm0, %xmm3 97 ; SSSE3-NEXT: movdqa %xmm1, %xmm0 98 ; SSSE3-NEXT: pxor %xmm2, %xmm0 99 ; SSSE3-NEXT: movdqa %xmm5, %xmm4 100 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm4 101 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 102 ; SSSE3-NEXT: pcmpeqd %xmm5, %xmm0 103 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 104 ; SSSE3-NEXT: pand %xmm6, %xmm0 105 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 106 ; SSSE3-NEXT: por %xmm0, %xmm4 107 ; SSSE3-NEXT: pand %xmm4, %xmm1 108 ; SSSE3-NEXT: pandn %xmm8, %xmm4 109 ; SSSE3-NEXT: por %xmm1, %xmm4 110 ; SSSE3-NEXT: movdqa {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968] 111 ; SSSE3-NEXT: movdqa %xmm4, %xmm0 112 ; SSSE3-NEXT: pxor %xmm2, %xmm0 113 ; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [18446744069414584320,18446744069414584320] 114 ; SSSE3-NEXT: movdqa %xmm0, %xmm6 115 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm6 116 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 117 ; SSSE3-NEXT: pcmpeqd %xmm5, %xmm0 118 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 119 ; SSSE3-NEXT: pand %xmm7, %xmm0 120 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 121 ; SSSE3-NEXT: por %xmm0, %xmm6 122 ; SSSE3-NEXT: pand %xmm6, %xmm4 123 ; SSSE3-NEXT: pandn %xmm1, %xmm6 124 ; SSSE3-NEXT: por %xmm4, %xmm6 125 ; SSSE3-NEXT: pxor %xmm3, %xmm2 126 ; SSSE3-NEXT: movdqa %xmm2, %xmm0 127 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm0 128 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2] 129 ; SSSE3-NEXT: pcmpeqd %xmm5, %xmm2 130 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 131 ; SSSE3-NEXT: pand %xmm4, %xmm2 132 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 133 ; SSSE3-NEXT: por %xmm2, %xmm0 134 ; SSSE3-NEXT: pand %xmm0, %xmm3 135 ; SSSE3-NEXT: pandn %xmm1, %xmm0 136 ; SSSE3-NEXT: por %xmm3, %xmm0 137 ; SSSE3-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm6[0,2] 138 ; SSSE3-NEXT: retq 139 ; 140 ; SSE41-LABEL: trunc_ssat_v4i64_v4i32: 141 ; SSE41: # %bb.0: 142 ; SSE41-NEXT: movdqa %xmm0, %xmm2 143 ; SSE41-NEXT: movapd {{.*#+}} xmm4 = [2147483647,2147483647] 144 ; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,0,2147483648,0] 145 ; SSE41-NEXT: pxor %xmm3, %xmm0 146 ; SSE41-NEXT: movdqa {{.*#+}} xmm8 = [4294967295,4294967295] 147 ; SSE41-NEXT: movdqa %xmm8, %xmm5 148 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5 149 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2] 150 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 151 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 152 ; SSE41-NEXT: pand %xmm7, %xmm6 153 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3] 154 ; SSE41-NEXT: por %xmm6, %xmm0 155 ; SSE41-NEXT: movapd %xmm4, %xmm5 156 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm5 157 ; SSE41-NEXT: movdqa %xmm1, %xmm0 158 ; SSE41-NEXT: pxor %xmm3, %xmm0 159 ; SSE41-NEXT: movdqa %xmm8, %xmm2 160 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 161 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2] 162 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 163 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 164 ; SSE41-NEXT: pand %xmm6, %xmm7 165 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 166 ; SSE41-NEXT: por %xmm7, %xmm0 167 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm4 168 ; SSE41-NEXT: movapd {{.*#+}} xmm1 = [18446744071562067968,18446744071562067968] 169 ; SSE41-NEXT: movapd %xmm4, %xmm0 170 ; SSE41-NEXT: xorpd %xmm3, %xmm0 171 ; SSE41-NEXT: movdqa {{.*#+}} xmm8 = [18446744069414584320,18446744069414584320] 172 ; SSE41-NEXT: movapd %xmm0, %xmm6 173 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm6 174 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 175 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 176 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3] 177 ; SSE41-NEXT: pand %xmm7, %xmm2 178 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 179 ; SSE41-NEXT: por %xmm2, %xmm0 180 ; SSE41-NEXT: movapd %xmm1, %xmm2 181 ; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm2 182 ; SSE41-NEXT: xorpd %xmm5, %xmm3 183 ; SSE41-NEXT: movapd %xmm3, %xmm0 184 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm0 185 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2] 186 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm3 187 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 188 ; SSE41-NEXT: pand %xmm4, %xmm3 189 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 190 ; SSE41-NEXT: por %xmm3, %xmm0 191 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm1 192 ; SSE41-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2] 193 ; SSE41-NEXT: movaps %xmm1, %xmm0 194 ; SSE41-NEXT: retq 195 ; 196 ; AVX1-LABEL: trunc_ssat_v4i64_v4i32: 197 ; AVX1: # %bb.0: 198 ; AVX1-NEXT: vmovapd {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647] 199 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 200 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2147483647,2147483647] 201 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2 202 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm3 203 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 204 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 205 ; AVX1-NEXT: vmovapd {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968] 206 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 207 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [18446744071562067968,18446744071562067968] 208 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2 209 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm3 210 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 211 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 212 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 213 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2] 214 ; AVX1-NEXT: vzeroupper 215 ; AVX1-NEXT: retq 216 ; 217 ; AVX2-SLOW-LABEL: trunc_ssat_v4i64_v4i32: 218 ; AVX2-SLOW: # %bb.0: 219 ; AVX2-SLOW-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647] 220 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 221 ; AVX2-SLOW-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 222 ; AVX2-SLOW-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968] 223 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 224 ; AVX2-SLOW-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 225 ; AVX2-SLOW-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,2,2,3,4,6,6,7] 226 ; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,3] 227 ; AVX2-SLOW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 228 ; AVX2-SLOW-NEXT: vzeroupper 229 ; AVX2-SLOW-NEXT: retq 230 ; 231 ; AVX2-FAST-LABEL: trunc_ssat_v4i64_v4i32: 232 ; AVX2-FAST: # %bb.0: 233 ; AVX2-FAST-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647] 234 ; AVX2-FAST-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 235 ; AVX2-FAST-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 236 ; AVX2-FAST-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968] 237 ; AVX2-FAST-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2 238 ; AVX2-FAST-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0 239 ; AVX2-FAST-NEXT: vmovapd {{.*#+}} ymm1 = [0,2,4,6,4,6,6,7] 240 ; AVX2-FAST-NEXT: vpermps %ymm0, %ymm1, %ymm0 241 ; AVX2-FAST-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 242 ; AVX2-FAST-NEXT: vzeroupper 243 ; AVX2-FAST-NEXT: retq 244 ; 245 ; AVX512F-LABEL: trunc_ssat_v4i64_v4i32: 246 ; AVX512F: # %bb.0: 247 ; AVX512F-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 248 ; AVX512F-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647] 249 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0 250 ; AVX512F-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968] 251 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 252 ; AVX512F-NEXT: vpmovqd %zmm0, %ymm0 253 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 254 ; AVX512F-NEXT: vzeroupper 255 ; AVX512F-NEXT: retq 256 ; 257 ; AVX512VL-LABEL: trunc_ssat_v4i64_v4i32: 258 ; AVX512VL: # %bb.0: 259 ; AVX512VL-NEXT: vpmovsqd %ymm0, %xmm0 260 ; AVX512VL-NEXT: vzeroupper 261 ; AVX512VL-NEXT: retq 262 ; 263 ; AVX512BW-LABEL: trunc_ssat_v4i64_v4i32: 264 ; AVX512BW: # %bb.0: 265 ; AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0 266 ; AVX512BW-NEXT: vpbroadcastq {{.*#+}} ymm1 = [2147483647,2147483647,2147483647,2147483647] 267 ; AVX512BW-NEXT: vpminsq %zmm1, %zmm0, %zmm0 268 ; AVX512BW-NEXT: vpbroadcastq {{.*#+}} ymm1 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968] 269 ; AVX512BW-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0 270 ; AVX512BW-NEXT: vpmovqd %zmm0, %ymm0 271 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 272 ; AVX512BW-NEXT: vzeroupper 273 ; AVX512BW-NEXT: retq 274 ; 275 ; AVX512BWVL-LABEL: trunc_ssat_v4i64_v4i32: 276 ; AVX512BWVL: # %bb.0: 277 ; AVX512BWVL-NEXT: vpmovsqd %ymm0, %xmm0 278 ; AVX512BWVL-NEXT: vzeroupper 279 ; AVX512BWVL-NEXT: retq 280 %1 = icmp slt <4 x i64> %a0, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647> 281 %2 = select <4 x i1> %1, <4 x i64> %a0, <4 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647> 282 %3 = icmp sgt <4 x i64> %2, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648> 283 %4 = select <4 x i1> %3, <4 x i64> %2, <4 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648> 284 %5 = trunc <4 x i64> %4 to <4 x i32> 285 ret <4 x i32> %5 286 } 287 288 289 define <8 x i32> @trunc_ssat_v8i64_v8i32(<8 x i64> %a0) { 290 ; SSE2-LABEL: trunc_ssat_v8i64_v8i32: 291 ; SSE2: # %bb.0: 292 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483647,2147483647] 293 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 294 ; SSE2-NEXT: movdqa %xmm0, %xmm5 295 ; SSE2-NEXT: pxor %xmm4, %xmm5 296 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [4294967295,4294967295] 297 ; SSE2-NEXT: movdqa %xmm9, %xmm7 298 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 299 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2] 300 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm5 301 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 302 ; SSE2-NEXT: pand %xmm10, %xmm6 303 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 304 ; SSE2-NEXT: por %xmm6, %xmm5 305 ; SSE2-NEXT: pand %xmm5, %xmm0 306 ; SSE2-NEXT: pandn %xmm8, %xmm5 307 ; SSE2-NEXT: por %xmm0, %xmm5 308 ; SSE2-NEXT: movdqa %xmm1, %xmm0 309 ; SSE2-NEXT: pxor %xmm4, %xmm0 310 ; SSE2-NEXT: movdqa %xmm9, %xmm6 311 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm6 312 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 313 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 314 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 315 ; SSE2-NEXT: pand %xmm10, %xmm7 316 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 317 ; SSE2-NEXT: por %xmm7, %xmm0 318 ; SSE2-NEXT: pand %xmm0, %xmm1 319 ; SSE2-NEXT: pandn %xmm8, %xmm0 320 ; SSE2-NEXT: por %xmm1, %xmm0 321 ; SSE2-NEXT: movdqa %xmm2, %xmm1 322 ; SSE2-NEXT: pxor %xmm4, %xmm1 323 ; SSE2-NEXT: movdqa %xmm9, %xmm6 324 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6 325 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 326 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 327 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 328 ; SSE2-NEXT: pand %xmm7, %xmm1 329 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 330 ; SSE2-NEXT: por %xmm1, %xmm7 331 ; SSE2-NEXT: pand %xmm7, %xmm2 332 ; SSE2-NEXT: pandn %xmm8, %xmm7 333 ; SSE2-NEXT: por %xmm2, %xmm7 334 ; SSE2-NEXT: movdqa %xmm3, %xmm1 335 ; SSE2-NEXT: pxor %xmm4, %xmm1 336 ; SSE2-NEXT: movdqa %xmm9, %xmm2 337 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 338 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2] 339 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 340 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 341 ; SSE2-NEXT: pand %xmm6, %xmm1 342 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3] 343 ; SSE2-NEXT: por %xmm1, %xmm6 344 ; SSE2-NEXT: pand %xmm6, %xmm3 345 ; SSE2-NEXT: pandn %xmm8, %xmm6 346 ; SSE2-NEXT: por %xmm3, %xmm6 347 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [18446744071562067968,18446744071562067968] 348 ; SSE2-NEXT: movdqa %xmm6, %xmm1 349 ; SSE2-NEXT: pxor %xmm4, %xmm1 350 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [18446744069414584320,18446744069414584320] 351 ; SSE2-NEXT: movdqa %xmm1, %xmm2 352 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm2 353 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 354 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 355 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 356 ; SSE2-NEXT: pand %xmm3, %xmm1 357 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 358 ; SSE2-NEXT: por %xmm1, %xmm2 359 ; SSE2-NEXT: pand %xmm2, %xmm6 360 ; SSE2-NEXT: pandn %xmm8, %xmm2 361 ; SSE2-NEXT: por %xmm6, %xmm2 362 ; SSE2-NEXT: movdqa %xmm7, %xmm1 363 ; SSE2-NEXT: pxor %xmm4, %xmm1 364 ; SSE2-NEXT: movdqa %xmm1, %xmm3 365 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm3 366 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm3[0,0,2,2] 367 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 368 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm1[1,1,3,3] 369 ; SSE2-NEXT: pand %xmm10, %xmm6 370 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3] 371 ; SSE2-NEXT: por %xmm6, %xmm1 372 ; SSE2-NEXT: pand %xmm1, %xmm7 373 ; SSE2-NEXT: pandn %xmm8, %xmm1 374 ; SSE2-NEXT: por %xmm7, %xmm1 375 ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2] 376 ; SSE2-NEXT: movdqa %xmm0, %xmm2 377 ; SSE2-NEXT: pxor %xmm4, %xmm2 378 ; SSE2-NEXT: movdqa %xmm2, %xmm3 379 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm3 380 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2] 381 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm2 382 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 383 ; SSE2-NEXT: pand %xmm6, %xmm2 384 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 385 ; SSE2-NEXT: por %xmm2, %xmm3 386 ; SSE2-NEXT: pand %xmm3, %xmm0 387 ; SSE2-NEXT: pandn %xmm8, %xmm3 388 ; SSE2-NEXT: por %xmm0, %xmm3 389 ; SSE2-NEXT: pxor %xmm5, %xmm4 390 ; SSE2-NEXT: movdqa %xmm4, %xmm0 391 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm0 392 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,0,2,2] 393 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 394 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 395 ; SSE2-NEXT: pand %xmm2, %xmm4 396 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 397 ; SSE2-NEXT: por %xmm4, %xmm0 398 ; SSE2-NEXT: pand %xmm0, %xmm5 399 ; SSE2-NEXT: pandn %xmm8, %xmm0 400 ; SSE2-NEXT: por %xmm5, %xmm0 401 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2] 402 ; SSE2-NEXT: retq 403 ; 404 ; SSSE3-LABEL: trunc_ssat_v8i64_v8i32: 405 ; SSSE3: # %bb.0: 406 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [2147483647,2147483647] 407 ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 408 ; SSSE3-NEXT: movdqa %xmm0, %xmm5 409 ; SSSE3-NEXT: pxor %xmm4, %xmm5 410 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [4294967295,4294967295] 411 ; SSSE3-NEXT: movdqa %xmm9, %xmm7 412 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7 413 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2] 414 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5 415 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 416 ; SSSE3-NEXT: pand %xmm10, %xmm6 417 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 418 ; SSSE3-NEXT: por %xmm6, %xmm5 419 ; SSSE3-NEXT: pand %xmm5, %xmm0 420 ; SSSE3-NEXT: pandn %xmm8, %xmm5 421 ; SSSE3-NEXT: por %xmm0, %xmm5 422 ; SSSE3-NEXT: movdqa %xmm1, %xmm0 423 ; SSSE3-NEXT: pxor %xmm4, %xmm0 424 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 425 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm6 426 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 427 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 428 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 429 ; SSSE3-NEXT: pand %xmm10, %xmm7 430 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 431 ; SSSE3-NEXT: por %xmm7, %xmm0 432 ; SSSE3-NEXT: pand %xmm0, %xmm1 433 ; SSSE3-NEXT: pandn %xmm8, %xmm0 434 ; SSSE3-NEXT: por %xmm1, %xmm0 435 ; SSSE3-NEXT: movdqa %xmm2, %xmm1 436 ; SSSE3-NEXT: pxor %xmm4, %xmm1 437 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 438 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm6 439 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 440 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 441 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 442 ; SSSE3-NEXT: pand %xmm7, %xmm1 443 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 444 ; SSSE3-NEXT: por %xmm1, %xmm7 445 ; SSSE3-NEXT: pand %xmm7, %xmm2 446 ; SSSE3-NEXT: pandn %xmm8, %xmm7 447 ; SSSE3-NEXT: por %xmm2, %xmm7 448 ; SSSE3-NEXT: movdqa %xmm3, %xmm1 449 ; SSSE3-NEXT: pxor %xmm4, %xmm1 450 ; SSSE3-NEXT: movdqa %xmm9, %xmm2 451 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm2 452 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2] 453 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 454 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 455 ; SSSE3-NEXT: pand %xmm6, %xmm1 456 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3] 457 ; SSSE3-NEXT: por %xmm1, %xmm6 458 ; SSSE3-NEXT: pand %xmm6, %xmm3 459 ; SSSE3-NEXT: pandn %xmm8, %xmm6 460 ; SSSE3-NEXT: por %xmm3, %xmm6 461 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [18446744071562067968,18446744071562067968] 462 ; SSSE3-NEXT: movdqa %xmm6, %xmm1 463 ; SSSE3-NEXT: pxor %xmm4, %xmm1 464 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [18446744069414584320,18446744069414584320] 465 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 466 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm2 467 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 468 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 469 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 470 ; SSSE3-NEXT: pand %xmm3, %xmm1 471 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 472 ; SSSE3-NEXT: por %xmm1, %xmm2 473 ; SSSE3-NEXT: pand %xmm2, %xmm6 474 ; SSSE3-NEXT: pandn %xmm8, %xmm2 475 ; SSSE3-NEXT: por %xmm6, %xmm2 476 ; SSSE3-NEXT: movdqa %xmm7, %xmm1 477 ; SSSE3-NEXT: pxor %xmm4, %xmm1 478 ; SSSE3-NEXT: movdqa %xmm1, %xmm3 479 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm3 480 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm3[0,0,2,2] 481 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 482 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm1[1,1,3,3] 483 ; SSSE3-NEXT: pand %xmm10, %xmm6 484 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3] 485 ; SSSE3-NEXT: por %xmm6, %xmm1 486 ; SSSE3-NEXT: pand %xmm1, %xmm7 487 ; SSSE3-NEXT: pandn %xmm8, %xmm1 488 ; SSSE3-NEXT: por %xmm7, %xmm1 489 ; SSSE3-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2] 490 ; SSSE3-NEXT: movdqa %xmm0, %xmm2 491 ; SSSE3-NEXT: pxor %xmm4, %xmm2 492 ; SSSE3-NEXT: movdqa %xmm2, %xmm3 493 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm3 494 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2] 495 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2 496 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 497 ; SSSE3-NEXT: pand %xmm6, %xmm2 498 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 499 ; SSSE3-NEXT: por %xmm2, %xmm3 500 ; SSSE3-NEXT: pand %xmm3, %xmm0 501 ; SSSE3-NEXT: pandn %xmm8, %xmm3 502 ; SSSE3-NEXT: por %xmm0, %xmm3 503 ; SSSE3-NEXT: pxor %xmm5, %xmm4 504 ; SSSE3-NEXT: movdqa %xmm4, %xmm0 505 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm0 506 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,0,2,2] 507 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm4 508 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 509 ; SSSE3-NEXT: pand %xmm2, %xmm4 510 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 511 ; SSSE3-NEXT: por %xmm4, %xmm0 512 ; SSSE3-NEXT: pand %xmm0, %xmm5 513 ; SSSE3-NEXT: pandn %xmm8, %xmm0 514 ; SSSE3-NEXT: por %xmm5, %xmm0 515 ; SSSE3-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2] 516 ; SSSE3-NEXT: retq 517 ; 518 ; SSE41-LABEL: trunc_ssat_v8i64_v8i32: 519 ; SSE41: # %bb.0: 520 ; SSE41-NEXT: movdqa %xmm0, %xmm9 521 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [2147483647,2147483647] 522 ; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 523 ; SSE41-NEXT: pxor %xmm5, %xmm0 524 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [4294967295,4294967295] 525 ; SSE41-NEXT: movdqa %xmm10, %xmm6 526 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6 527 ; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 528 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 529 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 530 ; SSE41-NEXT: pand %xmm8, %xmm4 531 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 532 ; SSE41-NEXT: por %xmm4, %xmm0 533 ; SSE41-NEXT: movapd %xmm7, %xmm8 534 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm8 535 ; SSE41-NEXT: movdqa %xmm1, %xmm0 536 ; SSE41-NEXT: pxor %xmm5, %xmm0 537 ; SSE41-NEXT: movdqa %xmm10, %xmm4 538 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm4 539 ; SSE41-NEXT: pshufd {{.*#+}} xmm9 = xmm4[0,0,2,2] 540 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 541 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 542 ; SSE41-NEXT: pand %xmm9, %xmm6 543 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 544 ; SSE41-NEXT: por %xmm6, %xmm0 545 ; SSE41-NEXT: movapd %xmm7, %xmm9 546 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm9 547 ; SSE41-NEXT: movdqa %xmm2, %xmm0 548 ; SSE41-NEXT: pxor %xmm5, %xmm0 549 ; SSE41-NEXT: movdqa %xmm10, %xmm1 550 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm1 551 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2] 552 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 553 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 554 ; SSE41-NEXT: pand %xmm4, %xmm6 555 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 556 ; SSE41-NEXT: por %xmm6, %xmm0 557 ; SSE41-NEXT: movapd %xmm7, %xmm4 558 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm4 559 ; SSE41-NEXT: movdqa %xmm3, %xmm0 560 ; SSE41-NEXT: pxor %xmm5, %xmm0 561 ; SSE41-NEXT: movdqa %xmm10, %xmm1 562 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm1 563 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 564 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 565 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 566 ; SSE41-NEXT: pand %xmm2, %xmm6 567 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 568 ; SSE41-NEXT: por %xmm6, %xmm0 569 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm7 570 ; SSE41-NEXT: movapd {{.*#+}} xmm2 = [18446744071562067968,18446744071562067968] 571 ; SSE41-NEXT: movapd %xmm7, %xmm0 572 ; SSE41-NEXT: xorpd %xmm5, %xmm0 573 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [18446744069414584320,18446744069414584320] 574 ; SSE41-NEXT: movapd %xmm0, %xmm1 575 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 576 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 577 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 578 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 579 ; SSE41-NEXT: pand %xmm6, %xmm3 580 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 581 ; SSE41-NEXT: por %xmm3, %xmm0 582 ; SSE41-NEXT: movapd %xmm2, %xmm3 583 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm3 584 ; SSE41-NEXT: movapd %xmm4, %xmm0 585 ; SSE41-NEXT: xorpd %xmm5, %xmm0 586 ; SSE41-NEXT: movapd %xmm0, %xmm1 587 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 588 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 589 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 590 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 591 ; SSE41-NEXT: pand %xmm6, %xmm7 592 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 593 ; SSE41-NEXT: por %xmm7, %xmm0 594 ; SSE41-NEXT: movapd %xmm2, %xmm1 595 ; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm1 596 ; SSE41-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2] 597 ; SSE41-NEXT: movapd %xmm9, %xmm0 598 ; SSE41-NEXT: xorpd %xmm5, %xmm0 599 ; SSE41-NEXT: movapd %xmm0, %xmm3 600 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm3 601 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 602 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 603 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 604 ; SSE41-NEXT: pand %xmm4, %xmm6 605 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3] 606 ; SSE41-NEXT: por %xmm6, %xmm0 607 ; SSE41-NEXT: movapd %xmm2, %xmm3 608 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm3 609 ; SSE41-NEXT: xorpd %xmm8, %xmm5 610 ; SSE41-NEXT: movapd %xmm5, %xmm0 611 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm0 612 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2] 613 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5 614 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 615 ; SSE41-NEXT: pand %xmm4, %xmm5 616 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 617 ; SSE41-NEXT: por %xmm5, %xmm0 618 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm2 619 ; SSE41-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2] 620 ; SSE41-NEXT: movaps %xmm2, %xmm0 621 ; SSE41-NEXT: retq 622 ; 623 ; AVX1-LABEL: trunc_ssat_v8i64_v8i32: 624 ; AVX1: # %bb.0: 625 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [2147483647,2147483647,2147483647,2147483647] 626 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 627 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [2147483647,2147483647] 628 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 629 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5 630 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 631 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 632 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 633 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 634 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4 635 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 636 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 637 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968] 638 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 639 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [18446744071562067968,18446744071562067968] 640 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 641 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm5 642 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 643 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 644 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 645 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 646 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm4 647 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 648 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 649 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 650 ; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2] 651 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 652 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2] 653 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 654 ; AVX1-NEXT: retq 655 ; 656 ; AVX2-SLOW-LABEL: trunc_ssat_v8i64_v8i32: 657 ; AVX2-SLOW: # %bb.0: 658 ; AVX2-SLOW-NEXT: vpbroadcastq {{.*#+}} ymm2 = [2147483647,2147483647,2147483647,2147483647] 659 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 660 ; AVX2-SLOW-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 661 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 662 ; AVX2-SLOW-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 663 ; AVX2-SLOW-NEXT: vpbroadcastq {{.*#+}} ymm2 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968] 664 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3 665 ; AVX2-SLOW-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 666 ; AVX2-SLOW-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3 667 ; AVX2-SLOW-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 668 ; AVX2-SLOW-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,2,2,3,4,6,6,7] 669 ; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,3] 670 ; AVX2-SLOW-NEXT: vpermilps {{.*#+}} ymm1 = ymm1[0,2,2,3,4,6,6,7] 671 ; AVX2-SLOW-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,2,2,3] 672 ; AVX2-SLOW-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 673 ; AVX2-SLOW-NEXT: retq 674 ; 675 ; AVX2-FAST-LABEL: trunc_ssat_v8i64_v8i32: 676 ; AVX2-FAST: # %bb.0: 677 ; AVX2-FAST-NEXT: vpbroadcastq {{.*#+}} ymm2 = [2147483647,2147483647,2147483647,2147483647] 678 ; AVX2-FAST-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 679 ; AVX2-FAST-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 680 ; AVX2-FAST-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 681 ; AVX2-FAST-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 682 ; AVX2-FAST-NEXT: vpbroadcastq {{.*#+}} ymm2 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968] 683 ; AVX2-FAST-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3 684 ; AVX2-FAST-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 685 ; AVX2-FAST-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3 686 ; AVX2-FAST-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 687 ; AVX2-FAST-NEXT: vmovapd {{.*#+}} ymm2 = [0,2,4,6,4,6,6,7] 688 ; AVX2-FAST-NEXT: vpermps %ymm0, %ymm2, %ymm0 689 ; AVX2-FAST-NEXT: vpermps %ymm1, %ymm2, %ymm1 690 ; AVX2-FAST-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 691 ; AVX2-FAST-NEXT: retq 692 ; 693 ; AVX512-LABEL: trunc_ssat_v8i64_v8i32: 694 ; AVX512: # %bb.0: 695 ; AVX512-NEXT: vpmovsqd %zmm0, %ymm0 696 ; AVX512-NEXT: retq 697 %1 = icmp slt <8 x i64> %a0, <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647> 698 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647, i64 2147483647> 699 %3 = icmp sgt <8 x i64> %2, <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648> 700 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> <i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648, i64 -2147483648> 701 %5 = trunc <8 x i64> %4 to <8 x i32> 702 ret <8 x i32> %5 703 } 704 705 ; 706 ; Signed saturation truncation to vXi16 707 ; 708 709 define <8 x i16> @trunc_ssat_v8i64_v8i16(<8 x i64> %a0) { 710 ; SSE2-LABEL: trunc_ssat_v8i64_v8i16: 711 ; SSE2: # %bb.0: 712 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32767,32767] 713 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 714 ; SSE2-NEXT: movdqa %xmm2, %xmm5 715 ; SSE2-NEXT: pxor %xmm4, %xmm5 716 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147516415,2147516415] 717 ; SSE2-NEXT: movdqa %xmm9, %xmm7 718 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 719 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2] 720 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm5 721 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 722 ; SSE2-NEXT: pand %xmm10, %xmm6 723 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 724 ; SSE2-NEXT: por %xmm6, %xmm5 725 ; SSE2-NEXT: pand %xmm5, %xmm2 726 ; SSE2-NEXT: pandn %xmm8, %xmm5 727 ; SSE2-NEXT: por %xmm2, %xmm5 728 ; SSE2-NEXT: movdqa %xmm3, %xmm2 729 ; SSE2-NEXT: pxor %xmm4, %xmm2 730 ; SSE2-NEXT: movdqa %xmm9, %xmm6 731 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm6 732 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 733 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm2 734 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 735 ; SSE2-NEXT: pand %xmm10, %xmm7 736 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3] 737 ; SSE2-NEXT: por %xmm7, %xmm2 738 ; SSE2-NEXT: pand %xmm2, %xmm3 739 ; SSE2-NEXT: pandn %xmm8, %xmm2 740 ; SSE2-NEXT: por %xmm3, %xmm2 741 ; SSE2-NEXT: movdqa %xmm0, %xmm3 742 ; SSE2-NEXT: pxor %xmm4, %xmm3 743 ; SSE2-NEXT: movdqa %xmm9, %xmm6 744 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 745 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 746 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm3 747 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 748 ; SSE2-NEXT: pand %xmm10, %xmm7 749 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 750 ; SSE2-NEXT: por %xmm7, %xmm3 751 ; SSE2-NEXT: pand %xmm3, %xmm0 752 ; SSE2-NEXT: pandn %xmm8, %xmm3 753 ; SSE2-NEXT: por %xmm0, %xmm3 754 ; SSE2-NEXT: movdqa %xmm1, %xmm0 755 ; SSE2-NEXT: pxor %xmm4, %xmm0 756 ; SSE2-NEXT: movdqa %xmm9, %xmm6 757 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm6 758 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 759 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 760 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 761 ; SSE2-NEXT: pand %xmm7, %xmm0 762 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 763 ; SSE2-NEXT: por %xmm0, %xmm7 764 ; SSE2-NEXT: pand %xmm7, %xmm1 765 ; SSE2-NEXT: pandn %xmm8, %xmm7 766 ; SSE2-NEXT: por %xmm1, %xmm7 767 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [18446744073709518848,18446744073709518848] 768 ; SSE2-NEXT: movdqa %xmm7, %xmm0 769 ; SSE2-NEXT: pxor %xmm4, %xmm0 770 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [18446744071562035200,18446744071562035200] 771 ; SSE2-NEXT: movdqa %xmm0, %xmm1 772 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm1 773 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 774 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 775 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 776 ; SSE2-NEXT: pand %xmm6, %xmm0 777 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 778 ; SSE2-NEXT: por %xmm0, %xmm1 779 ; SSE2-NEXT: pand %xmm1, %xmm7 780 ; SSE2-NEXT: pandn %xmm8, %xmm1 781 ; SSE2-NEXT: por %xmm7, %xmm1 782 ; SSE2-NEXT: movdqa %xmm3, %xmm0 783 ; SSE2-NEXT: pxor %xmm4, %xmm0 784 ; SSE2-NEXT: movdqa %xmm0, %xmm6 785 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm6 786 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 787 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 788 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 789 ; SSE2-NEXT: pand %xmm10, %xmm7 790 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 791 ; SSE2-NEXT: por %xmm7, %xmm0 792 ; SSE2-NEXT: pand %xmm0, %xmm3 793 ; SSE2-NEXT: pandn %xmm8, %xmm0 794 ; SSE2-NEXT: por %xmm3, %xmm0 795 ; SSE2-NEXT: packssdw %xmm1, %xmm0 796 ; SSE2-NEXT: movdqa %xmm2, %xmm1 797 ; SSE2-NEXT: pxor %xmm4, %xmm1 798 ; SSE2-NEXT: movdqa %xmm1, %xmm3 799 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm3 800 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2] 801 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 802 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 803 ; SSE2-NEXT: pand %xmm6, %xmm1 804 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 805 ; SSE2-NEXT: por %xmm1, %xmm3 806 ; SSE2-NEXT: pand %xmm3, %xmm2 807 ; SSE2-NEXT: pandn %xmm8, %xmm3 808 ; SSE2-NEXT: por %xmm2, %xmm3 809 ; SSE2-NEXT: pxor %xmm5, %xmm4 810 ; SSE2-NEXT: movdqa %xmm4, %xmm1 811 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm1 812 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 813 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 814 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 815 ; SSE2-NEXT: pand %xmm2, %xmm4 816 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 817 ; SSE2-NEXT: por %xmm4, %xmm1 818 ; SSE2-NEXT: pand %xmm1, %xmm5 819 ; SSE2-NEXT: pandn %xmm8, %xmm1 820 ; SSE2-NEXT: por %xmm5, %xmm1 821 ; SSE2-NEXT: packssdw %xmm3, %xmm1 822 ; SSE2-NEXT: packssdw %xmm1, %xmm0 823 ; SSE2-NEXT: retq 824 ; 825 ; SSSE3-LABEL: trunc_ssat_v8i64_v8i16: 826 ; SSSE3: # %bb.0: 827 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [32767,32767] 828 ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 829 ; SSSE3-NEXT: movdqa %xmm2, %xmm5 830 ; SSSE3-NEXT: pxor %xmm4, %xmm5 831 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147516415,2147516415] 832 ; SSSE3-NEXT: movdqa %xmm9, %xmm7 833 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7 834 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2] 835 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5 836 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 837 ; SSSE3-NEXT: pand %xmm10, %xmm6 838 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 839 ; SSSE3-NEXT: por %xmm6, %xmm5 840 ; SSSE3-NEXT: pand %xmm5, %xmm2 841 ; SSSE3-NEXT: pandn %xmm8, %xmm5 842 ; SSSE3-NEXT: por %xmm2, %xmm5 843 ; SSSE3-NEXT: movdqa %xmm3, %xmm2 844 ; SSSE3-NEXT: pxor %xmm4, %xmm2 845 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 846 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm6 847 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 848 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2 849 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 850 ; SSSE3-NEXT: pand %xmm10, %xmm7 851 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3] 852 ; SSSE3-NEXT: por %xmm7, %xmm2 853 ; SSSE3-NEXT: pand %xmm2, %xmm3 854 ; SSSE3-NEXT: pandn %xmm8, %xmm2 855 ; SSSE3-NEXT: por %xmm3, %xmm2 856 ; SSSE3-NEXT: movdqa %xmm0, %xmm3 857 ; SSSE3-NEXT: pxor %xmm4, %xmm3 858 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 859 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm6 860 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 861 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm3 862 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 863 ; SSSE3-NEXT: pand %xmm10, %xmm7 864 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 865 ; SSSE3-NEXT: por %xmm7, %xmm3 866 ; SSSE3-NEXT: pand %xmm3, %xmm0 867 ; SSSE3-NEXT: pandn %xmm8, %xmm3 868 ; SSSE3-NEXT: por %xmm0, %xmm3 869 ; SSSE3-NEXT: movdqa %xmm1, %xmm0 870 ; SSSE3-NEXT: pxor %xmm4, %xmm0 871 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 872 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm6 873 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 874 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 875 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 876 ; SSSE3-NEXT: pand %xmm7, %xmm0 877 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 878 ; SSSE3-NEXT: por %xmm0, %xmm7 879 ; SSSE3-NEXT: pand %xmm7, %xmm1 880 ; SSSE3-NEXT: pandn %xmm8, %xmm7 881 ; SSSE3-NEXT: por %xmm1, %xmm7 882 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [18446744073709518848,18446744073709518848] 883 ; SSSE3-NEXT: movdqa %xmm7, %xmm0 884 ; SSSE3-NEXT: pxor %xmm4, %xmm0 885 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [18446744071562035200,18446744071562035200] 886 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 887 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1 888 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 889 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 890 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 891 ; SSSE3-NEXT: pand %xmm6, %xmm0 892 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 893 ; SSSE3-NEXT: por %xmm0, %xmm1 894 ; SSSE3-NEXT: pand %xmm1, %xmm7 895 ; SSSE3-NEXT: pandn %xmm8, %xmm1 896 ; SSSE3-NEXT: por %xmm7, %xmm1 897 ; SSSE3-NEXT: movdqa %xmm3, %xmm0 898 ; SSSE3-NEXT: pxor %xmm4, %xmm0 899 ; SSSE3-NEXT: movdqa %xmm0, %xmm6 900 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm6 901 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 902 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 903 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 904 ; SSSE3-NEXT: pand %xmm10, %xmm7 905 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 906 ; SSSE3-NEXT: por %xmm7, %xmm0 907 ; SSSE3-NEXT: pand %xmm0, %xmm3 908 ; SSSE3-NEXT: pandn %xmm8, %xmm0 909 ; SSSE3-NEXT: por %xmm3, %xmm0 910 ; SSSE3-NEXT: packssdw %xmm1, %xmm0 911 ; SSSE3-NEXT: movdqa %xmm2, %xmm1 912 ; SSSE3-NEXT: pxor %xmm4, %xmm1 913 ; SSSE3-NEXT: movdqa %xmm1, %xmm3 914 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm3 915 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2] 916 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 917 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 918 ; SSSE3-NEXT: pand %xmm6, %xmm1 919 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 920 ; SSSE3-NEXT: por %xmm1, %xmm3 921 ; SSSE3-NEXT: pand %xmm3, %xmm2 922 ; SSSE3-NEXT: pandn %xmm8, %xmm3 923 ; SSSE3-NEXT: por %xmm2, %xmm3 924 ; SSSE3-NEXT: pxor %xmm5, %xmm4 925 ; SSSE3-NEXT: movdqa %xmm4, %xmm1 926 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1 927 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 928 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm4 929 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 930 ; SSSE3-NEXT: pand %xmm2, %xmm4 931 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 932 ; SSSE3-NEXT: por %xmm4, %xmm1 933 ; SSSE3-NEXT: pand %xmm1, %xmm5 934 ; SSSE3-NEXT: pandn %xmm8, %xmm1 935 ; SSSE3-NEXT: por %xmm5, %xmm1 936 ; SSSE3-NEXT: packssdw %xmm3, %xmm1 937 ; SSSE3-NEXT: packssdw %xmm1, %xmm0 938 ; SSSE3-NEXT: retq 939 ; 940 ; SSE41-LABEL: trunc_ssat_v8i64_v8i16: 941 ; SSE41: # %bb.0: 942 ; SSE41-NEXT: movdqa %xmm0, %xmm10 943 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [32767,32767] 944 ; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 945 ; SSE41-NEXT: movdqa %xmm2, %xmm0 946 ; SSE41-NEXT: pxor %xmm5, %xmm0 947 ; SSE41-NEXT: movdqa {{.*#+}} xmm11 = [2147516415,2147516415] 948 ; SSE41-NEXT: movdqa %xmm11, %xmm6 949 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6 950 ; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 951 ; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 952 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 953 ; SSE41-NEXT: pand %xmm8, %xmm4 954 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 955 ; SSE41-NEXT: por %xmm4, %xmm0 956 ; SSE41-NEXT: movapd %xmm7, %xmm8 957 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm8 958 ; SSE41-NEXT: movdqa %xmm3, %xmm0 959 ; SSE41-NEXT: pxor %xmm5, %xmm0 960 ; SSE41-NEXT: movdqa %xmm11, %xmm2 961 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 962 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 963 ; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 964 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 965 ; SSE41-NEXT: pand %xmm4, %xmm6 966 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 967 ; SSE41-NEXT: por %xmm6, %xmm0 968 ; SSE41-NEXT: movapd %xmm7, %xmm9 969 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm9 970 ; SSE41-NEXT: movdqa %xmm10, %xmm0 971 ; SSE41-NEXT: pxor %xmm5, %xmm0 972 ; SSE41-NEXT: movdqa %xmm11, %xmm2 973 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 974 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 975 ; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 976 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 977 ; SSE41-NEXT: pand %xmm3, %xmm4 978 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 979 ; SSE41-NEXT: por %xmm4, %xmm0 980 ; SSE41-NEXT: movapd %xmm7, %xmm2 981 ; SSE41-NEXT: blendvpd %xmm0, %xmm10, %xmm2 982 ; SSE41-NEXT: movdqa %xmm1, %xmm0 983 ; SSE41-NEXT: pxor %xmm5, %xmm0 984 ; SSE41-NEXT: movdqa %xmm11, %xmm3 985 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm3 986 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 987 ; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 988 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 989 ; SSE41-NEXT: pand %xmm4, %xmm6 990 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3] 991 ; SSE41-NEXT: por %xmm6, %xmm0 992 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm7 993 ; SSE41-NEXT: movapd {{.*#+}} xmm3 = [18446744073709518848,18446744073709518848] 994 ; SSE41-NEXT: movapd %xmm7, %xmm0 995 ; SSE41-NEXT: xorpd %xmm5, %xmm0 996 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [18446744071562035200,18446744071562035200] 997 ; SSE41-NEXT: movapd %xmm0, %xmm1 998 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 999 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 1000 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1001 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 1002 ; SSE41-NEXT: pand %xmm6, %xmm4 1003 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 1004 ; SSE41-NEXT: por %xmm4, %xmm0 1005 ; SSE41-NEXT: movapd %xmm3, %xmm4 1006 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm4 1007 ; SSE41-NEXT: movapd %xmm2, %xmm0 1008 ; SSE41-NEXT: xorpd %xmm5, %xmm0 1009 ; SSE41-NEXT: movapd %xmm0, %xmm1 1010 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 1011 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 1012 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1013 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 1014 ; SSE41-NEXT: pand %xmm6, %xmm7 1015 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 1016 ; SSE41-NEXT: por %xmm7, %xmm0 1017 ; SSE41-NEXT: movapd %xmm3, %xmm1 1018 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm1 1019 ; SSE41-NEXT: packssdw %xmm4, %xmm1 1020 ; SSE41-NEXT: movapd %xmm9, %xmm0 1021 ; SSE41-NEXT: xorpd %xmm5, %xmm0 1022 ; SSE41-NEXT: movapd %xmm0, %xmm2 1023 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm2 1024 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 1025 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1026 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1027 ; SSE41-NEXT: pand %xmm4, %xmm6 1028 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 1029 ; SSE41-NEXT: por %xmm6, %xmm0 1030 ; SSE41-NEXT: movapd %xmm3, %xmm2 1031 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm2 1032 ; SSE41-NEXT: xorpd %xmm8, %xmm5 1033 ; SSE41-NEXT: movapd %xmm5, %xmm0 1034 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm0 1035 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2] 1036 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5 1037 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 1038 ; SSE41-NEXT: pand %xmm4, %xmm5 1039 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1040 ; SSE41-NEXT: por %xmm5, %xmm0 1041 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm3 1042 ; SSE41-NEXT: packssdw %xmm2, %xmm3 1043 ; SSE41-NEXT: packssdw %xmm3, %xmm1 1044 ; SSE41-NEXT: movdqa %xmm1, %xmm0 1045 ; SSE41-NEXT: retq 1046 ; 1047 ; AVX1-LABEL: trunc_ssat_v8i64_v8i16: 1048 ; AVX1: # %bb.0: 1049 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [32767,32767,32767,32767] 1050 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 1051 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [32767,32767] 1052 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1053 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5 1054 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 1055 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1056 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1057 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1058 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4 1059 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 1060 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1061 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848] 1062 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1063 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [18446744073709518848,18446744073709518848] 1064 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 1065 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm5 1066 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 1067 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1068 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 1069 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 1070 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm4 1071 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 1072 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1073 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1074 ; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1 1075 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1076 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0 1077 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 1078 ; AVX1-NEXT: vzeroupper 1079 ; AVX1-NEXT: retq 1080 ; 1081 ; AVX2-LABEL: trunc_ssat_v8i64_v8i16: 1082 ; AVX2: # %bb.0: 1083 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [32767,32767,32767,32767] 1084 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 1085 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1086 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 1087 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1088 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848] 1089 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3 1090 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1091 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3 1092 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1093 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 1094 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 1095 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 1096 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 1097 ; AVX2-NEXT: vzeroupper 1098 ; AVX2-NEXT: retq 1099 ; 1100 ; AVX512-LABEL: trunc_ssat_v8i64_v8i16: 1101 ; AVX512: # %bb.0: 1102 ; AVX512-NEXT: vpmovsqw %zmm0, %xmm0 1103 ; AVX512-NEXT: vzeroupper 1104 ; AVX512-NEXT: retq 1105 %1 = icmp slt <8 x i64> %a0, <i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767> 1106 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767, i64 32767> 1107 %3 = icmp sgt <8 x i64> %2, <i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768> 1108 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> <i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768, i64 -32768> 1109 %5 = trunc <8 x i64> %4 to <8 x i16> 1110 ret <8 x i16> %5 1111 } 1112 1113 define <8 x i16> @trunc_ssat_v8i32_v8i16(<8 x i32> %a0) { 1114 ; SSE-LABEL: trunc_ssat_v8i32_v8i16: 1115 ; SSE: # %bb.0: 1116 ; SSE-NEXT: packssdw %xmm1, %xmm0 1117 ; SSE-NEXT: retq 1118 ; 1119 ; AVX1-LABEL: trunc_ssat_v8i32_v8i16: 1120 ; AVX1: # %bb.0: 1121 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 1122 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 1123 ; AVX1-NEXT: vzeroupper 1124 ; AVX1-NEXT: retq 1125 ; 1126 ; AVX2-LABEL: trunc_ssat_v8i32_v8i16: 1127 ; AVX2: # %bb.0: 1128 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 1129 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 1130 ; AVX2-NEXT: vzeroupper 1131 ; AVX2-NEXT: retq 1132 ; 1133 ; AVX512F-LABEL: trunc_ssat_v8i32_v8i16: 1134 ; AVX512F: # %bb.0: 1135 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [32767,32767,32767,32767,32767,32767,32767,32767] 1136 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1137 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294934528,4294934528,4294934528,4294934528,4294934528,4294934528,4294934528,4294934528] 1138 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1139 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 1140 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 1141 ; AVX512F-NEXT: vzeroupper 1142 ; AVX512F-NEXT: retq 1143 ; 1144 ; AVX512VL-LABEL: trunc_ssat_v8i32_v8i16: 1145 ; AVX512VL: # %bb.0: 1146 ; AVX512VL-NEXT: vpmovsdw %ymm0, %xmm0 1147 ; AVX512VL-NEXT: vzeroupper 1148 ; AVX512VL-NEXT: retq 1149 ; 1150 ; AVX512BW-LABEL: trunc_ssat_v8i32_v8i16: 1151 ; AVX512BW: # %bb.0: 1152 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [32767,32767,32767,32767,32767,32767,32767,32767] 1153 ; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0 1154 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294934528,4294934528,4294934528,4294934528,4294934528,4294934528,4294934528,4294934528] 1155 ; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 1156 ; AVX512BW-NEXT: vpmovdw %zmm0, %ymm0 1157 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 1158 ; AVX512BW-NEXT: vzeroupper 1159 ; AVX512BW-NEXT: retq 1160 ; 1161 ; AVX512BWVL-LABEL: trunc_ssat_v8i32_v8i16: 1162 ; AVX512BWVL: # %bb.0: 1163 ; AVX512BWVL-NEXT: vpmovsdw %ymm0, %xmm0 1164 ; AVX512BWVL-NEXT: vzeroupper 1165 ; AVX512BWVL-NEXT: retq 1166 %1 = icmp slt <8 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767> 1167 %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767> 1168 %3 = icmp sgt <8 x i32> %2, <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768> 1169 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768> 1170 %5 = trunc <8 x i32> %4 to <8 x i16> 1171 ret <8 x i16> %5 1172 } 1173 1174 define <16 x i16> @trunc_ssat_v16i32_v16i16(<16 x i32> %a0) { 1175 ; SSE-LABEL: trunc_ssat_v16i32_v16i16: 1176 ; SSE: # %bb.0: 1177 ; SSE-NEXT: packssdw %xmm1, %xmm0 1178 ; SSE-NEXT: packssdw %xmm3, %xmm2 1179 ; SSE-NEXT: movdqa %xmm2, %xmm1 1180 ; SSE-NEXT: retq 1181 ; 1182 ; AVX1-LABEL: trunc_ssat_v16i32_v16i16: 1183 ; AVX1: # %bb.0: 1184 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1185 ; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1 1186 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1187 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0 1188 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1189 ; AVX1-NEXT: retq 1190 ; 1191 ; AVX2-LABEL: trunc_ssat_v16i32_v16i16: 1192 ; AVX2: # %bb.0: 1193 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 1194 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 1195 ; AVX2-NEXT: retq 1196 ; 1197 ; AVX512-LABEL: trunc_ssat_v16i32_v16i16: 1198 ; AVX512: # %bb.0: 1199 ; AVX512-NEXT: vpmovsdw %zmm0, %ymm0 1200 ; AVX512-NEXT: retq 1201 %1 = icmp slt <16 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767> 1202 %2 = select <16 x i1> %1, <16 x i32> %a0, <16 x i32> <i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767, i32 32767> 1203 %3 = icmp sgt <16 x i32> %2, <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768> 1204 %4 = select <16 x i1> %3, <16 x i32> %2, <16 x i32> <i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768, i32 -32768> 1205 %5 = trunc <16 x i32> %4 to <16 x i16> 1206 ret <16 x i16> %5 1207 } 1208 1209 ; 1210 ; Signed saturation truncation to v16i8 1211 ; 1212 1213 define <8 x i8> @trunc_ssat_v8i64_v8i8(<8 x i64> %a0) { 1214 ; SSE2-LABEL: trunc_ssat_v8i64_v8i8: 1215 ; SSE2: # %bb.0: 1216 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [127,127] 1217 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 1218 ; SSE2-NEXT: movdqa %xmm2, %xmm5 1219 ; SSE2-NEXT: pxor %xmm4, %xmm5 1220 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483775,2147483775] 1221 ; SSE2-NEXT: movdqa %xmm9, %xmm7 1222 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 1223 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2] 1224 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm5 1225 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 1226 ; SSE2-NEXT: pand %xmm10, %xmm6 1227 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 1228 ; SSE2-NEXT: por %xmm6, %xmm5 1229 ; SSE2-NEXT: pand %xmm5, %xmm2 1230 ; SSE2-NEXT: pandn %xmm8, %xmm5 1231 ; SSE2-NEXT: por %xmm2, %xmm5 1232 ; SSE2-NEXT: movdqa %xmm3, %xmm2 1233 ; SSE2-NEXT: pxor %xmm4, %xmm2 1234 ; SSE2-NEXT: movdqa %xmm9, %xmm6 1235 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm6 1236 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1237 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm2 1238 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 1239 ; SSE2-NEXT: pand %xmm10, %xmm7 1240 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3] 1241 ; SSE2-NEXT: por %xmm7, %xmm2 1242 ; SSE2-NEXT: pand %xmm2, %xmm3 1243 ; SSE2-NEXT: pandn %xmm8, %xmm2 1244 ; SSE2-NEXT: por %xmm3, %xmm2 1245 ; SSE2-NEXT: movdqa %xmm0, %xmm3 1246 ; SSE2-NEXT: pxor %xmm4, %xmm3 1247 ; SSE2-NEXT: movdqa %xmm9, %xmm6 1248 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 1249 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1250 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm3 1251 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 1252 ; SSE2-NEXT: pand %xmm10, %xmm7 1253 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 1254 ; SSE2-NEXT: por %xmm7, %xmm3 1255 ; SSE2-NEXT: pand %xmm3, %xmm0 1256 ; SSE2-NEXT: pandn %xmm8, %xmm3 1257 ; SSE2-NEXT: por %xmm0, %xmm3 1258 ; SSE2-NEXT: movdqa %xmm1, %xmm0 1259 ; SSE2-NEXT: pxor %xmm4, %xmm0 1260 ; SSE2-NEXT: movdqa %xmm9, %xmm6 1261 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm6 1262 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 1263 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 1264 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1265 ; SSE2-NEXT: pand %xmm7, %xmm0 1266 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 1267 ; SSE2-NEXT: por %xmm0, %xmm7 1268 ; SSE2-NEXT: pand %xmm7, %xmm1 1269 ; SSE2-NEXT: pandn %xmm8, %xmm7 1270 ; SSE2-NEXT: por %xmm1, %xmm7 1271 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488] 1272 ; SSE2-NEXT: movdqa %xmm7, %xmm0 1273 ; SSE2-NEXT: pxor %xmm4, %xmm0 1274 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [18446744071562067840,18446744071562067840] 1275 ; SSE2-NEXT: movdqa %xmm0, %xmm1 1276 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm1 1277 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 1278 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 1279 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1280 ; SSE2-NEXT: pand %xmm6, %xmm0 1281 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1282 ; SSE2-NEXT: por %xmm0, %xmm1 1283 ; SSE2-NEXT: pand %xmm1, %xmm7 1284 ; SSE2-NEXT: pandn %xmm8, %xmm1 1285 ; SSE2-NEXT: por %xmm7, %xmm1 1286 ; SSE2-NEXT: movdqa %xmm3, %xmm0 1287 ; SSE2-NEXT: pxor %xmm4, %xmm0 1288 ; SSE2-NEXT: movdqa %xmm0, %xmm6 1289 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm6 1290 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1291 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 1292 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 1293 ; SSE2-NEXT: pand %xmm10, %xmm7 1294 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 1295 ; SSE2-NEXT: por %xmm7, %xmm0 1296 ; SSE2-NEXT: pand %xmm0, %xmm3 1297 ; SSE2-NEXT: pandn %xmm8, %xmm0 1298 ; SSE2-NEXT: por %xmm3, %xmm0 1299 ; SSE2-NEXT: packssdw %xmm1, %xmm0 1300 ; SSE2-NEXT: movdqa %xmm2, %xmm1 1301 ; SSE2-NEXT: pxor %xmm4, %xmm1 1302 ; SSE2-NEXT: movdqa %xmm1, %xmm3 1303 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm3 1304 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2] 1305 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 1306 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1307 ; SSE2-NEXT: pand %xmm6, %xmm1 1308 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 1309 ; SSE2-NEXT: por %xmm1, %xmm3 1310 ; SSE2-NEXT: pand %xmm3, %xmm2 1311 ; SSE2-NEXT: pandn %xmm8, %xmm3 1312 ; SSE2-NEXT: por %xmm2, %xmm3 1313 ; SSE2-NEXT: pxor %xmm5, %xmm4 1314 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1315 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm1 1316 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 1317 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 1318 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1319 ; SSE2-NEXT: pand %xmm2, %xmm4 1320 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1321 ; SSE2-NEXT: por %xmm4, %xmm1 1322 ; SSE2-NEXT: pand %xmm1, %xmm5 1323 ; SSE2-NEXT: pandn %xmm8, %xmm1 1324 ; SSE2-NEXT: por %xmm5, %xmm1 1325 ; SSE2-NEXT: packssdw %xmm3, %xmm1 1326 ; SSE2-NEXT: packssdw %xmm1, %xmm0 1327 ; SSE2-NEXT: retq 1328 ; 1329 ; SSSE3-LABEL: trunc_ssat_v8i64_v8i8: 1330 ; SSSE3: # %bb.0: 1331 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [127,127] 1332 ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 1333 ; SSSE3-NEXT: movdqa %xmm2, %xmm5 1334 ; SSSE3-NEXT: pxor %xmm4, %xmm5 1335 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483775,2147483775] 1336 ; SSSE3-NEXT: movdqa %xmm9, %xmm7 1337 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7 1338 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2] 1339 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5 1340 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 1341 ; SSSE3-NEXT: pand %xmm10, %xmm6 1342 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 1343 ; SSSE3-NEXT: por %xmm6, %xmm5 1344 ; SSSE3-NEXT: pand %xmm5, %xmm2 1345 ; SSSE3-NEXT: pandn %xmm8, %xmm5 1346 ; SSSE3-NEXT: por %xmm2, %xmm5 1347 ; SSSE3-NEXT: movdqa %xmm3, %xmm2 1348 ; SSSE3-NEXT: pxor %xmm4, %xmm2 1349 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 1350 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm6 1351 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1352 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2 1353 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 1354 ; SSSE3-NEXT: pand %xmm10, %xmm7 1355 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3] 1356 ; SSSE3-NEXT: por %xmm7, %xmm2 1357 ; SSSE3-NEXT: pand %xmm2, %xmm3 1358 ; SSSE3-NEXT: pandn %xmm8, %xmm2 1359 ; SSSE3-NEXT: por %xmm3, %xmm2 1360 ; SSSE3-NEXT: movdqa %xmm0, %xmm3 1361 ; SSSE3-NEXT: pxor %xmm4, %xmm3 1362 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 1363 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm6 1364 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1365 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm3 1366 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 1367 ; SSSE3-NEXT: pand %xmm10, %xmm7 1368 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 1369 ; SSSE3-NEXT: por %xmm7, %xmm3 1370 ; SSSE3-NEXT: pand %xmm3, %xmm0 1371 ; SSSE3-NEXT: pandn %xmm8, %xmm3 1372 ; SSSE3-NEXT: por %xmm0, %xmm3 1373 ; SSSE3-NEXT: movdqa %xmm1, %xmm0 1374 ; SSSE3-NEXT: pxor %xmm4, %xmm0 1375 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 1376 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm6 1377 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 1378 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 1379 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1380 ; SSSE3-NEXT: pand %xmm7, %xmm0 1381 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 1382 ; SSSE3-NEXT: por %xmm0, %xmm7 1383 ; SSSE3-NEXT: pand %xmm7, %xmm1 1384 ; SSSE3-NEXT: pandn %xmm8, %xmm7 1385 ; SSSE3-NEXT: por %xmm1, %xmm7 1386 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488] 1387 ; SSSE3-NEXT: movdqa %xmm7, %xmm0 1388 ; SSSE3-NEXT: pxor %xmm4, %xmm0 1389 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [18446744071562067840,18446744071562067840] 1390 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 1391 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1 1392 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 1393 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 1394 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1395 ; SSSE3-NEXT: pand %xmm6, %xmm0 1396 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1397 ; SSSE3-NEXT: por %xmm0, %xmm1 1398 ; SSSE3-NEXT: pand %xmm1, %xmm7 1399 ; SSSE3-NEXT: pandn %xmm8, %xmm1 1400 ; SSSE3-NEXT: por %xmm7, %xmm1 1401 ; SSSE3-NEXT: movdqa %xmm3, %xmm0 1402 ; SSSE3-NEXT: pxor %xmm4, %xmm0 1403 ; SSSE3-NEXT: movdqa %xmm0, %xmm6 1404 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm6 1405 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1406 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 1407 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 1408 ; SSSE3-NEXT: pand %xmm10, %xmm7 1409 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 1410 ; SSSE3-NEXT: por %xmm7, %xmm0 1411 ; SSSE3-NEXT: pand %xmm0, %xmm3 1412 ; SSSE3-NEXT: pandn %xmm8, %xmm0 1413 ; SSSE3-NEXT: por %xmm3, %xmm0 1414 ; SSSE3-NEXT: packssdw %xmm1, %xmm0 1415 ; SSSE3-NEXT: movdqa %xmm2, %xmm1 1416 ; SSSE3-NEXT: pxor %xmm4, %xmm1 1417 ; SSSE3-NEXT: movdqa %xmm1, %xmm3 1418 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm3 1419 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2] 1420 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 1421 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1422 ; SSSE3-NEXT: pand %xmm6, %xmm1 1423 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 1424 ; SSSE3-NEXT: por %xmm1, %xmm3 1425 ; SSSE3-NEXT: pand %xmm3, %xmm2 1426 ; SSSE3-NEXT: pandn %xmm8, %xmm3 1427 ; SSSE3-NEXT: por %xmm2, %xmm3 1428 ; SSSE3-NEXT: pxor %xmm5, %xmm4 1429 ; SSSE3-NEXT: movdqa %xmm4, %xmm1 1430 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1 1431 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 1432 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm4 1433 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1434 ; SSSE3-NEXT: pand %xmm2, %xmm4 1435 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1436 ; SSSE3-NEXT: por %xmm4, %xmm1 1437 ; SSSE3-NEXT: pand %xmm1, %xmm5 1438 ; SSSE3-NEXT: pandn %xmm8, %xmm1 1439 ; SSSE3-NEXT: por %xmm5, %xmm1 1440 ; SSSE3-NEXT: packssdw %xmm3, %xmm1 1441 ; SSSE3-NEXT: packssdw %xmm1, %xmm0 1442 ; SSSE3-NEXT: retq 1443 ; 1444 ; SSE41-LABEL: trunc_ssat_v8i64_v8i8: 1445 ; SSE41: # %bb.0: 1446 ; SSE41-NEXT: movdqa %xmm0, %xmm10 1447 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [127,127] 1448 ; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 1449 ; SSE41-NEXT: movdqa %xmm2, %xmm0 1450 ; SSE41-NEXT: pxor %xmm5, %xmm0 1451 ; SSE41-NEXT: movdqa {{.*#+}} xmm11 = [2147483775,2147483775] 1452 ; SSE41-NEXT: movdqa %xmm11, %xmm6 1453 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6 1454 ; SSE41-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2] 1455 ; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 1456 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 1457 ; SSE41-NEXT: pand %xmm8, %xmm4 1458 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 1459 ; SSE41-NEXT: por %xmm4, %xmm0 1460 ; SSE41-NEXT: movapd %xmm7, %xmm8 1461 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm8 1462 ; SSE41-NEXT: movdqa %xmm3, %xmm0 1463 ; SSE41-NEXT: pxor %xmm5, %xmm0 1464 ; SSE41-NEXT: movdqa %xmm11, %xmm2 1465 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 1466 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 1467 ; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 1468 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1469 ; SSE41-NEXT: pand %xmm4, %xmm6 1470 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 1471 ; SSE41-NEXT: por %xmm6, %xmm0 1472 ; SSE41-NEXT: movapd %xmm7, %xmm9 1473 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm9 1474 ; SSE41-NEXT: movdqa %xmm10, %xmm0 1475 ; SSE41-NEXT: pxor %xmm5, %xmm0 1476 ; SSE41-NEXT: movdqa %xmm11, %xmm2 1477 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 1478 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 1479 ; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 1480 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 1481 ; SSE41-NEXT: pand %xmm3, %xmm4 1482 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 1483 ; SSE41-NEXT: por %xmm4, %xmm0 1484 ; SSE41-NEXT: movapd %xmm7, %xmm2 1485 ; SSE41-NEXT: blendvpd %xmm0, %xmm10, %xmm2 1486 ; SSE41-NEXT: movdqa %xmm1, %xmm0 1487 ; SSE41-NEXT: pxor %xmm5, %xmm0 1488 ; SSE41-NEXT: movdqa %xmm11, %xmm3 1489 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm3 1490 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 1491 ; SSE41-NEXT: pcmpeqd %xmm11, %xmm0 1492 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1493 ; SSE41-NEXT: pand %xmm4, %xmm6 1494 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3] 1495 ; SSE41-NEXT: por %xmm6, %xmm0 1496 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm7 1497 ; SSE41-NEXT: movapd {{.*#+}} xmm3 = [18446744073709551488,18446744073709551488] 1498 ; SSE41-NEXT: movapd %xmm7, %xmm0 1499 ; SSE41-NEXT: xorpd %xmm5, %xmm0 1500 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [18446744071562067840,18446744071562067840] 1501 ; SSE41-NEXT: movapd %xmm0, %xmm1 1502 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 1503 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 1504 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1505 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 1506 ; SSE41-NEXT: pand %xmm6, %xmm4 1507 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 1508 ; SSE41-NEXT: por %xmm4, %xmm0 1509 ; SSE41-NEXT: movapd %xmm3, %xmm4 1510 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm4 1511 ; SSE41-NEXT: movapd %xmm2, %xmm0 1512 ; SSE41-NEXT: xorpd %xmm5, %xmm0 1513 ; SSE41-NEXT: movapd %xmm0, %xmm1 1514 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm1 1515 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2] 1516 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1517 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 1518 ; SSE41-NEXT: pand %xmm6, %xmm7 1519 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 1520 ; SSE41-NEXT: por %xmm7, %xmm0 1521 ; SSE41-NEXT: movapd %xmm3, %xmm1 1522 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm1 1523 ; SSE41-NEXT: packssdw %xmm4, %xmm1 1524 ; SSE41-NEXT: movapd %xmm9, %xmm0 1525 ; SSE41-NEXT: xorpd %xmm5, %xmm0 1526 ; SSE41-NEXT: movapd %xmm0, %xmm2 1527 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm2 1528 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 1529 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1530 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1531 ; SSE41-NEXT: pand %xmm4, %xmm6 1532 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 1533 ; SSE41-NEXT: por %xmm6, %xmm0 1534 ; SSE41-NEXT: movapd %xmm3, %xmm2 1535 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm2 1536 ; SSE41-NEXT: xorpd %xmm8, %xmm5 1537 ; SSE41-NEXT: movapd %xmm5, %xmm0 1538 ; SSE41-NEXT: pcmpgtd %xmm10, %xmm0 1539 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2] 1540 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm5 1541 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 1542 ; SSE41-NEXT: pand %xmm4, %xmm5 1543 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1544 ; SSE41-NEXT: por %xmm5, %xmm0 1545 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm3 1546 ; SSE41-NEXT: packssdw %xmm2, %xmm3 1547 ; SSE41-NEXT: packssdw %xmm3, %xmm1 1548 ; SSE41-NEXT: movdqa %xmm1, %xmm0 1549 ; SSE41-NEXT: retq 1550 ; 1551 ; AVX1-LABEL: trunc_ssat_v8i64_v8i8: 1552 ; AVX1: # %bb.0: 1553 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [127,127,127,127] 1554 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 1555 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [127,127] 1556 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1557 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5 1558 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 1559 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1560 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1561 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1562 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4 1563 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 1564 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1565 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488] 1566 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1567 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [18446744073709551488,18446744073709551488] 1568 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 1569 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm5 1570 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 1571 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1572 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 1573 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 1574 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm4 1575 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 1576 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1577 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 1578 ; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1 1579 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 1580 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0 1581 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 1582 ; AVX1-NEXT: vzeroupper 1583 ; AVX1-NEXT: retq 1584 ; 1585 ; AVX2-LABEL: trunc_ssat_v8i64_v8i8: 1586 ; AVX2: # %bb.0: 1587 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [127,127,127,127] 1588 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 1589 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1590 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 1591 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1592 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488] 1593 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3 1594 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1595 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3 1596 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1597 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 1598 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 1599 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 1600 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 1601 ; AVX2-NEXT: vzeroupper 1602 ; AVX2-NEXT: retq 1603 ; 1604 ; AVX512-LABEL: trunc_ssat_v8i64_v8i8: 1605 ; AVX512: # %bb.0: 1606 ; AVX512-NEXT: vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0 1607 ; AVX512-NEXT: vpmaxsq {{.*}}(%rip){1to8}, %zmm0, %zmm0 1608 ; AVX512-NEXT: vpmovqw %zmm0, %xmm0 1609 ; AVX512-NEXT: vzeroupper 1610 ; AVX512-NEXT: retq 1611 %1 = icmp slt <8 x i64> %a0, <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127> 1612 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127> 1613 %3 = icmp sgt <8 x i64> %2, <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128> 1614 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128> 1615 %5 = trunc <8 x i64> %4 to <8 x i8> 1616 ret <8 x i8> %5 1617 } 1618 1619 define void @trunc_ssat_v8i64_v8i8_store(<8 x i64> %a0, <8 x i8> *%p1) { 1620 ; SSE2-LABEL: trunc_ssat_v8i64_v8i8_store: 1621 ; SSE2: # %bb.0: 1622 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [127,127] 1623 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 1624 ; SSE2-NEXT: movdqa %xmm3, %xmm5 1625 ; SSE2-NEXT: pxor %xmm4, %xmm5 1626 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483775,2147483775] 1627 ; SSE2-NEXT: movdqa %xmm9, %xmm7 1628 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7 1629 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2] 1630 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm5 1631 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 1632 ; SSE2-NEXT: pand %xmm10, %xmm6 1633 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 1634 ; SSE2-NEXT: por %xmm6, %xmm5 1635 ; SSE2-NEXT: pand %xmm5, %xmm3 1636 ; SSE2-NEXT: pandn %xmm8, %xmm5 1637 ; SSE2-NEXT: por %xmm3, %xmm5 1638 ; SSE2-NEXT: movdqa %xmm2, %xmm3 1639 ; SSE2-NEXT: pxor %xmm4, %xmm3 1640 ; SSE2-NEXT: movdqa %xmm9, %xmm6 1641 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6 1642 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1643 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm3 1644 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 1645 ; SSE2-NEXT: pand %xmm10, %xmm7 1646 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 1647 ; SSE2-NEXT: por %xmm7, %xmm3 1648 ; SSE2-NEXT: pand %xmm3, %xmm2 1649 ; SSE2-NEXT: pandn %xmm8, %xmm3 1650 ; SSE2-NEXT: por %xmm2, %xmm3 1651 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1652 ; SSE2-NEXT: pxor %xmm4, %xmm2 1653 ; SSE2-NEXT: movdqa %xmm9, %xmm6 1654 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm6 1655 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1656 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm2 1657 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 1658 ; SSE2-NEXT: pand %xmm10, %xmm7 1659 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3] 1660 ; SSE2-NEXT: por %xmm7, %xmm2 1661 ; SSE2-NEXT: pand %xmm2, %xmm1 1662 ; SSE2-NEXT: pandn %xmm8, %xmm2 1663 ; SSE2-NEXT: por %xmm1, %xmm2 1664 ; SSE2-NEXT: movdqa %xmm0, %xmm1 1665 ; SSE2-NEXT: pxor %xmm4, %xmm1 1666 ; SSE2-NEXT: movdqa %xmm9, %xmm6 1667 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6 1668 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 1669 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 1670 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1671 ; SSE2-NEXT: pand %xmm7, %xmm1 1672 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 1673 ; SSE2-NEXT: por %xmm1, %xmm7 1674 ; SSE2-NEXT: pand %xmm7, %xmm0 1675 ; SSE2-NEXT: pandn %xmm8, %xmm7 1676 ; SSE2-NEXT: por %xmm0, %xmm7 1677 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488] 1678 ; SSE2-NEXT: movdqa %xmm7, %xmm0 1679 ; SSE2-NEXT: pxor %xmm4, %xmm0 1680 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [18446744071562067840,18446744071562067840] 1681 ; SSE2-NEXT: movdqa %xmm0, %xmm1 1682 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm1 1683 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm1[0,0,2,2] 1684 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm0 1685 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1686 ; SSE2-NEXT: pand %xmm10, %xmm6 1687 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 1688 ; SSE2-NEXT: por %xmm6, %xmm0 1689 ; SSE2-NEXT: pand %xmm0, %xmm7 1690 ; SSE2-NEXT: pandn %xmm8, %xmm0 1691 ; SSE2-NEXT: por %xmm7, %xmm0 1692 ; SSE2-NEXT: movdqa %xmm2, %xmm1 1693 ; SSE2-NEXT: pxor %xmm4, %xmm1 1694 ; SSE2-NEXT: movdqa %xmm1, %xmm6 1695 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm6 1696 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 1697 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 1698 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1699 ; SSE2-NEXT: pand %xmm7, %xmm1 1700 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 1701 ; SSE2-NEXT: por %xmm1, %xmm7 1702 ; SSE2-NEXT: pand %xmm7, %xmm2 1703 ; SSE2-NEXT: pandn %xmm8, %xmm7 1704 ; SSE2-NEXT: por %xmm2, %xmm7 1705 ; SSE2-NEXT: movdqa %xmm3, %xmm1 1706 ; SSE2-NEXT: pxor %xmm4, %xmm1 1707 ; SSE2-NEXT: movdqa %xmm1, %xmm2 1708 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm2 1709 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2] 1710 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm1 1711 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1712 ; SSE2-NEXT: pand %xmm6, %xmm1 1713 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 1714 ; SSE2-NEXT: por %xmm1, %xmm2 1715 ; SSE2-NEXT: pand %xmm2, %xmm3 1716 ; SSE2-NEXT: pandn %xmm8, %xmm2 1717 ; SSE2-NEXT: por %xmm3, %xmm2 1718 ; SSE2-NEXT: pxor %xmm5, %xmm4 1719 ; SSE2-NEXT: movdqa %xmm4, %xmm1 1720 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm1 1721 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2] 1722 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4 1723 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1724 ; SSE2-NEXT: pand %xmm3, %xmm4 1725 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1726 ; SSE2-NEXT: por %xmm4, %xmm1 1727 ; SSE2-NEXT: pand %xmm1, %xmm5 1728 ; SSE2-NEXT: pandn %xmm8, %xmm1 1729 ; SSE2-NEXT: por %xmm5, %xmm1 1730 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 1731 ; SSE2-NEXT: pand %xmm3, %xmm1 1732 ; SSE2-NEXT: pand %xmm3, %xmm2 1733 ; SSE2-NEXT: packuswb %xmm1, %xmm2 1734 ; SSE2-NEXT: pand %xmm3, %xmm7 1735 ; SSE2-NEXT: pand %xmm3, %xmm0 1736 ; SSE2-NEXT: packuswb %xmm7, %xmm0 1737 ; SSE2-NEXT: packuswb %xmm2, %xmm0 1738 ; SSE2-NEXT: packuswb %xmm0, %xmm0 1739 ; SSE2-NEXT: movq %xmm0, (%rdi) 1740 ; SSE2-NEXT: retq 1741 ; 1742 ; SSSE3-LABEL: trunc_ssat_v8i64_v8i8_store: 1743 ; SSSE3: # %bb.0: 1744 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [127,127] 1745 ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0] 1746 ; SSSE3-NEXT: movdqa %xmm3, %xmm5 1747 ; SSSE3-NEXT: pxor %xmm4, %xmm5 1748 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [2147483775,2147483775] 1749 ; SSSE3-NEXT: movdqa %xmm9, %xmm7 1750 ; SSSE3-NEXT: pcmpgtd %xmm5, %xmm7 1751 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm7[0,0,2,2] 1752 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm5 1753 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3] 1754 ; SSSE3-NEXT: pand %xmm10, %xmm6 1755 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 1756 ; SSSE3-NEXT: por %xmm6, %xmm5 1757 ; SSSE3-NEXT: pand %xmm5, %xmm3 1758 ; SSSE3-NEXT: pandn %xmm8, %xmm5 1759 ; SSSE3-NEXT: por %xmm3, %xmm5 1760 ; SSSE3-NEXT: movdqa %xmm2, %xmm3 1761 ; SSSE3-NEXT: pxor %xmm4, %xmm3 1762 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 1763 ; SSSE3-NEXT: pcmpgtd %xmm3, %xmm6 1764 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1765 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm3 1766 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3] 1767 ; SSSE3-NEXT: pand %xmm10, %xmm7 1768 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3] 1769 ; SSSE3-NEXT: por %xmm7, %xmm3 1770 ; SSSE3-NEXT: pand %xmm3, %xmm2 1771 ; SSSE3-NEXT: pandn %xmm8, %xmm3 1772 ; SSSE3-NEXT: por %xmm2, %xmm3 1773 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 1774 ; SSSE3-NEXT: pxor %xmm4, %xmm2 1775 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 1776 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm6 1777 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2] 1778 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm2 1779 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3] 1780 ; SSSE3-NEXT: pand %xmm10, %xmm7 1781 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3] 1782 ; SSSE3-NEXT: por %xmm7, %xmm2 1783 ; SSSE3-NEXT: pand %xmm2, %xmm1 1784 ; SSSE3-NEXT: pandn %xmm8, %xmm2 1785 ; SSSE3-NEXT: por %xmm1, %xmm2 1786 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 1787 ; SSSE3-NEXT: pxor %xmm4, %xmm1 1788 ; SSSE3-NEXT: movdqa %xmm9, %xmm6 1789 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm6 1790 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 1791 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 1792 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1793 ; SSSE3-NEXT: pand %xmm7, %xmm1 1794 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 1795 ; SSSE3-NEXT: por %xmm1, %xmm7 1796 ; SSSE3-NEXT: pand %xmm7, %xmm0 1797 ; SSSE3-NEXT: pandn %xmm8, %xmm7 1798 ; SSSE3-NEXT: por %xmm0, %xmm7 1799 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [18446744073709551488,18446744073709551488] 1800 ; SSSE3-NEXT: movdqa %xmm7, %xmm0 1801 ; SSSE3-NEXT: pxor %xmm4, %xmm0 1802 ; SSSE3-NEXT: movdqa {{.*#+}} xmm9 = [18446744071562067840,18446744071562067840] 1803 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 1804 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1 1805 ; SSSE3-NEXT: pshufd {{.*#+}} xmm10 = xmm1[0,0,2,2] 1806 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm0 1807 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1808 ; SSSE3-NEXT: pand %xmm10, %xmm6 1809 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 1810 ; SSSE3-NEXT: por %xmm6, %xmm0 1811 ; SSSE3-NEXT: pand %xmm0, %xmm7 1812 ; SSSE3-NEXT: pandn %xmm8, %xmm0 1813 ; SSSE3-NEXT: por %xmm7, %xmm0 1814 ; SSSE3-NEXT: movdqa %xmm2, %xmm1 1815 ; SSSE3-NEXT: pxor %xmm4, %xmm1 1816 ; SSSE3-NEXT: movdqa %xmm1, %xmm6 1817 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm6 1818 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 1819 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 1820 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1821 ; SSSE3-NEXT: pand %xmm7, %xmm1 1822 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[1,1,3,3] 1823 ; SSSE3-NEXT: por %xmm1, %xmm7 1824 ; SSSE3-NEXT: pand %xmm7, %xmm2 1825 ; SSSE3-NEXT: pandn %xmm8, %xmm7 1826 ; SSSE3-NEXT: por %xmm2, %xmm7 1827 ; SSSE3-NEXT: movdqa %xmm3, %xmm1 1828 ; SSSE3-NEXT: pxor %xmm4, %xmm1 1829 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 1830 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm2 1831 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2] 1832 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm1 1833 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1834 ; SSSE3-NEXT: pand %xmm6, %xmm1 1835 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 1836 ; SSSE3-NEXT: por %xmm1, %xmm2 1837 ; SSSE3-NEXT: pand %xmm2, %xmm3 1838 ; SSSE3-NEXT: pandn %xmm8, %xmm2 1839 ; SSSE3-NEXT: por %xmm3, %xmm2 1840 ; SSSE3-NEXT: pxor %xmm5, %xmm4 1841 ; SSSE3-NEXT: movdqa %xmm4, %xmm1 1842 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm1 1843 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2] 1844 ; SSSE3-NEXT: pcmpeqd %xmm9, %xmm4 1845 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 1846 ; SSSE3-NEXT: pand %xmm3, %xmm4 1847 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 1848 ; SSSE3-NEXT: por %xmm4, %xmm1 1849 ; SSSE3-NEXT: pand %xmm1, %xmm5 1850 ; SSSE3-NEXT: pandn %xmm8, %xmm1 1851 ; SSSE3-NEXT: por %xmm5, %xmm1 1852 ; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 1853 ; SSSE3-NEXT: pand %xmm3, %xmm1 1854 ; SSSE3-NEXT: pand %xmm3, %xmm2 1855 ; SSSE3-NEXT: packuswb %xmm1, %xmm2 1856 ; SSSE3-NEXT: pand %xmm3, %xmm7 1857 ; SSSE3-NEXT: pand %xmm3, %xmm0 1858 ; SSSE3-NEXT: packuswb %xmm7, %xmm0 1859 ; SSSE3-NEXT: packuswb %xmm2, %xmm0 1860 ; SSSE3-NEXT: packuswb %xmm0, %xmm0 1861 ; SSSE3-NEXT: movq %xmm0, (%rdi) 1862 ; SSSE3-NEXT: retq 1863 ; 1864 ; SSE41-LABEL: trunc_ssat_v8i64_v8i8_store: 1865 ; SSE41: # %bb.0: 1866 ; SSE41-NEXT: movdqa %xmm0, %xmm8 1867 ; SSE41-NEXT: movapd {{.*#+}} xmm7 = [127,127] 1868 ; SSE41-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0] 1869 ; SSE41-NEXT: movdqa %xmm3, %xmm0 1870 ; SSE41-NEXT: pxor %xmm5, %xmm0 1871 ; SSE41-NEXT: movdqa {{.*#+}} xmm10 = [2147483775,2147483775] 1872 ; SSE41-NEXT: movdqa %xmm10, %xmm6 1873 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6 1874 ; SSE41-NEXT: pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2] 1875 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1876 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 1877 ; SSE41-NEXT: pand %xmm9, %xmm4 1878 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 1879 ; SSE41-NEXT: por %xmm4, %xmm0 1880 ; SSE41-NEXT: movapd %xmm7, %xmm9 1881 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm9 1882 ; SSE41-NEXT: movdqa %xmm2, %xmm0 1883 ; SSE41-NEXT: pxor %xmm5, %xmm0 1884 ; SSE41-NEXT: movdqa %xmm10, %xmm3 1885 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm3 1886 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 1887 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1888 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1889 ; SSE41-NEXT: pand %xmm4, %xmm6 1890 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3] 1891 ; SSE41-NEXT: por %xmm6, %xmm0 1892 ; SSE41-NEXT: movapd %xmm7, %xmm11 1893 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm11 1894 ; SSE41-NEXT: movdqa %xmm1, %xmm0 1895 ; SSE41-NEXT: pxor %xmm5, %xmm0 1896 ; SSE41-NEXT: movdqa %xmm10, %xmm2 1897 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 1898 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 1899 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1900 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1901 ; SSE41-NEXT: pand %xmm4, %xmm6 1902 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 1903 ; SSE41-NEXT: por %xmm6, %xmm0 1904 ; SSE41-NEXT: movapd %xmm7, %xmm6 1905 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm6 1906 ; SSE41-NEXT: movdqa %xmm8, %xmm0 1907 ; SSE41-NEXT: pxor %xmm5, %xmm0 1908 ; SSE41-NEXT: movdqa %xmm10, %xmm1 1909 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm1 1910 ; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 1911 ; SSE41-NEXT: pcmpeqd %xmm10, %xmm0 1912 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 1913 ; SSE41-NEXT: pand %xmm2, %xmm4 1914 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 1915 ; SSE41-NEXT: por %xmm4, %xmm0 1916 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm7 1917 ; SSE41-NEXT: movapd {{.*#+}} xmm1 = [18446744073709551488,18446744073709551488] 1918 ; SSE41-NEXT: movapd %xmm7, %xmm0 1919 ; SSE41-NEXT: xorpd %xmm5, %xmm0 1920 ; SSE41-NEXT: movdqa {{.*#+}} xmm8 = [18446744071562067840,18446744071562067840] 1921 ; SSE41-NEXT: movapd %xmm0, %xmm2 1922 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm2 1923 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 1924 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 1925 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 1926 ; SSE41-NEXT: pand %xmm3, %xmm4 1927 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 1928 ; SSE41-NEXT: por %xmm4, %xmm0 1929 ; SSE41-NEXT: movapd %xmm1, %xmm2 1930 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm2 1931 ; SSE41-NEXT: movapd %xmm6, %xmm0 1932 ; SSE41-NEXT: xorpd %xmm5, %xmm0 1933 ; SSE41-NEXT: movapd %xmm0, %xmm3 1934 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3 1935 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 1936 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 1937 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 1938 ; SSE41-NEXT: pand %xmm4, %xmm7 1939 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3] 1940 ; SSE41-NEXT: por %xmm7, %xmm0 1941 ; SSE41-NEXT: movapd %xmm1, %xmm7 1942 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm7 1943 ; SSE41-NEXT: movapd %xmm11, %xmm0 1944 ; SSE41-NEXT: xorpd %xmm5, %xmm0 1945 ; SSE41-NEXT: movapd %xmm0, %xmm3 1946 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3 1947 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 1948 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 1949 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 1950 ; SSE41-NEXT: pand %xmm4, %xmm6 1951 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3] 1952 ; SSE41-NEXT: por %xmm6, %xmm0 1953 ; SSE41-NEXT: movapd %xmm1, %xmm3 1954 ; SSE41-NEXT: blendvpd %xmm0, %xmm11, %xmm3 1955 ; SSE41-NEXT: xorpd %xmm9, %xmm5 1956 ; SSE41-NEXT: movapd %xmm5, %xmm0 1957 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm0 1958 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2] 1959 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm5 1960 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 1961 ; SSE41-NEXT: pand %xmm4, %xmm5 1962 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 1963 ; SSE41-NEXT: por %xmm5, %xmm0 1964 ; SSE41-NEXT: blendvpd %xmm0, %xmm9, %xmm1 1965 ; SSE41-NEXT: movapd {{.*#+}} xmm0 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 1966 ; SSE41-NEXT: andpd %xmm0, %xmm1 1967 ; SSE41-NEXT: andpd %xmm0, %xmm3 1968 ; SSE41-NEXT: packusdw %xmm1, %xmm3 1969 ; SSE41-NEXT: andpd %xmm0, %xmm7 1970 ; SSE41-NEXT: andpd %xmm0, %xmm2 1971 ; SSE41-NEXT: packusdw %xmm7, %xmm2 1972 ; SSE41-NEXT: packusdw %xmm3, %xmm2 1973 ; SSE41-NEXT: packuswb %xmm2, %xmm2 1974 ; SSE41-NEXT: movq %xmm2, (%rdi) 1975 ; SSE41-NEXT: retq 1976 ; 1977 ; AVX1-LABEL: trunc_ssat_v8i64_v8i8_store: 1978 ; AVX1: # %bb.0: 1979 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [127,127,127,127] 1980 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 1981 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [127,127] 1982 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1983 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm5 1984 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 1985 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 1986 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1987 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3 1988 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4 1989 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 1990 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1991 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488] 1992 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 1993 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [18446744073709551488,18446744073709551488] 1994 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 1995 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm5 1996 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3 1997 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 1998 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 1999 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3 2000 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm4 2001 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3 2002 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 2003 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 2004 ; AVX1-NEXT: vmovapd {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 2005 ; AVX1-NEXT: vandpd %xmm3, %xmm2, %xmm2 2006 ; AVX1-NEXT: vandpd %xmm3, %xmm1, %xmm1 2007 ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 2008 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 2009 ; AVX1-NEXT: vandpd %xmm3, %xmm2, %xmm2 2010 ; AVX1-NEXT: vandpd %xmm3, %xmm0, %xmm0 2011 ; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 2012 ; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 2013 ; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0 2014 ; AVX1-NEXT: vmovq %xmm0, (%rdi) 2015 ; AVX1-NEXT: vzeroupper 2016 ; AVX1-NEXT: retq 2017 ; 2018 ; AVX2-LABEL: trunc_ssat_v8i64_v8i8_store: 2019 ; AVX2: # %bb.0: 2020 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [127,127,127,127] 2021 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm3 2022 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 2023 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 2024 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 2025 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488] 2026 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm3 2027 ; AVX2-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0 2028 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm3 2029 ; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1 2030 ; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm2 2031 ; AVX2-NEXT: vpackssdw %xmm2, %xmm1, %xmm1 2032 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 2033 ; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 2034 ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm3 2035 ; AVX2-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 2036 ; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 2037 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 2038 ; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 2039 ; AVX2-NEXT: vmovq %xmm0, (%rdi) 2040 ; AVX2-NEXT: vzeroupper 2041 ; AVX2-NEXT: retq 2042 ; 2043 ; AVX512-LABEL: trunc_ssat_v8i64_v8i8_store: 2044 ; AVX512: # %bb.0: 2045 ; AVX512-NEXT: vpmovsqb %zmm0, (%rdi) 2046 ; AVX512-NEXT: vzeroupper 2047 ; AVX512-NEXT: retq 2048 %1 = icmp slt <8 x i64> %a0, <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127> 2049 %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127> 2050 %3 = icmp sgt <8 x i64> %2, <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128> 2051 %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128> 2052 %5 = trunc <8 x i64> %4 to <8 x i8> 2053 store <8 x i8> %5, <8 x i8> *%p1 2054 ret void 2055 } 2056 2057 define <16 x i8> @trunc_ssat_v16i64_v16i8(<16 x i64> %a0) { 2058 ; SSE2-LABEL: trunc_ssat_v16i64_v16i8: 2059 ; SSE2: # %bb.0: 2060 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [127,127] 2061 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 2062 ; SSE2-NEXT: movdqa %xmm6, %xmm9 2063 ; SSE2-NEXT: pxor %xmm8, %xmm9 2064 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483775,2147483775] 2065 ; SSE2-NEXT: movdqa %xmm11, %xmm12 2066 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12 2067 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 2068 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9 2069 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3] 2070 ; SSE2-NEXT: pand %xmm13, %xmm14 2071 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 2072 ; SSE2-NEXT: por %xmm14, %xmm9 2073 ; SSE2-NEXT: pand %xmm9, %xmm6 2074 ; SSE2-NEXT: pandn %xmm10, %xmm9 2075 ; SSE2-NEXT: por %xmm6, %xmm9 2076 ; SSE2-NEXT: movdqa %xmm7, %xmm6 2077 ; SSE2-NEXT: pxor %xmm8, %xmm6 2078 ; SSE2-NEXT: movdqa %xmm11, %xmm12 2079 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm12 2080 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 2081 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm6 2082 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 2083 ; SSE2-NEXT: pand %xmm13, %xmm6 2084 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 2085 ; SSE2-NEXT: por %xmm6, %xmm12 2086 ; SSE2-NEXT: pand %xmm12, %xmm7 2087 ; SSE2-NEXT: pandn %xmm10, %xmm12 2088 ; SSE2-NEXT: por %xmm7, %xmm12 2089 ; SSE2-NEXT: movdqa %xmm4, %xmm6 2090 ; SSE2-NEXT: pxor %xmm8, %xmm6 2091 ; SSE2-NEXT: movdqa %xmm11, %xmm7 2092 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7 2093 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2] 2094 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm6 2095 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 2096 ; SSE2-NEXT: pand %xmm13, %xmm6 2097 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3] 2098 ; SSE2-NEXT: por %xmm6, %xmm13 2099 ; SSE2-NEXT: pand %xmm13, %xmm4 2100 ; SSE2-NEXT: pandn %xmm10, %xmm13 2101 ; SSE2-NEXT: por %xmm4, %xmm13 2102 ; SSE2-NEXT: movdqa %xmm5, %xmm4 2103 ; SSE2-NEXT: pxor %xmm8, %xmm4 2104 ; SSE2-NEXT: movdqa %xmm11, %xmm6 2105 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6 2106 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 2107 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm4 2108 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2109 ; SSE2-NEXT: pand %xmm7, %xmm4 2110 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3] 2111 ; SSE2-NEXT: por %xmm4, %xmm14 2112 ; SSE2-NEXT: pand %xmm14, %xmm5 2113 ; SSE2-NEXT: pandn %xmm10, %xmm14 2114 ; SSE2-NEXT: por %xmm5, %xmm14 2115 ; SSE2-NEXT: movdqa %xmm2, %xmm4 2116 ; SSE2-NEXT: pxor %xmm8, %xmm4 2117 ; SSE2-NEXT: movdqa %xmm11, %xmm5 2118 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5 2119 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 2120 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm4 2121 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2122 ; SSE2-NEXT: pand %xmm6, %xmm4 2123 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 2124 ; SSE2-NEXT: por %xmm4, %xmm5 2125 ; SSE2-NEXT: pand %xmm5, %xmm2 2126 ; SSE2-NEXT: pandn %xmm10, %xmm5 2127 ; SSE2-NEXT: por %xmm2, %xmm5 2128 ; SSE2-NEXT: movdqa %xmm3, %xmm2 2129 ; SSE2-NEXT: pxor %xmm8, %xmm2 2130 ; SSE2-NEXT: movdqa %xmm11, %xmm4 2131 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4 2132 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2133 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm2 2134 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2135 ; SSE2-NEXT: pand %xmm6, %xmm2 2136 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3] 2137 ; SSE2-NEXT: por %xmm2, %xmm6 2138 ; SSE2-NEXT: pand %xmm6, %xmm3 2139 ; SSE2-NEXT: pandn %xmm10, %xmm6 2140 ; SSE2-NEXT: por %xmm3, %xmm6 2141 ; SSE2-NEXT: movdqa %xmm0, %xmm2 2142 ; SSE2-NEXT: pxor %xmm8, %xmm2 2143 ; SSE2-NEXT: movdqa %xmm11, %xmm3 2144 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3 2145 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2146 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm2 2147 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2148 ; SSE2-NEXT: pand %xmm4, %xmm2 2149 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2150 ; SSE2-NEXT: por %xmm2, %xmm3 2151 ; SSE2-NEXT: pand %xmm3, %xmm0 2152 ; SSE2-NEXT: pandn %xmm10, %xmm3 2153 ; SSE2-NEXT: por %xmm0, %xmm3 2154 ; SSE2-NEXT: movdqa %xmm1, %xmm0 2155 ; SSE2-NEXT: pxor %xmm8, %xmm0 2156 ; SSE2-NEXT: movdqa %xmm11, %xmm2 2157 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 2158 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 2159 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm0 2160 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2161 ; SSE2-NEXT: pand %xmm4, %xmm0 2162 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3] 2163 ; SSE2-NEXT: por %xmm0, %xmm4 2164 ; SSE2-NEXT: pand %xmm4, %xmm1 2165 ; SSE2-NEXT: pandn %xmm10, %xmm4 2166 ; SSE2-NEXT: por %xmm1, %xmm4 2167 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [18446744073709551488,18446744073709551488] 2168 ; SSE2-NEXT: movdqa %xmm4, %xmm0 2169 ; SSE2-NEXT: pxor %xmm8, %xmm0 2170 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [18446744071562067840,18446744071562067840] 2171 ; SSE2-NEXT: movdqa %xmm0, %xmm1 2172 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm1 2173 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 2174 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm0 2175 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2176 ; SSE2-NEXT: pand %xmm2, %xmm0 2177 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2178 ; SSE2-NEXT: por %xmm0, %xmm1 2179 ; SSE2-NEXT: pand %xmm1, %xmm4 2180 ; SSE2-NEXT: pandn %xmm10, %xmm1 2181 ; SSE2-NEXT: por %xmm4, %xmm1 2182 ; SSE2-NEXT: movdqa %xmm3, %xmm0 2183 ; SSE2-NEXT: pxor %xmm8, %xmm0 2184 ; SSE2-NEXT: movdqa %xmm0, %xmm2 2185 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm2 2186 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 2187 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm0 2188 ; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2189 ; SSE2-NEXT: pand %xmm4, %xmm7 2190 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 2191 ; SSE2-NEXT: por %xmm7, %xmm0 2192 ; SSE2-NEXT: pand %xmm0, %xmm3 2193 ; SSE2-NEXT: pandn %xmm10, %xmm0 2194 ; SSE2-NEXT: por %xmm3, %xmm0 2195 ; SSE2-NEXT: packssdw %xmm1, %xmm0 2196 ; SSE2-NEXT: movdqa %xmm6, %xmm1 2197 ; SSE2-NEXT: pxor %xmm8, %xmm1 2198 ; SSE2-NEXT: movdqa %xmm1, %xmm2 2199 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm2 2200 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 2201 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1 2202 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2203 ; SSE2-NEXT: pand %xmm3, %xmm1 2204 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2205 ; SSE2-NEXT: por %xmm1, %xmm2 2206 ; SSE2-NEXT: pand %xmm2, %xmm6 2207 ; SSE2-NEXT: pandn %xmm10, %xmm2 2208 ; SSE2-NEXT: por %xmm6, %xmm2 2209 ; SSE2-NEXT: movdqa %xmm5, %xmm1 2210 ; SSE2-NEXT: pxor %xmm8, %xmm1 2211 ; SSE2-NEXT: movdqa %xmm1, %xmm3 2212 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm3 2213 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2214 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1 2215 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2216 ; SSE2-NEXT: pand %xmm4, %xmm1 2217 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2218 ; SSE2-NEXT: por %xmm1, %xmm3 2219 ; SSE2-NEXT: pand %xmm3, %xmm5 2220 ; SSE2-NEXT: pandn %xmm10, %xmm3 2221 ; SSE2-NEXT: por %xmm5, %xmm3 2222 ; SSE2-NEXT: packssdw %xmm2, %xmm3 2223 ; SSE2-NEXT: packssdw %xmm3, %xmm0 2224 ; SSE2-NEXT: movdqa %xmm14, %xmm1 2225 ; SSE2-NEXT: pxor %xmm8, %xmm1 2226 ; SSE2-NEXT: movdqa %xmm1, %xmm2 2227 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm2 2228 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 2229 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1 2230 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2231 ; SSE2-NEXT: pand %xmm3, %xmm1 2232 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2233 ; SSE2-NEXT: por %xmm1, %xmm2 2234 ; SSE2-NEXT: pand %xmm2, %xmm14 2235 ; SSE2-NEXT: pandn %xmm10, %xmm2 2236 ; SSE2-NEXT: por %xmm14, %xmm2 2237 ; SSE2-NEXT: movdqa %xmm13, %xmm1 2238 ; SSE2-NEXT: pxor %xmm8, %xmm1 2239 ; SSE2-NEXT: movdqa %xmm1, %xmm3 2240 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm3 2241 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2242 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1 2243 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2244 ; SSE2-NEXT: pand %xmm4, %xmm1 2245 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2246 ; SSE2-NEXT: por %xmm1, %xmm3 2247 ; SSE2-NEXT: pand %xmm3, %xmm13 2248 ; SSE2-NEXT: pandn %xmm10, %xmm3 2249 ; SSE2-NEXT: por %xmm13, %xmm3 2250 ; SSE2-NEXT: packssdw %xmm2, %xmm3 2251 ; SSE2-NEXT: movdqa %xmm12, %xmm1 2252 ; SSE2-NEXT: pxor %xmm8, %xmm1 2253 ; SSE2-NEXT: movdqa %xmm1, %xmm2 2254 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm2 2255 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 2256 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm1 2257 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2258 ; SSE2-NEXT: pand %xmm4, %xmm1 2259 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2260 ; SSE2-NEXT: por %xmm1, %xmm2 2261 ; SSE2-NEXT: pand %xmm2, %xmm12 2262 ; SSE2-NEXT: pandn %xmm10, %xmm2 2263 ; SSE2-NEXT: por %xmm12, %xmm2 2264 ; SSE2-NEXT: pxor %xmm9, %xmm8 2265 ; SSE2-NEXT: movdqa %xmm8, %xmm1 2266 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm1 2267 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2] 2268 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm8 2269 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3] 2270 ; SSE2-NEXT: pand %xmm4, %xmm5 2271 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2272 ; SSE2-NEXT: por %xmm5, %xmm1 2273 ; SSE2-NEXT: pand %xmm1, %xmm9 2274 ; SSE2-NEXT: pandn %xmm10, %xmm1 2275 ; SSE2-NEXT: por %xmm9, %xmm1 2276 ; SSE2-NEXT: packssdw %xmm2, %xmm1 2277 ; SSE2-NEXT: packssdw %xmm1, %xmm3 2278 ; SSE2-NEXT: packsswb %xmm3, %xmm0 2279 ; SSE2-NEXT: retq 2280 ; 2281 ; SSSE3-LABEL: trunc_ssat_v16i64_v16i8: 2282 ; SSSE3: # %bb.0: 2283 ; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [127,127] 2284 ; SSSE3-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0] 2285 ; SSSE3-NEXT: movdqa %xmm6, %xmm9 2286 ; SSSE3-NEXT: pxor %xmm8, %xmm9 2287 ; SSSE3-NEXT: movdqa {{.*#+}} xmm11 = [2147483775,2147483775] 2288 ; SSSE3-NEXT: movdqa %xmm11, %xmm12 2289 ; SSSE3-NEXT: pcmpgtd %xmm9, %xmm12 2290 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 2291 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm9 2292 ; SSSE3-NEXT: pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3] 2293 ; SSSE3-NEXT: pand %xmm13, %xmm14 2294 ; SSSE3-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3] 2295 ; SSSE3-NEXT: por %xmm14, %xmm9 2296 ; SSSE3-NEXT: pand %xmm9, %xmm6 2297 ; SSSE3-NEXT: pandn %xmm10, %xmm9 2298 ; SSSE3-NEXT: por %xmm6, %xmm9 2299 ; SSSE3-NEXT: movdqa %xmm7, %xmm6 2300 ; SSSE3-NEXT: pxor %xmm8, %xmm6 2301 ; SSSE3-NEXT: movdqa %xmm11, %xmm12 2302 ; SSSE3-NEXT: pcmpgtd %xmm6, %xmm12 2303 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2] 2304 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm6 2305 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 2306 ; SSSE3-NEXT: pand %xmm13, %xmm6 2307 ; SSSE3-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3] 2308 ; SSSE3-NEXT: por %xmm6, %xmm12 2309 ; SSSE3-NEXT: pand %xmm12, %xmm7 2310 ; SSSE3-NEXT: pandn %xmm10, %xmm12 2311 ; SSSE3-NEXT: por %xmm7, %xmm12 2312 ; SSSE3-NEXT: movdqa %xmm4, %xmm6 2313 ; SSSE3-NEXT: pxor %xmm8, %xmm6 2314 ; SSSE3-NEXT: movdqa %xmm11, %xmm7 2315 ; SSSE3-NEXT: pcmpgtd %xmm6, %xmm7 2316 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2] 2317 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm6 2318 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3] 2319 ; SSSE3-NEXT: pand %xmm13, %xmm6 2320 ; SSSE3-NEXT: pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3] 2321 ; SSSE3-NEXT: por %xmm6, %xmm13 2322 ; SSSE3-NEXT: pand %xmm13, %xmm4 2323 ; SSSE3-NEXT: pandn %xmm10, %xmm13 2324 ; SSSE3-NEXT: por %xmm4, %xmm13 2325 ; SSSE3-NEXT: movdqa %xmm5, %xmm4 2326 ; SSSE3-NEXT: pxor %xmm8, %xmm4 2327 ; SSSE3-NEXT: movdqa %xmm11, %xmm6 2328 ; SSSE3-NEXT: pcmpgtd %xmm4, %xmm6 2329 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2] 2330 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm4 2331 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2332 ; SSSE3-NEXT: pand %xmm7, %xmm4 2333 ; SSSE3-NEXT: pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3] 2334 ; SSSE3-NEXT: por %xmm4, %xmm14 2335 ; SSSE3-NEXT: pand %xmm14, %xmm5 2336 ; SSSE3-NEXT: pandn %xmm10, %xmm14 2337 ; SSSE3-NEXT: por %xmm5, %xmm14 2338 ; SSSE3-NEXT: movdqa %xmm2, %xmm4 2339 ; SSSE3-NEXT: pxor %xmm8, %xmm4 2340 ; SSSE3-NEXT: movdqa %xmm11, %xmm5 2341 ; SSSE3-NEXT: pcmpgtd %xmm4, %xmm5 2342 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 2343 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm4 2344 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2345 ; SSSE3-NEXT: pand %xmm6, %xmm4 2346 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 2347 ; SSSE3-NEXT: por %xmm4, %xmm5 2348 ; SSSE3-NEXT: pand %xmm5, %xmm2 2349 ; SSSE3-NEXT: pandn %xmm10, %xmm5 2350 ; SSSE3-NEXT: por %xmm2, %xmm5 2351 ; SSSE3-NEXT: movdqa %xmm3, %xmm2 2352 ; SSSE3-NEXT: pxor %xmm8, %xmm2 2353 ; SSSE3-NEXT: movdqa %xmm11, %xmm4 2354 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm4 2355 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2356 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm2 2357 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2358 ; SSSE3-NEXT: pand %xmm6, %xmm2 2359 ; SSSE3-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3] 2360 ; SSSE3-NEXT: por %xmm2, %xmm6 2361 ; SSSE3-NEXT: pand %xmm6, %xmm3 2362 ; SSSE3-NEXT: pandn %xmm10, %xmm6 2363 ; SSSE3-NEXT: por %xmm3, %xmm6 2364 ; SSSE3-NEXT: movdqa %xmm0, %xmm2 2365 ; SSSE3-NEXT: pxor %xmm8, %xmm2 2366 ; SSSE3-NEXT: movdqa %xmm11, %xmm3 2367 ; SSSE3-NEXT: pcmpgtd %xmm2, %xmm3 2368 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2369 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm2 2370 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2371 ; SSSE3-NEXT: pand %xmm4, %xmm2 2372 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2373 ; SSSE3-NEXT: por %xmm2, %xmm3 2374 ; SSSE3-NEXT: pand %xmm3, %xmm0 2375 ; SSSE3-NEXT: pandn %xmm10, %xmm3 2376 ; SSSE3-NEXT: por %xmm0, %xmm3 2377 ; SSSE3-NEXT: movdqa %xmm1, %xmm0 2378 ; SSSE3-NEXT: pxor %xmm8, %xmm0 2379 ; SSSE3-NEXT: movdqa %xmm11, %xmm2 2380 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm2 2381 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 2382 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm0 2383 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2384 ; SSSE3-NEXT: pand %xmm4, %xmm0 2385 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3] 2386 ; SSSE3-NEXT: por %xmm0, %xmm4 2387 ; SSSE3-NEXT: pand %xmm4, %xmm1 2388 ; SSSE3-NEXT: pandn %xmm10, %xmm4 2389 ; SSSE3-NEXT: por %xmm1, %xmm4 2390 ; SSSE3-NEXT: movdqa {{.*#+}} xmm10 = [18446744073709551488,18446744073709551488] 2391 ; SSSE3-NEXT: movdqa %xmm4, %xmm0 2392 ; SSSE3-NEXT: pxor %xmm8, %xmm0 2393 ; SSSE3-NEXT: movdqa {{.*#+}} xmm11 = [18446744071562067840,18446744071562067840] 2394 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 2395 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm1 2396 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2] 2397 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm0 2398 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2399 ; SSSE3-NEXT: pand %xmm2, %xmm0 2400 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2401 ; SSSE3-NEXT: por %xmm0, %xmm1 2402 ; SSSE3-NEXT: pand %xmm1, %xmm4 2403 ; SSSE3-NEXT: pandn %xmm10, %xmm1 2404 ; SSSE3-NEXT: por %xmm4, %xmm1 2405 ; SSSE3-NEXT: movdqa %xmm3, %xmm0 2406 ; SSSE3-NEXT: pxor %xmm8, %xmm0 2407 ; SSSE3-NEXT: movdqa %xmm0, %xmm2 2408 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm2 2409 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 2410 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm0 2411 ; SSSE3-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2412 ; SSSE3-NEXT: pand %xmm4, %xmm7 2413 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 2414 ; SSSE3-NEXT: por %xmm7, %xmm0 2415 ; SSSE3-NEXT: pand %xmm0, %xmm3 2416 ; SSSE3-NEXT: pandn %xmm10, %xmm0 2417 ; SSSE3-NEXT: por %xmm3, %xmm0 2418 ; SSSE3-NEXT: packssdw %xmm1, %xmm0 2419 ; SSSE3-NEXT: movdqa %xmm6, %xmm1 2420 ; SSSE3-NEXT: pxor %xmm8, %xmm1 2421 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 2422 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm2 2423 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 2424 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1 2425 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2426 ; SSSE3-NEXT: pand %xmm3, %xmm1 2427 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2428 ; SSSE3-NEXT: por %xmm1, %xmm2 2429 ; SSSE3-NEXT: pand %xmm2, %xmm6 2430 ; SSSE3-NEXT: pandn %xmm10, %xmm2 2431 ; SSSE3-NEXT: por %xmm6, %xmm2 2432 ; SSSE3-NEXT: movdqa %xmm5, %xmm1 2433 ; SSSE3-NEXT: pxor %xmm8, %xmm1 2434 ; SSSE3-NEXT: movdqa %xmm1, %xmm3 2435 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm3 2436 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2437 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1 2438 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2439 ; SSSE3-NEXT: pand %xmm4, %xmm1 2440 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2441 ; SSSE3-NEXT: por %xmm1, %xmm3 2442 ; SSSE3-NEXT: pand %xmm3, %xmm5 2443 ; SSSE3-NEXT: pandn %xmm10, %xmm3 2444 ; SSSE3-NEXT: por %xmm5, %xmm3 2445 ; SSSE3-NEXT: packssdw %xmm2, %xmm3 2446 ; SSSE3-NEXT: packssdw %xmm3, %xmm0 2447 ; SSSE3-NEXT: movdqa %xmm14, %xmm1 2448 ; SSSE3-NEXT: pxor %xmm8, %xmm1 2449 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 2450 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm2 2451 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 2452 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1 2453 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2454 ; SSSE3-NEXT: pand %xmm3, %xmm1 2455 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2456 ; SSSE3-NEXT: por %xmm1, %xmm2 2457 ; SSSE3-NEXT: pand %xmm2, %xmm14 2458 ; SSSE3-NEXT: pandn %xmm10, %xmm2 2459 ; SSSE3-NEXT: por %xmm14, %xmm2 2460 ; SSSE3-NEXT: movdqa %xmm13, %xmm1 2461 ; SSSE3-NEXT: pxor %xmm8, %xmm1 2462 ; SSSE3-NEXT: movdqa %xmm1, %xmm3 2463 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm3 2464 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2465 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1 2466 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2467 ; SSSE3-NEXT: pand %xmm4, %xmm1 2468 ; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 2469 ; SSSE3-NEXT: por %xmm1, %xmm3 2470 ; SSSE3-NEXT: pand %xmm3, %xmm13 2471 ; SSSE3-NEXT: pandn %xmm10, %xmm3 2472 ; SSSE3-NEXT: por %xmm13, %xmm3 2473 ; SSSE3-NEXT: packssdw %xmm2, %xmm3 2474 ; SSSE3-NEXT: movdqa %xmm12, %xmm1 2475 ; SSSE3-NEXT: pxor %xmm8, %xmm1 2476 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 2477 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm2 2478 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2] 2479 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm1 2480 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2481 ; SSSE3-NEXT: pand %xmm4, %xmm1 2482 ; SSSE3-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2483 ; SSSE3-NEXT: por %xmm1, %xmm2 2484 ; SSSE3-NEXT: pand %xmm2, %xmm12 2485 ; SSSE3-NEXT: pandn %xmm10, %xmm2 2486 ; SSSE3-NEXT: por %xmm12, %xmm2 2487 ; SSSE3-NEXT: pxor %xmm9, %xmm8 2488 ; SSSE3-NEXT: movdqa %xmm8, %xmm1 2489 ; SSSE3-NEXT: pcmpgtd %xmm11, %xmm1 2490 ; SSSE3-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2] 2491 ; SSSE3-NEXT: pcmpeqd %xmm11, %xmm8 2492 ; SSSE3-NEXT: pshufd {{.*#+}} xmm5 = xmm8[1,1,3,3] 2493 ; SSSE3-NEXT: pand %xmm4, %xmm5 2494 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 2495 ; SSSE3-NEXT: por %xmm5, %xmm1 2496 ; SSSE3-NEXT: pand %xmm1, %xmm9 2497 ; SSSE3-NEXT: pandn %xmm10, %xmm1 2498 ; SSSE3-NEXT: por %xmm9, %xmm1 2499 ; SSSE3-NEXT: packssdw %xmm2, %xmm1 2500 ; SSSE3-NEXT: packssdw %xmm1, %xmm3 2501 ; SSSE3-NEXT: packsswb %xmm3, %xmm0 2502 ; SSSE3-NEXT: retq 2503 ; 2504 ; SSE41-LABEL: trunc_ssat_v16i64_v16i8: 2505 ; SSE41: # %bb.0: 2506 ; SSE41-NEXT: movdqa %xmm0, %xmm8 2507 ; SSE41-NEXT: movapd {{.*#+}} xmm11 = [127,127] 2508 ; SSE41-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0] 2509 ; SSE41-NEXT: movdqa %xmm6, %xmm0 2510 ; SSE41-NEXT: pxor %xmm9, %xmm0 2511 ; SSE41-NEXT: movdqa {{.*#+}} xmm12 = [2147483775,2147483775] 2512 ; SSE41-NEXT: movdqa %xmm12, %xmm10 2513 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm10 2514 ; SSE41-NEXT: pshufd {{.*#+}} xmm13 = xmm10[0,0,2,2] 2515 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2516 ; SSE41-NEXT: pshufd {{.*#+}} xmm14 = xmm0[1,1,3,3] 2517 ; SSE41-NEXT: pand %xmm13, %xmm14 2518 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3] 2519 ; SSE41-NEXT: por %xmm14, %xmm0 2520 ; SSE41-NEXT: movapd %xmm11, %xmm10 2521 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm10 2522 ; SSE41-NEXT: movdqa %xmm7, %xmm0 2523 ; SSE41-NEXT: pxor %xmm9, %xmm0 2524 ; SSE41-NEXT: movdqa %xmm12, %xmm6 2525 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6 2526 ; SSE41-NEXT: pshufd {{.*#+}} xmm13 = xmm6[0,0,2,2] 2527 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2528 ; SSE41-NEXT: pshufd {{.*#+}} xmm14 = xmm0[1,1,3,3] 2529 ; SSE41-NEXT: pand %xmm13, %xmm14 2530 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 2531 ; SSE41-NEXT: por %xmm14, %xmm0 2532 ; SSE41-NEXT: movapd %xmm11, %xmm13 2533 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm13 2534 ; SSE41-NEXT: movdqa %xmm4, %xmm0 2535 ; SSE41-NEXT: pxor %xmm9, %xmm0 2536 ; SSE41-NEXT: movdqa %xmm12, %xmm6 2537 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm6 2538 ; SSE41-NEXT: pshufd {{.*#+}} xmm14 = xmm6[0,0,2,2] 2539 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2540 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2541 ; SSE41-NEXT: pand %xmm14, %xmm7 2542 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3] 2543 ; SSE41-NEXT: por %xmm7, %xmm0 2544 ; SSE41-NEXT: movapd %xmm11, %xmm14 2545 ; SSE41-NEXT: blendvpd %xmm0, %xmm4, %xmm14 2546 ; SSE41-NEXT: movdqa %xmm5, %xmm0 2547 ; SSE41-NEXT: pxor %xmm9, %xmm0 2548 ; SSE41-NEXT: movdqa %xmm12, %xmm4 2549 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm4 2550 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2551 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2552 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2553 ; SSE41-NEXT: pand %xmm6, %xmm7 2554 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 2555 ; SSE41-NEXT: por %xmm7, %xmm0 2556 ; SSE41-NEXT: movapd %xmm11, %xmm15 2557 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm15 2558 ; SSE41-NEXT: movdqa %xmm2, %xmm0 2559 ; SSE41-NEXT: pxor %xmm9, %xmm0 2560 ; SSE41-NEXT: movdqa %xmm12, %xmm5 2561 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm5 2562 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2] 2563 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2564 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2565 ; SSE41-NEXT: pand %xmm6, %xmm7 2566 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3] 2567 ; SSE41-NEXT: por %xmm7, %xmm0 2568 ; SSE41-NEXT: movapd %xmm11, %xmm5 2569 ; SSE41-NEXT: blendvpd %xmm0, %xmm2, %xmm5 2570 ; SSE41-NEXT: movdqa %xmm3, %xmm0 2571 ; SSE41-NEXT: pxor %xmm9, %xmm0 2572 ; SSE41-NEXT: movdqa %xmm12, %xmm2 2573 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 2574 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2] 2575 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2576 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2577 ; SSE41-NEXT: pand %xmm6, %xmm7 2578 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 2579 ; SSE41-NEXT: por %xmm7, %xmm0 2580 ; SSE41-NEXT: movapd %xmm11, %xmm6 2581 ; SSE41-NEXT: blendvpd %xmm0, %xmm3, %xmm6 2582 ; SSE41-NEXT: movdqa %xmm8, %xmm0 2583 ; SSE41-NEXT: pxor %xmm9, %xmm0 2584 ; SSE41-NEXT: movdqa %xmm12, %xmm2 2585 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 2586 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 2587 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2588 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2589 ; SSE41-NEXT: pand %xmm3, %xmm7 2590 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 2591 ; SSE41-NEXT: por %xmm7, %xmm0 2592 ; SSE41-NEXT: movapd %xmm11, %xmm7 2593 ; SSE41-NEXT: blendvpd %xmm0, %xmm8, %xmm7 2594 ; SSE41-NEXT: movdqa %xmm1, %xmm0 2595 ; SSE41-NEXT: pxor %xmm9, %xmm0 2596 ; SSE41-NEXT: movdqa %xmm12, %xmm2 2597 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 2598 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] 2599 ; SSE41-NEXT: pcmpeqd %xmm12, %xmm0 2600 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 2601 ; SSE41-NEXT: pand %xmm3, %xmm4 2602 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] 2603 ; SSE41-NEXT: por %xmm4, %xmm0 2604 ; SSE41-NEXT: blendvpd %xmm0, %xmm1, %xmm11 2605 ; SSE41-NEXT: movapd {{.*#+}} xmm2 = [18446744073709551488,18446744073709551488] 2606 ; SSE41-NEXT: movapd %xmm11, %xmm0 2607 ; SSE41-NEXT: xorpd %xmm9, %xmm0 2608 ; SSE41-NEXT: movdqa {{.*#+}} xmm8 = [18446744071562067840,18446744071562067840] 2609 ; SSE41-NEXT: movapd %xmm0, %xmm1 2610 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm1 2611 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2] 2612 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 2613 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 2614 ; SSE41-NEXT: pand %xmm4, %xmm3 2615 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 2616 ; SSE41-NEXT: por %xmm3, %xmm0 2617 ; SSE41-NEXT: movapd %xmm2, %xmm3 2618 ; SSE41-NEXT: blendvpd %xmm0, %xmm11, %xmm3 2619 ; SSE41-NEXT: movapd %xmm7, %xmm0 2620 ; SSE41-NEXT: xorpd %xmm9, %xmm0 2621 ; SSE41-NEXT: movapd %xmm0, %xmm1 2622 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm1 2623 ; SSE41-NEXT: pshufd {{.*#+}} xmm11 = xmm1[0,0,2,2] 2624 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 2625 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 2626 ; SSE41-NEXT: pand %xmm11, %xmm4 2627 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3] 2628 ; SSE41-NEXT: por %xmm4, %xmm0 2629 ; SSE41-NEXT: movapd %xmm2, %xmm1 2630 ; SSE41-NEXT: blendvpd %xmm0, %xmm7, %xmm1 2631 ; SSE41-NEXT: packssdw %xmm3, %xmm1 2632 ; SSE41-NEXT: movapd %xmm6, %xmm0 2633 ; SSE41-NEXT: xorpd %xmm9, %xmm0 2634 ; SSE41-NEXT: movapd %xmm0, %xmm3 2635 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3 2636 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2637 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 2638 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2639 ; SSE41-NEXT: pand %xmm4, %xmm7 2640 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3] 2641 ; SSE41-NEXT: por %xmm7, %xmm0 2642 ; SSE41-NEXT: movapd %xmm2, %xmm3 2643 ; SSE41-NEXT: blendvpd %xmm0, %xmm6, %xmm3 2644 ; SSE41-NEXT: movapd %xmm5, %xmm0 2645 ; SSE41-NEXT: xorpd %xmm9, %xmm0 2646 ; SSE41-NEXT: movapd %xmm0, %xmm4 2647 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm4 2648 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2] 2649 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 2650 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3] 2651 ; SSE41-NEXT: pand %xmm6, %xmm7 2652 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 2653 ; SSE41-NEXT: por %xmm7, %xmm0 2654 ; SSE41-NEXT: movapd %xmm2, %xmm4 2655 ; SSE41-NEXT: blendvpd %xmm0, %xmm5, %xmm4 2656 ; SSE41-NEXT: packssdw %xmm3, %xmm4 2657 ; SSE41-NEXT: packssdw %xmm4, %xmm1 2658 ; SSE41-NEXT: movapd %xmm15, %xmm0 2659 ; SSE41-NEXT: xorpd %xmm9, %xmm0 2660 ; SSE41-NEXT: movapd %xmm0, %xmm3 2661 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3 2662 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2] 2663 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 2664 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3] 2665 ; SSE41-NEXT: pand %xmm4, %xmm5 2666 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3] 2667 ; SSE41-NEXT: por %xmm5, %xmm0 2668 ; SSE41-NEXT: movapd %xmm2, %xmm3 2669 ; SSE41-NEXT: blendvpd %xmm0, %xmm15, %xmm3 2670 ; SSE41-NEXT: movapd %xmm14, %xmm0 2671 ; SSE41-NEXT: xorpd %xmm9, %xmm0 2672 ; SSE41-NEXT: movapd %xmm0, %xmm4 2673 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm4 2674 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2] 2675 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 2676 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 2677 ; SSE41-NEXT: pand %xmm5, %xmm6 2678 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3] 2679 ; SSE41-NEXT: por %xmm6, %xmm0 2680 ; SSE41-NEXT: movapd %xmm2, %xmm4 2681 ; SSE41-NEXT: blendvpd %xmm0, %xmm14, %xmm4 2682 ; SSE41-NEXT: packssdw %xmm3, %xmm4 2683 ; SSE41-NEXT: movapd %xmm13, %xmm0 2684 ; SSE41-NEXT: xorpd %xmm9, %xmm0 2685 ; SSE41-NEXT: movapd %xmm0, %xmm3 2686 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm3 2687 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2] 2688 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm0 2689 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3] 2690 ; SSE41-NEXT: pand %xmm5, %xmm6 2691 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3] 2692 ; SSE41-NEXT: por %xmm6, %xmm0 2693 ; SSE41-NEXT: movapd %xmm2, %xmm3 2694 ; SSE41-NEXT: blendvpd %xmm0, %xmm13, %xmm3 2695 ; SSE41-NEXT: xorpd %xmm10, %xmm9 2696 ; SSE41-NEXT: movapd %xmm9, %xmm0 2697 ; SSE41-NEXT: pcmpgtd %xmm8, %xmm0 2698 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2] 2699 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm9 2700 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm9[1,1,3,3] 2701 ; SSE41-NEXT: pand %xmm5, %xmm6 2702 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 2703 ; SSE41-NEXT: por %xmm6, %xmm0 2704 ; SSE41-NEXT: blendvpd %xmm0, %xmm10, %xmm2 2705 ; SSE41-NEXT: packssdw %xmm3, %xmm2 2706 ; SSE41-NEXT: packssdw %xmm2, %xmm4 2707 ; SSE41-NEXT: packsswb %xmm4, %xmm1 2708 ; SSE41-NEXT: movdqa %xmm1, %xmm0 2709 ; SSE41-NEXT: retq 2710 ; 2711 ; AVX1-LABEL: trunc_ssat_v16i64_v16i8: 2712 ; AVX1: # %bb.0: 2713 ; AVX1-NEXT: vmovapd {{.*#+}} ymm4 = [127,127,127,127] 2714 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 2715 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [127,127] 2716 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 2717 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm6, %xmm7 2718 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5 2719 ; AVX1-NEXT: vblendvpd %ymm5, %ymm3, %ymm4, %ymm3 2720 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 2721 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 2722 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm6, %xmm7 2723 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5 2724 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm4, %ymm2 2725 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 2726 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 2727 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm6, %xmm7 2728 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5 2729 ; AVX1-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1 2730 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 2731 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5 2732 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm6, %xmm6 2733 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 2734 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0 2735 ; AVX1-NEXT: vmovapd {{.*#+}} ymm4 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488] 2736 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 2737 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [18446744073709551488,18446744073709551488] 2738 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5 2739 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm0, %xmm7 2740 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5 2741 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0 2742 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 2743 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5 2744 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm1, %xmm7 2745 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5 2746 ; AVX1-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1 2747 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 2748 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5 2749 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm2, %xmm7 2750 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm7, %ymm5 2751 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm4, %ymm2 2752 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5 2753 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5 2754 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm6 2755 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5 2756 ; AVX1-NEXT: vblendvpd %ymm5, %ymm3, %ymm4, %ymm3 2757 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 2758 ; AVX1-NEXT: vpackssdw %xmm4, %xmm3, %xmm3 2759 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 2760 ; AVX1-NEXT: vpackssdw %xmm4, %xmm2, %xmm2 2761 ; AVX1-NEXT: vpackssdw %xmm3, %xmm2, %xmm2 2762 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 2763 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1 2764 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 2765 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0 2766 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 2767 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0 2768 ; AVX1-NEXT: vzeroupper 2769 ; AVX1-NEXT: retq 2770 ; 2771 ; AVX2-LABEL: trunc_ssat_v16i64_v16i8: 2772 ; AVX2: # %bb.0: 2773 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [127,127,127,127] 2774 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm5 2775 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm4, %ymm2 2776 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm4, %ymm5 2777 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm4, %ymm3 2778 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm4, %ymm5 2779 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0 2780 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm4, %ymm5 2781 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1 2782 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488] 2783 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm1, %ymm5 2784 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm4, %ymm1 2785 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm0, %ymm5 2786 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm4, %ymm0 2787 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 2788 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm3, %ymm1 2789 ; AVX2-NEXT: vblendvpd %ymm1, %ymm3, %ymm4, %ymm1 2790 ; AVX2-NEXT: vpcmpgtq %ymm4, %ymm2, %ymm3 2791 ; AVX2-NEXT: vblendvpd %ymm3, %ymm2, %ymm4, %ymm2 2792 ; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1 2793 ; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3] 2794 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2795 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 2796 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 2797 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2798 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 2799 ; AVX2-NEXT: vzeroupper 2800 ; AVX2-NEXT: retq 2801 ; 2802 ; AVX512-LABEL: trunc_ssat_v16i64_v16i8: 2803 ; AVX512: # %bb.0: 2804 ; AVX512-NEXT: vpbroadcastq {{.*#+}} zmm2 = [127,127,127,127,127,127,127,127] 2805 ; AVX512-NEXT: vpminsq %zmm2, %zmm0, %zmm0 2806 ; AVX512-NEXT: vpminsq %zmm2, %zmm1, %zmm1 2807 ; AVX512-NEXT: vpbroadcastq {{.*#+}} zmm2 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488] 2808 ; AVX512-NEXT: vpmaxsq %zmm2, %zmm1, %zmm1 2809 ; AVX512-NEXT: vpmaxsq %zmm2, %zmm0, %zmm0 2810 ; AVX512-NEXT: vpmovqd %zmm0, %ymm0 2811 ; AVX512-NEXT: vpmovqd %zmm1, %ymm1 2812 ; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 2813 ; AVX512-NEXT: vpmovdb %zmm0, %xmm0 2814 ; AVX512-NEXT: vzeroupper 2815 ; AVX512-NEXT: retq 2816 %1 = icmp slt <16 x i64> %a0, <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127> 2817 %2 = select <16 x i1> %1, <16 x i64> %a0, <16 x i64> <i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127, i64 127> 2818 %3 = icmp sgt <16 x i64> %2, <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128> 2819 %4 = select <16 x i1> %3, <16 x i64> %2, <16 x i64> <i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128, i64 -128> 2820 %5 = trunc <16 x i64> %4 to <16 x i8> 2821 ret <16 x i8> %5 2822 } 2823 2824 define <8 x i8> @trunc_ssat_v8i32_v8i8(<8 x i32> %a0) { 2825 ; SSE2-LABEL: trunc_ssat_v8i32_v8i8: 2826 ; SSE2: # %bb.0: 2827 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [127,127,127,127] 2828 ; SSE2-NEXT: movdqa %xmm2, %xmm3 2829 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm3 2830 ; SSE2-NEXT: pand %xmm3, %xmm0 2831 ; SSE2-NEXT: pandn %xmm2, %xmm3 2832 ; SSE2-NEXT: por %xmm0, %xmm3 2833 ; SSE2-NEXT: movdqa %xmm2, %xmm0 2834 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 2835 ; SSE2-NEXT: pand %xmm0, %xmm1 2836 ; SSE2-NEXT: pandn %xmm2, %xmm0 2837 ; SSE2-NEXT: por %xmm1, %xmm0 2838 ; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [4294967168,4294967168,4294967168,4294967168] 2839 ; SSE2-NEXT: movdqa %xmm0, %xmm2 2840 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 2841 ; SSE2-NEXT: pand %xmm2, %xmm0 2842 ; SSE2-NEXT: pandn %xmm1, %xmm2 2843 ; SSE2-NEXT: por %xmm0, %xmm2 2844 ; SSE2-NEXT: movdqa %xmm3, %xmm0 2845 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0 2846 ; SSE2-NEXT: pand %xmm0, %xmm3 2847 ; SSE2-NEXT: pandn %xmm1, %xmm0 2848 ; SSE2-NEXT: por %xmm3, %xmm0 2849 ; SSE2-NEXT: packssdw %xmm2, %xmm0 2850 ; SSE2-NEXT: retq 2851 ; 2852 ; SSSE3-LABEL: trunc_ssat_v8i32_v8i8: 2853 ; SSSE3: # %bb.0: 2854 ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [127,127,127,127] 2855 ; SSSE3-NEXT: movdqa %xmm2, %xmm3 2856 ; SSSE3-NEXT: pcmpgtd %xmm0, %xmm3 2857 ; SSSE3-NEXT: pand %xmm3, %xmm0 2858 ; SSSE3-NEXT: pandn %xmm2, %xmm3 2859 ; SSSE3-NEXT: por %xmm0, %xmm3 2860 ; SSSE3-NEXT: movdqa %xmm2, %xmm0 2861 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm0 2862 ; SSSE3-NEXT: pand %xmm0, %xmm1 2863 ; SSSE3-NEXT: pandn %xmm2, %xmm0 2864 ; SSSE3-NEXT: por %xmm1, %xmm0 2865 ; SSSE3-NEXT: movdqa {{.*#+}} xmm1 = [4294967168,4294967168,4294967168,4294967168] 2866 ; SSSE3-NEXT: movdqa %xmm0, %xmm2 2867 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm2 2868 ; SSSE3-NEXT: pand %xmm2, %xmm0 2869 ; SSSE3-NEXT: pandn %xmm1, %xmm2 2870 ; SSSE3-NEXT: por %xmm0, %xmm2 2871 ; SSSE3-NEXT: movdqa %xmm3, %xmm0 2872 ; SSSE3-NEXT: pcmpgtd %xmm1, %xmm0 2873 ; SSSE3-NEXT: pand %xmm0, %xmm3 2874 ; SSSE3-NEXT: pandn %xmm1, %xmm0 2875 ; SSSE3-NEXT: por %xmm3, %xmm0 2876 ; SSSE3-NEXT: packssdw %xmm2, %xmm0 2877 ; SSSE3-NEXT: retq 2878 ; 2879 ; SSE41-LABEL: trunc_ssat_v8i32_v8i8: 2880 ; SSE41: # %bb.0: 2881 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [127,127,127,127] 2882 ; SSE41-NEXT: pminsd %xmm2, %xmm0 2883 ; SSE41-NEXT: pminsd %xmm2, %xmm1 2884 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [4294967168,4294967168,4294967168,4294967168] 2885 ; SSE41-NEXT: pmaxsd %xmm2, %xmm1 2886 ; SSE41-NEXT: pmaxsd %xmm2, %xmm0 2887 ; SSE41-NEXT: packssdw %xmm1, %xmm0 2888 ; SSE41-NEXT: retq 2889 ; 2890 ; AVX1-LABEL: trunc_ssat_v8i32_v8i8: 2891 ; AVX1: # %bb.0: 2892 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [127,127,127,127] 2893 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm2 2894 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2895 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0 2896 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [4294967168,4294967168,4294967168,4294967168] 2897 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 2898 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm2, %xmm1 2899 ; AVX1-NEXT: vpackssdw %xmm0, %xmm1, %xmm0 2900 ; AVX1-NEXT: vzeroupper 2901 ; AVX1-NEXT: retq 2902 ; 2903 ; AVX2-LABEL: trunc_ssat_v8i32_v8i8: 2904 ; AVX2: # %bb.0: 2905 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127] 2906 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2907 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168] 2908 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2909 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2910 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 2911 ; AVX2-NEXT: vzeroupper 2912 ; AVX2-NEXT: retq 2913 ; 2914 ; AVX512F-LABEL: trunc_ssat_v8i32_v8i8: 2915 ; AVX512F: # %bb.0: 2916 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127] 2917 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2918 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168] 2919 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2920 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 2921 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 2922 ; AVX512F-NEXT: vzeroupper 2923 ; AVX512F-NEXT: retq 2924 ; 2925 ; AVX512VL-LABEL: trunc_ssat_v8i32_v8i8: 2926 ; AVX512VL: # %bb.0: 2927 ; AVX512VL-NEXT: vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0 2928 ; AVX512VL-NEXT: vpmaxsd {{.*}}(%rip){1to8}, %ymm0, %ymm0 2929 ; AVX512VL-NEXT: vpmovdw %ymm0, %xmm0 2930 ; AVX512VL-NEXT: vzeroupper 2931 ; AVX512VL-NEXT: retq 2932 ; 2933 ; AVX512BW-LABEL: trunc_ssat_v8i32_v8i8: 2934 ; AVX512BW: # %bb.0: 2935 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127] 2936 ; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2937 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168] 2938 ; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2939 ; AVX512BW-NEXT: vpmovdw %zmm0, %ymm0 2940 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 2941 ; AVX512BW-NEXT: vzeroupper 2942 ; AVX512BW-NEXT: retq 2943 ; 2944 ; AVX512BWVL-LABEL: trunc_ssat_v8i32_v8i8: 2945 ; AVX512BWVL: # %bb.0: 2946 ; AVX512BWVL-NEXT: vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0 2947 ; AVX512BWVL-NEXT: vpmaxsd {{.*}}(%rip){1to8}, %ymm0, %ymm0 2948 ; AVX512BWVL-NEXT: vpmovdw %ymm0, %xmm0 2949 ; AVX512BWVL-NEXT: vzeroupper 2950 ; AVX512BWVL-NEXT: retq 2951 %1 = icmp slt <8 x i32> %a0, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127> 2952 %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127> 2953 %3 = icmp sgt <8 x i32> %2, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128> 2954 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128> 2955 %5 = trunc <8 x i32> %4 to <8 x i8> 2956 ret <8 x i8> %5 2957 } 2958 2959 define void @trunc_ssat_v8i32_v8i8_store(<8 x i32> %a0, <8 x i8> *%p1) { 2960 ; SSE-LABEL: trunc_ssat_v8i32_v8i8_store: 2961 ; SSE: # %bb.0: 2962 ; SSE-NEXT: packssdw %xmm1, %xmm0 2963 ; SSE-NEXT: packsswb %xmm0, %xmm0 2964 ; SSE-NEXT: movq %xmm0, (%rdi) 2965 ; SSE-NEXT: retq 2966 ; 2967 ; AVX1-LABEL: trunc_ssat_v8i32_v8i8_store: 2968 ; AVX1: # %bb.0: 2969 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 2970 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 2971 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0 2972 ; AVX1-NEXT: vmovq %xmm0, (%rdi) 2973 ; AVX1-NEXT: vzeroupper 2974 ; AVX1-NEXT: retq 2975 ; 2976 ; AVX2-LABEL: trunc_ssat_v8i32_v8i8_store: 2977 ; AVX2: # %bb.0: 2978 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2979 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0 2980 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0 2981 ; AVX2-NEXT: vmovq %xmm0, (%rdi) 2982 ; AVX2-NEXT: vzeroupper 2983 ; AVX2-NEXT: retq 2984 ; 2985 ; AVX512F-LABEL: trunc_ssat_v8i32_v8i8_store: 2986 ; AVX512F: # %bb.0: 2987 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127] 2988 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0 2989 ; AVX512F-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168] 2990 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 2991 ; AVX512F-NEXT: vpmovdw %zmm0, %ymm0 2992 ; AVX512F-NEXT: vpacksswb %xmm0, %xmm0, %xmm0 2993 ; AVX512F-NEXT: vmovq %xmm0, (%rdi) 2994 ; AVX512F-NEXT: vzeroupper 2995 ; AVX512F-NEXT: retq 2996 ; 2997 ; AVX512VL-LABEL: trunc_ssat_v8i32_v8i8_store: 2998 ; AVX512VL: # %bb.0: 2999 ; AVX512VL-NEXT: vpmovsdb %ymm0, (%rdi) 3000 ; AVX512VL-NEXT: vzeroupper 3001 ; AVX512VL-NEXT: retq 3002 ; 3003 ; AVX512BW-LABEL: trunc_ssat_v8i32_v8i8_store: 3004 ; AVX512BW: # %bb.0: 3005 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [127,127,127,127,127,127,127,127] 3006 ; AVX512BW-NEXT: vpminsd %ymm1, %ymm0, %ymm0 3007 ; AVX512BW-NEXT: vpbroadcastd {{.*#+}} ymm1 = [4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168,4294967168] 3008 ; AVX512BW-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 3009 ; AVX512BW-NEXT: vpmovdw %zmm0, %ymm0 3010 ; AVX512BW-NEXT: vpacksswb %xmm0, %xmm0, %xmm0 3011 ; AVX512BW-NEXT: vmovq %xmm0, (%rdi) 3012 ; AVX512BW-NEXT: vzeroupper 3013 ; AVX512BW-NEXT: retq 3014 ; 3015 ; AVX512BWVL-LABEL: trunc_ssat_v8i32_v8i8_store: 3016 ; AVX512BWVL: # %bb.0: 3017 ; AVX512BWVL-NEXT: vpmovsdb %ymm0, (%rdi) 3018 ; AVX512BWVL-NEXT: vzeroupper 3019 ; AVX512BWVL-NEXT: retq 3020 %1 = icmp slt <8 x i32> %a0, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127> 3021 %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127> 3022 %3 = icmp sgt <8 x i32> %2, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128> 3023 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128> 3024 %5 = trunc <8 x i32> %4 to <8 x i8> 3025 store <8 x i8> %5, <8 x i8> *%p1 3026 ret void 3027 } 3028 3029 define <16 x i8> @trunc_ssat_v16i32_v16i8(<16 x i32> %a0) { 3030 ; SSE-LABEL: trunc_ssat_v16i32_v16i8: 3031 ; SSE: # %bb.0: 3032 ; SSE-NEXT: packssdw %xmm3, %xmm2 3033 ; SSE-NEXT: packssdw %xmm1, %xmm0 3034 ; SSE-NEXT: packsswb %xmm2, %xmm0 3035 ; SSE-NEXT: retq 3036 ; 3037 ; AVX1-LABEL: trunc_ssat_v16i32_v16i8: 3038 ; AVX1: # %bb.0: 3039 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3040 ; AVX1-NEXT: vpackssdw %xmm2, %xmm1, %xmm1 3041 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3042 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0 3043 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 3044 ; AVX1-NEXT: vzeroupper 3045 ; AVX1-NEXT: retq 3046 ; 3047 ; AVX2-LABEL: trunc_ssat_v16i32_v16i8: 3048 ; AVX2: # %bb.0: 3049 ; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0 3050 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 3051 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 3052 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 3053 ; AVX2-NEXT: vzeroupper 3054 ; AVX2-NEXT: retq 3055 ; 3056 ; AVX512-LABEL: trunc_ssat_v16i32_v16i8: 3057 ; AVX512: # %bb.0: 3058 ; AVX512-NEXT: vpmovsdb %zmm0, %xmm0 3059 ; AVX512-NEXT: vzeroupper 3060 ; AVX512-NEXT: retq 3061 %1 = icmp slt <16 x i32> %a0, <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127> 3062 %2 = select <16 x i1> %1, <16 x i32> %a0, <16 x i32> <i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127, i32 127> 3063 %3 = icmp sgt <16 x i32> %2, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128> 3064 %4 = select <16 x i1> %3, <16 x i32> %2, <16 x i32> <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128> 3065 %5 = trunc <16 x i32> %4 to <16 x i8> 3066 ret <16 x i8> %5 3067 } 3068 3069 define <16 x i8> @trunc_ssat_v16i16_v16i8(<16 x i16> %a0) { 3070 ; SSE-LABEL: trunc_ssat_v16i16_v16i8: 3071 ; SSE: # %bb.0: 3072 ; SSE-NEXT: packsswb %xmm1, %xmm0 3073 ; SSE-NEXT: retq 3074 ; 3075 ; AVX1-LABEL: trunc_ssat_v16i16_v16i8: 3076 ; AVX1: # %bb.0: 3077 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3078 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 3079 ; AVX1-NEXT: vzeroupper 3080 ; AVX1-NEXT: retq 3081 ; 3082 ; AVX2-LABEL: trunc_ssat_v16i16_v16i8: 3083 ; AVX2: # %bb.0: 3084 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 3085 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 3086 ; AVX2-NEXT: vzeroupper 3087 ; AVX2-NEXT: retq 3088 ; 3089 ; AVX512F-LABEL: trunc_ssat_v16i16_v16i8: 3090 ; AVX512F: # %bb.0: 3091 ; AVX512F-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0 3092 ; AVX512F-NEXT: vpmaxsw {{.*}}(%rip), %ymm0, %ymm0 3093 ; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 3094 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 3095 ; AVX512F-NEXT: vzeroupper 3096 ; AVX512F-NEXT: retq 3097 ; 3098 ; AVX512VL-LABEL: trunc_ssat_v16i16_v16i8: 3099 ; AVX512VL: # %bb.0: 3100 ; AVX512VL-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0 3101 ; AVX512VL-NEXT: vpmaxsw {{.*}}(%rip), %ymm0, %ymm0 3102 ; AVX512VL-NEXT: vpmovsxwd %ymm0, %zmm0 3103 ; AVX512VL-NEXT: vpmovdb %zmm0, %xmm0 3104 ; AVX512VL-NEXT: vzeroupper 3105 ; AVX512VL-NEXT: retq 3106 ; 3107 ; AVX512BW-LABEL: trunc_ssat_v16i16_v16i8: 3108 ; AVX512BW: # %bb.0: 3109 ; AVX512BW-NEXT: vpminsw {{.*}}(%rip), %ymm0, %ymm0 3110 ; AVX512BW-NEXT: vpmaxsw {{.*}}(%rip), %ymm0, %ymm0 3111 ; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 3112 ; AVX512BW-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 3113 ; AVX512BW-NEXT: vzeroupper 3114 ; AVX512BW-NEXT: retq 3115 ; 3116 ; AVX512BWVL-LABEL: trunc_ssat_v16i16_v16i8: 3117 ; AVX512BWVL: # %bb.0: 3118 ; AVX512BWVL-NEXT: vpmovswb %ymm0, %xmm0 3119 ; AVX512BWVL-NEXT: vzeroupper 3120 ; AVX512BWVL-NEXT: retq 3121 %1 = icmp slt <16 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 3122 %2 = select <16 x i1> %1, <16 x i16> %a0, <16 x i16> <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 3123 %3 = icmp sgt <16 x i16> %2, <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128> 3124 %4 = select <16 x i1> %3, <16 x i16> %2, <16 x i16> <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128> 3125 %5 = trunc <16 x i16> %4 to <16 x i8> 3126 ret <16 x i8> %5 3127 } 3128 3129 define <32 x i8> @trunc_ssat_v32i16_v32i8(<32 x i16> %a0) { 3130 ; SSE-LABEL: trunc_ssat_v32i16_v32i8: 3131 ; SSE: # %bb.0: 3132 ; SSE-NEXT: packsswb %xmm1, %xmm0 3133 ; SSE-NEXT: packsswb %xmm3, %xmm2 3134 ; SSE-NEXT: movdqa %xmm2, %xmm1 3135 ; SSE-NEXT: retq 3136 ; 3137 ; AVX1-LABEL: trunc_ssat_v32i16_v32i8: 3138 ; AVX1: # %bb.0: 3139 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3140 ; AVX1-NEXT: vpacksswb %xmm2, %xmm1, %xmm1 3141 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3142 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm0 3143 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3144 ; AVX1-NEXT: retq 3145 ; 3146 ; AVX2-LABEL: trunc_ssat_v32i16_v32i8: 3147 ; AVX2: # %bb.0: 3148 ; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0 3149 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3] 3150 ; AVX2-NEXT: retq 3151 ; 3152 ; AVX512F-LABEL: trunc_ssat_v32i16_v32i8: 3153 ; AVX512F: # %bb.0: 3154 ; AVX512F-NEXT: vmovdqa {{.*#+}} ymm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127] 3155 ; AVX512F-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3156 ; AVX512F-NEXT: vpminsw %ymm2, %ymm1, %ymm1 3157 ; AVX512F-NEXT: vmovdqa {{.*#+}} ymm2 = [65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408] 3158 ; AVX512F-NEXT: vpmaxsw %ymm2, %ymm1, %ymm1 3159 ; AVX512F-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3160 ; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 3161 ; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 3162 ; AVX512F-NEXT: vpmovsxwd %ymm1, %zmm1 3163 ; AVX512F-NEXT: vpmovdb %zmm1, %xmm1 3164 ; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3165 ; AVX512F-NEXT: retq 3166 ; 3167 ; AVX512VL-LABEL: trunc_ssat_v32i16_v32i8: 3168 ; AVX512VL: # %bb.0: 3169 ; AVX512VL-NEXT: vmovdqa {{.*#+}} ymm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127] 3170 ; AVX512VL-NEXT: vpminsw %ymm2, %ymm0, %ymm0 3171 ; AVX512VL-NEXT: vpminsw %ymm2, %ymm1, %ymm1 3172 ; AVX512VL-NEXT: vmovdqa {{.*#+}} ymm2 = [65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408,65408] 3173 ; AVX512VL-NEXT: vpmaxsw %ymm2, %ymm1, %ymm1 3174 ; AVX512VL-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 3175 ; AVX512VL-NEXT: vpmovsxwd %ymm0, %zmm0 3176 ; AVX512VL-NEXT: vpmovdb %zmm0, %xmm0 3177 ; AVX512VL-NEXT: vpmovsxwd %ymm1, %zmm1 3178 ; AVX512VL-NEXT: vpmovdb %zmm1, %xmm1 3179 ; AVX512VL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3180 ; AVX512VL-NEXT: retq 3181 ; 3182 ; AVX512BW-LABEL: trunc_ssat_v32i16_v32i8: 3183 ; AVX512BW: # %bb.0: 3184 ; AVX512BW-NEXT: vpmovswb %zmm0, %ymm0 3185 ; AVX512BW-NEXT: retq 3186 ; 3187 ; AVX512BWVL-LABEL: trunc_ssat_v32i16_v32i8: 3188 ; AVX512BWVL: # %bb.0: 3189 ; AVX512BWVL-NEXT: vpmovswb %zmm0, %ymm0 3190 ; AVX512BWVL-NEXT: retq 3191 %1 = icmp slt <32 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 3192 %2 = select <32 x i1> %1, <32 x i16> %a0, <32 x i16> <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 3193 %3 = icmp sgt <32 x i16> %2, <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128> 3194 %4 = select <32 x i1> %3, <32 x i16> %2, <32 x i16> <i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128, i16 -128> 3195 %5 = trunc <32 x i16> %4 to <32 x i8> 3196 ret <32 x i8> %5 3197 } 3198