[PATCH] merge consecutive stores of extracted vector elements (PR21711)

Sanjay Patel spatel at rotateright.com
Tue Dec 16 15:24:41 PST 2014


Hi hfinkel, andreadb, mkuper,

This patch adds a path to DAGCombiner::MergeConsecutiveStores() to combine multiple scalar stores when the store operands are extracted vector elements. This is a partial fix for PR21711 ( http://llvm.org/bugs/show_bug.cgi?id=21711 ).

For the new test case, codegen improves from:
        vmovss  %xmm0, (%rdi)
        vextractps      $1, %xmm0, 4(%rdi)
        vextractps      $2, %xmm0, 8(%rdi)
        vextractps      $3, %xmm0, 12(%rdi)
        vextractf128    $1, %ymm0, %xmm0
        vmovss  %xmm0, 16(%rdi)
        vextractps      $1, %xmm0, 20(%rdi)
        vextractps      $2, %xmm0, 24(%rdi)
        vextractps      $3, %xmm0, 28(%rdi)
        vzeroupper
        retq

To:
        vmovups	%ymm0, (%rdi)
        vzeroupper
        retq
 

Note that this patch depends on http://reviews.llvm.org/D6678 to avoid even worse codegen on SandyBridge. See http://llvm.org/bugs/show_bug.cgi?id=21711#c7 for more details.

http://reviews.llvm.org/D6698

Files:
  lib/CodeGen/SelectionDAG/DAGCombiner.cpp
  test/CodeGen/X86/MergeConsecutiveStores.ll

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6698.17369.patch
Type: text/x-patch
Size: 5758 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141216/ee0ff3b4/attachment.bin>


More information about the llvm-commits mailing list