1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=ALL --check-prefix=KNL 3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=ALL --check-prefix=SKX 4 5 6 define <16 x i32> @vpandd(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp { 7 ; ALL-LABEL: vpandd: 8 ; ALL: ## %bb.0: ## %entry 9 ; ALL-NEXT: vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0 10 ; ALL-NEXT: vpandq %zmm1, %zmm0, %zmm0 11 ; ALL-NEXT: retq 12 entry: 13 ; Force the execution domain with an add. 14 %a2 = add <16 x i32> %a, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, 15 i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2> 16 %x = and <16 x i32> %a2, %b 17 ret <16 x i32> %x 18 } 19 20 define <16 x i32> @vpandnd(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp { 21 ; ALL-LABEL: vpandnd: 22 ; ALL: ## %bb.0: ## %entry 23 ; ALL-NEXT: vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0 24 ; ALL-NEXT: vpandnq %zmm0, %zmm1, %zmm0 25 ; ALL-NEXT: retq 26 entry: 27 ; Force the execution domain with an add. 28 %a2 = add <16 x i32> %a, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, 29 i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3> 30 %b2 = xor <16 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, 31 i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> 32 %x = and <16 x i32> %a2, %b2 33 ret <16 x i32> %x 34 } 35 36 define <16 x i32> @vpord(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp { 37 ; ALL-LABEL: vpord: 38 ; ALL: ## %bb.0: ## %entry 39 ; ALL-NEXT: vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0 40 ; ALL-NEXT: vporq %zmm1, %zmm0, %zmm0 41 ; ALL-NEXT: retq 42 entry: 43 ; Force the execution domain with an add. 44 %a2 = add <16 x i32> %a, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, 45 i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4> 46 %x = or <16 x i32> %a2, %b 47 ret <16 x i32> %x 48 } 49 50 define <16 x i32> @vpxord(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp { 51 ; ALL-LABEL: vpxord: 52 ; ALL: ## %bb.0: ## %entry 53 ; ALL-NEXT: vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0 54 ; ALL-NEXT: vpxorq %zmm1, %zmm0, %zmm0 55 ; ALL-NEXT: retq 56 entry: 57 ; Force the execution domain with an add. 58 %a2 = add <16 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, 59 i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> 60 %x = xor <16 x i32> %a2, %b 61 ret <16 x i32> %x 62 } 63 64 define <8 x i64> @vpandq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp { 65 ; ALL-LABEL: vpandq: 66 ; ALL: ## %bb.0: ## %entry 67 ; ALL-NEXT: vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0 68 ; ALL-NEXT: vpandq %zmm1, %zmm0, %zmm0 69 ; ALL-NEXT: retq 70 entry: 71 ; Force the execution domain with an add. 72 %a2 = add <8 x i64> %a, <i64 6, i64 6, i64 6, i64 6, i64 6, i64 6, i64 6, i64 6> 73 %x = and <8 x i64> %a2, %b 74 ret <8 x i64> %x 75 } 76 77 define <8 x i64> @vpandnq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp { 78 ; ALL-LABEL: vpandnq: 79 ; ALL: ## %bb.0: ## %entry 80 ; ALL-NEXT: vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0 81 ; ALL-NEXT: vpandnq %zmm0, %zmm1, %zmm0 82 ; ALL-NEXT: retq 83 entry: 84 ; Force the execution domain with an add. 85 %a2 = add <8 x i64> %a, <i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7, i64 7> 86 %b2 = xor <8 x i64> %b, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1> 87 %x = and <8 x i64> %a2, %b2 88 ret <8 x i64> %x 89 } 90 91 define <8 x i64> @vporq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp { 92 ; ALL-LABEL: vporq: 93 ; ALL: ## %bb.0: ## %entry 94 ; ALL-NEXT: vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0 95 ; ALL-NEXT: vporq %zmm1, %zmm0, %zmm0 96 ; ALL-NEXT: retq 97 entry: 98 ; Force the execution domain with an add. 99 %a2 = add <8 x i64> %a, <i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8, i64 8> 100 %x = or <8 x i64> %a2, %b 101 ret <8 x i64> %x 102 } 103 104 define <8 x i64> @vpxorq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp { 105 ; ALL-LABEL: vpxorq: 106 ; ALL: ## %bb.0: ## %entry 107 ; ALL-NEXT: vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0 108 ; ALL-NEXT: vpxorq %zmm1, %zmm0, %zmm0 109 ; ALL-NEXT: retq 110 entry: 111 ; Force the execution domain with an add. 112 %a2 = add <8 x i64> %a, <i64 9, i64 9, i64 9, i64 9, i64 9, i64 9, i64 9, i64 9> 113 %x = xor <8 x i64> %a2, %b 114 ret <8 x i64> %x 115 } 116 117 118 define <8 x i64> @orq_broadcast(<8 x i64> %a) nounwind { 119 ; KNL-LABEL: orq_broadcast: 120 ; KNL: ## %bb.0: 121 ; KNL-NEXT: vporq {{.*}}(%rip){1to8}, %zmm0, %zmm0 122 ; KNL-NEXT: retq 123 ; 124 ; SKX-LABEL: orq_broadcast: 125 ; SKX: ## %bb.0: 126 ; SKX-NEXT: vorpd {{.*}}(%rip){1to8}, %zmm0, %zmm0 127 ; SKX-NEXT: retq 128 %b = or <8 x i64> %a, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2> 129 ret <8 x i64> %b 130 } 131 132 define <16 x i32> @andd512fold(<16 x i32> %y, <16 x i32>* %x) { 133 ; KNL-LABEL: andd512fold: 134 ; KNL: ## %bb.0: ## %entry 135 ; KNL-NEXT: vpandq (%rdi), %zmm0, %zmm0 136 ; KNL-NEXT: retq 137 ; 138 ; SKX-LABEL: andd512fold: 139 ; SKX: ## %bb.0: ## %entry 140 ; SKX-NEXT: vandps (%rdi), %zmm0, %zmm0 141 ; SKX-NEXT: retq 142 entry: 143 %a = load <16 x i32>, <16 x i32>* %x, align 4 144 %b = and <16 x i32> %y, %a 145 ret <16 x i32> %b 146 } 147 148 define <8 x i64> @andqbrst(<8 x i64> %p1, i64* %ap) { 149 ; KNL-LABEL: andqbrst: 150 ; KNL: ## %bb.0: ## %entry 151 ; KNL-NEXT: vpandq (%rdi){1to8}, %zmm0, %zmm0 152 ; KNL-NEXT: retq 153 ; 154 ; SKX-LABEL: andqbrst: 155 ; SKX: ## %bb.0: ## %entry 156 ; SKX-NEXT: vandpd (%rdi){1to8}, %zmm0, %zmm0 157 ; SKX-NEXT: retq 158 entry: 159 %a = load i64, i64* %ap, align 8 160 %b = insertelement <8 x i64> undef, i64 %a, i32 0 161 %c = shufflevector <8 x i64> %b, <8 x i64> undef, <8 x i32> zeroinitializer 162 %d = and <8 x i64> %p1, %c 163 ret <8 x i64>%d 164 } 165 166 define <64 x i8> @and_v64i8(<64 x i8> %a, <64 x i8> %b) { 167 ; KNL-LABEL: and_v64i8: 168 ; KNL: ## %bb.0: 169 ; KNL-NEXT: vandps %ymm2, %ymm0, %ymm0 170 ; KNL-NEXT: vandps %ymm3, %ymm1, %ymm1 171 ; KNL-NEXT: retq 172 ; 173 ; SKX-LABEL: and_v64i8: 174 ; SKX: ## %bb.0: 175 ; SKX-NEXT: vandps %zmm1, %zmm0, %zmm0 176 ; SKX-NEXT: retq 177 %res = and <64 x i8> %a, %b 178 ret <64 x i8> %res 179 } 180 181 define <64 x i8> @andn_v64i8(<64 x i8> %a, <64 x i8> %b) { 182 ; KNL-LABEL: andn_v64i8: 183 ; KNL: ## %bb.0: 184 ; KNL-NEXT: vandnps %ymm0, %ymm2, %ymm0 185 ; KNL-NEXT: vandnps %ymm1, %ymm3, %ymm1 186 ; KNL-NEXT: retq 187 ; 188 ; SKX-LABEL: andn_v64i8: 189 ; SKX: ## %bb.0: 190 ; SKX-NEXT: vandnps %zmm0, %zmm1, %zmm0 191 ; SKX-NEXT: retq 192 %b2 = xor <64 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, 193 i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, 194 i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, 195 i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 196 %res = and <64 x i8> %a, %b2 197 ret <64 x i8> %res 198 } 199 200 define <64 x i8> @or_v64i8(<64 x i8> %a, <64 x i8> %b) { 201 ; KNL-LABEL: or_v64i8: 202 ; KNL: ## %bb.0: 203 ; KNL-NEXT: vorps %ymm2, %ymm0, %ymm0 204 ; KNL-NEXT: vorps %ymm3, %ymm1, %ymm1 205 ; KNL-NEXT: retq 206 ; 207 ; SKX-LABEL: or_v64i8: 208 ; SKX: ## %bb.0: 209 ; SKX-NEXT: vorps %zmm1, %zmm0, %zmm0 210 ; SKX-NEXT: retq 211 %res = or <64 x i8> %a, %b 212 ret <64 x i8> %res 213 } 214 215 define <64 x i8> @xor_v64i8(<64 x i8> %a, <64 x i8> %b) { 216 ; KNL-LABEL: xor_v64i8: 217 ; KNL: ## %bb.0: 218 ; KNL-NEXT: vxorps %ymm2, %ymm0, %ymm0 219 ; KNL-NEXT: vxorps %ymm3, %ymm1, %ymm1 220 ; KNL-NEXT: retq 221 ; 222 ; SKX-LABEL: xor_v64i8: 223 ; SKX: ## %bb.0: 224 ; SKX-NEXT: vxorps %zmm1, %zmm0, %zmm0 225 ; SKX-NEXT: retq 226 %res = xor <64 x i8> %a, %b 227 ret <64 x i8> %res 228 } 229 230 define <32 x i16> @and_v32i16(<32 x i16> %a, <32 x i16> %b) { 231 ; KNL-LABEL: and_v32i16: 232 ; KNL: ## %bb.0: 233 ; KNL-NEXT: vandps %ymm2, %ymm0, %ymm0 234 ; KNL-NEXT: vandps %ymm3, %ymm1, %ymm1 235 ; KNL-NEXT: retq 236 ; 237 ; SKX-LABEL: and_v32i16: 238 ; SKX: ## %bb.0: 239 ; SKX-NEXT: vandps %zmm1, %zmm0, %zmm0 240 ; SKX-NEXT: retq 241 %res = and <32 x i16> %a, %b 242 ret <32 x i16> %res 243 } 244 245 define <32 x i16> @andn_v32i16(<32 x i16> %a, <32 x i16> %b) { 246 ; KNL-LABEL: andn_v32i16: 247 ; KNL: ## %bb.0: 248 ; KNL-NEXT: vandnps %ymm0, %ymm2, %ymm0 249 ; KNL-NEXT: vandnps %ymm1, %ymm3, %ymm1 250 ; KNL-NEXT: retq 251 ; 252 ; SKX-LABEL: andn_v32i16: 253 ; SKX: ## %bb.0: 254 ; SKX-NEXT: vandnps %zmm0, %zmm1, %zmm0 255 ; SKX-NEXT: retq 256 %b2 = xor <32 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, 257 i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 258 %res = and <32 x i16> %a, %b2 259 ret <32 x i16> %res 260 } 261 262 define <32 x i16> @or_v32i16(<32 x i16> %a, <32 x i16> %b) { 263 ; KNL-LABEL: or_v32i16: 264 ; KNL: ## %bb.0: 265 ; KNL-NEXT: vorps %ymm2, %ymm0, %ymm0 266 ; KNL-NEXT: vorps %ymm3, %ymm1, %ymm1 267 ; KNL-NEXT: retq 268 ; 269 ; SKX-LABEL: or_v32i16: 270 ; SKX: ## %bb.0: 271 ; SKX-NEXT: vorps %zmm1, %zmm0, %zmm0 272 ; SKX-NEXT: retq 273 %res = or <32 x i16> %a, %b 274 ret <32 x i16> %res 275 } 276 277 define <32 x i16> @xor_v32i16(<32 x i16> %a, <32 x i16> %b) { 278 ; KNL-LABEL: xor_v32i16: 279 ; KNL: ## %bb.0: 280 ; KNL-NEXT: vxorps %ymm2, %ymm0, %ymm0 281 ; KNL-NEXT: vxorps %ymm3, %ymm1, %ymm1 282 ; KNL-NEXT: retq 283 ; 284 ; SKX-LABEL: xor_v32i16: 285 ; SKX: ## %bb.0: 286 ; SKX-NEXT: vxorps %zmm1, %zmm0, %zmm0 287 ; SKX-NEXT: retq 288 %res = xor <32 x i16> %a, %b 289 ret <32 x i16> %res 290 } 291 292 define <16 x float> @masked_and_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %passThru, i16 %mask, <16 x float> %c) { 293 ; KNL-LABEL: masked_and_v16f32: 294 ; KNL: ## %bb.0: 295 ; KNL-NEXT: kmovw %edi, %k1 296 ; KNL-NEXT: vpandd %zmm1, %zmm0, %zmm2 {%k1} 297 ; KNL-NEXT: vaddps %zmm2, %zmm3, %zmm0 298 ; KNL-NEXT: retq 299 ; 300 ; SKX-LABEL: masked_and_v16f32: 301 ; SKX: ## %bb.0: 302 ; SKX-NEXT: kmovd %edi, %k1 303 ; SKX-NEXT: vandps %zmm1, %zmm0, %zmm2 {%k1} 304 ; SKX-NEXT: vaddps %zmm2, %zmm3, %zmm0 305 ; SKX-NEXT: retq 306 %a1 = bitcast <16 x float> %a to <16 x i32> 307 %b1 = bitcast <16 x float> %b to <16 x i32> 308 %passThru1 = bitcast <16 x float> %passThru to <16 x i32> 309 %mask1 = bitcast i16 %mask to <16 x i1> 310 %op = and <16 x i32> %a1, %b1 311 %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1 312 %cast = bitcast <16 x i32> %select to <16 x float> 313 %add = fadd <16 x float> %c, %cast 314 ret <16 x float> %add 315 } 316 317 define <16 x float> @masked_or_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %passThru, i16 %mask, <16 x float> %c) { 318 ; KNL-LABEL: masked_or_v16f32: 319 ; KNL: ## %bb.0: 320 ; KNL-NEXT: kmovw %edi, %k1 321 ; KNL-NEXT: vpandd %zmm1, %zmm0, %zmm2 {%k1} 322 ; KNL-NEXT: vaddps %zmm2, %zmm3, %zmm0 323 ; KNL-NEXT: retq 324 ; 325 ; SKX-LABEL: masked_or_v16f32: 326 ; SKX: ## %bb.0: 327 ; SKX-NEXT: kmovd %edi, %k1 328 ; SKX-NEXT: vandps %zmm1, %zmm0, %zmm2 {%k1} 329 ; SKX-NEXT: vaddps %zmm2, %zmm3, %zmm0 330 ; SKX-NEXT: retq 331 %a1 = bitcast <16 x float> %a to <16 x i32> 332 %b1 = bitcast <16 x float> %b to <16 x i32> 333 %passThru1 = bitcast <16 x float> %passThru to <16 x i32> 334 %mask1 = bitcast i16 %mask to <16 x i1> 335 %op = and <16 x i32> %a1, %b1 336 %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1 337 %cast = bitcast <16 x i32> %select to <16 x float> 338 %add = fadd <16 x float> %c, %cast 339 ret <16 x float> %add 340 } 341 342 define <16 x float> @masked_xor_v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %passThru, i16 %mask, <16 x float> %c) { 343 ; KNL-LABEL: masked_xor_v16f32: 344 ; KNL: ## %bb.0: 345 ; KNL-NEXT: kmovw %edi, %k1 346 ; KNL-NEXT: vpandd %zmm1, %zmm0, %zmm2 {%k1} 347 ; KNL-NEXT: vaddps %zmm2, %zmm3, %zmm0 348 ; KNL-NEXT: retq 349 ; 350 ; SKX-LABEL: masked_xor_v16f32: 351 ; SKX: ## %bb.0: 352 ; SKX-NEXT: kmovd %edi, %k1 353 ; SKX-NEXT: vandps %zmm1, %zmm0, %zmm2 {%k1} 354 ; SKX-NEXT: vaddps %zmm2, %zmm3, %zmm0 355 ; SKX-NEXT: retq 356 %a1 = bitcast <16 x float> %a to <16 x i32> 357 %b1 = bitcast <16 x float> %b to <16 x i32> 358 %passThru1 = bitcast <16 x float> %passThru to <16 x i32> 359 %mask1 = bitcast i16 %mask to <16 x i1> 360 %op = and <16 x i32> %a1, %b1 361 %select = select <16 x i1> %mask1, <16 x i32> %op, <16 x i32> %passThru1 362 %cast = bitcast <16 x i32> %select to <16 x float> 363 %add = fadd <16 x float> %c, %cast 364 ret <16 x float> %add 365 } 366 367 define <8 x double> @masked_and_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %passThru, i8 %mask, <8 x double> %c) { 368 ; KNL-LABEL: masked_and_v8f64: 369 ; KNL: ## %bb.0: 370 ; KNL-NEXT: kmovw %edi, %k1 371 ; KNL-NEXT: vpandq %zmm1, %zmm0, %zmm2 {%k1} 372 ; KNL-NEXT: vaddpd %zmm2, %zmm3, %zmm0 373 ; KNL-NEXT: retq 374 ; 375 ; SKX-LABEL: masked_and_v8f64: 376 ; SKX: ## %bb.0: 377 ; SKX-NEXT: kmovd %edi, %k1 378 ; SKX-NEXT: vandpd %zmm1, %zmm0, %zmm2 {%k1} 379 ; SKX-NEXT: vaddpd %zmm2, %zmm3, %zmm0 380 ; SKX-NEXT: retq 381 %a1 = bitcast <8 x double> %a to <8 x i64> 382 %b1 = bitcast <8 x double> %b to <8 x i64> 383 %passThru1 = bitcast <8 x double> %passThru to <8 x i64> 384 %mask1 = bitcast i8 %mask to <8 x i1> 385 %op = and <8 x i64> %a1, %b1 386 %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1 387 %cast = bitcast <8 x i64> %select to <8 x double> 388 %add = fadd <8 x double> %c, %cast 389 ret <8 x double> %add 390 } 391 392 define <8 x double> @masked_or_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %passThru, i8 %mask, <8 x double> %c) { 393 ; KNL-LABEL: masked_or_v8f64: 394 ; KNL: ## %bb.0: 395 ; KNL-NEXT: kmovw %edi, %k1 396 ; KNL-NEXT: vpandq %zmm1, %zmm0, %zmm2 {%k1} 397 ; KNL-NEXT: vaddpd %zmm2, %zmm3, %zmm0 398 ; KNL-NEXT: retq 399 ; 400 ; SKX-LABEL: masked_or_v8f64: 401 ; SKX: ## %bb.0: 402 ; SKX-NEXT: kmovd %edi, %k1 403 ; SKX-NEXT: vandpd %zmm1, %zmm0, %zmm2 {%k1} 404 ; SKX-NEXT: vaddpd %zmm2, %zmm3, %zmm0 405 ; SKX-NEXT: retq 406 %a1 = bitcast <8 x double> %a to <8 x i64> 407 %b1 = bitcast <8 x double> %b to <8 x i64> 408 %passThru1 = bitcast <8 x double> %passThru to <8 x i64> 409 %mask1 = bitcast i8 %mask to <8 x i1> 410 %op = and <8 x i64> %a1, %b1 411 %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1 412 %cast = bitcast <8 x i64> %select to <8 x double> 413 %add = fadd <8 x double> %c, %cast 414 ret <8 x double> %add 415 } 416 417 define <8 x double> @masked_xor_v8f64(<8 x double> %a, <8 x double> %b, <8 x double> %passThru, i8 %mask, <8 x double> %c) { 418 ; KNL-LABEL: masked_xor_v8f64: 419 ; KNL: ## %bb.0: 420 ; KNL-NEXT: kmovw %edi, %k1 421 ; KNL-NEXT: vpandq %zmm1, %zmm0, %zmm2 {%k1} 422 ; KNL-NEXT: vaddpd %zmm2, %zmm3, %zmm0 423 ; KNL-NEXT: retq 424 ; 425 ; SKX-LABEL: masked_xor_v8f64: 426 ; SKX: ## %bb.0: 427 ; SKX-NEXT: kmovd %edi, %k1 428 ; SKX-NEXT: vandpd %zmm1, %zmm0, %zmm2 {%k1} 429 ; SKX-NEXT: vaddpd %zmm2, %zmm3, %zmm0 430 ; SKX-NEXT: retq 431 %a1 = bitcast <8 x double> %a to <8 x i64> 432 %b1 = bitcast <8 x double> %b to <8 x i64> 433 %passThru1 = bitcast <8 x double> %passThru to <8 x i64> 434 %mask1 = bitcast i8 %mask to <8 x i1> 435 %op = and <8 x i64> %a1, %b1 436 %select = select <8 x i1> %mask1, <8 x i64> %op, <8 x i64> %passThru1 437 %cast = bitcast <8 x i64> %select to <8 x double> 438 %add = fadd <8 x double> %c, %cast 439 ret <8 x double> %add 440 } 441 442 define <8 x i64> @test_mm512_mask_and_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) { 443 ; KNL-LABEL: test_mm512_mask_and_epi32: 444 ; KNL: ## %bb.0: ## %entry 445 ; KNL-NEXT: kmovw %edi, %k1 446 ; KNL-NEXT: vpandd %zmm2, %zmm1, %zmm0 {%k1} 447 ; KNL-NEXT: retq 448 ; 449 ; SKX-LABEL: test_mm512_mask_and_epi32: 450 ; SKX: ## %bb.0: ## %entry 451 ; SKX-NEXT: kmovd %edi, %k1 452 ; SKX-NEXT: vandps %zmm2, %zmm1, %zmm0 {%k1} 453 ; SKX-NEXT: retq 454 entry: 455 %and1.i.i = and <8 x i64> %__a, %__b 456 %0 = bitcast <8 x i64> %and1.i.i to <16 x i32> 457 %1 = bitcast <8 x i64> %__src to <16 x i32> 458 %2 = bitcast i16 %__k to <16 x i1> 459 %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1 460 %4 = bitcast <16 x i32> %3 to <8 x i64> 461 ret <8 x i64> %4 462 } 463 464 define <8 x i64> @test_mm512_mask_or_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) { 465 ; KNL-LABEL: test_mm512_mask_or_epi32: 466 ; KNL: ## %bb.0: ## %entry 467 ; KNL-NEXT: kmovw %edi, %k1 468 ; KNL-NEXT: vpord %zmm2, %zmm1, %zmm0 {%k1} 469 ; KNL-NEXT: retq 470 ; 471 ; SKX-LABEL: test_mm512_mask_or_epi32: 472 ; SKX: ## %bb.0: ## %entry 473 ; SKX-NEXT: kmovd %edi, %k1 474 ; SKX-NEXT: vorps %zmm2, %zmm1, %zmm0 {%k1} 475 ; SKX-NEXT: retq 476 entry: 477 %or1.i.i = or <8 x i64> %__a, %__b 478 %0 = bitcast <8 x i64> %or1.i.i to <16 x i32> 479 %1 = bitcast <8 x i64> %__src to <16 x i32> 480 %2 = bitcast i16 %__k to <16 x i1> 481 %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1 482 %4 = bitcast <16 x i32> %3 to <8 x i64> 483 ret <8 x i64> %4 484 } 485 486 define <8 x i64> @test_mm512_mask_xor_epi32(<8 x i64> %__src, i16 zeroext %__k, <8 x i64> %__a, <8 x i64> %__b) { 487 ; KNL-LABEL: test_mm512_mask_xor_epi32: 488 ; KNL: ## %bb.0: ## %entry 489 ; KNL-NEXT: kmovw %edi, %k1 490 ; KNL-NEXT: vpxord %zmm2, %zmm1, %zmm0 {%k1} 491 ; KNL-NEXT: retq 492 ; 493 ; SKX-LABEL: test_mm512_mask_xor_epi32: 494 ; SKX: ## %bb.0: ## %entry 495 ; SKX-NEXT: kmovd %edi, %k1 496 ; SKX-NEXT: vxorps %zmm2, %zmm1, %zmm0 {%k1} 497 ; SKX-NEXT: retq 498 entry: 499 %xor1.i.i = xor <8 x i64> %__a, %__b 500 %0 = bitcast <8 x i64> %xor1.i.i to <16 x i32> 501 %1 = bitcast <8 x i64> %__src to <16 x i32> 502 %2 = bitcast i16 %__k to <16 x i1> 503 %3 = select <16 x i1> %2, <16 x i32> %0, <16 x i32> %1 504 %4 = bitcast <16 x i32> %3 to <8 x i64> 505 ret <8 x i64> %4 506 } 507 508 define <8 x double> @test_mm512_mask_xor_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) { 509 ; KNL-LABEL: test_mm512_mask_xor_pd: 510 ; KNL: ## %bb.0: ## %entry 511 ; KNL-NEXT: kmovw %edi, %k1 512 ; KNL-NEXT: vpxorq %zmm2, %zmm1, %zmm0 {%k1} 513 ; KNL-NEXT: retq 514 ; 515 ; SKX-LABEL: test_mm512_mask_xor_pd: 516 ; SKX: ## %bb.0: ## %entry 517 ; SKX-NEXT: kmovd %edi, %k1 518 ; SKX-NEXT: vxorpd %zmm2, %zmm1, %zmm0 {%k1} 519 ; SKX-NEXT: retq 520 entry: 521 %0 = bitcast <8 x double> %__A to <8 x i64> 522 %1 = bitcast <8 x double> %__B to <8 x i64> 523 %xor.i.i = xor <8 x i64> %0, %1 524 %2 = bitcast <8 x i64> %xor.i.i to <8 x double> 525 %3 = bitcast i8 %__U to <8 x i1> 526 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W 527 ret <8 x double> %4 528 } 529 530 define <8 x double> @test_mm512_maskz_xor_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) { 531 ; KNL-LABEL: test_mm512_maskz_xor_pd: 532 ; KNL: ## %bb.0: ## %entry 533 ; KNL-NEXT: kmovw %edi, %k1 534 ; KNL-NEXT: vpxorq %zmm1, %zmm0, %zmm0 {%k1} {z} 535 ; KNL-NEXT: retq 536 ; 537 ; SKX-LABEL: test_mm512_maskz_xor_pd: 538 ; SKX: ## %bb.0: ## %entry 539 ; SKX-NEXT: kmovd %edi, %k1 540 ; SKX-NEXT: vxorpd %zmm1, %zmm0, %zmm0 {%k1} {z} 541 ; SKX-NEXT: retq 542 entry: 543 %0 = bitcast <8 x double> %__A to <8 x i64> 544 %1 = bitcast <8 x double> %__B to <8 x i64> 545 %xor.i.i = xor <8 x i64> %0, %1 546 %2 = bitcast <8 x i64> %xor.i.i to <8 x double> 547 %3 = bitcast i8 %__U to <8 x i1> 548 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer 549 ret <8 x double> %4 550 } 551 552 define <16 x float> @test_mm512_mask_xor_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) { 553 ; KNL-LABEL: test_mm512_mask_xor_ps: 554 ; KNL: ## %bb.0: ## %entry 555 ; KNL-NEXT: kmovw %edi, %k1 556 ; KNL-NEXT: vpxord %zmm2, %zmm1, %zmm0 {%k1} 557 ; KNL-NEXT: retq 558 ; 559 ; SKX-LABEL: test_mm512_mask_xor_ps: 560 ; SKX: ## %bb.0: ## %entry 561 ; SKX-NEXT: kmovd %edi, %k1 562 ; SKX-NEXT: vxorps %zmm2, %zmm1, %zmm0 {%k1} 563 ; SKX-NEXT: retq 564 entry: 565 %0 = bitcast <16 x float> %__A to <16 x i32> 566 %1 = bitcast <16 x float> %__B to <16 x i32> 567 %xor.i.i = xor <16 x i32> %0, %1 568 %2 = bitcast <16 x i32> %xor.i.i to <16 x float> 569 %3 = bitcast i16 %__U to <16 x i1> 570 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W 571 ret <16 x float> %4 572 } 573 574 define <16 x float> @test_mm512_maskz_xor_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) { 575 ; KNL-LABEL: test_mm512_maskz_xor_ps: 576 ; KNL: ## %bb.0: ## %entry 577 ; KNL-NEXT: kmovw %edi, %k1 578 ; KNL-NEXT: vpxord %zmm1, %zmm0, %zmm0 {%k1} {z} 579 ; KNL-NEXT: retq 580 ; 581 ; SKX-LABEL: test_mm512_maskz_xor_ps: 582 ; SKX: ## %bb.0: ## %entry 583 ; SKX-NEXT: kmovd %edi, %k1 584 ; SKX-NEXT: vxorps %zmm1, %zmm0, %zmm0 {%k1} {z} 585 ; SKX-NEXT: retq 586 entry: 587 %0 = bitcast <16 x float> %__A to <16 x i32> 588 %1 = bitcast <16 x float> %__B to <16 x i32> 589 %xor.i.i = xor <16 x i32> %0, %1 590 %2 = bitcast <16 x i32> %xor.i.i to <16 x float> 591 %3 = bitcast i16 %__U to <16 x i1> 592 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer 593 ret <16 x float> %4 594 } 595 596 define <8 x double> @test_mm512_mask_or_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) { 597 ; KNL-LABEL: test_mm512_mask_or_pd: 598 ; KNL: ## %bb.0: ## %entry 599 ; KNL-NEXT: kmovw %edi, %k1 600 ; KNL-NEXT: vporq %zmm1, %zmm2, %zmm0 {%k1} 601 ; KNL-NEXT: retq 602 ; 603 ; SKX-LABEL: test_mm512_mask_or_pd: 604 ; SKX: ## %bb.0: ## %entry 605 ; SKX-NEXT: kmovd %edi, %k1 606 ; SKX-NEXT: vorpd %zmm1, %zmm2, %zmm0 {%k1} 607 ; SKX-NEXT: retq 608 entry: 609 %0 = bitcast <8 x double> %__A to <8 x i64> 610 %1 = bitcast <8 x double> %__B to <8 x i64> 611 %or.i.i = or <8 x i64> %1, %0 612 %2 = bitcast <8 x i64> %or.i.i to <8 x double> 613 %3 = bitcast i8 %__U to <8 x i1> 614 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W 615 ret <8 x double> %4 616 } 617 618 define <8 x double> @test_mm512_maskz_or_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) { 619 ; KNL-LABEL: test_mm512_maskz_or_pd: 620 ; KNL: ## %bb.0: ## %entry 621 ; KNL-NEXT: kmovw %edi, %k1 622 ; KNL-NEXT: vporq %zmm0, %zmm1, %zmm0 {%k1} {z} 623 ; KNL-NEXT: retq 624 ; 625 ; SKX-LABEL: test_mm512_maskz_or_pd: 626 ; SKX: ## %bb.0: ## %entry 627 ; SKX-NEXT: kmovd %edi, %k1 628 ; SKX-NEXT: vorpd %zmm0, %zmm1, %zmm0 {%k1} {z} 629 ; SKX-NEXT: retq 630 entry: 631 %0 = bitcast <8 x double> %__A to <8 x i64> 632 %1 = bitcast <8 x double> %__B to <8 x i64> 633 %or.i.i = or <8 x i64> %1, %0 634 %2 = bitcast <8 x i64> %or.i.i to <8 x double> 635 %3 = bitcast i8 %__U to <8 x i1> 636 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer 637 ret <8 x double> %4 638 } 639 640 define <16 x float> @test_mm512_mask_or_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) { 641 ; KNL-LABEL: test_mm512_mask_or_ps: 642 ; KNL: ## %bb.0: ## %entry 643 ; KNL-NEXT: kmovw %edi, %k1 644 ; KNL-NEXT: vpord %zmm1, %zmm2, %zmm0 {%k1} 645 ; KNL-NEXT: retq 646 ; 647 ; SKX-LABEL: test_mm512_mask_or_ps: 648 ; SKX: ## %bb.0: ## %entry 649 ; SKX-NEXT: kmovd %edi, %k1 650 ; SKX-NEXT: vorps %zmm1, %zmm2, %zmm0 {%k1} 651 ; SKX-NEXT: retq 652 entry: 653 %0 = bitcast <16 x float> %__A to <16 x i32> 654 %1 = bitcast <16 x float> %__B to <16 x i32> 655 %or.i.i = or <16 x i32> %1, %0 656 %2 = bitcast <16 x i32> %or.i.i to <16 x float> 657 %3 = bitcast i16 %__U to <16 x i1> 658 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W 659 ret <16 x float> %4 660 } 661 662 define <16 x float> @test_mm512_maskz_or_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) { 663 ; KNL-LABEL: test_mm512_maskz_or_ps: 664 ; KNL: ## %bb.0: ## %entry 665 ; KNL-NEXT: kmovw %edi, %k1 666 ; KNL-NEXT: vpord %zmm0, %zmm1, %zmm0 {%k1} {z} 667 ; KNL-NEXT: retq 668 ; 669 ; SKX-LABEL: test_mm512_maskz_or_ps: 670 ; SKX: ## %bb.0: ## %entry 671 ; SKX-NEXT: kmovd %edi, %k1 672 ; SKX-NEXT: vorps %zmm0, %zmm1, %zmm0 {%k1} {z} 673 ; SKX-NEXT: retq 674 entry: 675 %0 = bitcast <16 x float> %__A to <16 x i32> 676 %1 = bitcast <16 x float> %__B to <16 x i32> 677 %or.i.i = or <16 x i32> %1, %0 678 %2 = bitcast <16 x i32> %or.i.i to <16 x float> 679 %3 = bitcast i16 %__U to <16 x i1> 680 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer 681 ret <16 x float> %4 682 } 683 684 define <8 x double> @test_mm512_mask_and_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) { 685 ; KNL-LABEL: test_mm512_mask_and_pd: 686 ; KNL: ## %bb.0: ## %entry 687 ; KNL-NEXT: kmovw %edi, %k1 688 ; KNL-NEXT: vpandq %zmm1, %zmm2, %zmm0 {%k1} 689 ; KNL-NEXT: retq 690 ; 691 ; SKX-LABEL: test_mm512_mask_and_pd: 692 ; SKX: ## %bb.0: ## %entry 693 ; SKX-NEXT: kmovd %edi, %k1 694 ; SKX-NEXT: vandpd %zmm1, %zmm2, %zmm0 {%k1} 695 ; SKX-NEXT: retq 696 entry: 697 %0 = bitcast <8 x double> %__A to <8 x i64> 698 %1 = bitcast <8 x double> %__B to <8 x i64> 699 %and.i.i = and <8 x i64> %1, %0 700 %2 = bitcast <8 x i64> %and.i.i to <8 x double> 701 %3 = bitcast i8 %__U to <8 x i1> 702 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W 703 ret <8 x double> %4 704 } 705 706 define <8 x double> @test_mm512_maskz_and_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) { 707 ; KNL-LABEL: test_mm512_maskz_and_pd: 708 ; KNL: ## %bb.0: ## %entry 709 ; KNL-NEXT: kmovw %edi, %k1 710 ; KNL-NEXT: vpandq %zmm0, %zmm1, %zmm0 {%k1} {z} 711 ; KNL-NEXT: retq 712 ; 713 ; SKX-LABEL: test_mm512_maskz_and_pd: 714 ; SKX: ## %bb.0: ## %entry 715 ; SKX-NEXT: kmovd %edi, %k1 716 ; SKX-NEXT: vandpd %zmm0, %zmm1, %zmm0 {%k1} {z} 717 ; SKX-NEXT: retq 718 entry: 719 %0 = bitcast <8 x double> %__A to <8 x i64> 720 %1 = bitcast <8 x double> %__B to <8 x i64> 721 %and.i.i = and <8 x i64> %1, %0 722 %2 = bitcast <8 x i64> %and.i.i to <8 x double> 723 %3 = bitcast i8 %__U to <8 x i1> 724 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer 725 ret <8 x double> %4 726 } 727 728 define <16 x float> @test_mm512_mask_and_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) { 729 ; KNL-LABEL: test_mm512_mask_and_ps: 730 ; KNL: ## %bb.0: ## %entry 731 ; KNL-NEXT: kmovw %edi, %k1 732 ; KNL-NEXT: vpandd %zmm1, %zmm2, %zmm0 {%k1} 733 ; KNL-NEXT: retq 734 ; 735 ; SKX-LABEL: test_mm512_mask_and_ps: 736 ; SKX: ## %bb.0: ## %entry 737 ; SKX-NEXT: kmovd %edi, %k1 738 ; SKX-NEXT: vandps %zmm1, %zmm2, %zmm0 {%k1} 739 ; SKX-NEXT: retq 740 entry: 741 %0 = bitcast <16 x float> %__A to <16 x i32> 742 %1 = bitcast <16 x float> %__B to <16 x i32> 743 %and.i.i = and <16 x i32> %1, %0 744 %2 = bitcast <16 x i32> %and.i.i to <16 x float> 745 %3 = bitcast i16 %__U to <16 x i1> 746 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W 747 ret <16 x float> %4 748 } 749 750 define <16 x float> @test_mm512_maskz_and_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) { 751 ; KNL-LABEL: test_mm512_maskz_and_ps: 752 ; KNL: ## %bb.0: ## %entry 753 ; KNL-NEXT: kmovw %edi, %k1 754 ; KNL-NEXT: vpandd %zmm0, %zmm1, %zmm0 {%k1} {z} 755 ; KNL-NEXT: retq 756 ; 757 ; SKX-LABEL: test_mm512_maskz_and_ps: 758 ; SKX: ## %bb.0: ## %entry 759 ; SKX-NEXT: kmovd %edi, %k1 760 ; SKX-NEXT: vandps %zmm0, %zmm1, %zmm0 {%k1} {z} 761 ; SKX-NEXT: retq 762 entry: 763 %0 = bitcast <16 x float> %__A to <16 x i32> 764 %1 = bitcast <16 x float> %__B to <16 x i32> 765 %and.i.i = and <16 x i32> %1, %0 766 %2 = bitcast <16 x i32> %and.i.i to <16 x float> 767 %3 = bitcast i16 %__U to <16 x i1> 768 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer 769 ret <16 x float> %4 770 } 771 772 define <8 x double> @test_mm512_mask_andnot_pd(<8 x double> %__W, i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) { 773 ; KNL-LABEL: test_mm512_mask_andnot_pd: 774 ; KNL: ## %bb.0: ## %entry 775 ; KNL-NEXT: kmovw %edi, %k1 776 ; KNL-NEXT: vpandnq %zmm2, %zmm1, %zmm0 {%k1} 777 ; KNL-NEXT: retq 778 ; 779 ; SKX-LABEL: test_mm512_mask_andnot_pd: 780 ; SKX: ## %bb.0: ## %entry 781 ; SKX-NEXT: kmovd %edi, %k1 782 ; SKX-NEXT: vandnpd %zmm2, %zmm1, %zmm0 {%k1} 783 ; SKX-NEXT: retq 784 entry: 785 %0 = bitcast <8 x double> %__A to <8 x i64> 786 %neg.i.i = xor <8 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1> 787 %1 = bitcast <8 x double> %__B to <8 x i64> 788 %and.i.i = and <8 x i64> %1, %neg.i.i 789 %2 = bitcast <8 x i64> %and.i.i to <8 x double> 790 %3 = bitcast i8 %__U to <8 x i1> 791 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__W 792 ret <8 x double> %4 793 } 794 795 define <8 x double> @test_mm512_maskz_andnot_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B) { 796 ; KNL-LABEL: test_mm512_maskz_andnot_pd: 797 ; KNL: ## %bb.0: ## %entry 798 ; KNL-NEXT: kmovw %edi, %k1 799 ; KNL-NEXT: vpandnq %zmm1, %zmm0, %zmm0 {%k1} {z} 800 ; KNL-NEXT: retq 801 ; 802 ; SKX-LABEL: test_mm512_maskz_andnot_pd: 803 ; SKX: ## %bb.0: ## %entry 804 ; SKX-NEXT: kmovd %edi, %k1 805 ; SKX-NEXT: vandnpd %zmm1, %zmm0, %zmm0 {%k1} {z} 806 ; SKX-NEXT: retq 807 entry: 808 %0 = bitcast <8 x double> %__A to <8 x i64> 809 %neg.i.i = xor <8 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1> 810 %1 = bitcast <8 x double> %__B to <8 x i64> 811 %and.i.i = and <8 x i64> %1, %neg.i.i 812 %2 = bitcast <8 x i64> %and.i.i to <8 x double> 813 %3 = bitcast i8 %__U to <8 x i1> 814 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer 815 ret <8 x double> %4 816 } 817 818 define <16 x float> @test_mm512_mask_andnot_ps(<16 x float> %__W, i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) { 819 ; KNL-LABEL: test_mm512_mask_andnot_ps: 820 ; KNL: ## %bb.0: ## %entry 821 ; KNL-NEXT: kmovw %edi, %k1 822 ; KNL-NEXT: vpandnd %zmm2, %zmm1, %zmm0 {%k1} 823 ; KNL-NEXT: retq 824 ; 825 ; SKX-LABEL: test_mm512_mask_andnot_ps: 826 ; SKX: ## %bb.0: ## %entry 827 ; SKX-NEXT: kmovd %edi, %k1 828 ; SKX-NEXT: vandnps %zmm2, %zmm1, %zmm0 {%k1} 829 ; SKX-NEXT: retq 830 entry: 831 %0 = bitcast <16 x float> %__A to <16 x i32> 832 %neg.i.i = xor <16 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> 833 %1 = bitcast <16 x float> %__B to <16 x i32> 834 %and.i.i = and <16 x i32> %1, %neg.i.i 835 %2 = bitcast <16 x i32> %and.i.i to <16 x float> 836 %3 = bitcast i16 %__U to <16 x i1> 837 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__W 838 ret <16 x float> %4 839 } 840 841 define <16 x float> @test_mm512_maskz_andnot_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B) { 842 ; KNL-LABEL: test_mm512_maskz_andnot_ps: 843 ; KNL: ## %bb.0: ## %entry 844 ; KNL-NEXT: kmovw %edi, %k1 845 ; KNL-NEXT: vpandnd %zmm1, %zmm0, %zmm0 {%k1} {z} 846 ; KNL-NEXT: retq 847 ; 848 ; SKX-LABEL: test_mm512_maskz_andnot_ps: 849 ; SKX: ## %bb.0: ## %entry 850 ; SKX-NEXT: kmovd %edi, %k1 851 ; SKX-NEXT: vandnps %zmm1, %zmm0, %zmm0 {%k1} {z} 852 ; SKX-NEXT: retq 853 entry: 854 %0 = bitcast <16 x float> %__A to <16 x i32> 855 %neg.i.i = xor <16 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> 856 %1 = bitcast <16 x float> %__B to <16 x i32> 857 %and.i.i = and <16 x i32> %1, %neg.i.i 858 %2 = bitcast <16 x i32> %and.i.i to <16 x float> 859 %3 = bitcast i16 %__U to <16 x i1> 860 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer 861 ret <16 x float> %4 862 } 863 864