1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00
llvm-mirror/test
Arnold Schwaighofer eabde1ffce Costmodel: Add support for horizontal vector reductions
Upcoming SLP vectorization improvements will want to be able to estimate costs
of horizontal reductions. Add infrastructure to support this.

We model reductions as a series of (shufflevector,add) tuples ultimately
followed by an extractelement. For example, for an add-reduction of <4 x float>
we could generate the following sequence:

 (v0, v1, v2, v3)
   \   \  /  /
     \  \  /
       +  +

 (v0+v2, v1+v3, undef, undef)
    \      /
 ((v0+v2) + (v1+v3), undef, undef)

 %rdx.shuf = shufflevector <4 x float> %rdx, <4 x float> undef,
                           <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
 %bin.rdx = fadd <4 x float> %rdx, %rdx.shuf
 %rdx.shuf7 = shufflevector <4 x float> %bin.rdx, <4 x float> undef,
                          <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
 %bin.rdx8 = fadd <4 x float> %bin.rdx, %rdx.shuf7
 %r = extractelement <4 x float> %bin.rdx8, i32 0

This commit adds a cost model interface "getReductionCost(Opcode, Ty, Pairwise)"
that will allow clients to ask for the cost of such a reduction (as backends
might generate more efficient code than the cost of the individual instructions
summed up). This interface is excercised by the CostModel analysis pass which
looks for reduction patterns like the one above - starting at extractelements -
and if it sees a matching sequence will call the cost model interface.

We will also support a second form of pairwise reduction that is well supported
on common architectures (haddps, vpadd, faddp).

 (v0, v1, v2, v3)
  \   /    \  /
 (v0+v1, v2+v3, undef, undef)
    \     /
 ((v0+v1)+(v2+v3), undef, undef, undef)

  %rdx.shuf.0.0 = shufflevector <4 x float> %rdx, <4 x float> undef,
        <4 x i32> <i32 0, i32 2 , i32 undef, i32 undef>
  %rdx.shuf.0.1 = shufflevector <4 x float> %rdx, <4 x float> undef,
        <4 x i32> <i32 1, i32 3, i32 undef, i32 undef>
  %bin.rdx.0 = fadd <4 x float> %rdx.shuf.0.0, %rdx.shuf.0.1
  %rdx.shuf.1.0 = shufflevector <4 x float> %bin.rdx.0, <4 x float> undef,
        <4 x i32> <i32 0, i32 undef, i32 undef, i32 undef>
  %rdx.shuf.1.1 = shufflevector <4 x float> %bin.rdx.0, <4 x float> undef,
        <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
  %bin.rdx.1 = fadd <4 x float> %rdx.shuf.1.0, %rdx.shuf.1.1
  %r = extractelement <4 x float> %bin.rdx.1, i32 0

llvm-svn: 190876
2013-09-17 18:06:50 +00:00
..
Analysis Costmodel: Add support for horizontal vector reductions 2013-09-17 18:06:50 +00:00
Assembler Remove verifier check that attribute 'builtin' is only applied to calls to 2013-09-07 00:25:48 +00:00
Bindings/Ocaml [PR11606] ocaml bindings tests produce binaries in source dir 2013-08-23 00:55:32 +00:00
Bitcode Patch provide by Tom Roeder! 2013-09-12 22:02:31 +00:00
BugPoint [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
CodeGen Implement 3 AArch64 neon instructions : umov smov ins. 2013-09-17 02:21:02 +00:00
DebugInfo mention command line parameters 2013-09-17 00:15:36 +00:00
ExecutionEngine Add "native" to config.available_features, to make it easier to disable non-x-compile-safe tests 2013-09-13 10:59:01 +00:00
Feature Implement function prefix data as an IR feature. 2013-09-16 01:08:15 +00:00
FileCheck [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
Instrumentation [msan] Check return value of main(). 2013-09-16 13:24:32 +00:00
Integer [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
JitListener Debug Info Testing: updated to use NULL instead of "i32 0" in a few fields. 2013-09-06 21:03:58 +00:00
Linker Implement function prefix data as an IR feature. 2013-09-16 01:08:15 +00:00
MC [ARM] Fix the deprecation of MCR encodings that map to CP15{ISB,DSB,DMB}. 2013-09-17 09:54:57 +00:00
Object Add a minimal implementation of ranlib. 2013-08-28 16:22:16 +00:00
Other Update to remove the no-frame-pointer-elim-non-leaf flag if it was set to 'false'. 2013-08-22 21:28:54 +00:00
TableGen FileCheckize some tests. 2013-08-22 20:46:05 +00:00
tools Generate IMAGE_REL_AMD64_ADDR32NB relocations for SEH 2013-09-15 17:46:46 +00:00
Transforms SLPVectorizer: Don't vectorize phi nodes that use invoke values 2013-09-17 17:03:29 +00:00
Unit [tests] Update to use lit_config and lit package, as appropriate. 2013-08-09 16:22:05 +00:00
Verifier [tests] Cleanup initialization of test suffixes. 2013-08-16 00:37:11 +00:00
YAMLParser
CMakeLists.txt
lit.cfg Add "native" to config.available_features, to make it easier to disable non-x-compile-safe tests 2013-09-13 10:59:01 +00:00
lit.site.cfg.in [tests] Update to use lit_config and lit package, as appropriate. 2013-08-09 16:22:05 +00:00
Makefile [tests] Remove dead VALGRIND and CLEANED_TESTSUITE makefile variables. 2013-08-08 20:59:27 +00:00
Makefile.tests Remove dead code from the makefile build system. 2013-07-25 20:25:31 +00:00
TestRunner.sh