1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -o - -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE
3; RUN: llc < %s -o - -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX
4
5define <8 x i16> @foo(<8 x i16> %a, <8 x i16> %b) {
6; SSE-LABEL: foo:
7; SSE:       # %bb.0:
8; SSE-NEXT:    pcmpeqw %xmm1, %xmm0
9; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
10; SSE-NEXT:    retq
11;
12; AVX-LABEL: foo:
13; AVX:       # %bb.0:
14; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
15; AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
16; AVX-NEXT:    retq
17  %icmp = icmp eq <8 x i16> %a, %b
18  %zext = zext <8 x i1> %icmp to <8 x i16>
19  %shl = shl nuw nsw <8 x i16> %zext, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
20  ret <8 x i16> %shl
21}
22
23; Don't fail with an assert due to an undef in the buildvector
24define <8 x i16> @bar(<8 x i16> %a, <8 x i16> %b) {
25; SSE-LABEL: bar:
26; SSE:       # %bb.0:
27; SSE-NEXT:    pcmpeqw %xmm1, %xmm0
28; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
29; SSE-NEXT:    retq
30;
31; AVX-LABEL: bar:
32; AVX:       # %bb.0:
33; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
34; AVX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
35; AVX-NEXT:    retq
36  %icmp = icmp eq <8 x i16> %a, %b
37  %zext = zext <8 x i1> %icmp to <8 x i16>
38  %shl = shl nuw nsw <8 x i16> %zext, <i16 5, i16 undef, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
39  ret <8 x i16> %shl
40}
41
42