diff --git a/lib/Target/ARM/ARMISelDAGToDAG.cpp b/lib/Target/ARM/ARMISelDAGToDAG.cpp
index fa41f880e3ab5ad0c41ea3b69e080e59aa4fa068..1a0ffe4e176b1fe129ff6aee53c650ad38d56778 100644
--- a/lib/Target/ARM/ARMISelDAGToDAG.cpp
+++ b/lib/Target/ARM/ARMISelDAGToDAG.cpp
@@ -2459,7 +2459,7 @@ void ARMDAGToDAGISel::SelectCMPZ(SDNode *N, bool &SwitchEQNEToPLMI) {
   SDValue X = And.getOperand(0);
   auto C = dyn_cast<ConstantSDNode>(And.getOperand(1));
 
-  if (!C || !X->hasOneUse())
+  if (!C)
     return;
   auto Range = getContiguousRangeOfSetBits(C->getAPIntValue());
   if (!Range)
diff --git a/test/CodeGen/ARM/and-cmpz.ll b/test/CodeGen/ARM/and-cmpz.ll
index 809dc6cc6ba129a213dfe656f33f5655fc2d33e3..6cc3d39b58ca5538864196e1d692b155835a9361 100644
--- a/test/CodeGen/ARM/and-cmpz.ll
+++ b/test/CodeGen/ARM/and-cmpz.ll
@@ -18,6 +18,24 @@ false:
   ret i32 2
 }
 
+; CHECK-LABEL: single_bit_multi_use:
+; CHECK: lsls r0, r0, #23
+; T2-NEXT: mov
+; T2-NEXT: it
+; T1-NEXT: bmi
+define i32 @single_bit_multi_use(i32 %p, i32* %z) {
+  store i32 %p, i32* %z
+  %a = and i32 %p, 256
+  %b = icmp eq i32 %a, 0
+  br i1 %b, label %true, label %false
+
+true:
+  ret i32 1
+
+false:
+  ret i32 2
+}
+
 ; CHECK-LABEL: multi_bit_lsb_ubfx:
 ; CHECK: lsls r0, r0, #24
 ; T2-NEXT: mov
diff --git a/test/CodeGen/ARM/load_i1_select.ll b/test/CodeGen/ARM/load_i1_select.ll
index 48cd4eae58fa809776d7074f9754741caf3fe9da..459b121ce1de10cab2b1b201ebbef22f0133bb49 100644
--- a/test/CodeGen/ARM/load_i1_select.ll
+++ b/test/CodeGen/ARM/load_i1_select.ll
@@ -8,7 +8,7 @@ target triple = "thumbv7-apple-ios0.0.0"
 
 ; CHECK-LABEL: foo:
 ; CHECK: ldrb r[[R0:[0-9]+]], [r0]
-; CHECK: tst.w r[[R0]], #1
+; CHECK: lsls r{{[0-9]+}}, r[[R0]], #31
 define void @foo(i8* %call, double* %p) nounwind {
 entry:
   %tmp2 = load i8, i8* %call
diff --git a/test/CodeGen/Thumb/thumb-shrink-wrapping.ll b/test/CodeGen/Thumb/thumb-shrink-wrapping.ll
index 5d93f30f417e2d4063e4d552fbbf96aa47b62809..d334706c8e84955fdf298a63c53ef5acd11fa75e 100644
--- a/test/CodeGen/Thumb/thumb-shrink-wrapping.ll
+++ b/test/CodeGen/Thumb/thumb-shrink-wrapping.ll
@@ -646,12 +646,12 @@ define i1 @beq_to_bx(i32* %y, i32 %head) {
 ; CHECK-NEXT: beq [[EXIT_LABEL:LBB[0-9_]+]]
 ; ENABLE: push {r4, lr}
 
-; CHECK: tst r3, r4
+; CHECK: lsls    r4, r3, #30
 ; ENABLE-NEXT: ldr [[POP:r[4567]]], [sp, #4]
 ; ENABLE-NEXT: mov lr, [[POP]]
 ; ENABLE-NEXT: pop {[[POP]]}
 ; ENABLE-NEXT: add sp, #4
-; CHECK-NEXT: beq [[EXIT_LABEL]]
+; CHECK-NEXT: bpl [[EXIT_LABEL]]
 
 ; CHECK: str r1, [r2]
 ; CHECK: str r3, [r2]