blob: 67eeb129194c8f10dcdbbfcd12d1fe0b9bd5eff3 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s --check-prefixes=SSE2
; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=AVX2
define <2 x i128> @PR233186(<2 x i128> %x, <2 x i128> %a) nounwind {
; SSE2-LABEL: PR233186:
; SSE2: # %bb.0:
; SSE2-NEXT: pushq %r14
; SSE2-NEXT: pushq %rbx
; SSE2-NEXT: movq %r9, %r10
; SSE2-NEXT: movq %rcx, %r9
; SSE2-NEXT: movq %rdi, %rax
; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %r11
; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rbx
; SSE2-NEXT: movq {{[0-9]+}}(%rsp), %rdi
; SSE2-NEXT: movl %r10d, %ecx
; SSE2-NEXT: shrdq %cl, %rdx, %rsi
; SSE2-NEXT: movl %edi, %ecx
; SSE2-NEXT: shrdq %cl, %r8, %r9
; SSE2-NEXT: shrq %cl, %r8
; SSE2-NEXT: xorl %r14d, %r14d
; SSE2-NEXT: testb $64, %dil
; SSE2-NEXT: cmovneq %r8, %r9
; SSE2-NEXT: cmovneq %r14, %r8
; SSE2-NEXT: movl %r10d, %ecx
; SSE2-NEXT: shrq %cl, %rdx
; SSE2-NEXT: testb $64, %r10b
; SSE2-NEXT: cmovneq %rdx, %rsi
; SSE2-NEXT: cmovneq %r14, %rdx
; SSE2-NEXT: cmpq $128, %r10
; SSE2-NEXT: sbbq $0, %rbx
; SSE2-NEXT: cmovaeq %r14, %rsi
; SSE2-NEXT: cmovaeq %r14, %rdx
; SSE2-NEXT: cmpq $128, %rdi
; SSE2-NEXT: sbbq $0, %r11
; SSE2-NEXT: cmovaeq %r14, %r9
; SSE2-NEXT: cmovaeq %r14, %r8
; SSE2-NEXT: movq %r8, 24(%rax)
; SSE2-NEXT: movq %r9, 16(%rax)
; SSE2-NEXT: movq %rdx, 8(%rax)
; SSE2-NEXT: movq %rsi, (%rax)
; SSE2-NEXT: popq %rbx
; SSE2-NEXT: popq %r14
; SSE2-NEXT: retq
;
; AVX2-LABEL: PR233186:
; AVX2: # %bb.0:
; AVX2-NEXT: pushq %r14
; AVX2-NEXT: pushq %rbx
; AVX2-NEXT: movq %r9, %r10
; AVX2-NEXT: movq %rcx, %r9
; AVX2-NEXT: movq %rdi, %rax
; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rbx
; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rdi
; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r11
; AVX2-NEXT: movl %r10d, %ecx
; AVX2-NEXT: shrdq %cl, %rdx, %rsi
; AVX2-NEXT: movl %edi, %ecx
; AVX2-NEXT: shrdq %cl, %r8, %r9
; AVX2-NEXT: shrq %cl, %r8
; AVX2-NEXT: xorl %r14d, %r14d
; AVX2-NEXT: testb $64, %dil
; AVX2-NEXT: cmovneq %r8, %r9
; AVX2-NEXT: cmovneq %r14, %r8
; AVX2-NEXT: movl %r10d, %ecx
; AVX2-NEXT: shrq %cl, %rdx
; AVX2-NEXT: testb $64, %r10b
; AVX2-NEXT: cmovneq %rdx, %rsi
; AVX2-NEXT: cmovneq %r14, %rdx
; AVX2-NEXT: cmpq $128, %r10
; AVX2-NEXT: sbbq $0, %rbx
; AVX2-NEXT: cmovaeq %r14, %rsi
; AVX2-NEXT: cmovaeq %r14, %rdx
; AVX2-NEXT: cmpq $128, %rdi
; AVX2-NEXT: sbbq $0, %r11
; AVX2-NEXT: cmovaeq %r14, %r9
; AVX2-NEXT: cmovaeq %r14, %r8
; AVX2-NEXT: movq %r8, 24(%rax)
; AVX2-NEXT: movq %r9, 16(%rax)
; AVX2-NEXT: movq %rdx, 8(%rax)
; AVX2-NEXT: movq %rsi, (%rax)
; AVX2-NEXT: popq %rbx
; AVX2-NEXT: popq %r14
; AVX2-NEXT: retq
%c = icmp uge <2 x i128> %a, splat (i128 128)
%s = lshr <2 x i128> %x, %a
%r = select <2 x i1> %c, <2 x i128> zeroinitializer, <2 x i128> %s
ret <2 x i128> %r
}