Fold (select C, load A, load B) -> load (select C, A, B). This happens quite
authorChris Lattner <sabre@nondot.org>
Tue, 18 Oct 2005 06:04:22 +0000 (06:04 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 18 Oct 2005 06:04:22 +0000 (06:04 +0000)
commit40c62d50697a8515abdaf83655c031968d06a900
tree47a00b310c725632e6d16ef852de51d7cc9f88ac
parentb277cbc0873bfeeaf8b4a14998da69413ad0678c
Fold (select C, load A, load B) -> load (select C, A, B).  This happens quite
a lot throughout many programs.  In particular, specfp triggers it a bunch for
constant FP nodes when you have code like  cond ? 1.0 : -1.0.

If the PPC ISel exposed the loads implicit in pic references to external globals,
we would be able to eliminate a load in cases like this as well:

%X = external global int
%Y = external global int
int* %test4(bool %C) {
        %G = select bool %C, int* %X, int* %Y
        ret int* %G
}

Note that this breaks things that use SrcValue's (see the fixme), but since nothing
uses them yet, this is ok.

Also, simplify some code to use hasOneUse() on an SDOperand instead of hasNUsesOfValue directly.

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