Skip to content

Commit 0c78b64

Browse files
committed
[X86][SSE] Add bitcast <128 x i1> %1 to <2 x i64> test case
1 parent 17e91b7 commit 0c78b64

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

llvm/test/CodeGen/X86/bitcast-vector-bool.ll

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,3 +640,90 @@ define i32 @bitcast_v64i8_to_v2i32(<64 x i8> %a0) nounwind {
640640
%5 = add i32 %3, %4
641641
ret i32 %5
642642
}
643+
644+
define i64 @bitcast_v128i8_to_v2i64(<128 x i8> %a0) nounwind {
645+
; SSE2-SSSE3-LABEL: bitcast_v128i8_to_v2i64:
646+
; SSE2-SSSE3: # %bb.0:
647+
; SSE2-SSSE3-NEXT: pmovmskb %xmm4, %eax
648+
; SSE2-SSSE3-NEXT: pmovmskb %xmm5, %ecx
649+
; SSE2-SSSE3-NEXT: shll $16, %ecx
650+
; SSE2-SSSE3-NEXT: orl %eax, %ecx
651+
; SSE2-SSSE3-NEXT: pmovmskb %xmm6, %eax
652+
; SSE2-SSSE3-NEXT: pmovmskb %xmm7, %edx
653+
; SSE2-SSSE3-NEXT: shll $16, %edx
654+
; SSE2-SSSE3-NEXT: orl %eax, %edx
655+
; SSE2-SSSE3-NEXT: shlq $32, %rdx
656+
; SSE2-SSSE3-NEXT: orq %rcx, %rdx
657+
; SSE2-SSSE3-NEXT: pmovmskb %xmm0, %eax
658+
; SSE2-SSSE3-NEXT: pmovmskb %xmm1, %ecx
659+
; SSE2-SSSE3-NEXT: shll $16, %ecx
660+
; SSE2-SSSE3-NEXT: orl %eax, %ecx
661+
; SSE2-SSSE3-NEXT: pmovmskb %xmm2, %esi
662+
; SSE2-SSSE3-NEXT: pmovmskb %xmm3, %eax
663+
; SSE2-SSSE3-NEXT: shll $16, %eax
664+
; SSE2-SSSE3-NEXT: orl %esi, %eax
665+
; SSE2-SSSE3-NEXT: shlq $32, %rax
666+
; SSE2-SSSE3-NEXT: orq %rcx, %rax
667+
; SSE2-SSSE3-NEXT: addq %rdx, %rax
668+
; SSE2-SSSE3-NEXT: retq
669+
;
670+
; AVX1-LABEL: bitcast_v128i8_to_v2i64:
671+
; AVX1: # %bb.0:
672+
; AVX1-NEXT: vpmovmskb %xmm2, %eax
673+
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
674+
; AVX1-NEXT: vpmovmskb %xmm2, %edx
675+
; AVX1-NEXT: shll $16, %edx
676+
; AVX1-NEXT: orl %eax, %edx
677+
; AVX1-NEXT: vpmovmskb %xmm3, %eax
678+
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
679+
; AVX1-NEXT: vpmovmskb %xmm2, %ecx
680+
; AVX1-NEXT: shll $16, %ecx
681+
; AVX1-NEXT: orl %eax, %ecx
682+
; AVX1-NEXT: shlq $32, %rcx
683+
; AVX1-NEXT: orq %rdx, %rcx
684+
; AVX1-NEXT: vpmovmskb %xmm0, %eax
685+
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
686+
; AVX1-NEXT: vpmovmskb %xmm0, %edx
687+
; AVX1-NEXT: shll $16, %edx
688+
; AVX1-NEXT: orl %eax, %edx
689+
; AVX1-NEXT: vpmovmskb %xmm1, %esi
690+
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
691+
; AVX1-NEXT: vpmovmskb %xmm0, %eax
692+
; AVX1-NEXT: shll $16, %eax
693+
; AVX1-NEXT: orl %esi, %eax
694+
; AVX1-NEXT: shlq $32, %rax
695+
; AVX1-NEXT: orq %rdx, %rax
696+
; AVX1-NEXT: addq %rcx, %rax
697+
; AVX1-NEXT: vzeroupper
698+
; AVX1-NEXT: retq
699+
;
700+
; AVX2-LABEL: bitcast_v128i8_to_v2i64:
701+
; AVX2: # %bb.0:
702+
; AVX2-NEXT: vpmovmskb %ymm3, %eax
703+
; AVX2-NEXT: shlq $32, %rax
704+
; AVX2-NEXT: vpmovmskb %ymm2, %ecx
705+
; AVX2-NEXT: orq %rax, %rcx
706+
; AVX2-NEXT: vpmovmskb %ymm1, %edx
707+
; AVX2-NEXT: shlq $32, %rdx
708+
; AVX2-NEXT: vpmovmskb %ymm0, %eax
709+
; AVX2-NEXT: orq %rdx, %rax
710+
; AVX2-NEXT: addq %rcx, %rax
711+
; AVX2-NEXT: vzeroupper
712+
; AVX2-NEXT: retq
713+
;
714+
; AVX512-LABEL: bitcast_v128i8_to_v2i64:
715+
; AVX512: # %bb.0:
716+
; AVX512-NEXT: vpmovb2m %zmm1, %k0
717+
; AVX512-NEXT: kmovq %k0, %rcx
718+
; AVX512-NEXT: vpmovb2m %zmm0, %k0
719+
; AVX512-NEXT: kmovq %k0, %rax
720+
; AVX512-NEXT: addq %rcx, %rax
721+
; AVX512-NEXT: vzeroupper
722+
; AVX512-NEXT: retq
723+
%1 = icmp slt <128 x i8> %a0, zeroinitializer
724+
%2 = bitcast <128 x i1> %1 to <2 x i64>
725+
%3 = extractelement <2 x i64> %2, i32 0
726+
%4 = extractelement <2 x i64> %2, i32 1
727+
%5 = add i64 %3, %4
728+
ret i64 %5
729+
}

0 commit comments

Comments
 (0)