Skip to content

Commit dfcb872

Browse files
committed
[X86] Add scalar/vector test coverage for D93599
This expands the test coverage beyond just the boolvector/movmsk concat pattern
1 parent cb0c034 commit dfcb872

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

llvm/test/CodeGen/X86/cmp-concat.ll

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s
3+
4+
define i1 @cmp_allbits_concat_i8(i8 %x, i8 %y) {
5+
; CHECK-LABEL: cmp_allbits_concat_i8:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: movzbl %sil, %eax
8+
; CHECK-NEXT: shll $8, %edi
9+
; CHECK-NEXT: orl %eax, %edi
10+
; CHECK-NEXT: cmpw $-1, %di
11+
; CHECK-NEXT: sete %al
12+
; CHECK-NEXT: retq
13+
%zx = zext i8 %x to i16
14+
%zy = zext i8 %y to i16
15+
%sh = shl i16 %zx, 8
16+
%or = or i16 %zy, %sh
17+
%r = icmp eq i16 %or, -1
18+
ret i1 %r
19+
}
20+
21+
define i1 @cmp_anybits_concat_i32(i32 %x, i32 %y) {
22+
; CHECK-LABEL: cmp_anybits_concat_i32:
23+
; CHECK: # %bb.0:
24+
; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
25+
; CHECK-NEXT: movl %esi, %eax
26+
; CHECK-NEXT: shlq $32, %rdi
27+
; CHECK-NEXT: orq %rax, %rdi
28+
; CHECK-NEXT: setne %al
29+
; CHECK-NEXT: retq
30+
%zx = zext i32 %x to i64
31+
%zy = zext i32 %y to i64
32+
%sh = shl i64 %zx, 32
33+
%or = or i64 %zy, %sh
34+
%r = icmp ne i64 %or, 0
35+
ret i1 %r
36+
}
37+
38+
define <16 x i8> @cmp_allbits_concat_v16i8(<16 x i8> %x, <16 x i8> %y) {
39+
; CHECK-LABEL: cmp_allbits_concat_v16i8:
40+
; CHECK: # %bb.0:
41+
; CHECK-NEXT: movdqa %xmm1, %xmm2
42+
; CHECK-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
43+
; CHECK-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
44+
; CHECK-NEXT: pcmpeqd %xmm0, %xmm0
45+
; CHECK-NEXT: pcmpeqw %xmm0, %xmm1
46+
; CHECK-NEXT: pcmpeqw %xmm2, %xmm0
47+
; CHECK-NEXT: packsswb %xmm1, %xmm0
48+
; CHECK-NEXT: retq
49+
%zx = zext <16 x i8> %x to <16 x i16>
50+
%zy = zext <16 x i8> %y to <16 x i16>
51+
%sh = shl <16 x i16> %zx, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
52+
%or = or <16 x i16> %zy, %sh
53+
%r = icmp eq <16 x i16> %or, <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>
54+
%s = sext <16 x i1> %r to <16 x i8>
55+
ret <16 x i8> %s
56+
}
57+
58+
define <2 x i64> @cmp_nobits_concat_v2i64(<2 x i64> %x, <2 x i64> %y) {
59+
; CHECK-LABEL: cmp_nobits_concat_v2i64:
60+
; CHECK: # %bb.0:
61+
; CHECK-NEXT: movq %xmm0, %rax
62+
; CHECK-NEXT: pextrq $1, %xmm0, %rcx
63+
; CHECK-NEXT: movq %xmm1, %rdx
64+
; CHECK-NEXT: pextrq $1, %xmm1, %rsi
65+
; CHECK-NEXT: xorl %edi, %edi
66+
; CHECK-NEXT: orq %rcx, %rsi
67+
; CHECK-NEXT: sete %dil
68+
; CHECK-NEXT: negq %rdi
69+
; CHECK-NEXT: movq %rdi, %xmm1
70+
; CHECK-NEXT: xorl %ecx, %ecx
71+
; CHECK-NEXT: orq %rax, %rdx
72+
; CHECK-NEXT: sete %cl
73+
; CHECK-NEXT: negq %rcx
74+
; CHECK-NEXT: movq %rcx, %xmm0
75+
; CHECK-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
76+
; CHECK-NEXT: retq
77+
%zx = zext <2 x i64> %x to <2 x i128>
78+
%zy = zext <2 x i64> %y to <2 x i128>
79+
%sh = shl <2 x i128> %zx, <i128 64, i128 64>
80+
%or = or <2 x i128> %zy, %sh
81+
%r = icmp eq <2 x i128> %or, zeroinitializer
82+
%s = sext <2 x i1> %r to <2 x i64>
83+
ret <2 x i64> %s
84+
}

0 commit comments

Comments
 (0)