HomePhabricator

[x86] Combine x86mmx/i64 to v2i64 conversion to use scalar_to_vector

Authored by bruno on Jan 23 2015, 2:44 PM.

Description

[x86] Combine x86mmx/i64 to v2i64 conversion to use scalar_to_vector

Handle the poor codegen for i64/x86xmm->v2i64 (%mm -> %xmm) moves. Instead of
using stack store/load pair to do the job, use scalar_to_vector directly, which
in the MMX case can use movq2dq. This was the current behavior prior to
improvements for vector legalization of extloads in r213897.

This commit fixes the regression and as a side-effect also remove some
unnecessary shuffles.

In the new attached testcase, we go from:

pshufw $-18, (%rdi), %mm0
movq %mm0, -8(%rsp)
movq -8(%rsp), %xmm0
pshufd $-44, %xmm0, %xmm0
movd %xmm0, %eax
...

To:

pshufw $-18, (%rdi), %mm0
movq2dq %mm0, %xmm0
movd %xmm0, %eax
...

Differential Revision: http://reviews.llvm.org/D7126
rdar://problem/19413324

llvm-svn: 226953

Details

Committed
brunoJan 23 2015, 2:44 PM
Differential Revision
D7126: [x86] Combine x86mmx/i64 to v2i64 conversion to use scalar_to_vector
Parents
rG011c7425355e: llvm-cov: clang-format the GCOV files (NFC)
Branches
Unknown
Tags
Unknown