llvm-6502/test
Andrea Di Biagio 05a76eb9f2 [DAGCombiner] Improved target independent vector shuffle combine rule.
This patch improves the existing algorithm in DAGCombiner that
attempts to fold shuffles according to rule:
  shuffle(shuffle(x, y, M1), undef, M2) -> shuffle(y, undef, M3)

Before this change, there were cases where the DAGCombiner conservatively
avoided folding shuffles even if the resulting mask would have been legal.
That is because the algorithm wrongly assumed that commuting
an illegal shuffle mask would always produce an illegal mask.

With this change, we now correctly compute the commuted shuffle mask before
calling method 'isShuffleMaskLegal' on it.
On X86, this improves for example the codegen for the following function:

define <4 x i32> @test(<4 x i32> %A, <4 x i32> %B) {
  %1 = shufflevector <4 x i32> %B, <4 x i32> %A, <4 x i32> <i32 1, i32 2, i32 6, i32 7>
  %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 2, i32 3>
  ret <4 x i32> %2
}

Before this change the X86 backend (-mcpu=corei7) generated
the following assembly code for function @test:
  shufps $-23, %xmm0, %xmm1  # xmm1 = xmm1[1,2],xmm0[2,3]
  movhlps %xmm1, %xmm1       # xmm1 = xmm1[1,1]
  movaps %xmm1, %xmm0

Now we produce:
  movhlps %xmm0, %xmm0       # xmm0 = xmm0[1,1]

Added extra test cases in combine-vec-shuffle-2.ll to verify that we correctly
fold according to the above-mentioned rule.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215555 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-13 16:09:40 +00:00
..
Analysis
Assembler
Bindings
Bitcode Don't upgrade global constructors when reading bitcode 2014-08-12 16:46:37 +00:00
BugPoint
CodeGen [DAGCombiner] Improved target independent vector shuffle combine rule. 2014-08-13 16:09:40 +00:00
DebugInfo
ExecutionEngine
Feature
FileCheck
Instrumentation Revert r215415 which causse MSan to crash on a great deal of C++ code. 2014-08-13 09:19:39 +00:00
Integer
JitListener
Linker Don't upgrade global constructors when reading bitcode 2014-08-12 16:46:37 +00:00
LTO
MC [SKX] Extended non-temporal load/store instructions for AVX512VL subsets. 2014-08-13 10:46:00 +00:00
Object
Other
TableGen
tools Make the test a bit more strict. 2014-08-12 15:55:27 +00:00
Transforms [optnone] Make the optnone attribute effective at suppressing function 2014-08-13 10:49:33 +00:00
Unit
Verifier
YAMLParser
.clang-format
CMakeLists.txt
lit.cfg
lit.site.cfg.in
Makefile
Makefile.tests
TestRunner.sh