Check in code to scalarize arbitrarily wide packed types for some simple
authorNate Begeman <natebegeman@mac.com>
Tue, 22 Nov 2005 18:16:00 +0000 (18:16 +0000)
committerNate Begeman <natebegeman@mac.com>
Tue, 22 Nov 2005 18:16:00 +0000 (18:16 +0000)
commitab48be377298bd509427a29e174cf4e305138819
treea4769064367cc57d881f5dd5fb9f1b49e4cc8d00
parent50b37845ef3ecc706806ca6da76c68db283f6e1e
Check in code to scalarize arbitrarily wide packed types for some simple
vector operations (load, add, sub, mul).

This allows us to codegen:
void %foo(<4 x float> * %a) {
entry:
  %tmp1 = load <4 x float> * %a;
  %tmp2 = add <4 x float> %tmp1, %tmp1
  store <4 x float> %tmp2, <4 x float> *%a
  ret void
}

on ppc as:
_foo:
        lfs f0, 12(r3)
        lfs f1, 8(r3)
        lfs f2, 4(r3)
        lfs f3, 0(r3)
        fadds f0, f0, f0
        fadds f1, f1, f1
        fadds f2, f2, f2
        fadds f3, f3, f3
        stfs f0, 12(r3)
        stfs f1, 8(r3)
        stfs f2, 4(r3)
        stfs f3, 0(r3)
        blr

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24484 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/SelectionDAGNodes.h
lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
lib/CodeGen/SelectionDAG/SelectionDAG.cpp
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp