diff options
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r-- | llvm/test/CodeGen/X86/extract-store.ll | 48 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/extractelement-index.ll | 24 |
2 files changed, 27 insertions, 45 deletions
diff --git a/llvm/test/CodeGen/X86/extract-store.ll b/llvm/test/CodeGen/X86/extract-store.ll index fda56f94000..1751f03731d 100644 --- a/llvm/test/CodeGen/X86/extract-store.ll +++ b/llvm/test/CodeGen/X86/extract-store.ll @@ -9,22 +9,14 @@ define void @extract_i8_0(i8* nocapture %dst, <16 x i8> %foo) nounwind { ; SSE2-X32-LABEL: extract_i8_0: ; SSE2-X32: # BB#0: -; SSE2-X32-NEXT: pushl %ebp -; SSE2-X32-NEXT: movl %esp, %ebp -; SSE2-X32-NEXT: andl $-16, %esp -; SSE2-X32-NEXT: subl $32, %esp -; SSE2-X32-NEXT: movl 8(%ebp), %eax -; SSE2-X32-NEXT: movaps %xmm0, (%esp) -; SSE2-X32-NEXT: movb (%esp), %cl +; SSE2-X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; SSE2-X32-NEXT: movd %xmm0, %ecx ; SSE2-X32-NEXT: movb %cl, (%eax) -; SSE2-X32-NEXT: movl %ebp, %esp -; SSE2-X32-NEXT: popl %ebp ; SSE2-X32-NEXT: retl ; ; SSE2-X64-LABEL: extract_i8_0: ; SSE2-X64: # BB#0: -; SSE2-X64-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-X64-NEXT: movb -{{[0-9]+}}(%rsp), %al +; SSE2-X64-NEXT: movd %xmm0, %eax ; SSE2-X64-NEXT: movb %al, (%rdi) ; SSE2-X64-NEXT: retq ; @@ -57,22 +49,16 @@ define void @extract_i8_0(i8* nocapture %dst, <16 x i8> %foo) nounwind { define void @extract_i8_3(i8* nocapture %dst, <16 x i8> %foo) nounwind { ; SSE2-X32-LABEL: extract_i8_3: ; SSE2-X32: # BB#0: -; SSE2-X32-NEXT: pushl %ebp -; SSE2-X32-NEXT: movl %esp, %ebp -; SSE2-X32-NEXT: andl $-16, %esp -; SSE2-X32-NEXT: subl $32, %esp -; SSE2-X32-NEXT: movl 8(%ebp), %eax -; SSE2-X32-NEXT: movaps %xmm0, (%esp) -; SSE2-X32-NEXT: movb {{[0-9]+}}(%esp), %cl +; SSE2-X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; SSE2-X32-NEXT: movd %xmm0, %ecx +; SSE2-X32-NEXT: shrl $24, %ecx ; SSE2-X32-NEXT: movb %cl, (%eax) -; SSE2-X32-NEXT: movl %ebp, %esp -; SSE2-X32-NEXT: popl %ebp ; SSE2-X32-NEXT: retl ; ; SSE2-X64-LABEL: extract_i8_3: ; SSE2-X64: # BB#0: -; SSE2-X64-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-X64-NEXT: movb -{{[0-9]+}}(%rsp), %al +; SSE2-X64-NEXT: movd %xmm0, %eax +; SSE2-X64-NEXT: shrl $24, %eax ; SSE2-X64-NEXT: movb %al, (%rdi) ; SSE2-X64-NEXT: retq ; @@ -105,23 +91,15 @@ define void @extract_i8_3(i8* nocapture %dst, <16 x i8> %foo) nounwind { define void @extract_i8_15(i8* nocapture %dst, <16 x i8> %foo) nounwind { ; SSE2-X32-LABEL: extract_i8_15: ; SSE2-X32: # BB#0: -; SSE2-X32-NEXT: pushl %ebp -; SSE2-X32-NEXT: movl %esp, %ebp -; SSE2-X32-NEXT: andl $-16, %esp -; SSE2-X32-NEXT: subl $32, %esp -; SSE2-X32-NEXT: movl 8(%ebp), %eax -; SSE2-X32-NEXT: movaps %xmm0, (%esp) -; SSE2-X32-NEXT: movb {{[0-9]+}}(%esp), %cl -; SSE2-X32-NEXT: movb %cl, (%eax) -; SSE2-X32-NEXT: movl %ebp, %esp -; SSE2-X32-NEXT: popl %ebp +; SSE2-X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; SSE2-X32-NEXT: pextrw $7, %xmm0, %ecx +; SSE2-X32-NEXT: movb %ch, (%eax) ; SSE2-X32-NEXT: retl ; ; SSE2-X64-LABEL: extract_i8_15: ; SSE2-X64: # BB#0: -; SSE2-X64-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-X64-NEXT: movb -{{[0-9]+}}(%rsp), %al -; SSE2-X64-NEXT: movb %al, (%rdi) +; SSE2-X64-NEXT: pextrw $7, %xmm0, %eax +; SSE2-X64-NEXT: movb %ah, (%rdi) # NOREX ; SSE2-X64-NEXT: retq ; ; SSE41-X32-LABEL: extract_i8_15: diff --git a/llvm/test/CodeGen/X86/extractelement-index.ll b/llvm/test/CodeGen/X86/extractelement-index.ll index 157e42b60a3..e36e33ffe66 100644 --- a/llvm/test/CodeGen/X86/extractelement-index.ll +++ b/llvm/test/CodeGen/X86/extractelement-index.ll @@ -11,8 +11,9 @@ define i8 @extractelement_v16i8_1(<16 x i8> %a) nounwind { ; SSE2-LABEL: extractelement_v16i8_1: ; SSE2: # BB#0: -; SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al +; SSE2-NEXT: movd %xmm0, %eax +; SSE2-NEXT: shrl $8, %eax +; SSE2-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> ; SSE2-NEXT: retq ; ; SSE41-LABEL: extractelement_v16i8_1: @@ -33,8 +34,9 @@ define i8 @extractelement_v16i8_1(<16 x i8> %a) nounwind { define i8 @extractelement_v16i8_11(<16 x i8> %a) nounwind { ; SSE2-LABEL: extractelement_v16i8_11: ; SSE2: # BB#0: -; SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al +; SSE2-NEXT: pextrw $5, %xmm0, %eax +; SSE2-NEXT: shrl $8, %eax +; SSE2-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> ; SSE2-NEXT: retq ; ; SSE41-LABEL: extractelement_v16i8_11: @@ -55,8 +57,8 @@ define i8 @extractelement_v16i8_11(<16 x i8> %a) nounwind { define i8 @extractelement_v16i8_14(<16 x i8> %a) nounwind { ; SSE2-LABEL: extractelement_v16i8_14: ; SSE2: # BB#0: -; SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al +; SSE2-NEXT: pextrw $7, %xmm0, %eax +; SSE2-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> ; SSE2-NEXT: retq ; ; SSE41-LABEL: extractelement_v16i8_14: @@ -77,8 +79,9 @@ define i8 @extractelement_v16i8_14(<16 x i8> %a) nounwind { define i8 @extractelement_v32i8_1(<32 x i8> %a) nounwind { ; SSE2-LABEL: extractelement_v32i8_1: ; SSE2: # BB#0: -; SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al +; SSE2-NEXT: movd %xmm0, %eax +; SSE2-NEXT: shrl $8, %eax +; SSE2-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> ; SSE2-NEXT: retq ; ; SSE41-LABEL: extractelement_v32i8_1: @@ -100,8 +103,9 @@ define i8 @extractelement_v32i8_1(<32 x i8> %a) nounwind { define i8 @extractelement_v32i8_17(<32 x i8> %a) nounwind { ; SSE2-LABEL: extractelement_v32i8_17: ; SSE2: # BB#0: -; SSE2-NEXT: movaps %xmm1, -{{[0-9]+}}(%rsp) -; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al +; SSE2-NEXT: movd %xmm1, %eax +; SSE2-NEXT: shrl $8, %eax +; SSE2-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> ; SSE2-NEXT: retq ; ; SSE41-LABEL: extractelement_v32i8_17: |