combine consecutive subvector 16-byte loads into one 32-byte load
authorSanjay Patel <spatel@rotateright.com>
Tue, 16 Dec 2014 16:30:01 +0000 (16:30 +0000)
committerSanjay Patel <spatel@rotateright.com>
Tue, 16 Dec 2014 16:30:01 +0000 (16:30 +0000)
commite46d54f0bf9fa30560d05f0b19a92e6f5281fede
tree4bbadf0fa7f9215c32fcdda0f57ab3faba74a0f3
parent455f24aa7720391a475670aeb9a6ed0950a6d336
combine consecutive subvector 16-byte loads into one 32-byte load

This is a fix for PR21709 ( http://llvm.org/bugs/show_bug.cgi?id=21709 ).
When we have 2 consecutive 16-byte loads that are merged into one 32-byte vector,
we can use a single 32-byte load instead.
But we don't do this for SandyBridge / IvyBridge because they have slower 32-byte memops.
We also don't bother using 32-byte *integer* loads on a machine that only has AVX1 (btver2)
because those operands would have to be split in half anyway since there is no support for
32-byte integer math ops.

Differential Revision: http://reviews.llvm.org/D6492

llvm-svn: 224344
llvm/lib/Target/X86/X86InstrInfo.td
llvm/lib/Target/X86/X86InstrSSE.td
llvm/test/CodeGen/X86/unaligned-32-byte-memops.ll