From: Dan Gohman Date: Tue, 13 Jan 2009 23:25:30 +0000 (+0000) Subject: Don't use a BT instruction if the AND has multiple uses. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=286575c65c096e4d226b8a4c4a29a88d1c846b4f;p=oota-llvm.git Don't use a BT instruction if the AND has multiple uses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62195 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index fe665c351fa..a8bcfeafd39 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -5034,7 +5034,9 @@ SDValue X86TargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) { // Lower ((X >>u N) & 1) != 0 to BT. // Lower ((X >>s N) & 1) != 0 to BT. // FIXME: Is i386 or later or available only on some chips? - if (Op0.getOpcode() == ISD::AND && Op1.getOpcode() == ISD::Constant && + if (Op0.getOpcode() == ISD::AND && + Op0.hasOneUse() && + Op1.getOpcode() == ISD::Constant && Op0.getOperand(1).getOpcode() == ISD::Constant && (CC == ISD::SETEQ || CC == ISD::SETNE)) { ConstantSDNode *AndRHS = cast(Op0.getOperand(1));