Don't use a BT instruction if the AND has multiple uses.
authorDan Gohman <gohman@apple.com>
Tue, 13 Jan 2009 23:25:30 +0000 (23:25 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 13 Jan 2009 23:25:30 +0000 (23:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62195 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index fe665c351fab153afc82c2200da65290f4c1f49a..a8bcfeafd39d0ef12eb5634d72536d6dd2a0f67b 100644 (file)
@@ -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<ConstantSDNode>(Op0.getOperand(1));