Changeset View
Changeset View
Standalone View
Standalone View
llvm/trunk/test/CodeGen/X86/pmovsx-inreg.ll
Show First 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | |||||
; SSE41-NEXT: xorps %xmm2, %xmm2 | ; SSE41-NEXT: xorps %xmm2, %xmm2 | ||||
; SSE41-NEXT: movups %xmm2, (%rax) | ; SSE41-NEXT: movups %xmm2, (%rax) | ||||
; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ||||
; SSE41-NEXT: movdqu %xmm0, (%rsi) | ; SSE41-NEXT: movdqu %xmm0, (%rsi) | ||||
; SSE41-NEXT: retq | ; SSE41-NEXT: retq | ||||
; | ; | ||||
; AVX1-LABEL: test2: | ; AVX1-LABEL: test2: | ||||
; AVX1: # %bb.0: | ; AVX1: # %bb.0: | ||||
; AVX1-NEXT: vpmovsxbq 2(%rdi), %xmm0 | ; AVX1-NEXT: vpmovsxbq (%rdi), %xmm0 | ||||
; AVX1-NEXT: vpmovsxbq (%rdi), %xmm1 | ; AVX1-NEXT: vpmovsxbq 2(%rdi), %xmm1 | ||||
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 | ; AVX1-NEXT: vxorps %xmm2, %xmm2, %xmm2 | ||||
; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 | ; AVX1-NEXT: vmovups %ymm2, (%rax) | ||||
; AVX1-NEXT: vmovdqu %ymm1, (%rax) | ; AVX1-NEXT: vmovdqu %xmm1, 16(%rsi) | ||||
; AVX1-NEXT: vmovups %ymm0, (%rsi) | ; AVX1-NEXT: vmovdqu %xmm0, (%rsi) | ||||
; AVX1-NEXT: vzeroupper | ; AVX1-NEXT: vzeroupper | ||||
; AVX1-NEXT: retq | ; AVX1-NEXT: retq | ||||
; | ; | ||||
; AVX2-LABEL: test2: | ; AVX2-LABEL: test2: | ||||
; AVX2: # %bb.0: | ; AVX2: # %bb.0: | ||||
; AVX2-NEXT: vpmovsxbq (%rdi), %ymm0 | ; AVX2-NEXT: vpmovsxbq (%rdi), %ymm0 | ||||
; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ||||
; AVX2-NEXT: vmovups %ymm1, (%rax) | ; AVX2-NEXT: vmovups %ymm1, (%rax) | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
; SSE41-NEXT: xorps %xmm2, %xmm2 | ; SSE41-NEXT: xorps %xmm2, %xmm2 | ||||
; SSE41-NEXT: movups %xmm2, (%rax) | ; SSE41-NEXT: movups %xmm2, (%rax) | ||||
; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ||||
; SSE41-NEXT: movdqu %xmm0, (%rsi) | ; SSE41-NEXT: movdqu %xmm0, (%rsi) | ||||
; SSE41-NEXT: retq | ; SSE41-NEXT: retq | ||||
; | ; | ||||
; AVX1-LABEL: test4: | ; AVX1-LABEL: test4: | ||||
; AVX1: # %bb.0: | ; AVX1: # %bb.0: | ||||
; AVX1-NEXT: vpmovsxbd 4(%rdi), %xmm0 | ; AVX1-NEXT: vpmovsxbd (%rdi), %xmm0 | ||||
; AVX1-NEXT: vpmovsxbd (%rdi), %xmm1 | ; AVX1-NEXT: vpmovsxbd 4(%rdi), %xmm1 | ||||
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 | ; AVX1-NEXT: vxorps %xmm2, %xmm2, %xmm2 | ||||
; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 | ; AVX1-NEXT: vmovups %ymm2, (%rax) | ||||
; AVX1-NEXT: vmovdqu %ymm1, (%rax) | ; AVX1-NEXT: vmovdqu %xmm1, 16(%rsi) | ||||
; AVX1-NEXT: vmovups %ymm0, (%rsi) | ; AVX1-NEXT: vmovdqu %xmm0, (%rsi) | ||||
; AVX1-NEXT: vzeroupper | ; AVX1-NEXT: vzeroupper | ||||
; AVX1-NEXT: retq | ; AVX1-NEXT: retq | ||||
; | ; | ||||
; AVX2-LABEL: test4: | ; AVX2-LABEL: test4: | ||||
; AVX2: # %bb.0: | ; AVX2: # %bb.0: | ||||
; AVX2-NEXT: vpmovsxbd (%rdi), %ymm0 | ; AVX2-NEXT: vpmovsxbd (%rdi), %ymm0 | ||||
; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ||||
; AVX2-NEXT: vmovups %ymm1, (%rax) | ; AVX2-NEXT: vmovups %ymm1, (%rax) | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
; SSE41-NEXT: xorps %xmm2, %xmm2 | ; SSE41-NEXT: xorps %xmm2, %xmm2 | ||||
; SSE41-NEXT: movups %xmm2, (%rax) | ; SSE41-NEXT: movups %xmm2, (%rax) | ||||
; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ||||
; SSE41-NEXT: movdqu %xmm0, (%rsi) | ; SSE41-NEXT: movdqu %xmm0, (%rsi) | ||||
; SSE41-NEXT: retq | ; SSE41-NEXT: retq | ||||
; | ; | ||||
; AVX1-LABEL: test6: | ; AVX1-LABEL: test6: | ||||
; AVX1: # %bb.0: | ; AVX1: # %bb.0: | ||||
; AVX1-NEXT: vpmovsxbw 8(%rdi), %xmm0 | ; AVX1-NEXT: vpmovsxbw (%rdi), %xmm0 | ||||
; AVX1-NEXT: vpmovsxbw (%rdi), %xmm1 | ; AVX1-NEXT: vpmovsxbw 8(%rdi), %xmm1 | ||||
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 | ; AVX1-NEXT: vxorps %xmm2, %xmm2, %xmm2 | ||||
; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 | ; AVX1-NEXT: vmovups %ymm2, (%rax) | ||||
; AVX1-NEXT: vmovdqu %ymm1, (%rax) | ; AVX1-NEXT: vmovdqu %xmm1, 16(%rsi) | ||||
; AVX1-NEXT: vmovups %ymm0, (%rsi) | ; AVX1-NEXT: vmovdqu %xmm0, (%rsi) | ||||
; AVX1-NEXT: vzeroupper | ; AVX1-NEXT: vzeroupper | ||||
; AVX1-NEXT: retq | ; AVX1-NEXT: retq | ||||
; | ; | ||||
; AVX2-LABEL: test6: | ; AVX2-LABEL: test6: | ||||
; AVX2: # %bb.0: | ; AVX2: # %bb.0: | ||||
; AVX2-NEXT: vpmovsxbw (%rdi), %ymm0 | ; AVX2-NEXT: vpmovsxbw (%rdi), %ymm0 | ||||
; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ||||
; AVX2-NEXT: vmovups %ymm1, (%rax) | ; AVX2-NEXT: vmovups %ymm1, (%rax) | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
; SSE41-NEXT: xorps %xmm2, %xmm2 | ; SSE41-NEXT: xorps %xmm2, %xmm2 | ||||
; SSE41-NEXT: movups %xmm2, (%rax) | ; SSE41-NEXT: movups %xmm2, (%rax) | ||||
; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ||||
; SSE41-NEXT: movdqu %xmm0, (%rsi) | ; SSE41-NEXT: movdqu %xmm0, (%rsi) | ||||
; SSE41-NEXT: retq | ; SSE41-NEXT: retq | ||||
; | ; | ||||
; AVX1-LABEL: test8: | ; AVX1-LABEL: test8: | ||||
; AVX1: # %bb.0: | ; AVX1: # %bb.0: | ||||
; AVX1-NEXT: vpmovsxwq 4(%rdi), %xmm0 | ; AVX1-NEXT: vpmovsxwq (%rdi), %xmm0 | ||||
; AVX1-NEXT: vpmovsxwq (%rdi), %xmm1 | ; AVX1-NEXT: vpmovsxwq 4(%rdi), %xmm1 | ||||
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 | ; AVX1-NEXT: vxorps %xmm2, %xmm2, %xmm2 | ||||
; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 | ; AVX1-NEXT: vmovups %ymm2, (%rax) | ||||
; AVX1-NEXT: vmovdqu %ymm1, (%rax) | ; AVX1-NEXT: vmovdqu %xmm1, 16(%rsi) | ||||
; AVX1-NEXT: vmovups %ymm0, (%rsi) | ; AVX1-NEXT: vmovdqu %xmm0, (%rsi) | ||||
; AVX1-NEXT: vzeroupper | ; AVX1-NEXT: vzeroupper | ||||
; AVX1-NEXT: retq | ; AVX1-NEXT: retq | ||||
; | ; | ||||
; AVX2-LABEL: test8: | ; AVX2-LABEL: test8: | ||||
; AVX2: # %bb.0: | ; AVX2: # %bb.0: | ||||
; AVX2-NEXT: vpmovsxwq (%rdi), %ymm0 | ; AVX2-NEXT: vpmovsxwq (%rdi), %ymm0 | ||||
; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ||||
; AVX2-NEXT: vmovups %ymm1, (%rax) | ; AVX2-NEXT: vmovups %ymm1, (%rax) | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
; SSE41-NEXT: xorps %xmm2, %xmm2 | ; SSE41-NEXT: xorps %xmm2, %xmm2 | ||||
; SSE41-NEXT: movups %xmm2, (%rax) | ; SSE41-NEXT: movups %xmm2, (%rax) | ||||
; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ||||
; SSE41-NEXT: movdqu %xmm0, (%rsi) | ; SSE41-NEXT: movdqu %xmm0, (%rsi) | ||||
; SSE41-NEXT: retq | ; SSE41-NEXT: retq | ||||
; | ; | ||||
; AVX1-LABEL: test10: | ; AVX1-LABEL: test10: | ||||
; AVX1: # %bb.0: | ; AVX1: # %bb.0: | ||||
; AVX1-NEXT: vpmovsxwd 8(%rdi), %xmm0 | ; AVX1-NEXT: vpmovsxwd (%rdi), %xmm0 | ||||
; AVX1-NEXT: vpmovsxwd (%rdi), %xmm1 | ; AVX1-NEXT: vpmovsxwd 8(%rdi), %xmm1 | ||||
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 | ; AVX1-NEXT: vxorps %xmm2, %xmm2, %xmm2 | ||||
; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 | ; AVX1-NEXT: vmovups %ymm2, (%rax) | ||||
; AVX1-NEXT: vmovdqu %ymm1, (%rax) | ; AVX1-NEXT: vmovdqu %xmm1, 16(%rsi) | ||||
; AVX1-NEXT: vmovups %ymm0, (%rsi) | ; AVX1-NEXT: vmovdqu %xmm0, (%rsi) | ||||
; AVX1-NEXT: vzeroupper | ; AVX1-NEXT: vzeroupper | ||||
; AVX1-NEXT: retq | ; AVX1-NEXT: retq | ||||
; | ; | ||||
; AVX2-LABEL: test10: | ; AVX2-LABEL: test10: | ||||
; AVX2: # %bb.0: | ; AVX2: # %bb.0: | ||||
; AVX2-NEXT: vpmovsxwd (%rdi), %ymm0 | ; AVX2-NEXT: vpmovsxwd (%rdi), %ymm0 | ||||
; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ||||
; AVX2-NEXT: vmovups %ymm1, (%rax) | ; AVX2-NEXT: vmovups %ymm1, (%rax) | ||||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
; SSE41-NEXT: xorps %xmm2, %xmm2 | ; SSE41-NEXT: xorps %xmm2, %xmm2 | ||||
; SSE41-NEXT: movups %xmm2, (%rax) | ; SSE41-NEXT: movups %xmm2, (%rax) | ||||
; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ; SSE41-NEXT: movdqu %xmm1, 16(%rsi) | ||||
; SSE41-NEXT: movdqu %xmm0, (%rsi) | ; SSE41-NEXT: movdqu %xmm0, (%rsi) | ||||
; SSE41-NEXT: retq | ; SSE41-NEXT: retq | ||||
; | ; | ||||
; AVX1-LABEL: test12: | ; AVX1-LABEL: test12: | ||||
; AVX1: # %bb.0: | ; AVX1: # %bb.0: | ||||
; AVX1-NEXT: vpmovsxdq 8(%rdi), %xmm0 | ; AVX1-NEXT: vpmovsxdq (%rdi), %xmm0 | ||||
; AVX1-NEXT: vpmovsxdq (%rdi), %xmm1 | ; AVX1-NEXT: vpmovsxdq 8(%rdi), %xmm1 | ||||
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 | ; AVX1-NEXT: vxorps %xmm2, %xmm2, %xmm2 | ||||
; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 | ; AVX1-NEXT: vmovups %ymm2, (%rax) | ||||
; AVX1-NEXT: vmovdqu %ymm1, (%rax) | ; AVX1-NEXT: vmovdqu %xmm1, 16(%rsi) | ||||
; AVX1-NEXT: vmovups %ymm0, (%rsi) | ; AVX1-NEXT: vmovdqu %xmm0, (%rsi) | ||||
; AVX1-NEXT: vzeroupper | ; AVX1-NEXT: vzeroupper | ||||
; AVX1-NEXT: retq | ; AVX1-NEXT: retq | ||||
; | ; | ||||
; AVX2-LABEL: test12: | ; AVX2-LABEL: test12: | ||||
; AVX2: # %bb.0: | ; AVX2: # %bb.0: | ||||
; AVX2-NEXT: vpmovsxdq (%rdi), %ymm0 | ; AVX2-NEXT: vpmovsxdq (%rdi), %ymm0 | ||||
; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 | ||||
; AVX2-NEXT: vmovups %ymm1, (%rax) | ; AVX2-NEXT: vmovups %ymm1, (%rax) | ||||
Show All 20 Lines |