diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 02f298c28460de0b204f9aa935490bde2ce2d07e..c74edd1aaef38672b7e207f7b273e61db9c166c3 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -14182,12 +14182,12 @@
 (define_split
   [(set (match_operand:SWI248 0 "register_operand")
 	(if_then_else:SWI248
-	 (ne
-	  (zero_extract:SWI48
-	   (match_operand:SWI48 1 "register_operand")
-	   (const_int 1)
-	   (zero_extend:SI (match_operand:QI 2 "register_operand")))
-	  (const_int 0))
+	 (match_operator 5 "bt_comparison_operator"
+	  [(zero_extract:SWI48
+	    (match_operand:SWI48 1 "register_operand")
+	    (const_int 1)
+	    (zero_extend:SI (match_operand:QI 2 "register_operand")))
+	   (const_int 0)])
 	 (match_operand:SWI248 3 "nonimmediate_operand")
 	 (match_operand:SWI248 4 "nonimmediate_operand")))]
   "TARGET_USE_BT && TARGET_CMOVE
@@ -14202,6 +14202,8 @@
 			     (match_dup 3)
 			     (match_dup 4)))]
 {
+  if (GET_CODE (operands[5]) == EQ)
+    std::swap (operands[3], operands[4]);
   operands[2] = lowpart_subreg (SImode, operands[2], QImode);
 })