Skip to content

Commit 2867510

Browse files
committed
[X86] Add test coverage for llvm#89533
1 parent 12adaac commit 2867510

File tree

1 file changed

+104
-3
lines changed

1 file changed

+104
-3
lines changed

llvm/test/CodeGen/X86/combine-or.ll

Lines changed: 104 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,108 @@ define i32 @or_and_multiuse_and_multiuse_i32(i32 %x, i32 %y) nounwind {
182182
ret i32 %r
183183
}
184184

185+
define i64 @or_build_pair_not(i32 %a0, i32 %a1) {
186+
; CHECK-LABEL: or_build_pair_not:
187+
; CHECK: # %bb.0:
188+
; CHECK-NEXT: # kill: def $esi killed $esi def $rsi
189+
; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
190+
; CHECK-NEXT: notl %edi
191+
; CHECK-NEXT: notl %esi
192+
; CHECK-NEXT: shlq $32, %rsi
193+
; CHECK-NEXT: leaq (%rsi,%rdi), %rax
194+
; CHECK-NEXT: retq
195+
%n0 = xor i32 %a0, -1
196+
%n1 = xor i32 %a1, -1
197+
%x0 = zext i32 %n0 to i64
198+
%x1 = zext i32 %n1 to i64
199+
%hi = shl i64 %x1, 32
200+
%r = or i64 %hi, %x0
201+
ret i64 %r
202+
}
203+
204+
define i64 @PR89533(<64 x i8> %a0) {
205+
; SSE-LABEL: PR89533:
206+
; SSE: # %bb.0:
207+
; SSE-NEXT: movdqa {{.*#+}} xmm4 = [95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95]
208+
; SSE-NEXT: pcmpeqb %xmm4, %xmm0
209+
; SSE-NEXT: pmovmskb %xmm0, %eax
210+
; SSE-NEXT: xorl $65535, %eax # imm = 0xFFFF
211+
; SSE-NEXT: pcmpeqb %xmm4, %xmm1
212+
; SSE-NEXT: pmovmskb %xmm1, %ecx
213+
; SSE-NEXT: notl %ecx
214+
; SSE-NEXT: shll $16, %ecx
215+
; SSE-NEXT: orl %eax, %ecx
216+
; SSE-NEXT: pcmpeqb %xmm4, %xmm2
217+
; SSE-NEXT: pmovmskb %xmm2, %edx
218+
; SSE-NEXT: xorl $65535, %edx # imm = 0xFFFF
219+
; SSE-NEXT: pcmpeqb %xmm4, %xmm3
220+
; SSE-NEXT: pmovmskb %xmm3, %eax
221+
; SSE-NEXT: notl %eax
222+
; SSE-NEXT: shll $16, %eax
223+
; SSE-NEXT: orl %edx, %eax
224+
; SSE-NEXT: shlq $32, %rax
225+
; SSE-NEXT: orq %rcx, %rax
226+
; SSE-NEXT: je .LBB11_2
227+
; SSE-NEXT: # %bb.1: # %cond.false
228+
; SSE-NEXT: rep bsfq %rax, %rax
229+
; SSE-NEXT: retq
230+
; SSE-NEXT: .LBB11_2: # %cond.end
231+
; SSE-NEXT: movl $64, %eax
232+
; SSE-NEXT: retq
233+
;
234+
; AVX1-LABEL: PR89533:
235+
; AVX1: # %bb.0:
236+
; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95]
237+
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm3
238+
; AVX1-NEXT: vpmovmskb %xmm3, %eax
239+
; AVX1-NEXT: xorl $65535, %eax # imm = 0xFFFF
240+
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
241+
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
242+
; AVX1-NEXT: vpmovmskb %xmm0, %ecx
243+
; AVX1-NEXT: notl %ecx
244+
; AVX1-NEXT: shll $16, %ecx
245+
; AVX1-NEXT: orl %eax, %ecx
246+
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm0
247+
; AVX1-NEXT: vpmovmskb %xmm0, %edx
248+
; AVX1-NEXT: xorl $65535, %edx # imm = 0xFFFF
249+
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
250+
; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
251+
; AVX1-NEXT: vpmovmskb %xmm0, %eax
252+
; AVX1-NEXT: notl %eax
253+
; AVX1-NEXT: shll $16, %eax
254+
; AVX1-NEXT: orl %edx, %eax
255+
; AVX1-NEXT: shlq $32, %rax
256+
; AVX1-NEXT: orq %rcx, %rax
257+
; AVX1-NEXT: je .LBB11_2
258+
; AVX1-NEXT: # %bb.1: # %cond.false
259+
; AVX1-NEXT: rep bsfq %rax, %rax
260+
; AVX1-NEXT: vzeroupper
261+
; AVX1-NEXT: retq
262+
; AVX1-NEXT: .LBB11_2: # %cond.end
263+
; AVX1-NEXT: movl $64, %eax
264+
; AVX1-NEXT: vzeroupper
265+
; AVX1-NEXT: retq
266+
;
267+
; AVX2-LABEL: PR89533:
268+
; AVX2: # %bb.0:
269+
; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm2 = [95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95]
270+
; AVX2-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm0
271+
; AVX2-NEXT: vpmovmskb %ymm0, %eax
272+
; AVX2-NEXT: notl %eax
273+
; AVX2-NEXT: vpcmpeqb %ymm2, %ymm1, %ymm0
274+
; AVX2-NEXT: vpmovmskb %ymm0, %ecx
275+
; AVX2-NEXT: notl %ecx
276+
; AVX2-NEXT: shlq $32, %rcx
277+
; AVX2-NEXT: orq %rax, %rcx
278+
; AVX2-NEXT: xorl %eax, %eax
279+
; AVX2-NEXT: tzcntq %rcx, %rax
280+
; AVX2-NEXT: vzeroupper
281+
; AVX2-NEXT: retq
282+
%cmp = icmp ne <64 x i8> %a0, <i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95, i8 95>
283+
%mask = bitcast <64 x i1> %cmp to i64
284+
%tz = tail call i64 @llvm.cttz.i64(i64 %mask, i1 false)
285+
ret i64 %tz
286+
}
287+
185288
declare void @use_i32(i32)
186-
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
187-
; AVX1: {{.*}}
188-
; AVX2: {{.*}}
289+

0 commit comments

Comments
 (0)