fold (conv (load x)) -> (load (conv*)x).
authorChris Lattner <sabre@nondot.org>
Fri, 23 Dec 2005 05:44:41 +0000 (05:44 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 23 Dec 2005 05:44:41 +0000 (05:44 +0000)
commit5710410deaceab136878e73dc48b6d468cff9701
treee3c7b11b212691db51ce00ec1e6da1694d565759
parentc8547d856d3459a61ca9e35b5342288fe626c295
fold (conv (load x)) -> (load (conv*)x).

This allows us to compile this:
void foo(double);
void bar(double *X) { foo(*X); }

To this:

bar:
        save -96, %o6, %o6
        ld [%i0+4], %o1
        ld [%i0], %o0
        call foo
        nop
        restore %g0, %g0, %g0
        retl
        nop

instead of this:

bar:
        save -104, %o6, %o6
        ldd [%i0], %f0
        std %f0, [%i6+-8]
        ld [%i6+-4], %o1
        ld [%i6+-8], %o0
        call foo
        nop
        restore %g0, %g0, %g0
        retl
        nop

on SparcV8.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24982 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/DAGCombiner.cpp