Fix a TargetLowering optimization so that it doesn't duplicate

loads when an input node has multiple uses.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68398 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2009-04-03 20:11:30 +00:00
parent 38f4dd7b5e
commit f50c7981ae
2 changed files with 17 additions and 0 deletions

View File

@ -1464,6 +1464,7 @@ TargetLowering::SimplifySetCC(MVT VT, SDValue N0, SDValue N1,
// in the same partial word, see if we can shorten the load.
if (DCI.isBeforeLegalize() &&
N0.getOpcode() == ISD::AND && C1 == 0 &&
N0.getNode()->hasOneUse() &&
isa<LoadSDNode>(N0.getOperand(0)) &&
N0.getOperand(0).getNode()->hasOneUse() &&
isa<ConstantSDNode>(N0.getOperand(1))) {

View File

@ -0,0 +1,16 @@
; RUN: llvm-as < %s | llc -march=x86 | grep {(%} | count 1
; Don't duplicate the load.
define fastcc i32 @foo(i32* %p) nounwind {
%t0 = load i32* %p
%t2 = and i32 %t0, 10
%t3 = icmp ne i32 %t2, 0
br i1 %t3, label %bb63, label %bb76
bb63:
ret i32 %t2
bb76:
ret i32 0
}