blob: 34168c907c50e66530813e2c632e81111f7d9fa3 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
; RUN: llc < %s -mtriple=x86_64-- -mattr=+bmi2 | FileCheck %s --check-prefix=BMI2
; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefix=NOBMI2
define i8 @pdep_i8(i8 %val, i8 %mask) nounwind {
; BMI2-LABEL: pdep_i8:
; BMI2: # %bb.0:
; BMI2-NEXT: pdepl %esi, %edi, %eax
; BMI2-NEXT: # kill: def $al killed $al killed $eax
; BMI2-NEXT: retq
;
; NOBMI2-LABEL: pdep_i8:
; NOBMI2: # %bb.0:
; NOBMI2-NEXT: movl %esi, %eax
; NOBMI2-NEXT: notb %al
; NOBMI2-NEXT: leal (,%rax,4), %ecx
; NOBMI2-NEXT: addb %al, %al
; NOBMI2-NEXT: xorb %al, %cl
; NOBMI2-NEXT: leal (,%rcx,4), %edx
; NOBMI2-NEXT: xorb %cl, %dl
; NOBMI2-NEXT: movl %edx, %ecx
; NOBMI2-NEXT: shlb $4, %cl
; NOBMI2-NEXT: xorb %dl, %cl
; NOBMI2-NEXT: movl %ecx, %edx
; NOBMI2-NEXT: notb %dl
; NOBMI2-NEXT: andb %al, %dl
; NOBMI2-NEXT: leal (%rdx,%rdx), %eax
; NOBMI2-NEXT: xorb %dl, %al
; NOBMI2-NEXT: leal (,%rax,4), %r8d
; NOBMI2-NEXT: xorb %al, %r8b
; NOBMI2-NEXT: movl %r8d, %eax
; NOBMI2-NEXT: shlb $4, %al
; NOBMI2-NEXT: xorb %r8b, %al
; NOBMI2-NEXT: movl %eax, %r8d
; NOBMI2-NEXT: notb %r8b
; NOBMI2-NEXT: andb %dl, %r8b
; NOBMI2-NEXT: leal (%r8,%r8), %edx
; NOBMI2-NEXT: xorb %r8b, %dl
; NOBMI2-NEXT: leal (,%rdx,4), %r8d
; NOBMI2-NEXT: xorb %dl, %r8b
; NOBMI2-NEXT: movl %r8d, %edx
; NOBMI2-NEXT: shlb $4, %dl
; NOBMI2-NEXT: xorb %r8b, %dl
; NOBMI2-NEXT: andb %sil, %cl
; NOBMI2-NEXT: movl %esi, %r8d
; NOBMI2-NEXT: xorb %cl, %r8b
; NOBMI2-NEXT: movl %ecx, %r9d
; NOBMI2-NEXT: shrb %r9b
; NOBMI2-NEXT: orb %r8b, %r9b
; NOBMI2-NEXT: andb %r9b, %al
; NOBMI2-NEXT: xorb %al, %r9b
; NOBMI2-NEXT: movl %eax, %r8d
; NOBMI2-NEXT: shrb $2, %r8b
; NOBMI2-NEXT: orb %r9b, %r8b
; NOBMI2-NEXT: movl %edi, %r9d
; NOBMI2-NEXT: shlb $4, %r9b
; NOBMI2-NEXT: xorb %dil, %r9b
; NOBMI2-NEXT: andb %r8b, %r9b
; NOBMI2-NEXT: andb %dl, %r9b
; NOBMI2-NEXT: xorb %dil, %r9b
; NOBMI2-NEXT: leal (,%r9,4), %edx
; NOBMI2-NEXT: xorb %r9b, %dl
; NOBMI2-NEXT: andb %al, %dl
; NOBMI2-NEXT: xorb %r9b, %dl
; NOBMI2-NEXT: leal (%rdx,%rdx), %eax
; NOBMI2-NEXT: xorb %dl, %al
; NOBMI2-NEXT: andb %cl, %al
; NOBMI2-NEXT: xorb %dl, %al
; NOBMI2-NEXT: andb %sil, %al
; NOBMI2-NEXT: # kill: def $al killed $al killed $eax
; NOBMI2-NEXT: retq
%res = call i8 @llvm.pdep.i8(i8 %val, i8 %mask)
ret i8 %res
}
define i16 @pdep_i16(i16 %val, i16 %mask) nounwind {
; BMI2-LABEL: pdep_i16:
; BMI2: # %bb.0:
; BMI2-NEXT: pdepl %esi, %edi, %eax
; BMI2-NEXT: # kill: def $ax killed $ax killed $eax
; BMI2-NEXT: retq
;
; NOBMI2-LABEL: pdep_i16:
; NOBMI2: # %bb.0:
; NOBMI2-NEXT: movl %esi, %eax
; NOBMI2-NEXT: notl %eax
; NOBMI2-NEXT: leal (,%rax,4), %ecx
; NOBMI2-NEXT: addl %eax, %eax
; NOBMI2-NEXT: xorl %eax, %ecx
; NOBMI2-NEXT: leal (,%rcx,4), %edx
; NOBMI2-NEXT: xorl %ecx, %edx
; NOBMI2-NEXT: movl %edx, %r8d
; NOBMI2-NEXT: shll $4, %r8d
; NOBMI2-NEXT: xorl %edx, %r8d
; NOBMI2-NEXT: movl %r8d, %ecx
; NOBMI2-NEXT: shll $8, %ecx
; NOBMI2-NEXT: xorl %r8d, %ecx
; NOBMI2-NEXT: movl %ecx, %edx
; NOBMI2-NEXT: notl %edx
; NOBMI2-NEXT: andl %eax, %edx
; NOBMI2-NEXT: leal (%rdx,%rdx), %eax
; NOBMI2-NEXT: xorl %edx, %eax
; NOBMI2-NEXT: leal (,%rax,4), %r8d
; NOBMI2-NEXT: xorl %eax, %r8d
; NOBMI2-NEXT: movl %r8d, %r9d
; NOBMI2-NEXT: shll $4, %r9d
; NOBMI2-NEXT: xorl %r8d, %r9d
; NOBMI2-NEXT: movl %r9d, %eax
; NOBMI2-NEXT: shll $8, %eax
; NOBMI2-NEXT: xorl %r9d, %eax
; NOBMI2-NEXT: movl %eax, %r8d
; NOBMI2-NEXT: notl %r8d
; NOBMI2-NEXT: andl %edx, %r8d
; NOBMI2-NEXT: leal (%r8,%r8), %edx
; NOBMI2-NEXT: xorl %r8d, %edx
; NOBMI2-NEXT: leal (,%rdx,4), %r9d
; NOBMI2-NEXT: xorl %edx, %r9d
; NOBMI2-NEXT: movl %r9d, %r10d
; NOBMI2-NEXT: shll $4, %r10d
; NOBMI2-NEXT: xorl %r9d, %r10d
; NOBMI2-NEXT: movl %r10d, %edx
; NOBMI2-NEXT: shll $8, %edx
; NOBMI2-NEXT: xorl %r10d, %edx
; NOBMI2-NEXT: movl %edx, %r9d
; NOBMI2-NEXT: notl %r9d
; NOBMI2-NEXT: andl %r8d, %r9d
; NOBMI2-NEXT: leal (%r9,%r9), %r8d
; NOBMI2-NEXT: xorl %r9d, %r8d
; NOBMI2-NEXT: leal (,%r8,4), %r9d
; NOBMI2-NEXT: xorl %r8d, %r9d
; NOBMI2-NEXT: movl %r9d, %r10d
; NOBMI2-NEXT: shll $4, %r10d
; NOBMI2-NEXT: xorl %r9d, %r10d
; NOBMI2-NEXT: movl %r10d, %r8d
; NOBMI2-NEXT: shll $8, %r8d
; NOBMI2-NEXT: xorl %r10d, %r8d
; NOBMI2-NEXT: andl %esi, %ecx
; NOBMI2-NEXT: movl %esi, %r9d
; NOBMI2-NEXT: xorl %ecx, %r9d
; NOBMI2-NEXT: movzwl %cx, %r10d
; NOBMI2-NEXT: shrl %r10d
; NOBMI2-NEXT: orl %r9d, %r10d
; NOBMI2-NEXT: andl %r10d, %eax
; NOBMI2-NEXT: xorl %eax, %r10d
; NOBMI2-NEXT: movzwl %ax, %r9d
; NOBMI2-NEXT: shrl $2, %r9d
; NOBMI2-NEXT: orl %r10d, %r9d
; NOBMI2-NEXT: andl %r9d, %edx
; NOBMI2-NEXT: xorl %edx, %r9d
; NOBMI2-NEXT: movzwl %dx, %r10d
; NOBMI2-NEXT: shrl $4, %r10d
; NOBMI2-NEXT: orl %r9d, %r10d
; NOBMI2-NEXT: movl %edi, %r9d
; NOBMI2-NEXT: shll $8, %r9d
; NOBMI2-NEXT: xorl %edi, %r9d
; NOBMI2-NEXT: andl %r10d, %r9d
; NOBMI2-NEXT: andl %r8d, %r9d
; NOBMI2-NEXT: xorl %edi, %r9d
; NOBMI2-NEXT: movl %r9d, %edi
; NOBMI2-NEXT: shll $4, %edi
; NOBMI2-NEXT: xorl %r9d, %edi
; NOBMI2-NEXT: andl %edx, %edi
; NOBMI2-NEXT: xorl %r9d, %edi
; NOBMI2-NEXT: leal (,%rdi,4), %edx
; NOBMI2-NEXT: xorl %edi, %edx
; NOBMI2-NEXT: andl %eax, %edx
; NOBMI2-NEXT: xorl %edi, %edx
; NOBMI2-NEXT: leal (%rdx,%rdx), %eax
; NOBMI2-NEXT: xorl %edx, %eax
; NOBMI2-NEXT: andl %ecx, %eax
; NOBMI2-NEXT: xorl %edx, %eax
; NOBMI2-NEXT: andl %esi, %eax
; NOBMI2-NEXT: # kill: def $ax killed $ax killed $eax
; NOBMI2-NEXT: retq
%res = call i16 @llvm.pdep.i16(i16 %val, i16 %mask)
ret i16 %res
}
define i32 @pdep_i32(i32 %val, i32 %mask) nounwind {
; BMI2-LABEL: pdep_i32:
; BMI2: # %bb.0:
; BMI2-NEXT: pdepl %esi, %edi, %eax
; BMI2-NEXT: retq
;
; NOBMI2-LABEL: pdep_i32:
; NOBMI2: # %bb.0:
; NOBMI2-NEXT: movl %esi, %eax
; NOBMI2-NEXT: notl %eax
; NOBMI2-NEXT: leal (,%rax,4), %ecx
; NOBMI2-NEXT: addl %eax, %eax
; NOBMI2-NEXT: xorl %eax, %ecx
; NOBMI2-NEXT: leal (,%rcx,4), %edx
; NOBMI2-NEXT: xorl %ecx, %edx
; NOBMI2-NEXT: movl %edx, %ecx
; NOBMI2-NEXT: shll $4, %ecx
; NOBMI2-NEXT: xorl %edx, %ecx
; NOBMI2-NEXT: movl %ecx, %edx
; NOBMI2-NEXT: shll $8, %edx
; NOBMI2-NEXT: xorl %ecx, %edx
; NOBMI2-NEXT: movl %edx, %ecx
; NOBMI2-NEXT: shll $16, %ecx
; NOBMI2-NEXT: xorl %edx, %ecx
; NOBMI2-NEXT: movl %ecx, %edx
; NOBMI2-NEXT: notl %edx
; NOBMI2-NEXT: andl %eax, %edx
; NOBMI2-NEXT: leal (%rdx,%rdx), %eax
; NOBMI2-NEXT: xorl %edx, %eax
; NOBMI2-NEXT: leal (,%rax,4), %r8d
; NOBMI2-NEXT: xorl %eax, %r8d
; NOBMI2-NEXT: movl %r8d, %eax
; NOBMI2-NEXT: shll $4, %eax
; NOBMI2-NEXT: xorl %r8d, %eax
; NOBMI2-NEXT: movl %eax, %r8d
; NOBMI2-NEXT: shll $8, %r8d
; NOBMI2-NEXT: xorl %eax, %r8d
; NOBMI2-NEXT: movl %r8d, %eax
; NOBMI2-NEXT: shll $16, %eax
; NOBMI2-NEXT: xorl %r8d, %eax
; NOBMI2-NEXT: movl %eax, %r8d
; NOBMI2-NEXT: notl %r8d
; NOBMI2-NEXT: andl %edx, %r8d
; NOBMI2-NEXT: leal (%r8,%r8), %edx
; NOBMI2-NEXT: xorl %r8d, %edx
; NOBMI2-NEXT: leal (,%rdx,4), %r9d
; NOBMI2-NEXT: xorl %edx, %r9d
; NOBMI2-NEXT: movl %r9d, %edx
; NOBMI2-NEXT: shll $4, %edx
; NOBMI2-NEXT: xorl %r9d, %edx
; NOBMI2-NEXT: movl %edx, %r9d
; NOBMI2-NEXT: shll $8, %r9d
; NOBMI2-NEXT: xorl %edx, %r9d
; NOBMI2-NEXT: movl %r9d, %edx
; NOBMI2-NEXT: shll $16, %edx
; NOBMI2-NEXT: xorl %r9d, %edx
; NOBMI2-NEXT: movl %edx, %r9d
; NOBMI2-NEXT: notl %r9d
; NOBMI2-NEXT: andl %r8d, %r9d
; NOBMI2-NEXT: leal (%r9,%r9), %r8d
; NOBMI2-NEXT: xorl %r9d, %r8d
; NOBMI2-NEXT: leal (,%r8,4), %r10d
; NOBMI2-NEXT: xorl %r8d, %r10d
; NOBMI2-NEXT: movl %r10d, %r8d
; NOBMI2-NEXT: shll $4, %r8d
; NOBMI2-NEXT: xorl %r10d, %r8d
; NOBMI2-NEXT: movl %r8d, %r10d
; NOBMI2-NEXT: shll $8, %r10d
; NOBMI2-NEXT: xorl %r8d, %r10d
; NOBMI2-NEXT: movl %r10d, %r8d
; NOBMI2-NEXT: shll $16, %r8d
; NOBMI2-NEXT: xorl %r10d, %r8d
; NOBMI2-NEXT: movl %r8d, %r10d
; NOBMI2-NEXT: notl %r10d
; NOBMI2-NEXT: andl %r9d, %r10d
; NOBMI2-NEXT: leal (%r10,%r10), %r9d
; NOBMI2-NEXT: xorl %r10d, %r9d
; NOBMI2-NEXT: leal (,%r9,4), %r10d
; NOBMI2-NEXT: xorl %r9d, %r10d
; NOBMI2-NEXT: movl %r10d, %r9d
; NOBMI2-NEXT: shll $4, %r9d
; NOBMI2-NEXT: xorl %r10d, %r9d
; NOBMI2-NEXT: movl %r9d, %r10d
; NOBMI2-NEXT: shll $8, %r10d
; NOBMI2-NEXT: xorl %r9d, %r10d
; NOBMI2-NEXT: movl %r10d, %r9d
; NOBMI2-NEXT: shll $16, %r9d
; NOBMI2-NEXT: xorl %r10d, %r9d
; NOBMI2-NEXT: andl %esi, %ecx
; NOBMI2-NEXT: movl %esi, %r10d
; NOBMI2-NEXT: xorl %ecx, %r10d
; NOBMI2-NEXT: movl %ecx, %r11d
; NOBMI2-NEXT: shrl %r11d
; NOBMI2-NEXT: orl %r10d, %r11d
; NOBMI2-NEXT: andl %r11d, %eax
; NOBMI2-NEXT: xorl %eax, %r11d
; NOBMI2-NEXT: movl %eax, %r10d
; NOBMI2-NEXT: shrl $2, %r10d
; NOBMI2-NEXT: orl %r11d, %r10d
; NOBMI2-NEXT: andl %r10d, %edx
; NOBMI2-NEXT: xorl %edx, %r10d
; NOBMI2-NEXT: movl %edx, %r11d
; NOBMI2-NEXT: shrl $4, %r11d
; NOBMI2-NEXT: orl %r10d, %r11d
; NOBMI2-NEXT: andl %r11d, %r8d
; NOBMI2-NEXT: xorl %r8d, %r11d
; NOBMI2-NEXT: movl %r8d, %r10d
; NOBMI2-NEXT: shrl $8, %r10d
; NOBMI2-NEXT: orl %r11d, %r10d
; NOBMI2-NEXT: movl %edi, %r11d
; NOBMI2-NEXT: shll $16, %r11d
; NOBMI2-NEXT: xorl %edi, %r11d
; NOBMI2-NEXT: andl %r10d, %r11d
; NOBMI2-NEXT: andl %r9d, %r11d
; NOBMI2-NEXT: xorl %edi, %r11d
; NOBMI2-NEXT: movl %r11d, %edi
; NOBMI2-NEXT: shll $8, %edi
; NOBMI2-NEXT: xorl %r11d, %edi
; NOBMI2-NEXT: andl %r8d, %edi
; NOBMI2-NEXT: xorl %r11d, %edi
; NOBMI2-NEXT: movl %edi, %r8d
; NOBMI2-NEXT: shll $4, %r8d
; NOBMI2-NEXT: xorl %edi, %r8d
; NOBMI2-NEXT: andl %edx, %r8d
; NOBMI2-NEXT: xorl %edi, %r8d
; NOBMI2-NEXT: leal (,%r8,4), %edx
; NOBMI2-NEXT: xorl %r8d, %edx
; NOBMI2-NEXT: andl %eax, %edx
; NOBMI2-NEXT: xorl %r8d, %edx
; NOBMI2-NEXT: leal (%rdx,%rdx), %eax
; NOBMI2-NEXT: xorl %edx, %eax
; NOBMI2-NEXT: andl %ecx, %eax
; NOBMI2-NEXT: xorl %edx, %eax
; NOBMI2-NEXT: andl %esi, %eax
; NOBMI2-NEXT: retq
%res = call i32 @llvm.pdep.i32(i32 %val, i32 %mask)
ret i32 %res
}
define i64 @pdep_i64(i64 %val, i64 %mask) nounwind {
; BMI2-LABEL: pdep_i64:
; BMI2: # %bb.0:
; BMI2-NEXT: pdepq %rsi, %rdi, %rax
; BMI2-NEXT: retq
;
; NOBMI2-LABEL: pdep_i64:
; NOBMI2: # %bb.0:
; NOBMI2-NEXT: pushq %rbx
; NOBMI2-NEXT: movq %rsi, %rax
; NOBMI2-NEXT: notq %rax
; NOBMI2-NEXT: leaq (,%rax,4), %rcx
; NOBMI2-NEXT: addq %rax, %rax
; NOBMI2-NEXT: xorq %rax, %rcx
; NOBMI2-NEXT: leaq (,%rcx,4), %rdx
; NOBMI2-NEXT: xorq %rcx, %rdx
; NOBMI2-NEXT: movq %rdx, %rcx
; NOBMI2-NEXT: shlq $4, %rcx
; NOBMI2-NEXT: xorq %rdx, %rcx
; NOBMI2-NEXT: movq %rcx, %rdx
; NOBMI2-NEXT: shlq $8, %rdx
; NOBMI2-NEXT: xorq %rcx, %rdx
; NOBMI2-NEXT: movq %rdx, %r8
; NOBMI2-NEXT: shlq $16, %r8
; NOBMI2-NEXT: xorq %rdx, %r8
; NOBMI2-NEXT: movq %r8, %rcx
; NOBMI2-NEXT: shlq $32, %rcx
; NOBMI2-NEXT: xorq %r8, %rcx
; NOBMI2-NEXT: movq %rcx, %rdx
; NOBMI2-NEXT: notq %rdx
; NOBMI2-NEXT: andq %rax, %rdx
; NOBMI2-NEXT: leaq (%rdx,%rdx), %rax
; NOBMI2-NEXT: xorq %rdx, %rax
; NOBMI2-NEXT: leaq (,%rax,4), %r8
; NOBMI2-NEXT: xorq %rax, %r8
; NOBMI2-NEXT: movq %r8, %rax
; NOBMI2-NEXT: shlq $4, %rax
; NOBMI2-NEXT: xorq %r8, %rax
; NOBMI2-NEXT: movq %rax, %r8
; NOBMI2-NEXT: shlq $8, %r8
; NOBMI2-NEXT: xorq %rax, %r8
; NOBMI2-NEXT: movq %r8, %r9
; NOBMI2-NEXT: shlq $16, %r9
; NOBMI2-NEXT: xorq %r8, %r9
; NOBMI2-NEXT: movq %r9, %rax
; NOBMI2-NEXT: shlq $32, %rax
; NOBMI2-NEXT: xorq %r9, %rax
; NOBMI2-NEXT: movq %rax, %r8
; NOBMI2-NEXT: notq %r8
; NOBMI2-NEXT: andq %rdx, %r8
; NOBMI2-NEXT: leaq (%r8,%r8), %rdx
; NOBMI2-NEXT: xorq %r8, %rdx
; NOBMI2-NEXT: leaq (,%rdx,4), %r9
; NOBMI2-NEXT: xorq %rdx, %r9
; NOBMI2-NEXT: movq %r9, %rdx
; NOBMI2-NEXT: shlq $4, %rdx
; NOBMI2-NEXT: xorq %r9, %rdx
; NOBMI2-NEXT: movq %rdx, %r9
; NOBMI2-NEXT: shlq $8, %r9
; NOBMI2-NEXT: xorq %rdx, %r9
; NOBMI2-NEXT: movq %r9, %r10
; NOBMI2-NEXT: shlq $16, %r10
; NOBMI2-NEXT: xorq %r9, %r10
; NOBMI2-NEXT: movq %r10, %rdx
; NOBMI2-NEXT: shlq $32, %rdx
; NOBMI2-NEXT: xorq %r10, %rdx
; NOBMI2-NEXT: movq %rdx, %r9
; NOBMI2-NEXT: notq %r9
; NOBMI2-NEXT: andq %r8, %r9
; NOBMI2-NEXT: leaq (%r9,%r9), %r8
; NOBMI2-NEXT: xorq %r9, %r8
; NOBMI2-NEXT: leaq (,%r8,4), %r10
; NOBMI2-NEXT: xorq %r8, %r10
; NOBMI2-NEXT: movq %r10, %r8
; NOBMI2-NEXT: shlq $4, %r8
; NOBMI2-NEXT: xorq %r10, %r8
; NOBMI2-NEXT: movq %r8, %r10
; NOBMI2-NEXT: shlq $8, %r10
; NOBMI2-NEXT: xorq %r8, %r10
; NOBMI2-NEXT: movq %r10, %r11
; NOBMI2-NEXT: shlq $16, %r11
; NOBMI2-NEXT: xorq %r10, %r11
; NOBMI2-NEXT: movq %r11, %r8
; NOBMI2-NEXT: shlq $32, %r8
; NOBMI2-NEXT: xorq %r11, %r8
; NOBMI2-NEXT: movq %r8, %r10
; NOBMI2-NEXT: notq %r10
; NOBMI2-NEXT: andq %r9, %r10
; NOBMI2-NEXT: leaq (%r10,%r10), %r9
; NOBMI2-NEXT: xorq %r10, %r9
; NOBMI2-NEXT: leaq (,%r9,4), %r11
; NOBMI2-NEXT: xorq %r9, %r11
; NOBMI2-NEXT: movq %r11, %r9
; NOBMI2-NEXT: shlq $4, %r9
; NOBMI2-NEXT: xorq %r11, %r9
; NOBMI2-NEXT: movq %r9, %r11
; NOBMI2-NEXT: shlq $8, %r11
; NOBMI2-NEXT: xorq %r9, %r11
; NOBMI2-NEXT: movq %r11, %rbx
; NOBMI2-NEXT: shlq $16, %rbx
; NOBMI2-NEXT: xorq %r11, %rbx
; NOBMI2-NEXT: movq %rbx, %r9
; NOBMI2-NEXT: shlq $32, %r9
; NOBMI2-NEXT: xorq %rbx, %r9
; NOBMI2-NEXT: movq %r9, %r11
; NOBMI2-NEXT: notq %r11
; NOBMI2-NEXT: andq %r10, %r11
; NOBMI2-NEXT: leaq (%r11,%r11), %r10
; NOBMI2-NEXT: xorq %r11, %r10
; NOBMI2-NEXT: leaq (,%r10,4), %r11
; NOBMI2-NEXT: xorq %r10, %r11
; NOBMI2-NEXT: movq %r11, %r10
; NOBMI2-NEXT: shlq $4, %r10
; NOBMI2-NEXT: xorq %r11, %r10
; NOBMI2-NEXT: movq %r10, %r11
; NOBMI2-NEXT: shlq $8, %r11
; NOBMI2-NEXT: xorq %r10, %r11
; NOBMI2-NEXT: movq %r11, %rbx
; NOBMI2-NEXT: shlq $16, %rbx
; NOBMI2-NEXT: xorq %r11, %rbx
; NOBMI2-NEXT: movq %rbx, %r10
; NOBMI2-NEXT: shlq $32, %r10
; NOBMI2-NEXT: xorq %rbx, %r10
; NOBMI2-NEXT: andq %rsi, %rcx
; NOBMI2-NEXT: movq %rsi, %r11
; NOBMI2-NEXT: xorq %rcx, %r11
; NOBMI2-NEXT: movq %rcx, %rbx
; NOBMI2-NEXT: shrq %rbx
; NOBMI2-NEXT: orq %r11, %rbx
; NOBMI2-NEXT: andq %rbx, %rax
; NOBMI2-NEXT: xorq %rax, %rbx
; NOBMI2-NEXT: movq %rax, %r11
; NOBMI2-NEXT: shrq $2, %r11
; NOBMI2-NEXT: orq %rbx, %r11
; NOBMI2-NEXT: andq %r11, %rdx
; NOBMI2-NEXT: xorq %rdx, %r11
; NOBMI2-NEXT: movq %rdx, %rbx
; NOBMI2-NEXT: shrq $4, %rbx
; NOBMI2-NEXT: orq %r11, %rbx
; NOBMI2-NEXT: andq %rbx, %r8
; NOBMI2-NEXT: xorq %r8, %rbx
; NOBMI2-NEXT: movq %r8, %r11
; NOBMI2-NEXT: shrq $8, %r11
; NOBMI2-NEXT: orq %rbx, %r11
; NOBMI2-NEXT: andq %r11, %r9
; NOBMI2-NEXT: xorq %r9, %r11
; NOBMI2-NEXT: movq %r9, %rbx
; NOBMI2-NEXT: shrq $16, %rbx
; NOBMI2-NEXT: orq %r11, %rbx
; NOBMI2-NEXT: movq %rdi, %r11
; NOBMI2-NEXT: shlq $32, %r11
; NOBMI2-NEXT: xorq %rdi, %r11
; NOBMI2-NEXT: andq %rbx, %r11
; NOBMI2-NEXT: andq %r10, %r11
; NOBMI2-NEXT: xorq %rdi, %r11
; NOBMI2-NEXT: movq %r11, %rdi
; NOBMI2-NEXT: shlq $16, %rdi
; NOBMI2-NEXT: xorq %r11, %rdi
; NOBMI2-NEXT: andq %r9, %rdi
; NOBMI2-NEXT: xorq %r11, %rdi
; NOBMI2-NEXT: movq %rdi, %r9
; NOBMI2-NEXT: shlq $8, %r9
; NOBMI2-NEXT: xorq %rdi, %r9
; NOBMI2-NEXT: andq %r8, %r9
; NOBMI2-NEXT: xorq %rdi, %r9
; NOBMI2-NEXT: movq %r9, %rdi
; NOBMI2-NEXT: shlq $4, %rdi
; NOBMI2-NEXT: xorq %r9, %rdi
; NOBMI2-NEXT: andq %rdx, %rdi
; NOBMI2-NEXT: xorq %r9, %rdi
; NOBMI2-NEXT: leaq (,%rdi,4), %rdx
; NOBMI2-NEXT: xorq %rdi, %rdx
; NOBMI2-NEXT: andq %rax, %rdx
; NOBMI2-NEXT: xorq %rdi, %rdx
; NOBMI2-NEXT: leaq (%rdx,%rdx), %rax
; NOBMI2-NEXT: xorq %rdx, %rax
; NOBMI2-NEXT: andq %rcx, %rax
; NOBMI2-NEXT: xorq %rdx, %rax
; NOBMI2-NEXT: andq %rsi, %rax
; NOBMI2-NEXT: popq %rbx
; NOBMI2-NEXT: retq
%res = call i64 @llvm.pdep.i64(i64 %val, i64 %mask)
ret i64 %res
}
define i32 @pdep_mask_zero(i32 %val) nounwind {
; BMI2-LABEL: pdep_mask_zero:
; BMI2: # %bb.0:
; BMI2-NEXT: xorl %eax, %eax
; BMI2-NEXT: retq
;
; NOBMI2-LABEL: pdep_mask_zero:
; NOBMI2: # %bb.0:
; NOBMI2-NEXT: xorl %eax, %eax
; NOBMI2-NEXT: retq
%res = call i32 @llvm.pdep.i32(i32 %val, i32 0)
ret i32 %res
}
define i32 @pdep_mask_allones(i32 %val) nounwind {
; BMI2-LABEL: pdep_mask_allones:
; BMI2: # %bb.0:
; BMI2-NEXT: movl %edi, %eax
; BMI2-NEXT: retq
;
; NOBMI2-LABEL: pdep_mask_allones:
; NOBMI2: # %bb.0:
; NOBMI2-NEXT: movl %edi, %eax
; NOBMI2-NEXT: retq
%res = call i32 @llvm.pdep.i32(i32 %val, i32 -1)
ret i32 %res
}
define i32 @pdep_const_fold() nounwind {
; BMI2-LABEL: pdep_const_fold:
; BMI2: # %bb.0:
; BMI2-NEXT: movl $136, %eax
; BMI2-NEXT: retq
;
; NOBMI2-LABEL: pdep_const_fold:
; NOBMI2: # %bb.0:
; NOBMI2-NEXT: movl $136, %eax
; NOBMI2-NEXT: retq
%res = call i32 @llvm.pdep.i32(i32 10, i32 204)
ret i32 %res
}