Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGen/X86/vector-lzcnt-128.ll
Show First 20 Lines • Show All 1,590 Lines • ▼ Show 20 Lines | |||||
; AVX512-LABEL: foldv2i64: | ; AVX512-LABEL: foldv2i64: | ||||
; AVX512: ## BB#0: | ; AVX512: ## BB#0: | ||||
; AVX512-NEXT: movl $55, %eax | ; AVX512-NEXT: movl $55, %eax | ||||
; AVX512-NEXT: vmovq %rax, %xmm0 | ; AVX512-NEXT: vmovq %rax, %xmm0 | ||||
; AVX512-NEXT: retq | ; AVX512-NEXT: retq | ||||
; | ; | ||||
; X32-SSE-LABEL: foldv2i64: | ; X32-SSE-LABEL: foldv2i64: | ||||
; X32-SSE: # BB#0: | ; X32-SSE: # BB#0: | ||||
; X32-SSE-NEXT: movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] | ; X32-SSE-NEXT: movl $55, %eax | ||||
; X32-SSE-NEXT: movdqa {{.*#+}} xmm1 = [256,0,4294967295,4294967295] | ; X32-SSE-NEXT: movd %eax, %xmm0 | ||||
; X32-SSE-NEXT: movdqa %xmm1, %xmm0 | |||||
; X32-SSE-NEXT: pand %xmm2, %xmm0 | |||||
; X32-SSE-NEXT: movdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0] | |||||
; X32-SSE-NEXT: movdqa %xmm3, %xmm4 | |||||
; X32-SSE-NEXT: pshufb %xmm0, %xmm4 | |||||
; X32-SSE-NEXT: movdqa %xmm1, %xmm0 | |||||
; X32-SSE-NEXT: psrlw $4, %xmm0 | |||||
; X32-SSE-NEXT: pand %xmm2, %xmm0 | |||||
; X32-SSE-NEXT: pxor %xmm2, %xmm2 | |||||
; X32-SSE-NEXT: pshufb %xmm0, %xmm3 | |||||
; X32-SSE-NEXT: pcmpeqb %xmm2, %xmm0 | |||||
; X32-SSE-NEXT: pand %xmm4, %xmm0 | |||||
; X32-SSE-NEXT: paddb %xmm3, %xmm0 | |||||
; X32-SSE-NEXT: movdqa %xmm1, %xmm3 | |||||
; X32-SSE-NEXT: pcmpeqb %xmm2, %xmm3 | |||||
; X32-SSE-NEXT: psrlw $8, %xmm3 | |||||
; X32-SSE-NEXT: pand %xmm0, %xmm3 | |||||
; X32-SSE-NEXT: psrlw $8, %xmm0 | |||||
; X32-SSE-NEXT: paddw %xmm3, %xmm0 | |||||
; X32-SSE-NEXT: pcmpeqw %xmm2, %xmm1 | |||||
; X32-SSE-NEXT: psrld $16, %xmm1 | |||||
; X32-SSE-NEXT: pand %xmm0, %xmm1 | |||||
; X32-SSE-NEXT: psrld $16, %xmm0 | |||||
; X32-SSE-NEXT: paddd %xmm1, %xmm0 | |||||
; X32-SSE-NEXT: pblendw {{.*#+}} xmm2 = xmm0[0,1],xmm2[2,3,4,5,6,7] | |||||
; X32-SSE-NEXT: psrlq $32, %xmm0 | |||||
; X32-SSE-NEXT: paddq %xmm2, %xmm0 | |||||
; X32-SSE-NEXT: retl | ; X32-SSE-NEXT: retl | ||||
%out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> <i64 256, i64 -1>, i1 0) | %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> <i64 256, i64 -1>, i1 0) | ||||
ret <2 x i64> %out | ret <2 x i64> %out | ||||
} | } | ||||
define <2 x i64> @foldv2i64u() nounwind { | define <2 x i64> @foldv2i64u() nounwind { | ||||
; SSE-LABEL: foldv2i64u: | ; SSE-LABEL: foldv2i64u: | ||||
; SSE: # BB#0: | ; SSE: # BB#0: | ||||
Show All 10 Lines | |||||
; AVX512-LABEL: foldv2i64u: | ; AVX512-LABEL: foldv2i64u: | ||||
; AVX512: ## BB#0: | ; AVX512: ## BB#0: | ||||
; AVX512-NEXT: movl $55, %eax | ; AVX512-NEXT: movl $55, %eax | ||||
; AVX512-NEXT: vmovq %rax, %xmm0 | ; AVX512-NEXT: vmovq %rax, %xmm0 | ||||
; AVX512-NEXT: retq | ; AVX512-NEXT: retq | ||||
; | ; | ||||
; X32-SSE-LABEL: foldv2i64u: | ; X32-SSE-LABEL: foldv2i64u: | ||||
; X32-SSE: # BB#0: | ; X32-SSE: # BB#0: | ||||
; X32-SSE-NEXT: movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] | ; X32-SSE-NEXT: movl $55, %eax | ||||
; X32-SSE-NEXT: movdqa {{.*#+}} xmm1 = [256,0,4294967295,4294967295] | ; X32-SSE-NEXT: movd %eax, %xmm0 | ||||
; X32-SSE-NEXT: movdqa %xmm1, %xmm0 | |||||
; X32-SSE-NEXT: pand %xmm2, %xmm0 | |||||
; X32-SSE-NEXT: movdqa {{.*#+}} xmm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0] | |||||
; X32-SSE-NEXT: movdqa %xmm3, %xmm4 | |||||
; X32-SSE-NEXT: pshufb %xmm0, %xmm4 | |||||
; X32-SSE-NEXT: movdqa %xmm1, %xmm0 | |||||
; X32-SSE-NEXT: psrlw $4, %xmm0 | |||||
; X32-SSE-NEXT: pand %xmm2, %xmm0 | |||||
; X32-SSE-NEXT: pxor %xmm2, %xmm2 | |||||
; X32-SSE-NEXT: pshufb %xmm0, %xmm3 | |||||
; X32-SSE-NEXT: pcmpeqb %xmm2, %xmm0 | |||||
; X32-SSE-NEXT: pand %xmm4, %xmm0 | |||||
; X32-SSE-NEXT: paddb %xmm3, %xmm0 | |||||
; X32-SSE-NEXT: movdqa %xmm1, %xmm3 | |||||
; X32-SSE-NEXT: pcmpeqb %xmm2, %xmm3 | |||||
; X32-SSE-NEXT: psrlw $8, %xmm3 | |||||
; X32-SSE-NEXT: pand %xmm0, %xmm3 | |||||
; X32-SSE-NEXT: psrlw $8, %xmm0 | |||||
; X32-SSE-NEXT: paddw %xmm3, %xmm0 | |||||
; X32-SSE-NEXT: pcmpeqw %xmm2, %xmm1 | |||||
; X32-SSE-NEXT: psrld $16, %xmm1 | |||||
; X32-SSE-NEXT: pand %xmm0, %xmm1 | |||||
; X32-SSE-NEXT: psrld $16, %xmm0 | |||||
; X32-SSE-NEXT: paddd %xmm1, %xmm0 | |||||
; X32-SSE-NEXT: pblendw {{.*#+}} xmm2 = xmm0[0,1],xmm2[2,3,4,5,6,7] | |||||
; X32-SSE-NEXT: psrlq $32, %xmm0 | |||||
; X32-SSE-NEXT: paddq %xmm2, %xmm0 | |||||
; X32-SSE-NEXT: retl | ; X32-SSE-NEXT: retl | ||||
%out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> <i64 256, i64 -1>, i1 -1) | %out = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> <i64 256, i64 -1>, i1 -1) | ||||
ret <2 x i64> %out | ret <2 x i64> %out | ||||
} | } | ||||
define <4 x i32> @foldv4i32() nounwind { | define <4 x i32> @foldv4i32() nounwind { | ||||
; SSE-LABEL: foldv4i32: | ; SSE-LABEL: foldv4i32: | ||||
; SSE: # BB#0: | ; SSE: # BB#0: | ||||
▲ Show 20 Lines • Show All 145 Lines • Show Last 20 Lines |