<div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Sanjay,<div><br></div><div>I've seen some instances of Clang going OOM, and it appears to cleanly bisect to this revision. The affected builds are while building Clang itself (FrontendAction, Sema, and a couple of others) targeting PPC with ASAN (which uses -O1).</div><div><br></div><div>Unfortunately, since the reproduction requires running to OOM, reproducing takes longer than I would like. I haven't been able to get a useful, reduced example, but I am trying to get one (manually and via creduce). I'm also trying to reproduce with a Clang built with a few different sanitizers (although these are also a bit finicky, so no luck yet there, either.)</div><div><br></div><div>I'm not familiar with this area of LLVM, so the best fix I can offer is a revert.</div><div><br></div><div>Could you advise on a fix? (If you don't have a timely fix in mind, please let me know if you would like me to revert the revision for you.)</div><div><br></div><div>Thanks,</div><div>David Jones</div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Nov 29, 2018 at 1:01 PM Sanjay Patel via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: spatel<br>
Date: Thu Nov 29 12:58:26 2018<br>
New Revision: 347917<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=347917&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=347917&view=rev</a><br>
Log:<br>
[DAGCombiner] narrow truncated binops<br>
<br>
The motivating case for this is shown in:<br>
<a href="https://bugs.llvm.org/show_bug.cgi?id=32023" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=32023</a><br>
and the corresponding rot16.ll regression tests.<br>
<br>
Because x86 scalar shift amounts are i8 values, we can end up with trunc-binop-trunc <br>
sequences that don't get folded in IR.<br>
<br>
As the TODO comments suggest, there will be regressions if we extend this (for x86, <br>
we mostly seem to be missing LEA opportunities, but there are likely vector folds <br>
missing too). I think those should be considered existing bugs because this is the <br>
same transform that we do as an IR canonicalization in instcombine. We just need <br>
more tests to make those visible independent of this patch.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D54640" rel="noreferrer" target="_blank">https://reviews.llvm.org/D54640</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
    llvm/trunk/test/CodeGen/AMDGPU/cgp-bitfield-extract.ll<br>
    llvm/trunk/test/CodeGen/X86/2008-09-11-CoalescerBug2.ll<br>
    llvm/trunk/test/CodeGen/X86/2010-08-04-MaskedSignedCompare.ll<br>
    llvm/trunk/test/CodeGen/X86/add-sub-nsw-nuw.ll<br>
    llvm/trunk/test/CodeGen/X86/bool-math.ll<br>
    llvm/trunk/test/CodeGen/X86/clear-lowbits.ll<br>
    llvm/trunk/test/CodeGen/X86/cmov.ll<br>
    llvm/trunk/test/CodeGen/X86/extract-bits.ll<br>
    llvm/trunk/test/CodeGen/X86/extract-lowbits.ll<br>
    llvm/trunk/test/CodeGen/X86/fshl.ll<br>
    llvm/trunk/test/CodeGen/X86/fshr.ll<br>
    llvm/trunk/test/CodeGen/X86/funnel-shift-rot.ll<br>
    llvm/trunk/test/CodeGen/X86/funnel-shift.ll<br>
    llvm/trunk/test/CodeGen/X86/pr32284.ll<br>
    llvm/trunk/test/CodeGen/X86/pr37879.ll<br>
    llvm/trunk/test/CodeGen/X86/rot16.ll<br>
    llvm/trunk/test/CodeGen/X86/rotate.ll<br>
    llvm/trunk/test/CodeGen/X86/rotate4.ll<br>
    llvm/trunk/test/CodeGen/X86/schedule-x86-64-shld.ll<br>
    llvm/trunk/test/CodeGen/X86/scheduler-backtracking.ll<br>
    llvm/trunk/test/CodeGen/X86/test-shrink.ll<br>
    llvm/trunk/test/CodeGen/X86/xchg-nofold.ll<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Nov 29 12:58:26 2018<br>
@@ -9722,6 +9722,28 @@ SDValue DAGCombiner::visitTRUNCATE(SDNod<br>
   if (SDValue NewVSel = matchVSelectOpSizesWithSetCC(N))<br>
     return NewVSel;<br>
<br>
+  // Narrow a suitable binary operation with a constant operand by moving it<br>
+  // ahead of the truncate. This is limited to pre-legalization because targets<br>
+  // may prefer a wider type during later combines and invert this transform.<br>
+  switch (N0.getOpcode()) {<br>
+  // TODO: Add case for ADD - that will likely require a change in logic here<br>
+  // or target-specific changes to avoid regressions.<br>
+  case ISD::SUB:<br>
+  case ISD::MUL:<br>
+  case ISD::AND:<br>
+  case ISD::OR:<br>
+  case ISD::XOR:<br>
+    // TODO: This should allow vector constants/types too.<br>
+    if (!LegalOperations && N0.hasOneUse() &&<br>
+        (isa<ConstantSDNode>(N0.getOperand(0)) ||<br>
+         isa<ConstantSDNode>(N0.getOperand(1)))) {<br>
+      SDLoc DL(N);<br>
+      SDValue NarrowL = DAG.getNode(ISD::TRUNCATE, DL, VT, N0.getOperand(0));<br>
+      SDValue NarrowR = DAG.getNode(ISD::TRUNCATE, DL, VT, N0.getOperand(1));<br>
+      return DAG.getNode(N0.getOpcode(), DL, VT, NarrowL, NarrowR);<br>
+    }<br>
+  }<br>
+<br>
   return SDValue();<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/test/CodeGen/AMDGPU/cgp-bitfield-extract.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/cgp-bitfield-extract.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/cgp-bitfield-extract.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/AMDGPU/cgp-bitfield-extract.ll (original)<br>
+++ llvm/trunk/test/CodeGen/AMDGPU/cgp-bitfield-extract.ll Thu Nov 29 12:58:26 2018<br>
@@ -125,11 +125,11 @@ ret:<br>
 ; GCN: s_cbranch_scc1<br>
<br>
 ; SI: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x80004<br>
-; VI: s_and_b32 s{{[0-9]+}}, [[BFE]], 0xff<br>
+; VI: v_mov_b32_e32 v{{[0-9]+}}, 0xff<br>
<br>
 ; GCN: BB2_2:<br>
 ; SI: s_bfe_u32 s{{[0-9]+}}, s{{[0-9]+}}, 0x70004<br>
-; VI: s_and_b32 s{{[0-9]+}}, [[BFE]], 0x7f<br>
+; VI: v_mov_b32_e32 v{{[0-9]+}}, 0x7f<br>
<br>
 ; GCN: BB2_3:<br>
 ; GCN: buffer_store_short<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/2008-09-11-CoalescerBug2.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2008-09-11-CoalescerBug2.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2008-09-11-CoalescerBug2.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/2008-09-11-CoalescerBug2.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/2008-09-11-CoalescerBug2.ll Thu Nov 29 12:58:26 2018<br>
@@ -17,7 +17,7 @@ define i32 @func_44(i16 signext %p_46) n<br>
 ; SOURCE-SCHED-NEXT:    setg %cl<br>
 ; SOURCE-SCHED-NEXT:    movb g_73, %dl<br>
 ; SOURCE-SCHED-NEXT:    xorl %eax, %eax<br>
-; SOURCE-SCHED-NEXT:    subl {{[0-9]+}}(%esp), %eax<br>
+; SOURCE-SCHED-NEXT:    subb {{[0-9]+}}(%esp), %al<br>
 ; SOURCE-SCHED-NEXT:    testb %dl, %dl<br>
 ; SOURCE-SCHED-NEXT:    jne .LBB0_2<br>
 ; SOURCE-SCHED-NEXT:  # %bb.1: # %bb11<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/2010-08-04-MaskedSignedCompare.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2010-08-04-MaskedSignedCompare.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2010-08-04-MaskedSignedCompare.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/2010-08-04-MaskedSignedCompare.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/2010-08-04-MaskedSignedCompare.ll Thu Nov 29 12:58:26 2018<br>
@@ -11,7 +11,7 @@ define i32 @main() nounwind {<br>
 ; CHECK:       # %bb.0: # %entry<br>
 ; CHECK-NEXT:    xorl %eax, %eax<br>
 ; CHECK-NEXT:    cmpq {{.*}}(%rip), %rax<br>
-; CHECK-NEXT:    sbbl %eax, %eax<br>
+; CHECK-NEXT:    sbbb %al, %al<br>
 ; CHECK-NEXT:    testb $-106, %al<br>
 ; CHECK-NEXT:    jle .LBB0_1<br>
 ; CHECK-NEXT:  # %bb.2: # %if.then<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/add-sub-nsw-nuw.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/add-sub-nsw-nuw.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/add-sub-nsw-nuw.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/add-sub-nsw-nuw.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/add-sub-nsw-nuw.ll Thu Nov 29 12:58:26 2018<br>
@@ -9,7 +9,7 @@ define i8 @PR30841(i64 %argc) {<br>
 ; CHECK-LABEL: PR30841:<br>
 ; CHECK:       ## %bb.0: ## %entry<br>
 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; CHECK-NEXT:    negl %eax<br>
+; CHECK-NEXT:    negb %al<br>
 ; CHECK-NEXT:    ## kill: def $al killed $al killed $eax<br>
 ; CHECK-NEXT:    retl<br>
 entry:<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/bool-math.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bool-math.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bool-math.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/bool-math.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/bool-math.ll Thu Nov 29 12:58:26 2018<br>
@@ -33,7 +33,7 @@ define i8 @sub_zext_cmp_mask_narrower_re<br>
 ; CHECK-LABEL: sub_zext_cmp_mask_narrower_result:<br>
 ; CHECK:       # %bb.0:<br>
 ; CHECK-NEXT:    movl %edi, %eax<br>
-; CHECK-NEXT:    andl $1, %eax<br>
+; CHECK-NEXT:    andb $1, %al<br>
 ; CHECK-NEXT:    orb $46, %al<br>
 ; CHECK-NEXT:    # kill: def $al killed $al killed $eax<br>
 ; CHECK-NEXT:    retq<br>
@@ -77,7 +77,7 @@ define i8 @add_zext_cmp_mask_narrower_re<br>
 ; CHECK-LABEL: add_zext_cmp_mask_narrower_result:<br>
 ; CHECK:       # %bb.0:<br>
 ; CHECK-NEXT:    movl %edi, %eax<br>
-; CHECK-NEXT:    andl $1, %eax<br>
+; CHECK-NEXT:    andb $1, %al<br>
 ; CHECK-NEXT:    xorb $43, %al<br>
 ; CHECK-NEXT:    # kill: def $al killed $al killed $eax<br>
 ; CHECK-NEXT:    retq<br>
@@ -159,7 +159,7 @@ define i8 @low_bit_select_constants_bigg<br>
 ; CHECK-LABEL: low_bit_select_constants_bigger_true_narrower_result:<br>
 ; CHECK:       # %bb.0:<br>
 ; CHECK-NEXT:    movl %edi, %eax<br>
-; CHECK-NEXT:    andl $1, %eax<br>
+; CHECK-NEXT:    andb $1, %al<br>
 ; CHECK-NEXT:    xorb $41, %al<br>
 ; CHECK-NEXT:    # kill: def $al killed $al killed $eax<br>
 ; CHECK-NEXT:    retq<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/clear-lowbits.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/clear-lowbits.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/clear-lowbits.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/clear-lowbits.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/clear-lowbits.ll Thu Nov 29 12:58:26 2018<br>
@@ -866,10 +866,9 @@ define i16 @clear_lowbits16_ic0(i16 %val<br>
 ; X86-NOBMI2-LABEL: clear_lowbits16_ic0:<br>
 ; X86-NOBMI2:       # %bb.0:<br>
 ; X86-NOBMI2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax<br>
-; X86-NOBMI2-NEXT:    movw $16, %cx<br>
-; X86-NOBMI2-NEXT:    subw {{[0-9]+}}(%esp), %cx<br>
+; X86-NOBMI2-NEXT:    movb $16, %cl<br>
+; X86-NOBMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI2-NEXT:    shrl %cl, %eax<br>
-; X86-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $cx<br>
 ; X86-NOBMI2-NEXT:    shll %cl, %eax<br>
 ; X86-NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
 ; X86-NOBMI2-NEXT:    retl<br>
@@ -877,8 +876,8 @@ define i16 @clear_lowbits16_ic0(i16 %val<br>
 ; X86-BMI2-LABEL: clear_lowbits16_ic0:<br>
 ; X86-BMI2:       # %bb.0:<br>
 ; X86-BMI2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI2-NEXT:    movw $16, %cx<br>
-; X86-BMI2-NEXT:    subw {{[0-9]+}}(%esp), %cx<br>
+; X86-BMI2-NEXT:    movb $16, %cl<br>
+; X86-BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI2-NEXT:    shrxl %ecx, %eax, %eax<br>
 ; X86-BMI2-NEXT:    shlxl %ecx, %eax, %eax<br>
 ; X86-BMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
@@ -887,10 +886,9 @@ define i16 @clear_lowbits16_ic0(i16 %val<br>
 ; X64-NOBMI2-LABEL: clear_lowbits16_ic0:<br>
 ; X64-NOBMI2:       # %bb.0:<br>
 ; X64-NOBMI2-NEXT:    movzwl %di, %eax<br>
-; X64-NOBMI2-NEXT:    movl $16, %ecx<br>
-; X64-NOBMI2-NEXT:    subl %esi, %ecx<br>
+; X64-NOBMI2-NEXT:    movb $16, %cl<br>
+; X64-NOBMI2-NEXT:    subb %sil, %cl<br>
 ; X64-NOBMI2-NEXT:    shrl %cl, %eax<br>
-; X64-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI2-NEXT:    shll %cl, %eax<br>
 ; X64-NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
 ; X64-NOBMI2-NEXT:    retq<br>
@@ -898,8 +896,8 @@ define i16 @clear_lowbits16_ic0(i16 %val<br>
 ; X64-BMI2-LABEL: clear_lowbits16_ic0:<br>
 ; X64-BMI2:       # %bb.0:<br>
 ; X64-BMI2-NEXT:    movzwl %di, %eax<br>
-; X64-BMI2-NEXT:    movl $16, %ecx<br>
-; X64-BMI2-NEXT:    subl %esi, %ecx<br>
+; X64-BMI2-NEXT:    movb $16, %cl<br>
+; X64-BMI2-NEXT:    subb %sil, %cl<br>
 ; X64-BMI2-NEXT:    shrxl %ecx, %eax, %eax<br>
 ; X64-BMI2-NEXT:    shlxl %ecx, %eax, %eax<br>
 ; X64-BMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
@@ -962,10 +960,9 @@ define i16 @clear_lowbits16_ic2_load(i16<br>
 ; X86-NOBMI2:       # %bb.0:<br>
 ; X86-NOBMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NOBMI2-NEXT:    movzwl (%eax), %eax<br>
-; X86-NOBMI2-NEXT:    movw $16, %cx<br>
-; X86-NOBMI2-NEXT:    subw {{[0-9]+}}(%esp), %cx<br>
+; X86-NOBMI2-NEXT:    movb $16, %cl<br>
+; X86-NOBMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI2-NEXT:    shrl %cl, %eax<br>
-; X86-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $cx<br>
 ; X86-NOBMI2-NEXT:    shll %cl, %eax<br>
 ; X86-NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
 ; X86-NOBMI2-NEXT:    retl<br>
@@ -974,8 +971,8 @@ define i16 @clear_lowbits16_ic2_load(i16<br>
 ; X86-BMI2:       # %bb.0:<br>
 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI2-NEXT:    movzwl (%eax), %eax<br>
-; X86-BMI2-NEXT:    movw $16, %cx<br>
-; X86-BMI2-NEXT:    subw {{[0-9]+}}(%esp), %cx<br>
+; X86-BMI2-NEXT:    movb $16, %cl<br>
+; X86-BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI2-NEXT:    shrxl %ecx, %eax, %eax<br>
 ; X86-BMI2-NEXT:    shlxl %ecx, %eax, %eax<br>
 ; X86-BMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
@@ -984,10 +981,9 @@ define i16 @clear_lowbits16_ic2_load(i16<br>
 ; X64-NOBMI2-LABEL: clear_lowbits16_ic2_load:<br>
 ; X64-NOBMI2:       # %bb.0:<br>
 ; X64-NOBMI2-NEXT:    movzwl (%rdi), %eax<br>
-; X64-NOBMI2-NEXT:    movl $16, %ecx<br>
-; X64-NOBMI2-NEXT:    subl %esi, %ecx<br>
+; X64-NOBMI2-NEXT:    movb $16, %cl<br>
+; X64-NOBMI2-NEXT:    subb %sil, %cl<br>
 ; X64-NOBMI2-NEXT:    shrl %cl, %eax<br>
-; X64-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI2-NEXT:    shll %cl, %eax<br>
 ; X64-NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
 ; X64-NOBMI2-NEXT:    retq<br>
@@ -995,8 +991,8 @@ define i16 @clear_lowbits16_ic2_load(i16<br>
 ; X64-BMI2-LABEL: clear_lowbits16_ic2_load:<br>
 ; X64-BMI2:       # %bb.0:<br>
 ; X64-BMI2-NEXT:    movzwl (%rdi), %eax<br>
-; X64-BMI2-NEXT:    movl $16, %ecx<br>
-; X64-BMI2-NEXT:    subl %esi, %ecx<br>
+; X64-BMI2-NEXT:    movb $16, %cl<br>
+; X64-BMI2-NEXT:    subb %sil, %cl<br>
 ; X64-BMI2-NEXT:    shrxl %ecx, %eax, %eax<br>
 ; X64-BMI2-NEXT:    shlxl %ecx, %eax, %eax<br>
 ; X64-BMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
@@ -1062,10 +1058,9 @@ define i16 @clear_lowbits16_ic4_commutat<br>
 ; X86-NOBMI2-LABEL: clear_lowbits16_ic4_commutative:<br>
 ; X86-NOBMI2:       # %bb.0:<br>
 ; X86-NOBMI2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax<br>
-; X86-NOBMI2-NEXT:    movw $16, %cx<br>
-; X86-NOBMI2-NEXT:    subw {{[0-9]+}}(%esp), %cx<br>
+; X86-NOBMI2-NEXT:    movb $16, %cl<br>
+; X86-NOBMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI2-NEXT:    shrl %cl, %eax<br>
-; X86-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $cx<br>
 ; X86-NOBMI2-NEXT:    shll %cl, %eax<br>
 ; X86-NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
 ; X86-NOBMI2-NEXT:    retl<br>
@@ -1073,8 +1068,8 @@ define i16 @clear_lowbits16_ic4_commutat<br>
 ; X86-BMI2-LABEL: clear_lowbits16_ic4_commutative:<br>
 ; X86-BMI2:       # %bb.0:<br>
 ; X86-BMI2-NEXT:    movzwl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI2-NEXT:    movw $16, %cx<br>
-; X86-BMI2-NEXT:    subw {{[0-9]+}}(%esp), %cx<br>
+; X86-BMI2-NEXT:    movb $16, %cl<br>
+; X86-BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI2-NEXT:    shrxl %ecx, %eax, %eax<br>
 ; X86-BMI2-NEXT:    shlxl %ecx, %eax, %eax<br>
 ; X86-BMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
@@ -1083,10 +1078,9 @@ define i16 @clear_lowbits16_ic4_commutat<br>
 ; X64-NOBMI2-LABEL: clear_lowbits16_ic4_commutative:<br>
 ; X64-NOBMI2:       # %bb.0:<br>
 ; X64-NOBMI2-NEXT:    movzwl %di, %eax<br>
-; X64-NOBMI2-NEXT:    movl $16, %ecx<br>
-; X64-NOBMI2-NEXT:    subl %esi, %ecx<br>
+; X64-NOBMI2-NEXT:    movb $16, %cl<br>
+; X64-NOBMI2-NEXT:    subb %sil, %cl<br>
 ; X64-NOBMI2-NEXT:    shrl %cl, %eax<br>
-; X64-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI2-NEXT:    shll %cl, %eax<br>
 ; X64-NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
 ; X64-NOBMI2-NEXT:    retq<br>
@@ -1094,8 +1088,8 @@ define i16 @clear_lowbits16_ic4_commutat<br>
 ; X64-BMI2-LABEL: clear_lowbits16_ic4_commutative:<br>
 ; X64-BMI2:       # %bb.0:<br>
 ; X64-BMI2-NEXT:    movzwl %di, %eax<br>
-; X64-BMI2-NEXT:    movl $16, %ecx<br>
-; X64-BMI2-NEXT:    subl %esi, %ecx<br>
+; X64-BMI2-NEXT:    movb $16, %cl<br>
+; X64-BMI2-NEXT:    subb %sil, %cl<br>
 ; X64-BMI2-NEXT:    shrxl %ecx, %eax, %eax<br>
 ; X64-BMI2-NEXT:    shlxl %ecx, %eax, %eax<br>
 ; X64-BMI2-NEXT:    # kill: def $ax killed $ax killed $eax<br>
@@ -1113,7 +1107,7 @@ define i32 @clear_lowbits32_ic0(i32 %val<br>
 ; X86-NOBMI2:       # %bb.0:<br>
 ; X86-NOBMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NOBMI2-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI2-NEXT:    shrl %cl, %eax<br>
 ; X86-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI2-NEXT:    shll %cl, %eax<br>
@@ -1122,7 +1116,7 @@ define i32 @clear_lowbits32_ic0(i32 %val<br>
 ; X86-BMI2-LABEL: clear_lowbits32_ic0:<br>
 ; X86-BMI2:       # %bb.0:<br>
 ; X86-BMI2-NEXT:    xorl %eax, %eax<br>
-; X86-BMI2-NEXT:    subl {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI2-NEXT:    subb {{[0-9]+}}(%esp), %al<br>
 ; X86-BMI2-NEXT:    shrxl %eax, {{[0-9]+}}(%esp), %ecx<br>
 ; X86-BMI2-NEXT:    shlxl %eax, %ecx, %eax<br>
 ; X86-BMI2-NEXT:    retl<br>
@@ -1131,7 +1125,7 @@ define i32 @clear_lowbits32_ic0(i32 %val<br>
 ; X64-NOBMI2:       # %bb.0:<br>
 ; X64-NOBMI2-NEXT:    movl %esi, %ecx<br>
 ; X64-NOBMI2-NEXT:    movl %edi, %eax<br>
-; X64-NOBMI2-NEXT:    negl %ecx<br>
+; X64-NOBMI2-NEXT:    negb %cl<br>
 ; X64-NOBMI2-NEXT:    shrl %cl, %eax<br>
 ; X64-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI2-NEXT:    shll %cl, %eax<br>
@@ -1139,7 +1133,7 @@ define i32 @clear_lowbits32_ic0(i32 %val<br>
 ;<br>
 ; X64-BMI2-LABEL: clear_lowbits32_ic0:<br>
 ; X64-BMI2:       # %bb.0:<br>
-; X64-BMI2-NEXT:    negl %esi<br>
+; X64-BMI2-NEXT:    negb %sil<br>
 ; X64-BMI2-NEXT:    shrxl %esi, %edi, %eax<br>
 ; X64-BMI2-NEXT:    shlxl %esi, %eax, %eax<br>
 ; X64-BMI2-NEXT:    retq<br>
@@ -1197,7 +1191,7 @@ define i32 @clear_lowbits32_ic2_load(i32<br>
 ; X86-NOBMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NOBMI2-NEXT:    movl (%eax), %eax<br>
 ; X86-NOBMI2-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI2-NEXT:    shrl %cl, %eax<br>
 ; X86-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI2-NEXT:    shll %cl, %eax<br>
@@ -1207,7 +1201,7 @@ define i32 @clear_lowbits32_ic2_load(i32<br>
 ; X86-BMI2:       # %bb.0:<br>
 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI2-NEXT:    xorl %ecx, %ecx<br>
-; X86-BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI2-NEXT:    shrxl %ecx, (%eax), %eax<br>
 ; X86-BMI2-NEXT:    shlxl %ecx, %eax, %eax<br>
 ; X86-BMI2-NEXT:    retl<br>
@@ -1216,7 +1210,7 @@ define i32 @clear_lowbits32_ic2_load(i32<br>
 ; X64-NOBMI2:       # %bb.0:<br>
 ; X64-NOBMI2-NEXT:    movl %esi, %ecx<br>
 ; X64-NOBMI2-NEXT:    movl (%rdi), %eax<br>
-; X64-NOBMI2-NEXT:    negl %ecx<br>
+; X64-NOBMI2-NEXT:    negb %cl<br>
 ; X64-NOBMI2-NEXT:    shrl %cl, %eax<br>
 ; X64-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI2-NEXT:    shll %cl, %eax<br>
@@ -1224,7 +1218,7 @@ define i32 @clear_lowbits32_ic2_load(i32<br>
 ;<br>
 ; X64-BMI2-LABEL: clear_lowbits32_ic2_load:<br>
 ; X64-BMI2:       # %bb.0:<br>
-; X64-BMI2-NEXT:    negl %esi<br>
+; X64-BMI2-NEXT:    negb %sil<br>
 ; X64-BMI2-NEXT:    shrxl %esi, (%rdi), %eax<br>
 ; X64-BMI2-NEXT:    shlxl %esi, %eax, %eax<br>
 ; X64-BMI2-NEXT:    retq<br>
@@ -1285,7 +1279,7 @@ define i32 @clear_lowbits32_ic4_commutat<br>
 ; X86-NOBMI2:       # %bb.0:<br>
 ; X86-NOBMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NOBMI2-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI2-NEXT:    shrl %cl, %eax<br>
 ; X86-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI2-NEXT:    shll %cl, %eax<br>
@@ -1294,7 +1288,7 @@ define i32 @clear_lowbits32_ic4_commutat<br>
 ; X86-BMI2-LABEL: clear_lowbits32_ic4_commutative:<br>
 ; X86-BMI2:       # %bb.0:<br>
 ; X86-BMI2-NEXT:    xorl %eax, %eax<br>
-; X86-BMI2-NEXT:    subl {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI2-NEXT:    subb {{[0-9]+}}(%esp), %al<br>
 ; X86-BMI2-NEXT:    shrxl %eax, {{[0-9]+}}(%esp), %ecx<br>
 ; X86-BMI2-NEXT:    shlxl %eax, %ecx, %eax<br>
 ; X86-BMI2-NEXT:    retl<br>
@@ -1303,7 +1297,7 @@ define i32 @clear_lowbits32_ic4_commutat<br>
 ; X64-NOBMI2:       # %bb.0:<br>
 ; X64-NOBMI2-NEXT:    movl %esi, %ecx<br>
 ; X64-NOBMI2-NEXT:    movl %edi, %eax<br>
-; X64-NOBMI2-NEXT:    negl %ecx<br>
+; X64-NOBMI2-NEXT:    negb %cl<br>
 ; X64-NOBMI2-NEXT:    shrl %cl, %eax<br>
 ; X64-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI2-NEXT:    shll %cl, %eax<br>
@@ -1311,7 +1305,7 @@ define i32 @clear_lowbits32_ic4_commutat<br>
 ;<br>
 ; X64-BMI2-LABEL: clear_lowbits32_ic4_commutative:<br>
 ; X64-BMI2:       # %bb.0:<br>
-; X64-BMI2-NEXT:    negl %esi<br>
+; X64-BMI2-NEXT:    negb %sil<br>
 ; X64-BMI2-NEXT:    shrxl %esi, %edi, %eax<br>
 ; X64-BMI2-NEXT:    shlxl %esi, %eax, %eax<br>
 ; X64-BMI2-NEXT:    retq<br>
@@ -1326,8 +1320,8 @@ define i32 @clear_lowbits32_ic4_commutat<br>
 define i64 @clear_lowbits64_ic0(i64 %val, i64 %numlowbits) nounwind {<br>
 ; X86-NOBMI2-LABEL: clear_lowbits64_ic0:<br>
 ; X86-NOBMI2:       # %bb.0:<br>
-; X86-NOBMI2-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI2-NEXT:    movb $64, %cl<br>
+; X86-NOBMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI2-NEXT:    movl $-1, %edx<br>
 ; X86-NOBMI2-NEXT:    movl $-1, %eax<br>
 ; X86-NOBMI2-NEXT:    shll %cl, %eax<br>
@@ -1344,8 +1338,8 @@ define i64 @clear_lowbits64_ic0(i64 %val<br>
 ;<br>
 ; X86-BMI2-LABEL: clear_lowbits64_ic0:<br>
 ; X86-BMI2:       # %bb.0:<br>
-; X86-BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI2-NEXT:    movl $-1, %edx<br>
 ; X86-BMI2-NEXT:    shlxl %ecx, %edx, %eax<br>
 ; X86-BMI2-NEXT:    shldl %cl, %edx, %edx<br>
@@ -1363,7 +1357,7 @@ define i64 @clear_lowbits64_ic0(i64 %val<br>
 ; X64-NOBMI2:       # %bb.0:<br>
 ; X64-NOBMI2-NEXT:    movq %rsi, %rcx<br>
 ; X64-NOBMI2-NEXT:    movq %rdi, %rax<br>
-; X64-NOBMI2-NEXT:    negl %ecx<br>
+; X64-NOBMI2-NEXT:    negb %cl<br>
 ; X64-NOBMI2-NEXT:    shrq %cl, %rax<br>
 ; X64-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI2-NEXT:    shlq %cl, %rax<br>
@@ -1371,7 +1365,7 @@ define i64 @clear_lowbits64_ic0(i64 %val<br>
 ;<br>
 ; X64-BMI2-LABEL: clear_lowbits64_ic0:<br>
 ; X64-BMI2:       # %bb.0:<br>
-; X64-BMI2-NEXT:    negl %esi<br>
+; X64-BMI2-NEXT:    negb %sil<br>
 ; X64-BMI2-NEXT:    shrxq %rsi, %rdi, %rax<br>
 ; X64-BMI2-NEXT:    shlxq %rsi, %rax, %rax<br>
 ; X64-BMI2-NEXT:    retq<br>
@@ -1446,8 +1440,8 @@ define i64 @clear_lowbits64_ic2_load(i64<br>
 ; X86-NOBMI2:       # %bb.0:<br>
 ; X86-NOBMI2-NEXT:    pushl %esi<br>
 ; X86-NOBMI2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
-; X86-NOBMI2-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI2-NEXT:    movb $64, %cl<br>
+; X86-NOBMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI2-NEXT:    movl $-1, %edx<br>
 ; X86-NOBMI2-NEXT:    movl $-1, %eax<br>
 ; X86-NOBMI2-NEXT:    shll %cl, %eax<br>
@@ -1467,8 +1461,8 @@ define i64 @clear_lowbits64_ic2_load(i64<br>
 ; X86-BMI2:       # %bb.0:<br>
 ; X86-BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
-; X86-BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI2-NEXT:    movl $-1, %edx<br>
 ; X86-BMI2-NEXT:    shlxl %ecx, %edx, %eax<br>
 ; X86-BMI2-NEXT:    shldl %cl, %edx, %edx<br>
@@ -1487,7 +1481,7 @@ define i64 @clear_lowbits64_ic2_load(i64<br>
 ; X64-NOBMI2:       # %bb.0:<br>
 ; X64-NOBMI2-NEXT:    movq %rsi, %rcx<br>
 ; X64-NOBMI2-NEXT:    movq (%rdi), %rax<br>
-; X64-NOBMI2-NEXT:    negl %ecx<br>
+; X64-NOBMI2-NEXT:    negb %cl<br>
 ; X64-NOBMI2-NEXT:    shrq %cl, %rax<br>
 ; X64-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI2-NEXT:    shlq %cl, %rax<br>
@@ -1495,7 +1489,7 @@ define i64 @clear_lowbits64_ic2_load(i64<br>
 ;<br>
 ; X64-BMI2-LABEL: clear_lowbits64_ic2_load:<br>
 ; X64-BMI2:       # %bb.0:<br>
-; X64-BMI2-NEXT:    negl %esi<br>
+; X64-BMI2-NEXT:    negb %sil<br>
 ; X64-BMI2-NEXT:    shrxq %rsi, (%rdi), %rax<br>
 ; X64-BMI2-NEXT:    shlxq %rsi, %rax, %rax<br>
 ; X64-BMI2-NEXT:    retq<br>
@@ -1576,8 +1570,8 @@ define i64 @clear_lowbits64_ic3_load_ind<br>
 define i64 @clear_lowbits64_ic4_commutative(i64 %val, i64 %numlowbits) nounwind {<br>
 ; X86-NOBMI2-LABEL: clear_lowbits64_ic4_commutative:<br>
 ; X86-NOBMI2:       # %bb.0:<br>
-; X86-NOBMI2-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI2-NEXT:    movb $64, %cl<br>
+; X86-NOBMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI2-NEXT:    movl $-1, %edx<br>
 ; X86-NOBMI2-NEXT:    movl $-1, %eax<br>
 ; X86-NOBMI2-NEXT:    shll %cl, %eax<br>
@@ -1594,8 +1588,8 @@ define i64 @clear_lowbits64_ic4_commutat<br>
 ;<br>
 ; X86-BMI2-LABEL: clear_lowbits64_ic4_commutative:<br>
 ; X86-BMI2:       # %bb.0:<br>
-; X86-BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI2-NEXT:    movl $-1, %edx<br>
 ; X86-BMI2-NEXT:    shlxl %ecx, %edx, %eax<br>
 ; X86-BMI2-NEXT:    shldl %cl, %edx, %edx<br>
@@ -1613,7 +1607,7 @@ define i64 @clear_lowbits64_ic4_commutat<br>
 ; X64-NOBMI2:       # %bb.0:<br>
 ; X64-NOBMI2-NEXT:    movq %rsi, %rcx<br>
 ; X64-NOBMI2-NEXT:    movq %rdi, %rax<br>
-; X64-NOBMI2-NEXT:    negl %ecx<br>
+; X64-NOBMI2-NEXT:    negb %cl<br>
 ; X64-NOBMI2-NEXT:    shrq %cl, %rax<br>
 ; X64-NOBMI2-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI2-NEXT:    shlq %cl, %rax<br>
@@ -1621,7 +1615,7 @@ define i64 @clear_lowbits64_ic4_commutat<br>
 ;<br>
 ; X64-BMI2-LABEL: clear_lowbits64_ic4_commutative:<br>
 ; X64-BMI2:       # %bb.0:<br>
-; X64-BMI2-NEXT:    negl %esi<br>
+; X64-BMI2-NEXT:    negb %sil<br>
 ; X64-BMI2-NEXT:    shrxq %rsi, %rdi, %rax<br>
 ; X64-BMI2-NEXT:    shlxq %rsi, %rax, %rax<br>
 ; X64-BMI2-NEXT:    retq<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/cmov.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/cmov.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/cmov.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/cmov.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/cmov.ll Thu Nov 29 12:58:26 2018<br>
@@ -81,7 +81,7 @@ define i1 @test4() nounwind {<br>
 ; CHECK-NEXT:    movsbl {{.*}}(%rip), %edx<br>
 ; CHECK-NEXT:    movzbl %dl, %ecx<br>
 ; CHECK-NEXT:    shrl $7, %ecx<br>
-; CHECK-NEXT:    xorl $1, %ecx<br>
+; CHECK-NEXT:    xorb $1, %cl<br>
 ; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; CHECK-NEXT:    sarl %cl, %edx<br>
 ; CHECK-NEXT:    movb {{.*}}(%rip), %al<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/extract-bits.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/extract-bits.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/extract-bits.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/extract-bits.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/extract-bits.ll Thu Nov 29 12:58:26 2018<br>
@@ -2983,7 +2983,7 @@ define i32 @bextr32_c0(i32 %val, i32 %nu<br>
 ; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %edi<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %edi<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %esi<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %esi<br>
@@ -3005,7 +3005,7 @@ define i32 @bextr32_c0(i32 %val, i32 %nu<br>
 ; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %edi<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %ecx, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %esi<br>
@@ -3020,22 +3020,22 @@ define i32 @bextr32_c0(i32 %val, i32 %nu<br>
 ;<br>
 ; X86-BMI1BMI2-LABEL: bextr32_c0:<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
-; X86-BMI1BMI2-NEXT:    pushl %edi<br>
+; X86-BMI1BMI2-NEXT:    pushl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI1BMI2-NEXT:    pushl %eax<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %bl<br>
 ; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %al<br>
-; X86-BMI1BMI2-NEXT:    shrxl %eax, {{[0-9]+}}(%esp), %edi<br>
-; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
-; X86-BMI1BMI2-NEXT:    negl %eax<br>
+; X86-BMI1BMI2-NEXT:    shrxl %eax, {{[0-9]+}}(%esp), %esi<br>
+; X86-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X86-BMI1BMI2-NEXT:    negb %al<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %eax<br>
 ; X86-BMI1BMI2-NEXT:    movl %eax, (%esp)<br>
 ; X86-BMI1BMI2-NEXT:    calll use32<br>
-; X86-BMI1BMI2-NEXT:    bzhil %esi, %edi, %eax<br>
+; X86-BMI1BMI2-NEXT:    bzhil %ebx, %esi, %eax<br>
 ; X86-BMI1BMI2-NEXT:    addl $4, %esp<br>
 ; X86-BMI1BMI2-NEXT:    popl %esi<br>
-; X86-BMI1BMI2-NEXT:    popl %edi<br>
+; X86-BMI1BMI2-NEXT:    popl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    retl<br>
 ;<br>
 ; X64-NOBMI-LABEL: bextr32_c0:<br>
@@ -3047,7 +3047,7 @@ define i32 @bextr32_c0(i32 %val, i32 %nu<br>
 ; X64-NOBMI-NEXT:    movl %edi, %ebx<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebx<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl $-1, %ebp<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebp<br>
@@ -3069,7 +3069,7 @@ define i32 @bextr32_c0(i32 %val, i32 %nu<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edi, %ebx<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebx<br>
-; X64-BMI1NOTBM-NEXT:    negl %edx<br>
+; X64-BMI1NOTBM-NEXT:    negb %dl<br>
 ; X64-BMI1NOTBM-NEXT:    movl $-1, %ebp<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edx, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebp<br>
@@ -3089,8 +3089,8 @@ define i32 @bextr32_c0(i32 %val, i32 %nu<br>
 ; X64-BMI1BMI2-NEXT:    pushq %rax<br>
 ; X64-BMI1BMI2-NEXT:    movl %edx, %ebx<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %esi, %edi, %ebp<br>
-; X64-BMI1BMI2-NEXT:    movl %edx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %edi<br>
 ; X64-BMI1BMI2-NEXT:    callq use32<br>
@@ -3254,7 +3254,7 @@ define i32 @bextr32_c2_load(i32* %w, i32<br>
 ; X86-NOBMI-NEXT:    movl (%eax), %edi<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %edi<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %esi<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %esi<br>
@@ -3277,7 +3277,7 @@ define i32 @bextr32_c2_load(i32* %w, i32<br>
 ; X86-BMI1NOTBM-NEXT:    movl (%eax), %edi<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %ecx, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %esi<br>
@@ -3292,23 +3292,23 @@ define i32 @bextr32_c2_load(i32* %w, i32<br>
 ;<br>
 ; X86-BMI1BMI2-LABEL: bextr32_c2_load:<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
-; X86-BMI1BMI2-NEXT:    pushl %edi<br>
+; X86-BMI1BMI2-NEXT:    pushl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI1BMI2-NEXT:    pushl %eax<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %bl<br>
 ; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
-; X86-BMI1BMI2-NEXT:    shrxl %ecx, (%eax), %edi<br>
-; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
-; X86-BMI1BMI2-NEXT:    negl %eax<br>
+; X86-BMI1BMI2-NEXT:    shrxl %ecx, (%eax), %esi<br>
+; X86-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X86-BMI1BMI2-NEXT:    negb %al<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %eax<br>
 ; X86-BMI1BMI2-NEXT:    movl %eax, (%esp)<br>
 ; X86-BMI1BMI2-NEXT:    calll use32<br>
-; X86-BMI1BMI2-NEXT:    bzhil %esi, %edi, %eax<br>
+; X86-BMI1BMI2-NEXT:    bzhil %ebx, %esi, %eax<br>
 ; X86-BMI1BMI2-NEXT:    addl $4, %esp<br>
 ; X86-BMI1BMI2-NEXT:    popl %esi<br>
-; X86-BMI1BMI2-NEXT:    popl %edi<br>
+; X86-BMI1BMI2-NEXT:    popl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    retl<br>
 ;<br>
 ; X64-NOBMI-LABEL: bextr32_c2_load:<br>
@@ -3320,7 +3320,7 @@ define i32 @bextr32_c2_load(i32* %w, i32<br>
 ; X64-NOBMI-NEXT:    movl (%rdi), %ebp<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebp<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl $-1, %ebx<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebx<br>
@@ -3342,7 +3342,7 @@ define i32 @bextr32_c2_load(i32* %w, i32<br>
 ; X64-BMI1NOTBM-NEXT:    movl (%rdi), %ebp<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebp<br>
-; X64-BMI1NOTBM-NEXT:    negl %edx<br>
+; X64-BMI1NOTBM-NEXT:    negb %dl<br>
 ; X64-BMI1NOTBM-NEXT:    movl $-1, %ebx<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edx, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebx<br>
@@ -3362,8 +3362,8 @@ define i32 @bextr32_c2_load(i32* %w, i32<br>
 ; X64-BMI1BMI2-NEXT:    pushq %rax<br>
 ; X64-BMI1BMI2-NEXT:    movl %edx, %ebx<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %esi, (%rdi), %ebp<br>
-; X64-BMI1BMI2-NEXT:    movl %edx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %edi<br>
 ; X64-BMI1BMI2-NEXT:    callq use32<br>
@@ -3531,7 +3531,7 @@ define i32 @bextr32_c4_commutative(i32 %<br>
 ; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %edi<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %edi<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %esi<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %esi<br>
@@ -3553,7 +3553,7 @@ define i32 @bextr32_c4_commutative(i32 %<br>
 ; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %edi<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %ecx, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %esi<br>
@@ -3568,22 +3568,22 @@ define i32 @bextr32_c4_commutative(i32 %<br>
 ;<br>
 ; X86-BMI1BMI2-LABEL: bextr32_c4_commutative:<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
-; X86-BMI1BMI2-NEXT:    pushl %edi<br>
+; X86-BMI1BMI2-NEXT:    pushl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI1BMI2-NEXT:    pushl %eax<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %bl<br>
 ; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %al<br>
-; X86-BMI1BMI2-NEXT:    shrxl %eax, {{[0-9]+}}(%esp), %edi<br>
-; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
-; X86-BMI1BMI2-NEXT:    negl %eax<br>
+; X86-BMI1BMI2-NEXT:    shrxl %eax, {{[0-9]+}}(%esp), %esi<br>
+; X86-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X86-BMI1BMI2-NEXT:    negb %al<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %eax<br>
 ; X86-BMI1BMI2-NEXT:    movl %eax, (%esp)<br>
 ; X86-BMI1BMI2-NEXT:    calll use32<br>
-; X86-BMI1BMI2-NEXT:    bzhil %esi, %edi, %eax<br>
+; X86-BMI1BMI2-NEXT:    bzhil %ebx, %esi, %eax<br>
 ; X86-BMI1BMI2-NEXT:    addl $4, %esp<br>
 ; X86-BMI1BMI2-NEXT:    popl %esi<br>
-; X86-BMI1BMI2-NEXT:    popl %edi<br>
+; X86-BMI1BMI2-NEXT:    popl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    retl<br>
 ;<br>
 ; X64-NOBMI-LABEL: bextr32_c4_commutative:<br>
@@ -3595,7 +3595,7 @@ define i32 @bextr32_c4_commutative(i32 %<br>
 ; X64-NOBMI-NEXT:    movl %edi, %ebx<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebx<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl $-1, %ebp<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebp<br>
@@ -3617,7 +3617,7 @@ define i32 @bextr32_c4_commutative(i32 %<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edi, %ebx<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebx<br>
-; X64-BMI1NOTBM-NEXT:    negl %edx<br>
+; X64-BMI1NOTBM-NEXT:    negb %dl<br>
 ; X64-BMI1NOTBM-NEXT:    movl $-1, %ebp<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edx, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebp<br>
@@ -3637,8 +3637,8 @@ define i32 @bextr32_c4_commutative(i32 %<br>
 ; X64-BMI1BMI2-NEXT:    pushq %rax<br>
 ; X64-BMI1BMI2-NEXT:    movl %edx, %ebx<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %esi, %edi, %ebp<br>
-; X64-BMI1BMI2-NEXT:    movl %edx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %edi<br>
 ; X64-BMI1BMI2-NEXT:    callq use32<br>
@@ -3667,7 +3667,7 @@ define i32 @bextr32_c5_skipextrauses(i32<br>
 ; X86-NOBMI-NEXT:    movl %ebx, %ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %edi<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %esi<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %esi<br>
@@ -3694,7 +3694,7 @@ define i32 @bextr32_c5_skipextrauses(i32<br>
 ; X86-BMI1NOTBM-NEXT:    movl %ebx, %ecx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %ecx, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %esi<br>
@@ -3716,16 +3716,16 @@ define i32 @bextr32_c5_skipextrauses(i32<br>
 ; X86-BMI1BMI2-NEXT:    pushl %edi<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI1BMI2-NEXT:    subl $16, %esp<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %bl<br>
 ; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edi<br>
-; X86-BMI1BMI2-NEXT:    shrxl %edi, {{[0-9]+}}(%esp), %ebx<br>
-; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
-; X86-BMI1BMI2-NEXT:    negl %eax<br>
+; X86-BMI1BMI2-NEXT:    shrxl %edi, {{[0-9]+}}(%esp), %esi<br>
+; X86-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X86-BMI1BMI2-NEXT:    negb %al<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %eax<br>
 ; X86-BMI1BMI2-NEXT:    movl %eax, (%esp)<br>
 ; X86-BMI1BMI2-NEXT:    calll use32<br>
-; X86-BMI1BMI2-NEXT:    bzhil %esi, %ebx, %esi<br>
+; X86-BMI1BMI2-NEXT:    bzhil %ebx, %esi, %esi<br>
 ; X86-BMI1BMI2-NEXT:    movl %edi, (%esp)<br>
 ; X86-BMI1BMI2-NEXT:    calll use32<br>
 ; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
@@ -3744,7 +3744,7 @@ define i32 @bextr32_c5_skipextrauses(i32<br>
 ; X64-NOBMI-NEXT:    movl %edi, %ebp<br>
 ; X64-NOBMI-NEXT:    movl %r14d, %ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebp<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl $-1, %ebx<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebx<br>
@@ -3768,7 +3768,7 @@ define i32 @bextr32_c5_skipextrauses(i32<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edi, %ebp<br>
 ; X64-BMI1NOTBM-NEXT:    movl %r14d, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebp<br>
-; X64-BMI1NOTBM-NEXT:    negl %edx<br>
+; X64-BMI1NOTBM-NEXT:    negb %dl<br>
 ; X64-BMI1NOTBM-NEXT:    movl $-1, %ebx<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edx, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebx<br>
@@ -3791,8 +3791,8 @@ define i32 @bextr32_c5_skipextrauses(i32<br>
 ; X64-BMI1BMI2-NEXT:    movl %edx, %ebx<br>
 ; X64-BMI1BMI2-NEXT:    movl %esi, %ebp<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %esi, %edi, %r14d<br>
-; X64-BMI1BMI2-NEXT:    movl %edx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %edi<br>
 ; X64-BMI1BMI2-NEXT:    callq use32<br>
@@ -3835,8 +3835,8 @@ define i64 @bextr64_c0(i64 %val, i64 %nu<br>
 ; X86-NOBMI-NEXT:    movl %edi, %esi<br>
 ; X86-NOBMI-NEXT:    xorl %edi, %edi<br>
 ; X86-NOBMI-NEXT:  .LBB32_2:<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %ebp<br>
 ; X86-NOBMI-NEXT:    movl $-1, %ebx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %ebx<br>
@@ -3882,8 +3882,8 @@ define i64 @bextr64_c0(i64 %val, i64 %nu<br>
 ; X86-BMI1NOTBM-NEXT:    movl %edi, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %edi, %edi<br>
 ; X86-BMI1NOTBM-NEXT:  .LBB32_2:<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %ebp<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %ebx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %ebx<br>
@@ -3928,8 +3928,8 @@ define i64 @bextr64_c0(i64 %val, i64 %nu<br>
 ; X86-BMI1BMI2-NEXT:    movl %edi, %esi<br>
 ; X86-BMI1BMI2-NEXT:    xorl %edi, %edi<br>
 ; X86-BMI1BMI2-NEXT:  .LBB32_2:<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ebx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %ecx, %ebx, %ebp<br>
 ; X86-BMI1BMI2-NEXT:    shrdl %cl, %ebx, %ebx<br>
@@ -3964,7 +3964,7 @@ define i64 @bextr64_c0(i64 %val, i64 %nu<br>
 ; X64-NOBMI-NEXT:    movq %rdi, %r14<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %r14<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movq $-1, %rbx<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rbx<br>
@@ -3986,7 +3986,7 @@ define i64 @bextr64_c0(i64 %val, i64 %nu<br>
 ; X64-BMI1NOTBM-NEXT:    movq %rdi, %r14<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %r14<br>
-; X64-BMI1NOTBM-NEXT:    negl %edx<br>
+; X64-BMI1NOTBM-NEXT:    negb %dl<br>
 ; X64-BMI1NOTBM-NEXT:    movq $-1, %rbx<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edx, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %rbx<br>
@@ -4007,7 +4007,7 @@ define i64 @bextr64_c0(i64 %val, i64 %nu<br>
 ; X64-BMI1BMI2-NEXT:    movq %rdx, %rbx<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rsi, %rdi, %r14<br>
 ; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movq $-1, %rcx<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rax, %rcx, %rdi<br>
 ; X64-BMI1BMI2-NEXT:    callq use64<br>
@@ -4257,8 +4257,8 @@ define i64 @bextr64_c2_load(i64* %w, i64<br>
 ; X86-NOBMI-NEXT:    movl %edi, %esi<br>
 ; X86-NOBMI-NEXT:    xorl %edi, %edi<br>
 ; X86-NOBMI-NEXT:  .LBB34_2:<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %ebp<br>
 ; X86-NOBMI-NEXT:    movl $-1, %ebx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %ebx<br>
@@ -4305,8 +4305,8 @@ define i64 @bextr64_c2_load(i64* %w, i64<br>
 ; X86-BMI1NOTBM-NEXT:    movl %edi, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %edi, %edi<br>
 ; X86-BMI1NOTBM-NEXT:  .LBB34_2:<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %ebp<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %ebx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %ebx<br>
@@ -4352,8 +4352,8 @@ define i64 @bextr64_c2_load(i64* %w, i64<br>
 ; X86-BMI1BMI2-NEXT:    movl %edi, %esi<br>
 ; X86-BMI1BMI2-NEXT:    xorl %edi, %edi<br>
 ; X86-BMI1BMI2-NEXT:  .LBB34_2:<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ebx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %ecx, %ebx, %ebp<br>
 ; X86-BMI1BMI2-NEXT:    shrdl %cl, %ebx, %ebx<br>
@@ -4388,7 +4388,7 @@ define i64 @bextr64_c2_load(i64* %w, i64<br>
 ; X64-NOBMI-NEXT:    movq (%rdi), %r14<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %r14<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movq $-1, %rbx<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rbx<br>
@@ -4410,7 +4410,7 @@ define i64 @bextr64_c2_load(i64* %w, i64<br>
 ; X64-BMI1NOTBM-NEXT:    movq (%rdi), %r14<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %r14<br>
-; X64-BMI1NOTBM-NEXT:    negl %edx<br>
+; X64-BMI1NOTBM-NEXT:    negb %dl<br>
 ; X64-BMI1NOTBM-NEXT:    movq $-1, %rbx<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edx, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %rbx<br>
@@ -4431,7 +4431,7 @@ define i64 @bextr64_c2_load(i64* %w, i64<br>
 ; X64-BMI1BMI2-NEXT:    movq %rdx, %rbx<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rsi, (%rdi), %r14<br>
 ; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movq $-1, %rcx<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rax, %rcx, %rdi<br>
 ; X64-BMI1BMI2-NEXT:    callq use64<br>
@@ -4685,8 +4685,8 @@ define i64 @bextr64_c4_commutative(i64 %<br>
 ; X86-NOBMI-NEXT:    movl %edi, %esi<br>
 ; X86-NOBMI-NEXT:    xorl %edi, %edi<br>
 ; X86-NOBMI-NEXT:  .LBB36_2:<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %ebp<br>
 ; X86-NOBMI-NEXT:    movl $-1, %ebx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %ebx<br>
@@ -4732,8 +4732,8 @@ define i64 @bextr64_c4_commutative(i64 %<br>
 ; X86-BMI1NOTBM-NEXT:    movl %edi, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %edi, %edi<br>
 ; X86-BMI1NOTBM-NEXT:  .LBB36_2:<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %ebp<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %ebx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %ebx<br>
@@ -4778,8 +4778,8 @@ define i64 @bextr64_c4_commutative(i64 %<br>
 ; X86-BMI1BMI2-NEXT:    movl %edi, %esi<br>
 ; X86-BMI1BMI2-NEXT:    xorl %edi, %edi<br>
 ; X86-BMI1BMI2-NEXT:  .LBB36_2:<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ebx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %ecx, %ebx, %ebp<br>
 ; X86-BMI1BMI2-NEXT:    shrdl %cl, %ebx, %ebx<br>
@@ -4814,7 +4814,7 @@ define i64 @bextr64_c4_commutative(i64 %<br>
 ; X64-NOBMI-NEXT:    movq %rdi, %r14<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %r14<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movq $-1, %rbx<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rbx<br>
@@ -4836,7 +4836,7 @@ define i64 @bextr64_c4_commutative(i64 %<br>
 ; X64-BMI1NOTBM-NEXT:    movq %rdi, %r14<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %r14<br>
-; X64-BMI1NOTBM-NEXT:    negl %edx<br>
+; X64-BMI1NOTBM-NEXT:    negb %dl<br>
 ; X64-BMI1NOTBM-NEXT:    movq $-1, %rbx<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edx, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %rbx<br>
@@ -4857,7 +4857,7 @@ define i64 @bextr64_c4_commutative(i64 %<br>
 ; X64-BMI1BMI2-NEXT:    movq %rdx, %rbx<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rsi, %rdi, %r14<br>
 ; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movq $-1, %rcx<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rax, %rcx, %rdi<br>
 ; X64-BMI1BMI2-NEXT:    callq use64<br>
@@ -4894,8 +4894,8 @@ define i64 @bextr64_c5_skipextrauses(i64<br>
 ; X86-NOBMI-NEXT:    movl %edi, %esi<br>
 ; X86-NOBMI-NEXT:    xorl %edi, %edi<br>
 ; X86-NOBMI-NEXT:  .LBB37_2:<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %ebx<br>
 ; X86-NOBMI-NEXT:    movl $-1, %ebp<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %ebp<br>
@@ -4946,8 +4946,8 @@ define i64 @bextr64_c5_skipextrauses(i64<br>
 ; X86-BMI1NOTBM-NEXT:    movl %edi, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %edi, %edi<br>
 ; X86-BMI1NOTBM-NEXT:  .LBB37_2:<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %ebx<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %ebp<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %ebp<br>
@@ -4997,8 +4997,8 @@ define i64 @bextr64_c5_skipextrauses(i64<br>
 ; X86-BMI1BMI2-NEXT:    movl %edi, %esi<br>
 ; X86-BMI1BMI2-NEXT:    xorl %edi, %edi<br>
 ; X86-BMI1BMI2-NEXT:  .LBB37_2:<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ebp<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %ecx, %ebp, %ebx<br>
 ; X86-BMI1BMI2-NEXT:    shrdl %cl, %ebp, %ebp<br>
@@ -5038,7 +5038,7 @@ define i64 @bextr64_c5_skipextrauses(i64<br>
 ; X64-NOBMI-NEXT:    movq %rdi, %r15<br>
 ; X64-NOBMI-NEXT:    movl %r14d, %ecx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %r15<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movq $-1, %rbx<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rbx<br>
@@ -5062,7 +5062,7 @@ define i64 @bextr64_c5_skipextrauses(i64<br>
 ; X64-BMI1NOTBM-NEXT:    movq %rdi, %r15<br>
 ; X64-BMI1NOTBM-NEXT:    movl %r14d, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %r15<br>
-; X64-BMI1NOTBM-NEXT:    negl %edx<br>
+; X64-BMI1NOTBM-NEXT:    negb %dl<br>
 ; X64-BMI1NOTBM-NEXT:    movq $-1, %rbx<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edx, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %rbx<br>
@@ -5086,7 +5086,7 @@ define i64 @bextr64_c5_skipextrauses(i64<br>
 ; X64-BMI1BMI2-NEXT:    movq %rsi, %r14<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rsi, %rdi, %r15<br>
 ; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movq $-1, %rcx<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rax, %rcx, %rdi<br>
 ; X64-BMI1BMI2-NEXT:    callq use64<br>
@@ -5118,7 +5118,7 @@ define i32 @bextr32_d0(i32 %val, i32 %nu<br>
 ; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %eax<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    shll %cl, %eax<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %eax<br>
@@ -5126,16 +5126,16 @@ define i32 @bextr32_d0(i32 %val, i32 %nu<br>
 ;<br>
 ; X86-BMI1NOTBM-LABEL: bextr32_d0:<br>
 ; X86-BMI1NOTBM:       # %bb.0:<br>
-; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI1NOTBM-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb {{[0-9]+}}(%esp), %al<br>
 ; X86-BMI1NOTBM-NEXT:    shll $8, %eax<br>
-; X86-BMI1NOTBM-NEXT:    orl %ecx, %eax<br>
-; X86-BMI1NOTBM-NEXT:    bextrl %eax, {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI1NOTBM-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    orl %eax, %ecx<br>
+; X86-BMI1NOTBM-NEXT:    bextrl %ecx, {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1NOTBM-NEXT:    retl<br>
 ;<br>
 ; X86-BMI1BMI2-LABEL: bextr32_d0:<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %al<br>
 ; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %ecx, {{[0-9]+}}(%esp), %ecx<br>
 ; X86-BMI1BMI2-NEXT:    bzhil %eax, %ecx, %eax<br>
@@ -5147,7 +5147,7 @@ define i32 @bextr32_d0(i32 %val, i32 %nu<br>
 ; X64-NOBMI-NEXT:    movl %edi, %eax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %eax<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shll %cl, %eax<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %eax<br>
@@ -5245,7 +5245,7 @@ define i32 @bextr32_d2_load(i32* %w, i32<br>
 ; X86-NOBMI-NEXT:    movl (%eax), %eax<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %eax<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    shll %cl, %eax<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %eax<br>
@@ -5254,16 +5254,16 @@ define i32 @bextr32_d2_load(i32* %w, i32<br>
 ; X86-BMI1NOTBM-LABEL: bextr32_d2_load:<br>
 ; X86-BMI1NOTBM:       # %bb.0:<br>
 ; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
-; X86-BMI1NOTBM-NEXT:    movzbl {{[0-9]+}}(%esp), %edx<br>
+; X86-BMI1NOTBM-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    shll $8, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    orl %edx, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    bextrl %ecx, (%eax), %eax<br>
+; X86-BMI1NOTBM-NEXT:    movzbl {{[0-9]+}}(%esp), %edx<br>
+; X86-BMI1NOTBM-NEXT:    orl %ecx, %edx<br>
+; X86-BMI1NOTBM-NEXT:    bextrl %edx, (%eax), %eax<br>
 ; X86-BMI1NOTBM-NEXT:    retl<br>
 ;<br>
 ; X86-BMI1BMI2-LABEL: bextr32_d2_load:<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %al<br>
 ; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
 ; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %dl<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %edx, (%ecx), %ecx<br>
@@ -5276,7 +5276,7 @@ define i32 @bextr32_d2_load(i32* %w, i32<br>
 ; X64-NOBMI-NEXT:    movl (%rdi), %eax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %eax<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shll %cl, %eax<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %eax<br>
@@ -5381,7 +5381,7 @@ define i32 @bextr32_d5_skipextrauses(i32<br>
 ; X86-NOBMI-NEXT:    movl %eax, %ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %esi<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    shll %cl, %esi<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %esi<br>
@@ -5396,7 +5396,7 @@ define i32 @bextr32_d5_skipextrauses(i32<br>
 ; X86-BMI1NOTBM:       # %bb.0:<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %esi<br>
 ; X86-BMI1NOTBM-NEXT:    subl $8, %esp<br>
-; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1NOTBM-NEXT:    shll $8, %ecx<br>
 ; X86-BMI1NOTBM-NEXT:    movzbl %al, %edx<br>
@@ -5413,7 +5413,7 @@ define i32 @bextr32_d5_skipextrauses(i32<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI1BMI2-NEXT:    subl $8, %esp<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %al<br>
 ; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %ecx, {{[0-9]+}}(%esp), %edx<br>
 ; X86-BMI1BMI2-NEXT:    bzhil %eax, %edx, %esi<br>
@@ -5430,7 +5430,7 @@ define i32 @bextr32_d5_skipextrauses(i32<br>
 ; X64-NOBMI-NEXT:    movl %edi, %ebx<br>
 ; X64-NOBMI-NEXT:    movl %esi, %ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebx<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shll %cl, %ebx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebx<br>
@@ -5492,8 +5492,8 @@ define i64 @bextr64_d0(i64 %val, i64 %nu<br>
 ; X86-NOBMI-NEXT:    movl %eax, %edi<br>
 ; X86-NOBMI-NEXT:    xorl %eax, %eax<br>
 ; X86-NOBMI-NEXT:  .LBB43_2:<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    shldl %cl, %edi, %eax<br>
 ; X86-NOBMI-NEXT:    shll %cl, %edi<br>
 ; X86-NOBMI-NEXT:    testb $32, %cl<br>
@@ -5540,8 +5540,8 @@ define i64 @bextr64_d0(i64 %val, i64 %nu<br>
 ; X86-BMI1NOTBM-NEXT:    movl %eax, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %eax, %eax<br>
 ; X86-BMI1NOTBM-NEXT:  .LBB43_2:<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    shldl %cl, %edi, %eax<br>
 ; X86-BMI1NOTBM-NEXT:    shll %cl, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    testb $32, %cl<br>
@@ -5586,8 +5586,8 @@ define i64 @bextr64_d0(i64 %val, i64 %nu<br>
 ; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
 ; X86-BMI1BMI2-NEXT:    xorl %esi, %esi<br>
 ; X86-BMI1BMI2-NEXT:  .LBB43_2:<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    shldl %cl, %eax, %esi<br>
 ; X86-BMI1BMI2-NEXT:    shlxl %ecx, %eax, %edi<br>
 ; X86-BMI1BMI2-NEXT:    testb $32, %cl<br>
@@ -5617,7 +5617,7 @@ define i64 @bextr64_d0(i64 %val, i64 %nu<br>
 ; X64-NOBMI-NEXT:    movq %rdi, %rax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rax<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shlq %cl, %rax<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rax<br>
@@ -5838,8 +5838,8 @@ define i64 @bextr64_d2_load(i64* %w, i64<br>
 ; X86-NOBMI-NEXT:    movl %eax, %edi<br>
 ; X86-NOBMI-NEXT:    xorl %eax, %eax<br>
 ; X86-NOBMI-NEXT:  .LBB45_2:<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    shldl %cl, %edi, %eax<br>
 ; X86-NOBMI-NEXT:    shll %cl, %edi<br>
 ; X86-NOBMI-NEXT:    testb $32, %cl<br>
@@ -5887,8 +5887,8 @@ define i64 @bextr64_d2_load(i64* %w, i64<br>
 ; X86-BMI1NOTBM-NEXT:    movl %eax, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %eax, %eax<br>
 ; X86-BMI1NOTBM-NEXT:  .LBB45_2:<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    shldl %cl, %edi, %eax<br>
 ; X86-BMI1NOTBM-NEXT:    shll %cl, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    testb $32, %cl<br>
@@ -5934,8 +5934,8 @@ define i64 @bextr64_d2_load(i64* %w, i64<br>
 ; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
 ; X86-BMI1BMI2-NEXT:    xorl %esi, %esi<br>
 ; X86-BMI1BMI2-NEXT:  .LBB45_2:<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    shldl %cl, %eax, %esi<br>
 ; X86-BMI1BMI2-NEXT:    shlxl %ecx, %eax, %edi<br>
 ; X86-BMI1BMI2-NEXT:    testb $32, %cl<br>
@@ -5965,7 +5965,7 @@ define i64 @bextr64_d2_load(i64* %w, i64<br>
 ; X64-NOBMI-NEXT:    movq (%rdi), %rax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rax<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shlq %cl, %rax<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rax<br>
@@ -6193,8 +6193,8 @@ define i64 @bextr64_d5_skipextrauses(i64<br>
 ; X86-NOBMI-NEXT:    movl %esi, %ebx<br>
 ; X86-NOBMI-NEXT:    xorl %esi, %esi<br>
 ; X86-NOBMI-NEXT:  .LBB47_2:<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    shldl %cl, %ebx, %esi<br>
 ; X86-NOBMI-NEXT:    shll %cl, %ebx<br>
 ; X86-NOBMI-NEXT:    testb $32, %cl<br>
@@ -6254,8 +6254,8 @@ define i64 @bextr64_d5_skipextrauses(i64<br>
 ; X86-BMI1NOTBM-NEXT:    movl %esi, %ebx<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %esi, %esi<br>
 ; X86-BMI1NOTBM-NEXT:  .LBB47_2:<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    shldl %cl, %ebx, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    shll %cl, %ebx<br>
 ; X86-BMI1NOTBM-NEXT:    testb $32, %cl<br>
@@ -6312,8 +6312,8 @@ define i64 @bextr64_d5_skipextrauses(i64<br>
 ; X86-BMI1BMI2-NEXT:    movl %edx, %edi<br>
 ; X86-BMI1BMI2-NEXT:    xorl %edx, %edx<br>
 ; X86-BMI1BMI2-NEXT:  .LBB47_2:<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    shldl %cl, %edi, %edx<br>
 ; X86-BMI1BMI2-NEXT:    shlxl %ecx, %edi, %ebx<br>
 ; X86-BMI1BMI2-NEXT:    testb $32, %cl<br>
@@ -6352,7 +6352,7 @@ define i64 @bextr64_d5_skipextrauses(i64<br>
 ; X64-NOBMI-NEXT:    movq %rdi, %rbx<br>
 ; X64-NOBMI-NEXT:    movl %esi, %ecx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rbx<br>
-; X64-NOBMI-NEXT:    negl %edx<br>
+; X64-NOBMI-NEXT:    negb %dl<br>
 ; X64-NOBMI-NEXT:    movl %edx, %ecx<br>
 ; X64-NOBMI-NEXT:    shlq %cl, %rbx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rbx<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/extract-lowbits.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/extract-lowbits.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/extract-lowbits.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/extract-lowbits.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/extract-lowbits.ll Thu Nov 29 12:58:26 2018<br>
@@ -1436,7 +1436,7 @@ define i32 @bzhi32_c0(i32 %val, i32 %num<br>
 ; X86-NOBMI-NEXT:    pushl %esi<br>
 ; X86-NOBMI-NEXT:    subl $8, %esp<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %esi<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %esi<br>
@@ -1453,7 +1453,7 @@ define i32 @bzhi32_c0(i32 %val, i32 %num<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %esi<br>
 ; X86-BMI1NOTBM-NEXT:    subl $8, %esp<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %ecx, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %esi<br>
@@ -1467,18 +1467,18 @@ define i32 @bzhi32_c0(i32 %val, i32 %num<br>
 ;<br>
 ; X86-BMI1BMI2-LABEL: bzhi32_c0:<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
-; X86-BMI1BMI2-NEXT:    pushl %esi<br>
+; X86-BMI1BMI2-NEXT:    pushl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    subl $8, %esp<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
-; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
-; X86-BMI1BMI2-NEXT:    negl %eax<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %bl<br>
+; X86-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X86-BMI1BMI2-NEXT:    negb %al<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %eax<br>
 ; X86-BMI1BMI2-NEXT:    movl %eax, (%esp)<br>
 ; X86-BMI1BMI2-NEXT:    calll use32<br>
-; X86-BMI1BMI2-NEXT:    bzhil %esi, {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI1BMI2-NEXT:    bzhil %ebx, {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1BMI2-NEXT:    addl $8, %esp<br>
-; X86-BMI1BMI2-NEXT:    popl %esi<br>
+; X86-BMI1BMI2-NEXT:    popl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    retl<br>
 ;<br>
 ; X64-NOBMI-LABEL: bzhi32_c0:<br>
@@ -1488,7 +1488,7 @@ define i32 @bzhi32_c0(i32 %val, i32 %num<br>
 ; X64-NOBMI-NEXT:    pushq %rax<br>
 ; X64-NOBMI-NEXT:    movl %esi, %ecx<br>
 ; X64-NOBMI-NEXT:    movl %edi, %ebx<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    movl $-1, %ebp<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebp<br>
@@ -1508,7 +1508,7 @@ define i32 @bzhi32_c0(i32 %val, i32 %num<br>
 ; X64-BMI1NOTBM-NEXT:    pushq %rax<br>
 ; X64-BMI1NOTBM-NEXT:    movl %esi, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edi, %ebx<br>
-; X64-BMI1NOTBM-NEXT:    negl %ecx<br>
+; X64-BMI1NOTBM-NEXT:    negb %cl<br>
 ; X64-BMI1NOTBM-NEXT:    movl $-1, %ebp<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebp<br>
@@ -1528,8 +1528,8 @@ define i32 @bzhi32_c0(i32 %val, i32 %num<br>
 ; X64-BMI1BMI2-NEXT:    pushq %rax<br>
 ; X64-BMI1BMI2-NEXT:    movl %esi, %ebx<br>
 ; X64-BMI1BMI2-NEXT:    movl %edi, %ebp<br>
-; X64-BMI1BMI2-NEXT:    movl %esi, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %edi<br>
 ; X64-BMI1BMI2-NEXT:    callq use32<br>
@@ -1668,7 +1668,7 @@ define i32 @bzhi32_c2_load(i32* %w, i32<br>
 ; X86-NOBMI-NEXT:    subl $8, %esp<br>
 ; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %edx<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %edx<br>
@@ -1687,7 +1687,7 @@ define i32 @bzhi32_c2_load(i32* %w, i32<br>
 ; X86-BMI1NOTBM-NEXT:    subl $8, %esp<br>
 ; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %ecx, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %edx<br>
 ; X86-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %edx<br>
@@ -1705,9 +1705,10 @@ define i32 @bzhi32_c2_load(i32* %w, i32<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI1BMI2-NEXT:    subl $8, %esp<br>
 ; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    bzhil %ecx, (%eax), %esi<br>
-; X86-BMI1BMI2-NEXT:    negl %ecx<br>
+; X86-BMI1BMI2-NEXT:    # kill: def $cl killed $cl killed $ecx def $ecx<br>
+; X86-BMI1BMI2-NEXT:    negb %cl<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %eax<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %ecx, %eax, %eax<br>
 ; X86-BMI1BMI2-NEXT:    movl %eax, (%esp)<br>
@@ -1721,7 +1722,7 @@ define i32 @bzhi32_c2_load(i32* %w, i32<br>
 ; X64-NOBMI:       # %bb.0:<br>
 ; X64-NOBMI-NEXT:    pushq %rbx<br>
 ; X64-NOBMI-NEXT:    movl %esi, %ecx<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    movl $-1, %eax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %eax<br>
@@ -1737,7 +1738,7 @@ define i32 @bzhi32_c2_load(i32* %w, i32<br>
 ; X64-BMI1NOTBM:       # %bb.0:<br>
 ; X64-BMI1NOTBM-NEXT:    pushq %rbx<br>
 ; X64-BMI1NOTBM-NEXT:    movl %esi, %ecx<br>
-; X64-BMI1NOTBM-NEXT:    negl %ecx<br>
+; X64-BMI1NOTBM-NEXT:    negb %cl<br>
 ; X64-BMI1NOTBM-NEXT:    movl $-1, %eax<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %eax<br>
@@ -1753,7 +1754,8 @@ define i32 @bzhi32_c2_load(i32* %w, i32<br>
 ; X64-BMI1BMI2:       # %bb.0:<br>
 ; X64-BMI1BMI2-NEXT:    pushq %rbx<br>
 ; X64-BMI1BMI2-NEXT:    bzhil %esi, (%rdi), %ebx<br>
-; X64-BMI1BMI2-NEXT:    negl %esi<br>
+; X64-BMI1BMI2-NEXT:    # kill: def $sil killed $sil killed $esi def $esi<br>
+; X64-BMI1BMI2-NEXT:    negb %sil<br>
 ; X64-BMI1BMI2-NEXT:    movl $-1, %eax<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %esi, %eax, %edi<br>
 ; X64-BMI1BMI2-NEXT:    callq use32<br>
@@ -1884,7 +1886,7 @@ define i32 @bzhi32_c4_commutative(i32 %v<br>
 ; X86-NOBMI-NEXT:    pushl %esi<br>
 ; X86-NOBMI-NEXT:    subl $8, %esp<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %esi<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %esi<br>
@@ -1901,7 +1903,7 @@ define i32 @bzhi32_c4_commutative(i32 %v<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %esi<br>
 ; X86-BMI1NOTBM-NEXT:    subl $8, %esp<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %ecx, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %esi<br>
@@ -1915,18 +1917,18 @@ define i32 @bzhi32_c4_commutative(i32 %v<br>
 ;<br>
 ; X86-BMI1BMI2-LABEL: bzhi32_c4_commutative:<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
-; X86-BMI1BMI2-NEXT:    pushl %esi<br>
+; X86-BMI1BMI2-NEXT:    pushl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    subl $8, %esp<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
-; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
-; X86-BMI1BMI2-NEXT:    negl %eax<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %bl<br>
+; X86-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X86-BMI1BMI2-NEXT:    negb %al<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %eax<br>
 ; X86-BMI1BMI2-NEXT:    movl %eax, (%esp)<br>
 ; X86-BMI1BMI2-NEXT:    calll use32<br>
-; X86-BMI1BMI2-NEXT:    bzhil %esi, {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI1BMI2-NEXT:    bzhil %ebx, {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1BMI2-NEXT:    addl $8, %esp<br>
-; X86-BMI1BMI2-NEXT:    popl %esi<br>
+; X86-BMI1BMI2-NEXT:    popl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    retl<br>
 ;<br>
 ; X64-NOBMI-LABEL: bzhi32_c4_commutative:<br>
@@ -1936,7 +1938,7 @@ define i32 @bzhi32_c4_commutative(i32 %v<br>
 ; X64-NOBMI-NEXT:    pushq %rax<br>
 ; X64-NOBMI-NEXT:    movl %esi, %ecx<br>
 ; X64-NOBMI-NEXT:    movl %edi, %ebx<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    movl $-1, %ebp<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %ebp<br>
@@ -1956,7 +1958,7 @@ define i32 @bzhi32_c4_commutative(i32 %v<br>
 ; X64-BMI1NOTBM-NEXT:    pushq %rax<br>
 ; X64-BMI1NOTBM-NEXT:    movl %esi, %ecx<br>
 ; X64-BMI1NOTBM-NEXT:    movl %edi, %ebx<br>
-; X64-BMI1NOTBM-NEXT:    negl %ecx<br>
+; X64-BMI1NOTBM-NEXT:    negb %cl<br>
 ; X64-BMI1NOTBM-NEXT:    movl $-1, %ebp<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-BMI1NOTBM-NEXT:    shrl %cl, %ebp<br>
@@ -1976,8 +1978,8 @@ define i32 @bzhi32_c4_commutative(i32 %v<br>
 ; X64-BMI1BMI2-NEXT:    pushq %rax<br>
 ; X64-BMI1BMI2-NEXT:    movl %esi, %ebx<br>
 ; X64-BMI1BMI2-NEXT:    movl %edi, %ebp<br>
-; X64-BMI1BMI2-NEXT:    movl %esi, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movl $-1, %ecx<br>
 ; X64-BMI1BMI2-NEXT:    shrxl %eax, %ecx, %edi<br>
 ; X64-BMI1BMI2-NEXT:    callq use32<br>
@@ -2003,8 +2005,8 @@ define i64 @bzhi64_c0(i64 %val, i64 %num<br>
 ; X86-NOBMI-NEXT:    pushl %edi<br>
 ; X86-NOBMI-NEXT:    pushl %esi<br>
 ; X86-NOBMI-NEXT:    pushl %eax<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %esi<br>
 ; X86-NOBMI-NEXT:    movl $-1, %edi<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %edi<br>
@@ -2034,8 +2036,8 @@ define i64 @bzhi64_c0(i64 %val, i64 %num<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %edi<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %esi<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %eax<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %edi<br>
@@ -2065,8 +2067,8 @@ define i64 @bzhi64_c0(i64 %val, i64 %num<br>
 ; X86-BMI1BMI2-NEXT:    pushl %edi<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI1BMI2-NEXT:    pushl %eax<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %ecx, %esi, %edi<br>
 ; X86-BMI1BMI2-NEXT:    shrdl %cl, %esi, %esi<br>
@@ -2097,7 +2099,7 @@ define i64 @bzhi64_c0(i64 %val, i64 %num<br>
 ; X64-NOBMI-NEXT:    pushq %rax<br>
 ; X64-NOBMI-NEXT:    movq %rsi, %rcx<br>
 ; X64-NOBMI-NEXT:    movq %rdi, %r14<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    movq $-1, %rbx<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rbx<br>
@@ -2117,7 +2119,7 @@ define i64 @bzhi64_c0(i64 %val, i64 %num<br>
 ; X64-BMI1NOTBM-NEXT:    pushq %rax<br>
 ; X64-BMI1NOTBM-NEXT:    movq %rsi, %rcx<br>
 ; X64-BMI1NOTBM-NEXT:    movq %rdi, %r14<br>
-; X64-BMI1NOTBM-NEXT:    negl %ecx<br>
+; X64-BMI1NOTBM-NEXT:    negb %cl<br>
 ; X64-BMI1NOTBM-NEXT:    movq $-1, %rbx<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %rbx<br>
@@ -2138,7 +2140,7 @@ define i64 @bzhi64_c0(i64 %val, i64 %num<br>
 ; X64-BMI1BMI2-NEXT:    movq %rsi, %rbx<br>
 ; X64-BMI1BMI2-NEXT:    movq %rdi, %r14<br>
 ; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movq $-1, %rcx<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rax, %rcx, %rdi<br>
 ; X64-BMI1BMI2-NEXT:    callq use64<br>
@@ -2318,26 +2320,26 @@ define i64 @bzhi64_c2_load(i64* %w, i64<br>
 ; X86-NOBMI-NEXT:    pushl %ebx<br>
 ; X86-NOBMI-NEXT:    pushl %edi<br>
 ; X86-NOBMI-NEXT:    pushl %esi<br>
-; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
-; X86-NOBMI-NEXT:    movl $-1, %edx<br>
+; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %edx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
+; X86-NOBMI-NEXT:    movl $-1, %eax<br>
 ; X86-NOBMI-NEXT:    movl $-1, %ebx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %ebx<br>
-; X86-NOBMI-NEXT:    shrdl %cl, %edx, %edx<br>
+; X86-NOBMI-NEXT:    shrdl %cl, %eax, %eax<br>
 ; X86-NOBMI-NEXT:    testb $32, %cl<br>
 ; X86-NOBMI-NEXT:    je .LBB27_2<br>
 ; X86-NOBMI-NEXT:  # %bb.1:<br>
-; X86-NOBMI-NEXT:    movl %ebx, %edx<br>
+; X86-NOBMI-NEXT:    movl %ebx, %eax<br>
 ; X86-NOBMI-NEXT:    xorl %ebx, %ebx<br>
 ; X86-NOBMI-NEXT:  .LBB27_2:<br>
-; X86-NOBMI-NEXT:    movl (%eax), %esi<br>
-; X86-NOBMI-NEXT:    andl %edx, %esi<br>
-; X86-NOBMI-NEXT:    movl 4(%eax), %edi<br>
+; X86-NOBMI-NEXT:    movl (%edx), %esi<br>
+; X86-NOBMI-NEXT:    andl %eax, %esi<br>
+; X86-NOBMI-NEXT:    movl 4(%edx), %edi<br>
 ; X86-NOBMI-NEXT:    andl %ebx, %edi<br>
 ; X86-NOBMI-NEXT:    subl $8, %esp<br>
 ; X86-NOBMI-NEXT:    pushl %ebx<br>
-; X86-NOBMI-NEXT:    pushl %edx<br>
+; X86-NOBMI-NEXT:    pushl %eax<br>
 ; X86-NOBMI-NEXT:    calll use64<br>
 ; X86-NOBMI-NEXT:    addl $16, %esp<br>
 ; X86-NOBMI-NEXT:    movl %esi, %eax<br>
@@ -2352,26 +2354,26 @@ define i64 @bzhi64_c2_load(i64* %w, i64<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %ebx<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %edi<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %esi<br>
-; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
-; X86-BMI1NOTBM-NEXT:    movl $-1, %edx<br>
+; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %edx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
+; X86-BMI1NOTBM-NEXT:    movl $-1, %eax<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %ebx<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %ebx<br>
-; X86-BMI1NOTBM-NEXT:    shrdl %cl, %edx, %edx<br>
+; X86-BMI1NOTBM-NEXT:    shrdl %cl, %eax, %eax<br>
 ; X86-BMI1NOTBM-NEXT:    testb $32, %cl<br>
 ; X86-BMI1NOTBM-NEXT:    je .LBB27_2<br>
 ; X86-BMI1NOTBM-NEXT:  # %bb.1:<br>
-; X86-BMI1NOTBM-NEXT:    movl %ebx, %edx<br>
+; X86-BMI1NOTBM-NEXT:    movl %ebx, %eax<br>
 ; X86-BMI1NOTBM-NEXT:    xorl %ebx, %ebx<br>
 ; X86-BMI1NOTBM-NEXT:  .LBB27_2:<br>
-; X86-BMI1NOTBM-NEXT:    movl (%eax), %esi<br>
-; X86-BMI1NOTBM-NEXT:    andl %edx, %esi<br>
-; X86-BMI1NOTBM-NEXT:    movl 4(%eax), %edi<br>
+; X86-BMI1NOTBM-NEXT:    movl (%edx), %esi<br>
+; X86-BMI1NOTBM-NEXT:    andl %eax, %esi<br>
+; X86-BMI1NOTBM-NEXT:    movl 4(%edx), %edi<br>
 ; X86-BMI1NOTBM-NEXT:    andl %ebx, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    subl $8, %esp<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %ebx<br>
-; X86-BMI1NOTBM-NEXT:    pushl %edx<br>
+; X86-BMI1NOTBM-NEXT:    pushl %eax<br>
 ; X86-BMI1NOTBM-NEXT:    calll use64<br>
 ; X86-BMI1NOTBM-NEXT:    addl $16, %esp<br>
 ; X86-BMI1NOTBM-NEXT:    movl %esi, %eax<br>
@@ -2386,25 +2388,25 @@ define i64 @bzhi64_c2_load(i64* %w, i64<br>
 ; X86-BMI1BMI2-NEXT:    pushl %ebx<br>
 ; X86-BMI1BMI2-NEXT:    pushl %edi<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
-; X86-BMI1BMI2-NEXT:    movl $-1, %edx<br>
-; X86-BMI1BMI2-NEXT:    shrxl %ecx, %edx, %ebx<br>
-; X86-BMI1BMI2-NEXT:    shrdl %cl, %edx, %edx<br>
+; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
+; X86-BMI1BMI2-NEXT:    movl $-1, %eax<br>
+; X86-BMI1BMI2-NEXT:    shrxl %ecx, %eax, %ebx<br>
+; X86-BMI1BMI2-NEXT:    shrdl %cl, %eax, %eax<br>
 ; X86-BMI1BMI2-NEXT:    testb $32, %cl<br>
 ; X86-BMI1BMI2-NEXT:    je .LBB27_2<br>
 ; X86-BMI1BMI2-NEXT:  # %bb.1:<br>
-; X86-BMI1BMI2-NEXT:    movl %ebx, %edx<br>
+; X86-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
 ; X86-BMI1BMI2-NEXT:    xorl %ebx, %ebx<br>
 ; X86-BMI1BMI2-NEXT:  .LBB27_2:<br>
-; X86-BMI1BMI2-NEXT:    movl (%eax), %esi<br>
-; X86-BMI1BMI2-NEXT:    andl %edx, %esi<br>
-; X86-BMI1BMI2-NEXT:    movl 4(%eax), %edi<br>
+; X86-BMI1BMI2-NEXT:    movl (%edx), %esi<br>
+; X86-BMI1BMI2-NEXT:    andl %eax, %esi<br>
+; X86-BMI1BMI2-NEXT:    movl 4(%edx), %edi<br>
 ; X86-BMI1BMI2-NEXT:    andl %ebx, %edi<br>
 ; X86-BMI1BMI2-NEXT:    subl $8, %esp<br>
 ; X86-BMI1BMI2-NEXT:    pushl %ebx<br>
-; X86-BMI1BMI2-NEXT:    pushl %edx<br>
+; X86-BMI1BMI2-NEXT:    pushl %eax<br>
 ; X86-BMI1BMI2-NEXT:    calll use64<br>
 ; X86-BMI1BMI2-NEXT:    addl $16, %esp<br>
 ; X86-BMI1BMI2-NEXT:    movl %esi, %eax<br>
@@ -2418,7 +2420,7 @@ define i64 @bzhi64_c2_load(i64* %w, i64<br>
 ; X64-NOBMI:       # %bb.0:<br>
 ; X64-NOBMI-NEXT:    pushq %rbx<br>
 ; X64-NOBMI-NEXT:    movq %rsi, %rcx<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    movq $-1, %rax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rax<br>
@@ -2434,7 +2436,7 @@ define i64 @bzhi64_c2_load(i64* %w, i64<br>
 ; X64-BMI1NOTBM:       # %bb.0:<br>
 ; X64-BMI1NOTBM-NEXT:    pushq %rbx<br>
 ; X64-BMI1NOTBM-NEXT:    movq %rsi, %rcx<br>
-; X64-BMI1NOTBM-NEXT:    negl %ecx<br>
+; X64-BMI1NOTBM-NEXT:    negb %cl<br>
 ; X64-BMI1NOTBM-NEXT:    movq $-1, %rax<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %rax<br>
@@ -2450,8 +2452,8 @@ define i64 @bzhi64_c2_load(i64* %w, i64<br>
 ; X64-BMI1BMI2:       # %bb.0:<br>
 ; X64-BMI1BMI2-NEXT:    pushq %rbx<br>
 ; X64-BMI1BMI2-NEXT:    bzhiq %rsi, (%rdi), %rbx<br>
-; X64-BMI1BMI2-NEXT:    # kill: def $esi killed $esi killed $rsi def $rsi<br>
-; X64-BMI1BMI2-NEXT:    negl %esi<br>
+; X64-BMI1BMI2-NEXT:    # kill: def $sil killed $sil killed $rsi def $rsi<br>
+; X64-BMI1BMI2-NEXT:    negb %sil<br>
 ; X64-BMI1BMI2-NEXT:    movq $-1, %rax<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rsi, %rax, %rdi<br>
 ; X64-BMI1BMI2-NEXT:    callq use64<br>
@@ -2628,8 +2630,8 @@ define i64 @bzhi64_c4_commutative(i64 %v<br>
 ; X86-NOBMI-NEXT:    pushl %edi<br>
 ; X86-NOBMI-NEXT:    pushl %esi<br>
 ; X86-NOBMI-NEXT:    pushl %eax<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl $-1, %esi<br>
 ; X86-NOBMI-NEXT:    movl $-1, %edi<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %edi<br>
@@ -2659,8 +2661,8 @@ define i64 @bzhi64_c4_commutative(i64 %v<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %edi<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %esi<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %eax<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    movl $-1, %edi<br>
 ; X86-BMI1NOTBM-NEXT:    shrl %cl, %edi<br>
@@ -2690,8 +2692,8 @@ define i64 @bzhi64_c4_commutative(i64 %v<br>
 ; X86-BMI1BMI2-NEXT:    pushl %edi<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI1BMI2-NEXT:    pushl %eax<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    movl $-1, %esi<br>
 ; X86-BMI1BMI2-NEXT:    shrxl %ecx, %esi, %edi<br>
 ; X86-BMI1BMI2-NEXT:    shrdl %cl, %esi, %esi<br>
@@ -2722,7 +2724,7 @@ define i64 @bzhi64_c4_commutative(i64 %v<br>
 ; X64-NOBMI-NEXT:    pushq %rax<br>
 ; X64-NOBMI-NEXT:    movq %rsi, %rcx<br>
 ; X64-NOBMI-NEXT:    movq %rdi, %r14<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    movq $-1, %rbx<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rbx<br>
@@ -2742,7 +2744,7 @@ define i64 @bzhi64_c4_commutative(i64 %v<br>
 ; X64-BMI1NOTBM-NEXT:    pushq %rax<br>
 ; X64-BMI1NOTBM-NEXT:    movq %rsi, %rcx<br>
 ; X64-BMI1NOTBM-NEXT:    movq %rdi, %r14<br>
-; X64-BMI1NOTBM-NEXT:    negl %ecx<br>
+; X64-BMI1NOTBM-NEXT:    negb %cl<br>
 ; X64-BMI1NOTBM-NEXT:    movq $-1, %rbx<br>
 ; X64-BMI1NOTBM-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-BMI1NOTBM-NEXT:    shrq %cl, %rbx<br>
@@ -2763,7 +2765,7 @@ define i64 @bzhi64_c4_commutative(i64 %v<br>
 ; X64-BMI1BMI2-NEXT:    movq %rsi, %rbx<br>
 ; X64-BMI1BMI2-NEXT:    movq %rdi, %r14<br>
 ; X64-BMI1BMI2-NEXT:    movl %ebx, %eax<br>
-; X64-BMI1BMI2-NEXT:    negl %eax<br>
+; X64-BMI1BMI2-NEXT:    negb %al<br>
 ; X64-BMI1BMI2-NEXT:    movq $-1, %rcx<br>
 ; X64-BMI1BMI2-NEXT:    shrxq %rax, %rcx, %rdi<br>
 ; X64-BMI1BMI2-NEXT:    callq use64<br>
@@ -2788,7 +2790,7 @@ define i32 @bzhi32_d0(i32 %val, i32 %num<br>
 ; X86-NOBMI:       # %bb.0:<br>
 ; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    shll %cl, %eax<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %eax<br>
@@ -2796,14 +2798,14 @@ define i32 @bzhi32_d0(i32 %val, i32 %num<br>
 ;<br>
 ; X86-BMI1NOTBM-LABEL: bzhi32_d0:<br>
 ; X86-BMI1NOTBM:       # %bb.0:<br>
-; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI1NOTBM-NEXT:    movb {{[0-9]+}}(%esp), %al<br>
 ; X86-BMI1NOTBM-NEXT:    shll $8, %eax<br>
 ; X86-BMI1NOTBM-NEXT:    bextrl %eax, {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1NOTBM-NEXT:    retl<br>
 ;<br>
 ; X86-BMI1BMI2-LABEL: bzhi32_d0:<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %al<br>
 ; X86-BMI1BMI2-NEXT:    bzhil %eax, {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1BMI2-NEXT:    retl<br>
 ;<br>
@@ -2811,7 +2813,7 @@ define i32 @bzhi32_d0(i32 %val, i32 %num<br>
 ; X64-NOBMI:       # %bb.0:<br>
 ; X64-NOBMI-NEXT:    movl %esi, %ecx<br>
 ; X64-NOBMI-NEXT:    movl %edi, %eax<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    shll %cl, %eax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %eax<br>
@@ -2890,7 +2892,7 @@ define i32 @bzhi32_d2_load(i32* %w, i32<br>
 ; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NOBMI-NEXT:    movl (%eax), %eax<br>
 ; X86-NOBMI-NEXT:    xorl %ecx, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    shll %cl, %eax<br>
 ; X86-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X86-NOBMI-NEXT:    shrl %cl, %eax<br>
@@ -2899,7 +2901,7 @@ define i32 @bzhi32_d2_load(i32* %w, i32<br>
 ; X86-BMI1NOTBM-LABEL: bzhi32_d2_load:<br>
 ; X86-BMI1NOTBM:       # %bb.0:<br>
 ; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    shll $8, %ecx<br>
 ; X86-BMI1NOTBM-NEXT:    bextrl %ecx, (%eax), %eax<br>
 ; X86-BMI1NOTBM-NEXT:    retl<br>
@@ -2907,15 +2909,15 @@ define i32 @bzhi32_d2_load(i32* %w, i32<br>
 ; X86-BMI1BMI2-LABEL: bzhi32_d2_load:<br>
 ; X86-BMI1BMI2:       # %bb.0:<br>
 ; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
-; X86-BMI1BMI2-NEXT:    bzhil %eax, (%ecx), %eax<br>
+; X86-BMI1BMI2-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
+; X86-BMI1BMI2-NEXT:    bzhil %ecx, (%eax), %eax<br>
 ; X86-BMI1BMI2-NEXT:    retl<br>
 ;<br>
 ; X64-NOBMI-LABEL: bzhi32_d2_load:<br>
 ; X64-NOBMI:       # %bb.0:<br>
 ; X64-NOBMI-NEXT:    movl %esi, %ecx<br>
 ; X64-NOBMI-NEXT:    movl (%rdi), %eax<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    shll %cl, %eax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
 ; X64-NOBMI-NEXT:    shrl %cl, %eax<br>
@@ -3003,8 +3005,8 @@ define i64 @bzhi64_d0(i64 %val, i64 %num<br>
 ; X86-NOBMI-NEXT:    pushl %esi<br>
 ; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %edx<br>
 ; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl %edx, %esi<br>
 ; X86-NOBMI-NEXT:    shll %cl, %esi<br>
 ; X86-NOBMI-NEXT:    shldl %cl, %edx, %eax<br>
@@ -3042,8 +3044,8 @@ define i64 @bzhi64_d0(i64 %val, i64 %num<br>
 ; X86-BMI1NOTBM-NEXT:    pushl %esi<br>
 ; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %edx<br>
 ; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl %edx, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    shll %cl, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    shldl %cl, %edx, %eax<br>
@@ -3080,8 +3082,8 @@ define i64 @bzhi64_d0(i64 %val, i64 %num<br>
 ; X86-BMI1BMI2-NEXT:    pushl %esi<br>
 ; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    shldl %cl, %eax, %esi<br>
 ; X86-BMI1BMI2-NEXT:    shlxl %ecx, %eax, %edi<br>
 ; X86-BMI1BMI2-NEXT:    xorl %edx, %edx<br>
@@ -3110,7 +3112,7 @@ define i64 @bzhi64_d0(i64 %val, i64 %num<br>
 ; X64-NOBMI:       # %bb.0:<br>
 ; X64-NOBMI-NEXT:    movq %rsi, %rcx<br>
 ; X64-NOBMI-NEXT:    movq %rdi, %rax<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    shlq %cl, %rax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rax<br>
@@ -3281,8 +3283,8 @@ define i64 @bzhi64_d2_load(i64* %w, i64<br>
 ; X86-NOBMI-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NOBMI-NEXT:    movl (%eax), %edx<br>
 ; X86-NOBMI-NEXT:    movl 4(%eax), %eax<br>
-; X86-NOBMI-NEXT:    movl $64, %ecx<br>
-; X86-NOBMI-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NOBMI-NEXT:    movb $64, %cl<br>
+; X86-NOBMI-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NOBMI-NEXT:    movl %edx, %esi<br>
 ; X86-NOBMI-NEXT:    shll %cl, %esi<br>
 ; X86-NOBMI-NEXT:    shldl %cl, %edx, %eax<br>
@@ -3321,8 +3323,8 @@ define i64 @bzhi64_d2_load(i64* %w, i64<br>
 ; X86-BMI1NOTBM-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1NOTBM-NEXT:    movl (%eax), %edx<br>
 ; X86-BMI1NOTBM-NEXT:    movl 4(%eax), %eax<br>
-; X86-BMI1NOTBM-NEXT:    movl $64, %ecx<br>
-; X86-BMI1NOTBM-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1NOTBM-NEXT:    movb $64, %cl<br>
+; X86-BMI1NOTBM-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1NOTBM-NEXT:    movl %edx, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    shll %cl, %esi<br>
 ; X86-BMI1NOTBM-NEXT:    shldl %cl, %edx, %eax<br>
@@ -3360,8 +3362,8 @@ define i64 @bzhi64_d2_load(i64* %w, i64<br>
 ; X86-BMI1BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-BMI1BMI2-NEXT:    movl (%eax), %edx<br>
 ; X86-BMI1BMI2-NEXT:    movl 4(%eax), %esi<br>
-; X86-BMI1BMI2-NEXT:    movl $64, %ecx<br>
-; X86-BMI1BMI2-NEXT:    subl {{[0-9]+}}(%esp), %ecx<br>
+; X86-BMI1BMI2-NEXT:    movb $64, %cl<br>
+; X86-BMI1BMI2-NEXT:    subb {{[0-9]+}}(%esp), %cl<br>
 ; X86-BMI1BMI2-NEXT:    shldl %cl, %edx, %esi<br>
 ; X86-BMI1BMI2-NEXT:    shlxl %ecx, %edx, %edi<br>
 ; X86-BMI1BMI2-NEXT:    xorl %edx, %edx<br>
@@ -3390,7 +3392,7 @@ define i64 @bzhi64_d2_load(i64* %w, i64<br>
 ; X64-NOBMI:       # %bb.0:<br>
 ; X64-NOBMI-NEXT:    movq %rsi, %rcx<br>
 ; X64-NOBMI-NEXT:    movq (%rdi), %rax<br>
-; X64-NOBMI-NEXT:    negl %ecx<br>
+; X64-NOBMI-NEXT:    negb %cl<br>
 ; X64-NOBMI-NEXT:    shlq %cl, %rax<br>
 ; X64-NOBMI-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; X64-NOBMI-NEXT:    shrq %cl, %rax<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/fshl.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fshl.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fshl.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/fshl.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/fshl.ll Thu Nov 29 12:58:26 2018<br>
@@ -228,8 +228,8 @@ define i64 @var_shift_i64(i64 %x, i64 %y<br>
 ; X86-NEXT:    movl %edi, %ebp<br>
 ; X86-NEXT:    xorl %edi, %edi<br>
 ; X86-NEXT:  .LBB3_2:<br>
-; X86-NEXT:    movl $64, %ecx<br>
-; X86-NEXT:    subl %ebx, %ecx<br>
+; X86-NEXT:    movb $64, %cl<br>
+; X86-NEXT:    subb %bl, %cl<br>
 ; X86-NEXT:    movl %edx, %esi<br>
 ; X86-NEXT:    shrl %cl, %esi<br>
 ; X86-NEXT:    shrdl %cl, %edx, (%esp) # 4-byte Folded Spill<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/fshr.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fshr.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fshr.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/fshr.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/fshr.ll Thu Nov 29 12:58:26 2018<br>
@@ -212,17 +212,17 @@ define i64 @var_shift_i64(i64 %x, i64 %y<br>
 ; X86-NEXT:    pushl %eax<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NEXT:    movl %eax, (%esp) # 4-byte Spill<br>
+; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx<br>
 ; X86-NEXT:    andl $63, %ebx<br>
-; X86-NEXT:    movl $64, %ecx<br>
-; X86-NEXT:    subl %ebx, %ecx<br>
+; X86-NEXT:    movb $64, %cl<br>
+; X86-NEXT:    subb %bl, %cl<br>
 ; X86-NEXT:    movl %eax, %edi<br>
 ; X86-NEXT:    shll %cl, %edi<br>
 ; X86-NEXT:    shldl %cl, %eax, %esi<br>
 ; X86-NEXT:    testb $32, %cl<br>
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx<br>
 ; X86-NEXT:    je .LBB3_2<br>
 ; X86-NEXT:  # %bb.1:<br>
 ; X86-NEXT:    movl %edi, %esi<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/funnel-shift-rot.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/funnel-shift-rot.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/funnel-shift-rot.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/funnel-shift-rot.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/funnel-shift-rot.ll Thu Nov 29 12:58:26 2018<br>
@@ -231,30 +231,25 @@ define i64 @rotr_i64(i64 %x, i64 %z) nou<br>
 ; X32-SSE2-NEXT:    pushl %ebx<br>
 ; X32-SSE2-NEXT:    pushl %edi<br>
 ; X32-SSE2-NEXT:    pushl %esi<br>
+; X32-SSE2-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X32-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
 ; X32-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %edx<br>
-; X32-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %ebx<br>
-; X32-SSE2-NEXT:    movl %ebx, %ecx<br>
-; X32-SSE2-NEXT:    andl $63, %ecx<br>
 ; X32-SSE2-NEXT:    movl %edx, %edi<br>
 ; X32-SSE2-NEXT:    shrl %cl, %edi<br>
-; X32-SSE2-NEXT:    movl %esi, %ebp<br>
-; X32-SSE2-NEXT:    shrdl %cl, %edx, %ebp<br>
-; X32-SSE2-NEXT:    xorl %eax, %eax<br>
+; X32-SSE2-NEXT:    movl %esi, %ebx<br>
+; X32-SSE2-NEXT:    shrdl %cl, %edx, %ebx<br>
+; X32-SSE2-NEXT:    xorl %ebp, %ebp<br>
 ; X32-SSE2-NEXT:    testb $32, %cl<br>
-; X32-SSE2-NEXT:    cmovnel %edi, %ebp<br>
-; X32-SSE2-NEXT:    cmovnel %eax, %edi<br>
-; X32-SSE2-NEXT:    negl %ebx<br>
-; X32-SSE2-NEXT:    andl $63, %ebx<br>
+; X32-SSE2-NEXT:    cmovnel %edi, %ebx<br>
+; X32-SSE2-NEXT:    cmovnel %ebp, %edi<br>
+; X32-SSE2-NEXT:    negb %cl<br>
 ; X32-SSE2-NEXT:    movl %esi, %eax<br>
-; X32-SSE2-NEXT:    movl %ebx, %ecx<br>
 ; X32-SSE2-NEXT:    shll %cl, %eax<br>
 ; X32-SSE2-NEXT:    shldl %cl, %esi, %edx<br>
-; X32-SSE2-NEXT:    testb $32, %bl<br>
+; X32-SSE2-NEXT:    testb $32, %cl<br>
 ; X32-SSE2-NEXT:    cmovnel %eax, %edx<br>
-; X32-SSE2-NEXT:    movl $0, %ecx<br>
-; X32-SSE2-NEXT:    cmovnel %ecx, %eax<br>
-; X32-SSE2-NEXT:    orl %ebp, %eax<br>
+; X32-SSE2-NEXT:    cmovnel %ebp, %eax<br>
+; X32-SSE2-NEXT:    orl %ebx, %eax<br>
 ; X32-SSE2-NEXT:    orl %edi, %edx<br>
 ; X32-SSE2-NEXT:    popl %esi<br>
 ; X32-SSE2-NEXT:    popl %edi<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/funnel-shift.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/funnel-shift.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/funnel-shift.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/funnel-shift.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/funnel-shift.ll Thu Nov 29 12:58:26 2018<br>
@@ -78,8 +78,8 @@ define i37 @fshl_i37(i37 %x, i37 %y, i37<br>
 ; X32-SSE2-NEXT:    cmovnel %ebp, %eax<br>
 ; X32-SSE2-NEXT:    cmovnel %ecx, %ebp<br>
 ; X32-SSE2-NEXT:    xorl %edx, %edx<br>
-; X32-SSE2-NEXT:    movl $37, %ecx<br>
-; X32-SSE2-NEXT:    subl %ebx, %ecx<br>
+; X32-SSE2-NEXT:    movb $37, %cl<br>
+; X32-SSE2-NEXT:    subb %bl, %cl<br>
 ; X32-SSE2-NEXT:    shrdl %cl, %esi, %edi<br>
 ; X32-SSE2-NEXT:    shrl %cl, %esi<br>
 ; X32-SSE2-NEXT:    testb $32, %cl<br>
@@ -264,8 +264,8 @@ define i37 @fshr_i37(i37 %x, i37 %y, i37<br>
 ; X32-SSE2-NEXT:    calll __umoddi3<br>
 ; X32-SSE2-NEXT:    addl $16, %esp<br>
 ; X32-SSE2-NEXT:    movl %eax, %ebx<br>
-; X32-SSE2-NEXT:    movl $37, %ecx<br>
-; X32-SSE2-NEXT:    subl %eax, %ecx<br>
+; X32-SSE2-NEXT:    movb $37, %cl<br>
+; X32-SSE2-NEXT:    subb %bl, %cl<br>
 ; X32-SSE2-NEXT:    movl %ebp, %eax<br>
 ; X32-SSE2-NEXT:    shll %cl, %ebp<br>
 ; X32-SSE2-NEXT:    shldl %cl, %eax, %edi<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/pr32284.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pr32284.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pr32284.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/pr32284.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/pr32284.ll Thu Nov 29 12:58:26 2018<br>
@@ -81,9 +81,8 @@ define void @foo() {<br>
 ; 686-NEXT:    movzbl c, %eax<br>
 ; 686-NEXT:    xorl %ecx, %ecx<br>
 ; 686-NEXT:    testl %eax, %eax<br>
-; 686-NEXT:    setne %cl<br>
-; 686-NEXT:    testb %al, %al<br>
 ; 686-NEXT:    setne {{[0-9]+}}(%esp)<br>
+; 686-NEXT:    setne %cl<br>
 ; 686-NEXT:    xorl %edx, %edx<br>
 ; 686-NEXT:    cmpl %eax, %ecx<br>
 ; 686-NEXT:    setle %dl<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/pr37879.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pr37879.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pr37879.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/pr37879.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/pr37879.ll Thu Nov 29 12:58:26 2018<br>
@@ -6,8 +6,6 @@ define double @foo(i32** nocapture reado<br>
 ; CHECK:       ## %bb.0:<br>
 ; CHECK-NEXT:    movq (%rax), %rax<br>
 ; CHECK-NEXT:    vcvtsi2sdq %rax, %xmm0, %xmm1<br>
-; CHECK-NEXT:    ## kill: def $eax killed $eax killed $rax<br>
-; CHECK-NEXT:    andl $1, %eax<br>
 ; CHECK-NEXT:    kmovd %eax, %k1<br>
 ; CHECK-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero<br>
 ; CHECK-NEXT:    vmovsd %xmm1, %xmm0, %xmm0 {%k1}<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/rot16.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/rot16.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/rot16.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/rot16.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/rot16.ll Thu Nov 29 12:58:26 2018<br>
@@ -15,7 +15,7 @@ define i16 @foo(i16 %x, i16 %y, i16 %z)<br>
 ; X64-NEXT:    movl %edx, %ecx<br>
 ; X64-NEXT:    movl %edi, %eax<br>
 ; X64-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
-; X64-NEXT:    shldw %cl, %ax, %ax<br>
+; X64-NEXT:    rolw %cl, %ax<br>
 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax<br>
 ; X64-NEXT:    retq<br>
        %t0 = shl i16 %x, %z<br>
@@ -62,7 +62,7 @@ define i16 @un(i16 %x, i16 %y, i16 %z) n<br>
 ; X64-NEXT:    movl %edx, %ecx<br>
 ; X64-NEXT:    movl %edi, %eax<br>
 ; X64-NEXT:    # kill: def $cl killed $cl killed $ecx<br>
-; X64-NEXT:    shrdw %cl, %ax, %ax<br>
+; X64-NEXT:    rorw %cl, %ax<br>
 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax<br>
 ; X64-NEXT:    retq<br>
        %t0 = lshr i16 %x, %z<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/rotate.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/rotate.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/rotate.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/rotate.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/rotate.ll Thu Nov 29 12:58:26 2018<br>
@@ -653,29 +653,29 @@ define i64 @truncated_rot(i64 %x, i32 %a<br>
 ; X86-NEXT:    pushl %ebx<br>
 ; X86-NEXT:    pushl %edi<br>
 ; X86-NEXT:    pushl %esi<br>
+; X86-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi<br>
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx<br>
 ; X86-NEXT:    movl %esi, %eax<br>
 ; X86-NEXT:    shll %cl, %eax<br>
 ; X86-NEXT:    testb $32, %cl<br>
-; X86-NEXT:    movl $0, %ebx<br>
+; X86-NEXT:    movl $0, %edi<br>
 ; X86-NEXT:    jne .LBB28_2<br>
 ; X86-NEXT:  # %bb.1: # %entry<br>
-; X86-NEXT:    movl %eax, %ebx<br>
+; X86-NEXT:    movl %eax, %edi<br>
 ; X86-NEXT:  .LBB28_2: # %entry<br>
-; X86-NEXT:    movl $64, %edx<br>
-; X86-NEXT:    subl %ecx, %edx<br>
-; X86-NEXT:    movl %edi, %eax<br>
+; X86-NEXT:    movb $64, %dl<br>
+; X86-NEXT:    subb %cl, %dl<br>
+; X86-NEXT:    movl %ebx, %eax<br>
 ; X86-NEXT:    movl %edx, %ecx<br>
 ; X86-NEXT:    shrl %cl, %eax<br>
-; X86-NEXT:    shrdl %cl, %edi, %esi<br>
+; X86-NEXT:    shrdl %cl, %ebx, %esi<br>
 ; X86-NEXT:    testb $32, %dl<br>
 ; X86-NEXT:    jne .LBB28_4<br>
 ; X86-NEXT:  # %bb.3: # %entry<br>
 ; X86-NEXT:    movl %esi, %eax<br>
 ; X86-NEXT:  .LBB28_4: # %entry<br>
-; X86-NEXT:    orl %ebx, %eax<br>
+; X86-NEXT:    orl %edi, %eax<br>
 ; X86-NEXT:    xorl %edx, %edx<br>
 ; X86-NEXT:    popl %esi<br>
 ; X86-NEXT:    popl %edi<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/rotate4.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/rotate4.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/rotate4.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/rotate4.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/rotate4.ll Thu Nov 29 12:58:26 2018<br>
@@ -65,9 +65,9 @@ define i64 @rotate_left_64(i64 %a, i64 %<br>
 ; X86-NEXT:    .cfi_offset %esi, -16<br>
 ; X86-NEXT:    .cfi_offset %edi, -12<br>
 ; X86-NEXT:    .cfi_offset %ebx, -8<br>
+; X86-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi<br>
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
 ; X86-NEXT:    movl %esi, %eax<br>
 ; X86-NEXT:    shll %cl, %eax<br>
 ; X86-NEXT:    movl %edi, %edx<br>
@@ -78,7 +78,7 @@ define i64 @rotate_left_64(i64 %a, i64 %<br>
 ; X86-NEXT:    movl %eax, %edx<br>
 ; X86-NEXT:    xorl %eax, %eax<br>
 ; X86-NEXT:  .LBB2_2:<br>
-; X86-NEXT:    negl %ecx<br>
+; X86-NEXT:    negb %cl<br>
 ; X86-NEXT:    movl %edi, %ebx<br>
 ; X86-NEXT:    shrl %cl, %ebx<br>
 ; X86-NEXT:    shrdl %cl, %edi, %esi<br>
@@ -126,9 +126,9 @@ define i64 @rotate_right_64(i64 %a, i64<br>
 ; X86-NEXT:    .cfi_offset %esi, -16<br>
 ; X86-NEXT:    .cfi_offset %edi, -12<br>
 ; X86-NEXT:    .cfi_offset %ebx, -8<br>
+; X86-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi<br>
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
 ; X86-NEXT:    movl %esi, %edx<br>
 ; X86-NEXT:    shrl %cl, %edx<br>
 ; X86-NEXT:    movl %edi, %eax<br>
@@ -139,7 +139,7 @@ define i64 @rotate_right_64(i64 %a, i64<br>
 ; X86-NEXT:    movl %edx, %eax<br>
 ; X86-NEXT:    xorl %edx, %edx<br>
 ; X86-NEXT:  .LBB3_2:<br>
-; X86-NEXT:    negl %ecx<br>
+; X86-NEXT:    negb %cl<br>
 ; X86-NEXT:    movl %edi, %ebx<br>
 ; X86-NEXT:    shll %cl, %ebx<br>
 ; X86-NEXT:    shldl %cl, %edi, %esi<br>
@@ -242,7 +242,7 @@ define void @rotate_left_m64(i64 *%pa, i<br>
 ; X86-NEXT:    .cfi_offset %edi, -16<br>
 ; X86-NEXT:    .cfi_offset %ebx, -12<br>
 ; X86-NEXT:    .cfi_offset %ebp, -8<br>
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NEXT:    movl (%eax), %edx<br>
 ; X86-NEXT:    movl 4(%eax), %ebx<br>
@@ -256,7 +256,7 @@ define void @rotate_left_m64(i64 *%pa, i<br>
 ; X86-NEXT:    movl %esi, %edi<br>
 ; X86-NEXT:    xorl %esi, %esi<br>
 ; X86-NEXT:  .LBB6_2:<br>
-; X86-NEXT:    negl %ecx<br>
+; X86-NEXT:    negb %cl<br>
 ; X86-NEXT:    movl %ebx, %ebp<br>
 ; X86-NEXT:    shrl %cl, %ebp<br>
 ; X86-NEXT:    shrdl %cl, %ebx, %edx<br>
@@ -312,33 +312,33 @@ define void @rotate_right_m64(i64 *%pa,<br>
 ; X86-NEXT:    .cfi_offset %edi, -16<br>
 ; X86-NEXT:    .cfi_offset %ebx, -12<br>
 ; X86-NEXT:    .cfi_offset %ebp, -8<br>
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx<br>
+; X86-NEXT:    movb {{[0-9]+}}(%esp), %cl<br>
 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax<br>
 ; X86-NEXT:    movl (%eax), %ebx<br>
-; X86-NEXT:    movl 4(%eax), %edx<br>
-; X86-NEXT:    movl %edx, %esi<br>
-; X86-NEXT:    shrl %cl, %esi<br>
+; X86-NEXT:    movl 4(%eax), %esi<br>
+; X86-NEXT:    movl %esi, %edx<br>
+; X86-NEXT:    shrl %cl, %edx<br>
 ; X86-NEXT:    movl %ebx, %edi<br>
-; X86-NEXT:    shrdl %cl, %edx, %edi<br>
+; X86-NEXT:    shrdl %cl, %esi, %edi<br>
 ; X86-NEXT:    testb $32, %cl<br>
 ; X86-NEXT:    je .LBB7_2<br>
 ; X86-NEXT:  # %bb.1:<br>
-; X86-NEXT:    movl %esi, %edi<br>
-; X86-NEXT:    xorl %esi, %esi<br>
+; X86-NEXT:    movl %edx, %edi<br>
+; X86-NEXT:    xorl %edx, %edx<br>
 ; X86-NEXT:  .LBB7_2:<br>
-; X86-NEXT:    negl %ecx<br>
+; X86-NEXT:    negb %cl<br>
 ; X86-NEXT:    movl %ebx, %ebp<br>
 ; X86-NEXT:    shll %cl, %ebp<br>
-; X86-NEXT:    shldl %cl, %ebx, %edx<br>
+; X86-NEXT:    shldl %cl, %ebx, %esi<br>
 ; X86-NEXT:    testb $32, %cl<br>
 ; X86-NEXT:    je .LBB7_4<br>
 ; X86-NEXT:  # %bb.3:<br>
-; X86-NEXT:    movl %ebp, %edx<br>
+; X86-NEXT:    movl %ebp, %esi<br>
 ; X86-NEXT:    xorl %ebp, %ebp<br>
 ; X86-NEXT:  .LBB7_4:<br>
-; X86-NEXT:    orl %edx, %esi<br>
+; X86-NEXT:    orl %esi, %edx<br>
 ; X86-NEXT:    orl %ebp, %edi<br>
-; X86-NEXT:    movl %esi, 4(%eax)<br>
+; X86-NEXT:    movl %edx, 4(%eax)<br>
 ; X86-NEXT:    movl %edi, (%eax)<br>
 ; X86-NEXT:    popl %esi<br>
 ; X86-NEXT:    .cfi_def_cfa_offset 16<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/schedule-x86-64-shld.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/schedule-x86-64-shld.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/schedule-x86-64-shld.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/schedule-x86-64-shld.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/schedule-x86-64-shld.ll Thu Nov 29 12:58:26 2018<br>
@@ -170,7 +170,7 @@ define i64 @lshift_cl(i64 %a, i64 %b, i6<br>
 ; BDVER12-NEXT:    movq %rdx, %rcx # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    movq %rsi, %rax # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    shlq %cl, %rdi # sched: [1:0.50]<br>
-; BDVER12-NEXT:    negl %ecx # sched: [1:0.50]<br>
+; BDVER12-NEXT:    negb %cl # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; BDVER12-NEXT:    shrq %cl, %rax # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    orq %rdi, %rax # sched: [1:0.50]<br>
@@ -181,7 +181,7 @@ define i64 @lshift_cl(i64 %a, i64 %b, i6<br>
 ; BTVER2-NEXT:    movq %rdx, %rcx # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    movq %rsi, %rax # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    shlq %cl, %rdi # sched: [1:0.50]<br>
-; BTVER2-NEXT:    negl %ecx # sched: [1:0.50]<br>
+; BTVER2-NEXT:    negb %cl # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; BTVER2-NEXT:    shrq %cl, %rax # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    orq %rdi, %rax # sched: [1:0.50]<br>
@@ -246,7 +246,7 @@ define i64 @rshift_cl(i64 %a, i64 %b, i6<br>
 ; BDVER12-NEXT:    movq %rdx, %rcx # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    movq %rsi, %rax # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    shrq %cl, %rdi # sched: [1:0.50]<br>
-; BDVER12-NEXT:    negl %ecx # sched: [1:0.50]<br>
+; BDVER12-NEXT:    negb %cl # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; BDVER12-NEXT:    shlq %cl, %rax # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    orq %rdi, %rax # sched: [1:0.50]<br>
@@ -257,7 +257,7 @@ define i64 @rshift_cl(i64 %a, i64 %b, i6<br>
 ; BTVER2-NEXT:    movq %rdx, %rcx # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    movq %rsi, %rax # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    shrq %cl, %rdi # sched: [1:0.50]<br>
-; BTVER2-NEXT:    negl %ecx # sched: [1:0.50]<br>
+; BTVER2-NEXT:    negb %cl # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; BTVER2-NEXT:    shlq %cl, %rax # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    orq %rdi, %rax # sched: [1:0.50]<br>
@@ -321,7 +321,7 @@ define void @lshift_mem_cl(i64 %a, i64 %<br>
 ; BDVER12-NEXT:    movq {{.*}}(%rip), %rax # sched: [5:0.50]<br>
 ; BDVER12-NEXT:    movq %rsi, %rcx # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    shlq %cl, %rax # sched: [1:0.50]<br>
-; BDVER12-NEXT:    negl %ecx # sched: [1:0.50]<br>
+; BDVER12-NEXT:    negb %cl # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; BDVER12-NEXT:    shrq %cl, %rdi # sched: [1:0.50]<br>
 ; BDVER12-NEXT:    orq %rax, %rdi # sched: [1:0.50]<br>
@@ -333,7 +333,7 @@ define void @lshift_mem_cl(i64 %a, i64 %<br>
 ; BTVER2-NEXT:    movq {{.*}}(%rip), %rax # sched: [5:1.00]<br>
 ; BTVER2-NEXT:    movq %rsi, %rcx # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    shlq %cl, %rax # sched: [1:0.50]<br>
-; BTVER2-NEXT:    negl %ecx # sched: [1:0.50]<br>
+; BTVER2-NEXT:    negb %cl # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    # kill: def $cl killed $cl killed $rcx<br>
 ; BTVER2-NEXT:    shrq %cl, %rdi # sched: [1:0.50]<br>
 ; BTVER2-NEXT:    orq %rax, %rdi # sched: [1:0.50]<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/scheduler-backtracking.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/scheduler-backtracking.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/scheduler-backtracking.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/scheduler-backtracking.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/scheduler-backtracking.ll Thu Nov 29 12:58:26 2018<br>
@@ -16,43 +16,45 @@ define i256 @test1(i256 %a) nounwind {<br>
 ; ILP-NEXT:    pushq %rbx<br>
 ; ILP-NEXT:    movq %rdi, %rax<br>
 ; ILP-NEXT:    xorl %r8d, %r8d<br>
-; ILP-NEXT:    leal 3(%rsi,%rsi), %r11d<br>
+; ILP-NEXT:    incl %esi<br>
+; ILP-NEXT:    addb %sil, %sil<br>
+; ILP-NEXT:    orb $1, %sil<br>
 ; ILP-NEXT:    movl $1, %r9d<br>
 ; ILP-NEXT:    xorl %r14d, %r14d<br>
-; ILP-NEXT:    movl %r11d, %ecx<br>
+; ILP-NEXT:    movl %esi, %ecx<br>
 ; ILP-NEXT:    shldq %cl, %r9, %r14<br>
+; ILP-NEXT:    movl $1, %edx<br>
+; ILP-NEXT:    shlq %cl, %rdx<br>
+; ILP-NEXT:    movl %esi, %r11d<br>
+; ILP-NEXT:    addb $-128, %r11b<br>
+; ILP-NEXT:    movb $-128, %r10b<br>
+; ILP-NEXT:    xorl %ebx, %ebx<br>
+; ILP-NEXT:    movl %r11d, %ecx<br>
+; ILP-NEXT:    shldq %cl, %r9, %rbx<br>
+; ILP-NEXT:    testb $64, %sil<br>
+; ILP-NEXT:    cmovneq %rdx, %r14<br>
+; ILP-NEXT:    cmovneq %r8, %rdx<br>
 ; ILP-NEXT:    movl $1, %edi<br>
 ; ILP-NEXT:    shlq %cl, %rdi<br>
-; ILP-NEXT:    movb $-128, %r10b<br>
-; ILP-NEXT:    subb %r11b, %r10b<br>
-; ILP-NEXT:    movl %r11d, %edx<br>
-; ILP-NEXT:    addb $-128, %dl<br>
-; ILP-NEXT:    xorl %esi, %esi<br>
-; ILP-NEXT:    movl %edx, %ecx<br>
-; ILP-NEXT:    shldq %cl, %r9, %rsi<br>
-; ILP-NEXT:    movl $1, %ebx<br>
-; ILP-NEXT:    shlq %cl, %rbx<br>
+; ILP-NEXT:    subb %sil, %r10b<br>
 ; ILP-NEXT:    movl %r10d, %ecx<br>
 ; ILP-NEXT:    shrdq %cl, %r8, %r9<br>
-; ILP-NEXT:    testb $64, %r11b<br>
-; ILP-NEXT:    cmovneq %rdi, %r14<br>
-; ILP-NEXT:    cmovneq %r8, %rdi<br>
 ; ILP-NEXT:    testb $64, %r10b<br>
 ; ILP-NEXT:    cmovneq %r8, %r9<br>
-; ILP-NEXT:    testb $64, %dl<br>
-; ILP-NEXT:    cmovneq %rbx, %rsi<br>
-; ILP-NEXT:    cmovneq %r8, %rbx<br>
-; ILP-NEXT:    testb %r11b, %r11b<br>
+; ILP-NEXT:    testb $64, %r11b<br>
+; ILP-NEXT:    cmovneq %rdi, %rbx<br>
+; ILP-NEXT:    cmovneq %r8, %rdi<br>
+; ILP-NEXT:    testb %sil, %sil<br>
 ; ILP-NEXT:    cmovsq %r8, %r14<br>
-; ILP-NEXT:    cmovsq %r8, %rdi<br>
+; ILP-NEXT:    cmovsq %r8, %rdx<br>
 ; ILP-NEXT:    movq %r14, 8(%rax)<br>
-; ILP-NEXT:    movq %rdi, (%rax)<br>
-; ILP-NEXT:    cmovnsq %r8, %rsi<br>
-; ILP-NEXT:    cmoveq %r8, %rsi<br>
-; ILP-NEXT:    movq %rsi, 24(%rax)<br>
-; ILP-NEXT:    cmovnsq %r9, %rbx<br>
+; ILP-NEXT:    movq %rdx, (%rax)<br>
+; ILP-NEXT:    cmovnsq %r8, %rbx<br>
 ; ILP-NEXT:    cmoveq %r8, %rbx<br>
-; ILP-NEXT:    movq %rbx, 16(%rax)<br>
+; ILP-NEXT:    movq %rbx, 24(%rax)<br>
+; ILP-NEXT:    cmovnsq %r9, %rdi<br>
+; ILP-NEXT:    cmoveq %r8, %rdi<br>
+; ILP-NEXT:    movq %rdi, 16(%rax)<br>
 ; ILP-NEXT:    popq %rbx<br>
 ; ILP-NEXT:    popq %r14<br>
 ; ILP-NEXT:    retq<br>
@@ -60,126 +62,132 @@ define i256 @test1(i256 %a) nounwind {<br>
 ; HYBRID-LABEL: test1:<br>
 ; HYBRID:       # %bb.0:<br>
 ; HYBRID-NEXT:    movq %rdi, %rax<br>
-; HYBRID-NEXT:    leal 3(%rsi,%rsi), %r10d<br>
+; HYBRID-NEXT:    incl %esi<br>
+; HYBRID-NEXT:    addb %sil, %sil<br>
+; HYBRID-NEXT:    orb $1, %sil<br>
 ; HYBRID-NEXT:    movb $-128, %cl<br>
-; HYBRID-NEXT:    subb %r10b, %cl<br>
+; HYBRID-NEXT:    subb %sil, %cl<br>
 ; HYBRID-NEXT:    xorl %r8d, %r8d<br>
-; HYBRID-NEXT:    movl $1, %esi<br>
+; HYBRID-NEXT:    movl $1, %r11d<br>
 ; HYBRID-NEXT:    movl $1, %r9d<br>
 ; HYBRID-NEXT:    shrdq %cl, %r8, %r9<br>
 ; HYBRID-NEXT:    testb $64, %cl<br>
 ; HYBRID-NEXT:    cmovneq %r8, %r9<br>
-; HYBRID-NEXT:    xorl %r11d, %r11d<br>
-; HYBRID-NEXT:    movl %r10d, %ecx<br>
-; HYBRID-NEXT:    shldq %cl, %rsi, %r11<br>
+; HYBRID-NEXT:    xorl %r10d, %r10d<br>
+; HYBRID-NEXT:    movl %esi, %ecx<br>
+; HYBRID-NEXT:    shldq %cl, %r11, %r10<br>
 ; HYBRID-NEXT:    addb $-128, %cl<br>
-; HYBRID-NEXT:    xorl %edx, %edx<br>
-; HYBRID-NEXT:    shldq %cl, %rsi, %rdx<br>
-; HYBRID-NEXT:    movl $1, %edi<br>
-; HYBRID-NEXT:    shlq %cl, %rdi<br>
+; HYBRID-NEXT:    xorl %edi, %edi<br>
+; HYBRID-NEXT:    shldq %cl, %r11, %rdi<br>
+; HYBRID-NEXT:    movl $1, %edx<br>
+; HYBRID-NEXT:    shlq %cl, %rdx<br>
 ; HYBRID-NEXT:    testb $64, %cl<br>
-; HYBRID-NEXT:    cmovneq %rdi, %rdx<br>
-; HYBRID-NEXT:    cmovneq %r8, %rdi<br>
-; HYBRID-NEXT:    movl %r10d, %ecx<br>
-; HYBRID-NEXT:    shlq %cl, %rsi<br>
-; HYBRID-NEXT:    testb $64, %r10b<br>
-; HYBRID-NEXT:    cmovneq %rsi, %r11<br>
-; HYBRID-NEXT:    cmovneq %r8, %rsi<br>
-; HYBRID-NEXT:    testb %r10b, %r10b<br>
+; HYBRID-NEXT:    cmovneq %rdx, %rdi<br>
+; HYBRID-NEXT:    cmovneq %r8, %rdx<br>
+; HYBRID-NEXT:    movl %esi, %ecx<br>
+; HYBRID-NEXT:    shlq %cl, %r11<br>
+; HYBRID-NEXT:    testb $64, %sil<br>
+; HYBRID-NEXT:    cmovneq %r11, %r10<br>
+; HYBRID-NEXT:    cmovneq %r8, %r11<br>
+; HYBRID-NEXT:    testb %sil, %sil<br>
+; HYBRID-NEXT:    cmovsq %r8, %r10<br>
+; HYBRID-NEXT:    movq %r10, 8(%rax)<br>
 ; HYBRID-NEXT:    cmovsq %r8, %r11<br>
-; HYBRID-NEXT:    movq %r11, 8(%rax)<br>
-; HYBRID-NEXT:    cmovsq %r8, %rsi<br>
-; HYBRID-NEXT:    movq %rsi, (%rax)<br>
-; HYBRID-NEXT:    cmovnsq %r8, %rdx<br>
-; HYBRID-NEXT:    cmoveq %r8, %rdx<br>
-; HYBRID-NEXT:    movq %rdx, 24(%rax)<br>
-; HYBRID-NEXT:    cmovnsq %r9, %rdi<br>
+; HYBRID-NEXT:    movq %r11, (%rax)<br>
+; HYBRID-NEXT:    cmovnsq %r8, %rdi<br>
 ; HYBRID-NEXT:    cmoveq %r8, %rdi<br>
-; HYBRID-NEXT:    movq %rdi, 16(%rax)<br>
+; HYBRID-NEXT:    movq %rdi, 24(%rax)<br>
+; HYBRID-NEXT:    cmovnsq %r9, %rdx<br>
+; HYBRID-NEXT:    cmoveq %r8, %rdx<br>
+; HYBRID-NEXT:    movq %rdx, 16(%rax)<br>
 ; HYBRID-NEXT:    retq<br>
 ;<br>
 ; BURR-LABEL: test1:<br>
 ; BURR:       # %bb.0:<br>
 ; BURR-NEXT:    movq %rdi, %rax<br>
-; BURR-NEXT:    leal 3(%rsi,%rsi), %r10d<br>
+; BURR-NEXT:    incl %esi<br>
+; BURR-NEXT:    addb %sil, %sil<br>
+; BURR-NEXT:    orb $1, %sil<br>
 ; BURR-NEXT:    movb $-128, %cl<br>
-; BURR-NEXT:    subb %r10b, %cl<br>
+; BURR-NEXT:    subb %sil, %cl<br>
 ; BURR-NEXT:    xorl %r8d, %r8d<br>
-; BURR-NEXT:    movl $1, %esi<br>
+; BURR-NEXT:    movl $1, %r11d<br>
 ; BURR-NEXT:    movl $1, %r9d<br>
 ; BURR-NEXT:    shrdq %cl, %r8, %r9<br>
 ; BURR-NEXT:    testb $64, %cl<br>
 ; BURR-NEXT:    cmovneq %r8, %r9<br>
-; BURR-NEXT:    xorl %r11d, %r11d<br>
-; BURR-NEXT:    movl %r10d, %ecx<br>
-; BURR-NEXT:    shldq %cl, %rsi, %r11<br>
+; BURR-NEXT:    xorl %r10d, %r10d<br>
+; BURR-NEXT:    movl %esi, %ecx<br>
+; BURR-NEXT:    shldq %cl, %r11, %r10<br>
 ; BURR-NEXT:    addb $-128, %cl<br>
-; BURR-NEXT:    xorl %edx, %edx<br>
-; BURR-NEXT:    shldq %cl, %rsi, %rdx<br>
-; BURR-NEXT:    movl $1, %edi<br>
-; BURR-NEXT:    shlq %cl, %rdi<br>
+; BURR-NEXT:    xorl %edi, %edi<br>
+; BURR-NEXT:    shldq %cl, %r11, %rdi<br>
+; BURR-NEXT:    movl $1, %edx<br>
+; BURR-NEXT:    shlq %cl, %rdx<br>
 ; BURR-NEXT:    testb $64, %cl<br>
-; BURR-NEXT:    cmovneq %rdi, %rdx<br>
-; BURR-NEXT:    cmovneq %r8, %rdi<br>
-; BURR-NEXT:    movl %r10d, %ecx<br>
-; BURR-NEXT:    shlq %cl, %rsi<br>
-; BURR-NEXT:    testb $64, %r10b<br>
-; BURR-NEXT:    cmovneq %rsi, %r11<br>
-; BURR-NEXT:    cmovneq %r8, %rsi<br>
-; BURR-NEXT:    testb %r10b, %r10b<br>
+; BURR-NEXT:    cmovneq %rdx, %rdi<br>
+; BURR-NEXT:    cmovneq %r8, %rdx<br>
+; BURR-NEXT:    movl %esi, %ecx<br>
+; BURR-NEXT:    shlq %cl, %r11<br>
+; BURR-NEXT:    testb $64, %sil<br>
+; BURR-NEXT:    cmovneq %r11, %r10<br>
+; BURR-NEXT:    cmovneq %r8, %r11<br>
+; BURR-NEXT:    testb %sil, %sil<br>
+; BURR-NEXT:    cmovsq %r8, %r10<br>
+; BURR-NEXT:    movq %r10, 8(%rax)<br>
 ; BURR-NEXT:    cmovsq %r8, %r11<br>
-; BURR-NEXT:    movq %r11, 8(%rax)<br>
-; BURR-NEXT:    cmovsq %r8, %rsi<br>
-; BURR-NEXT:    movq %rsi, (%rax)<br>
-; BURR-NEXT:    cmovnsq %r8, %rdx<br>
-; BURR-NEXT:    cmoveq %r8, %rdx<br>
-; BURR-NEXT:    movq %rdx, 24(%rax)<br>
-; BURR-NEXT:    cmovnsq %r9, %rdi<br>
+; BURR-NEXT:    movq %r11, (%rax)<br>
+; BURR-NEXT:    cmovnsq %r8, %rdi<br>
 ; BURR-NEXT:    cmoveq %r8, %rdi<br>
-; BURR-NEXT:    movq %rdi, 16(%rax)<br>
+; BURR-NEXT:    movq %rdi, 24(%rax)<br>
+; BURR-NEXT:    cmovnsq %r9, %rdx<br>
+; BURR-NEXT:    cmoveq %r8, %rdx<br>
+; BURR-NEXT:    movq %rdx, 16(%rax)<br>
 ; BURR-NEXT:    retq<br>
 ;<br>
 ; SRC-LABEL: test1:<br>
 ; SRC:       # %bb.0:<br>
 ; SRC-NEXT:    pushq %rbx<br>
 ; SRC-NEXT:    movq %rdi, %rax<br>
-; SRC-NEXT:    leal 3(%rsi,%rsi), %r9d<br>
+; SRC-NEXT:    incl %esi<br>
+; SRC-NEXT:    addb %sil, %sil<br>
+; SRC-NEXT:    orb $1, %sil<br>
 ; SRC-NEXT:    movb $-128, %cl<br>
-; SRC-NEXT:    subb %r9b, %cl<br>
+; SRC-NEXT:    subb %sil, %cl<br>
 ; SRC-NEXT:    xorl %r8d, %r8d<br>
 ; SRC-NEXT:    movl $1, %edi<br>
 ; SRC-NEXT:    movl $1, %r10d<br>
 ; SRC-NEXT:    shrdq %cl, %r8, %r10<br>
 ; SRC-NEXT:    testb $64, %cl<br>
 ; SRC-NEXT:    cmovneq %r8, %r10<br>
-; SRC-NEXT:    movl %r9d, %r11d<br>
-; SRC-NEXT:    addb $-128, %r11b<br>
-; SRC-NEXT:    xorl %esi, %esi<br>
-; SRC-NEXT:    movl %r11d, %ecx<br>
-; SRC-NEXT:    shldq %cl, %rdi, %rsi<br>
+; SRC-NEXT:    movl %esi, %r9d<br>
+; SRC-NEXT:    addb $-128, %r9b<br>
 ; SRC-NEXT:    xorl %edx, %edx<br>
 ; SRC-NEXT:    movl %r9d, %ecx<br>
 ; SRC-NEXT:    shldq %cl, %rdi, %rdx<br>
+; SRC-NEXT:    xorl %r11d, %r11d<br>
+; SRC-NEXT:    movl %esi, %ecx<br>
+; SRC-NEXT:    shldq %cl, %rdi, %r11<br>
 ; SRC-NEXT:    movl $1, %ebx<br>
 ; SRC-NEXT:    shlq %cl, %rbx<br>
-; SRC-NEXT:    testb $64, %r9b<br>
-; SRC-NEXT:    cmovneq %rbx, %rdx<br>
+; SRC-NEXT:    testb $64, %sil<br>
+; SRC-NEXT:    cmovneq %rbx, %r11<br>
 ; SRC-NEXT:    cmovneq %r8, %rbx<br>
-; SRC-NEXT:    movl %r11d, %ecx<br>
+; SRC-NEXT:    movl %r9d, %ecx<br>
 ; SRC-NEXT:    shlq %cl, %rdi<br>
-; SRC-NEXT:    testb $64, %r11b<br>
-; SRC-NEXT:    cmovneq %rdi, %rsi<br>
+; SRC-NEXT:    testb $64, %r9b<br>
+; SRC-NEXT:    cmovneq %rdi, %rdx<br>
 ; SRC-NEXT:    cmovneq %r8, %rdi<br>
-; SRC-NEXT:    testb %r9b, %r9b<br>
+; SRC-NEXT:    testb %sil, %sil<br>
 ; SRC-NEXT:    cmovnsq %r10, %rdi<br>
 ; SRC-NEXT:    cmoveq %r8, %rdi<br>
-; SRC-NEXT:    cmovnsq %r8, %rsi<br>
-; SRC-NEXT:    cmoveq %r8, %rsi<br>
-; SRC-NEXT:    cmovsq %r8, %rdx<br>
+; SRC-NEXT:    cmovnsq %r8, %rdx<br>
+; SRC-NEXT:    cmoveq %r8, %rdx<br>
+; SRC-NEXT:    cmovsq %r8, %r11<br>
 ; SRC-NEXT:    cmovsq %r8, %rbx<br>
-; SRC-NEXT:    movq %rdx, 8(%rax)<br>
+; SRC-NEXT:    movq %r11, 8(%rax)<br>
 ; SRC-NEXT:    movq %rbx, (%rax)<br>
-; SRC-NEXT:    movq %rsi, 24(%rax)<br>
+; SRC-NEXT:    movq %rdx, 24(%rax)<br>
 ; SRC-NEXT:    movq %rdi, 16(%rax)<br>
 ; SRC-NEXT:    popq %rbx<br>
 ; SRC-NEXT:    retq<br>
@@ -189,46 +197,48 @@ define i256 @test1(i256 %a) nounwind {<br>
 ; LIN-NEXT:    movq %rdi, %rax<br>
 ; LIN-NEXT:    xorl %r9d, %r9d<br>
 ; LIN-NEXT:    movl $1, %r8d<br>
-; LIN-NEXT:    leal 3(%rsi,%rsi), %edx<br>
-; LIN-NEXT:    movl $1, %esi<br>
-; LIN-NEXT:    movl %edx, %ecx<br>
-; LIN-NEXT:    shlq %cl, %rsi<br>
-; LIN-NEXT:    testb $64, %dl<br>
-; LIN-NEXT:    movq %rsi, %rcx<br>
+; LIN-NEXT:    incl %esi<br>
+; LIN-NEXT:    addb %sil, %sil<br>
+; LIN-NEXT:    orb $1, %sil<br>
+; LIN-NEXT:    movl $1, %edx<br>
+; LIN-NEXT:    movl %esi, %ecx<br>
+; LIN-NEXT:    shlq %cl, %rdx<br>
+; LIN-NEXT:    testb $64, %sil<br>
+; LIN-NEXT:    movq %rdx, %rcx<br>
 ; LIN-NEXT:    cmovneq %r9, %rcx<br>
-; LIN-NEXT:    testb %dl, %dl<br>
+; LIN-NEXT:    testb %sil, %sil<br>
 ; LIN-NEXT:    cmovsq %r9, %rcx<br>
 ; LIN-NEXT:    movq %rcx, (%rdi)<br>
 ; LIN-NEXT:    xorl %edi, %edi<br>
-; LIN-NEXT:    movl %edx, %ecx<br>
+; LIN-NEXT:    movl %esi, %ecx<br>
 ; LIN-NEXT:    shldq %cl, %r8, %rdi<br>
-; LIN-NEXT:    cmovneq %rsi, %rdi<br>
+; LIN-NEXT:    cmovneq %rdx, %rdi<br>
 ; LIN-NEXT:    cmovsq %r9, %rdi<br>
 ; LIN-NEXT:    movq %rdi, 8(%rax)<br>
-; LIN-NEXT:    movl %edx, %esi<br>
-; LIN-NEXT:    addb $-128, %sil<br>
+; LIN-NEXT:    movl %esi, %edx<br>
+; LIN-NEXT:    addb $-128, %dl<br>
 ; LIN-NEXT:    movl $1, %r10d<br>
-; LIN-NEXT:    movl %esi, %ecx<br>
+; LIN-NEXT:    movl %edx, %ecx<br>
 ; LIN-NEXT:    shlq %cl, %r10<br>
-; LIN-NEXT:    testb $64, %sil<br>
+; LIN-NEXT:    testb $64, %dl<br>
 ; LIN-NEXT:    movq %r10, %rdi<br>
 ; LIN-NEXT:    cmovneq %r9, %rdi<br>
 ; LIN-NEXT:    movb $-128, %cl<br>
-; LIN-NEXT:    subb %dl, %cl<br>
-; LIN-NEXT:    movl $1, %edx<br>
-; LIN-NEXT:    shrdq %cl, %r9, %rdx<br>
+; LIN-NEXT:    subb %sil, %cl<br>
+; LIN-NEXT:    movl $1, %esi<br>
+; LIN-NEXT:    shrdq %cl, %r9, %rsi<br>
 ; LIN-NEXT:    testb $64, %cl<br>
-; LIN-NEXT:    cmovneq %r9, %rdx<br>
-; LIN-NEXT:    cmovsq %rdi, %rdx<br>
-; LIN-NEXT:    cmoveq %r9, %rdx<br>
-; LIN-NEXT:    movq %rdx, 16(%rax)<br>
-; LIN-NEXT:    xorl %edx, %edx<br>
-; LIN-NEXT:    movl %esi, %ecx<br>
-; LIN-NEXT:    shldq %cl, %r8, %rdx<br>
-; LIN-NEXT:    cmovneq %r10, %rdx<br>
-; LIN-NEXT:    cmovnsq %r9, %rdx<br>
-; LIN-NEXT:    cmoveq %r9, %rdx<br>
-; LIN-NEXT:    movq %rdx, 24(%rax)<br>
+; LIN-NEXT:    cmovneq %r9, %rsi<br>
+; LIN-NEXT:    cmovsq %rdi, %rsi<br>
+; LIN-NEXT:    cmoveq %r9, %rsi<br>
+; LIN-NEXT:    movq %rsi, 16(%rax)<br>
+; LIN-NEXT:    xorl %esi, %esi<br>
+; LIN-NEXT:    movl %edx, %ecx<br>
+; LIN-NEXT:    shldq %cl, %r8, %rsi<br>
+; LIN-NEXT:    cmovneq %r10, %rsi<br>
+; LIN-NEXT:    cmovnsq %r9, %rsi<br>
+; LIN-NEXT:    cmoveq %r9, %rsi<br>
+; LIN-NEXT:    movq %rsi, 24(%rax)<br>
 ; LIN-NEXT:    retq<br>
   %b = add i256 %a, 1<br>
   %m = shl i256 %b, 1<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/test-shrink.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/test-shrink.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/test-shrink.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/test-shrink.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/test-shrink.ll Thu Nov 29 12:58:26 2018<br>
@@ -590,7 +590,6 @@ define void @and16_trunc_8_sign(i16 %x)<br>
 ; CHECK-WIN32-64-LABEL: and16_trunc_8_sign:<br>
 ; CHECK-WIN32-64:       # %bb.0:<br>
 ; CHECK-WIN32-64-NEXT:    subq $40, %rsp<br>
-; CHECK-WIN32-64-NEXT:    # kill: def $cx killed $cx def $ecx<br>
 ; CHECK-WIN32-64-NEXT:    testb $-128, %cl<br>
 ; CHECK-WIN32-64-NEXT:    jg .LBB13_2<br>
 ; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes<br>
@@ -601,8 +600,7 @@ define void @and16_trunc_8_sign(i16 %x)<br>
 ;<br>
 ; CHECK-X86-LABEL: and16_trunc_8_sign:<br>
 ; CHECK-X86:       # %bb.0:<br>
-; CHECK-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax<br>
-; CHECK-X86-NEXT:    testb $-128, %al<br>
+; CHECK-X86-NEXT:    testb $-128, {{[0-9]+}}(%esp)<br>
 ; CHECK-X86-NEXT:    jg .LBB13_2<br>
 ; CHECK-X86-NEXT:  # %bb.1: # %yes<br>
 ; CHECK-X86-NEXT:    calll bar<br>
@@ -733,8 +731,8 @@ define void @and32_trunc_16_sign(i32 %x)<br>
 ;<br>
 ; CHECK-X86-LABEL: and32_trunc_16_sign:<br>
 ; CHECK-X86:       # %bb.0:<br>
-; CHECK-X86-NEXT:    movl $32768, %eax # imm = 0x8000<br>
-; CHECK-X86-NEXT:    andl {{[0-9]+}}(%esp), %eax<br>
+; CHECK-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax<br>
+; CHECK-X86-NEXT:    andl $32768, %eax # imm = 0x8000<br>
 ; CHECK-X86-NEXT:    testw %ax, %ax<br>
 ; CHECK-X86-NEXT:    jg .LBB16_2<br>
 ; CHECK-X86-NEXT:  # %bb.1: # %yes<br>
@@ -778,7 +776,8 @@ define void @and32_trunc_16_sign_minsize<br>
 ;<br>
 ; CHECK-X86-LABEL: and32_trunc_16_sign_minsize:<br>
 ; CHECK-X86:       # %bb.0:<br>
-; CHECK-X86-NEXT:    testw $-32768, {{[0-9]+}}(%esp) # imm = 0x8000<br>
+; CHECK-X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax<br>
+; CHECK-X86-NEXT:    testw $-32768, %ax # imm = 0x8000<br>
 ; CHECK-X86-NEXT:    jg .LBB17_2<br>
 ; CHECK-X86-NEXT:  # %bb.1: # %yes<br>
 ; CHECK-X86-NEXT:    calll bar<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/xchg-nofold.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/xchg-nofold.ll?rev=347917&r1=347916&r2=347917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/xchg-nofold.ll?rev=347917&r1=347916&r2=347917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/xchg-nofold.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/xchg-nofold.ll Thu Nov 29 12:58:26 2018<br>
@@ -17,7 +17,7 @@ define zeroext i1 @_Z3fooRSt6atomicIbEb(<br>
 ; CHECK-NEXT:    je .LBB0_3<br>
 ; CHECK-NEXT:  # %bb.1:<br>
 ; CHECK-NEXT:    movl %edi, %edx<br>
-; CHECK-NEXT:    andl $7, %edx<br>
+; CHECK-NEXT:    andb $7, %dl<br>
 ; CHECK-NEXT:    cmpb %cl, %dl<br>
 ; CHECK-NEXT:    jge .LBB0_2<br>
 ; CHECK-NEXT:  .LBB0_3:<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>