Skip to content

Commit 438a18c

Browse files
authored
[X86] Add test coverage for llvm#166534 (llvm#166552)
1 parent ba1dbdd commit 438a18c

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

llvm/test/CodeGen/X86/pr166534.ll

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64 | FileCheck %s --check-prefixes=SSE2
3+
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v2 | FileCheck %s --check-prefixes=SSE4
4+
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v3 | FileCheck %s --check-prefixes=AVX2
5+
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=AVX512
6+
7+
define void @pr166534(ptr %pa, ptr %pb, ptr %pc, ptr %pd) {
8+
; SSE2-LABEL: pr166534:
9+
; SSE2: # %bb.0: # %entry
10+
; SSE2-NEXT: movq (%rdi), %rax
11+
; SSE2-NEXT: movq 8(%rdi), %r8
12+
; SSE2-NEXT: movdqu (%rdi), %xmm0
13+
; SSE2-NEXT: movq (%rsi), %r9
14+
; SSE2-NEXT: movq 8(%rsi), %rdi
15+
; SSE2-NEXT: movdqu (%rsi), %xmm1
16+
; SSE2-NEXT: pcmpeqb %xmm0, %xmm1
17+
; SSE2-NEXT: pmovmskb %xmm1, %esi
18+
; SSE2-NEXT: xorl %r10d, %r10d
19+
; SSE2-NEXT: cmpl $65535, %esi # imm = 0xFFFF
20+
; SSE2-NEXT: sete %r10b
21+
; SSE2-NEXT: orq %r10, (%rdx)
22+
; SSE2-NEXT: cmpl $65535, %esi # imm = 0xFFFF
23+
; SSE2-NEXT: jne .LBB0_2
24+
; SSE2-NEXT: # %bb.1: # %if.then
25+
; SSE2-NEXT: xorq %r9, %rax
26+
; SSE2-NEXT: xorq %rdi, %r8
27+
; SSE2-NEXT: xorl %edx, %edx
28+
; SSE2-NEXT: orq %rax, %r8
29+
; SSE2-NEXT: sete %dl
30+
; SSE2-NEXT: orq %rdx, (%rcx)
31+
; SSE2-NEXT: .LBB0_2: # %if.end
32+
; SSE2-NEXT: retq
33+
;
34+
; SSE4-LABEL: pr166534:
35+
; SSE4: # %bb.0: # %entry
36+
; SSE4-NEXT: movq (%rdi), %rax
37+
; SSE4-NEXT: movq 8(%rdi), %r8
38+
; SSE4-NEXT: movdqu (%rdi), %xmm0
39+
; SSE4-NEXT: movq (%rsi), %r9
40+
; SSE4-NEXT: movq 8(%rsi), %rdi
41+
; SSE4-NEXT: movdqu (%rsi), %xmm1
42+
; SSE4-NEXT: pxor %xmm0, %xmm1
43+
; SSE4-NEXT: xorl %esi, %esi
44+
; SSE4-NEXT: ptest %xmm1, %xmm1
45+
; SSE4-NEXT: sete %sil
46+
; SSE4-NEXT: orq %rsi, (%rdx)
47+
; SSE4-NEXT: ptest %xmm1, %xmm1
48+
; SSE4-NEXT: jne .LBB0_2
49+
; SSE4-NEXT: # %bb.1: # %if.then
50+
; SSE4-NEXT: xorq %r9, %rax
51+
; SSE4-NEXT: xorq %rdi, %r8
52+
; SSE4-NEXT: xorl %edx, %edx
53+
; SSE4-NEXT: orq %rax, %r8
54+
; SSE4-NEXT: sete %dl
55+
; SSE4-NEXT: orq %rdx, (%rcx)
56+
; SSE4-NEXT: .LBB0_2: # %if.end
57+
; SSE4-NEXT: retq
58+
;
59+
; AVX2-LABEL: pr166534:
60+
; AVX2: # %bb.0: # %entry
61+
; AVX2-NEXT: movq (%rdi), %rax
62+
; AVX2-NEXT: movq 8(%rdi), %r8
63+
; AVX2-NEXT: vmovdqu (%rdi), %xmm0
64+
; AVX2-NEXT: movq (%rsi), %rdi
65+
; AVX2-NEXT: vpxor (%rsi), %xmm0, %xmm0
66+
; AVX2-NEXT: movq 8(%rsi), %rsi
67+
; AVX2-NEXT: xorl %r9d, %r9d
68+
; AVX2-NEXT: vptest %xmm0, %xmm0
69+
; AVX2-NEXT: sete %r9b
70+
; AVX2-NEXT: orq %r9, (%rdx)
71+
; AVX2-NEXT: vptest %xmm0, %xmm0
72+
; AVX2-NEXT: jne .LBB0_2
73+
; AVX2-NEXT: # %bb.1: # %if.then
74+
; AVX2-NEXT: xorq %rdi, %rax
75+
; AVX2-NEXT: xorq %rsi, %r8
76+
; AVX2-NEXT: xorl %edx, %edx
77+
; AVX2-NEXT: orq %rax, %r8
78+
; AVX2-NEXT: sete %dl
79+
; AVX2-NEXT: orq %rdx, (%rcx)
80+
; AVX2-NEXT: .LBB0_2: # %if.end
81+
; AVX2-NEXT: retq
82+
;
83+
; AVX512-LABEL: pr166534:
84+
; AVX512: # %bb.0: # %entry
85+
; AVX512-NEXT: movq (%rdi), %rax
86+
; AVX512-NEXT: movq 8(%rdi), %r8
87+
; AVX512-NEXT: vmovdqu (%rdi), %xmm0
88+
; AVX512-NEXT: movq (%rsi), %r9
89+
; AVX512-NEXT: movq 8(%rsi), %rdi
90+
; AVX512-NEXT: vpxor (%rsi), %xmm0, %xmm0
91+
; AVX512-NEXT: xorl %esi, %esi
92+
; AVX512-NEXT: vptest %xmm0, %xmm0
93+
; AVX512-NEXT: sete %sil
94+
; AVX512-NEXT: orq %rsi, (%rdx)
95+
; AVX512-NEXT: vptest %xmm0, %xmm0
96+
; AVX512-NEXT: jne .LBB0_2
97+
; AVX512-NEXT: # %bb.1: # %if.then
98+
; AVX512-NEXT: xorq %r9, %rax
99+
; AVX512-NEXT: xorq %rdi, %r8
100+
; AVX512-NEXT: xorl %edx, %edx
101+
; AVX512-NEXT: orq %rax, %r8
102+
; AVX512-NEXT: sete %dl
103+
; AVX512-NEXT: orq %rdx, (%rcx)
104+
; AVX512-NEXT: .LBB0_2: # %if.end
105+
; AVX512-NEXT: retq
106+
entry:
107+
%a = load i128, ptr %pa, align 8
108+
%b = load i128, ptr %pb, align 8
109+
%cmp = icmp eq i128 %a, %b
110+
%conv1 = zext i1 %cmp to i128
111+
%c = load i128, ptr %pc, align 8
112+
%or = or i128 %c, %conv1
113+
store i128 %or, ptr %pc, align 8
114+
br i1 %cmp, label %if.then, label %if.end
115+
116+
if.then:
117+
%d = load i128, ptr %pd, align 8
118+
%or7 = or i128 %d, %conv1
119+
store i128 %or7, ptr %pd, align 8
120+
br label %if.end
121+
122+
if.end:
123+
ret void
124+
}

0 commit comments

Comments
 (0)