Teach LLVM how to scalarize packed types. Currently, this only works on
authorNate Begeman <natebegeman@mac.com>
Sat, 19 Nov 2005 00:36:38 +0000 (00:36 +0000)
committerNate Begeman <natebegeman@mac.com>
Sat, 19 Nov 2005 00:36:38 +0000 (00:36 +0000)
commit5fbb5d2459a5410590f285250faa604576308a93
treeccb623e7f9965907ac76987d1e0964967b61f766
parent06a40438722a4889abd239efbd6c1bf4bbbee85b
Teach LLVM how to scalarize packed types.  Currently, this only works on
packed types with an element count of 1, although more generic support is
coming.  This allows LLVM to turn the following code:

void %foo(<1 x float> * %a) {
entry:
  %tmp1 = load <1 x float> * %a;
  %tmp2 = add <1 x float> %tmp1, %tmp1
  store <1 x float> %tmp2, <1 x float> *%a
  ret void
}

Into:

_foo:
        lfs f0, 0(r3)
        fadds f0, f0, f0
        stfs f0, 0(r3)
        blr

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