[llvm] r334302 - [X86] Fix schedule-x86_64.s tests to use different registers in reg-reg cases

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 8 09:40:15 PDT 2018


Author: rksimon
Date: Fri Jun  8 09:40:15 2018
New Revision: 334302

URL: http://llvm.org/viewvc/llvm-project?rev=334302&view=rev
Log:
[X86] Fix schedule-x86_64.s tests to use different registers in reg-reg cases

Same fix as rL334110: I noticed while working on zero-idiom + dependency-breaking support (PR36671) that most of our binary instruction schedule tests were reusing the same src registers, which would cause the tests to fail once we enable scalar zero-idiom support on btver2.

Modified:
    llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll

Modified: llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll?rev=334302&r1=334301&r2=334302&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll (original)
+++ llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll Fri Jun  8 09:40:15 2018
@@ -11,14 +11,14 @@
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2
 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
 
-define void @test_adc_8(i8 %a0, i8* %a1) optsize {
+define void @test_adc_8(i8 %a0, i8* %a1, i8 %a2) optsize {
 ; GENERIC-LABEL: test_adc_8:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    adcb $7, %al # sched: [2:0.67]
 ; GENERIC-NEXT:    adcb $7, %dil # sched: [2:0.67]
 ; GENERIC-NEXT:    adcb $7, (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    adcb %dil, %dil # sched: [2:0.67]
+; GENERIC-NEXT:    adcb %dl, %dil # sched: [2:0.67]
 ; GENERIC-NEXT:    adcb %dil, (%rsi) # sched: [9:1.00]
 ; GENERIC-NEXT:    adcb (%rsi), %dil # sched: [7:0.67]
 ; GENERIC-NEXT:    #NO_APP
@@ -30,7 +30,7 @@ define void @test_adc_8(i8 %a0, i8* %a1)
 ; ATOM-NEXT:    adcb $7, %al # sched: [1:0.50]
 ; ATOM-NEXT:    adcb $7, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    adcb $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    adcb %dil, %dil # sched: [1:0.50]
+; ATOM-NEXT:    adcb %dl, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    adcb %dil, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    adcb (%rsi), %dil # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -42,7 +42,7 @@ define void @test_adc_8(i8 %a0, i8* %a1)
 ; SLM-NEXT:    adcb $7, %al # sched: [1:0.50]
 ; SLM-NEXT:    adcb $7, %dil # sched: [1:0.50]
 ; SLM-NEXT:    adcb $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    adcb %dil, %dil # sched: [1:0.50]
+; SLM-NEXT:    adcb %dl, %dil # sched: [1:0.50]
 ; SLM-NEXT:    adcb %dil, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    adcb (%rsi), %dil # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -54,7 +54,7 @@ define void @test_adc_8(i8 %a0, i8* %a1)
 ; SANDY-NEXT:    adcb $7, %al # sched: [2:0.67]
 ; SANDY-NEXT:    adcb $7, %dil # sched: [2:0.67]
 ; SANDY-NEXT:    adcb $7, (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    adcb %dil, %dil # sched: [2:0.67]
+; SANDY-NEXT:    adcb %dl, %dil # sched: [2:0.67]
 ; SANDY-NEXT:    adcb %dil, (%rsi) # sched: [9:1.00]
 ; SANDY-NEXT:    adcb (%rsi), %dil # sched: [7:0.67]
 ; SANDY-NEXT:    #NO_APP
@@ -66,7 +66,7 @@ define void @test_adc_8(i8 %a0, i8* %a1)
 ; HASWELL-NEXT:    adcb $7, %al # sched: [2:0.50]
 ; HASWELL-NEXT:    adcb $7, %dil # sched: [2:0.50]
 ; HASWELL-NEXT:    adcb $7, (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    adcb %dil, %dil # sched: [2:0.50]
+; HASWELL-NEXT:    adcb %dl, %dil # sched: [2:0.50]
 ; HASWELL-NEXT:    adcb %dil, (%rsi) # sched: [9:1.00]
 ; HASWELL-NEXT:    adcb (%rsi), %dil # sched: [7:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -78,7 +78,7 @@ define void @test_adc_8(i8 %a0, i8* %a1)
 ; BROADWELL-NEXT:    adcb $7, %al # sched: [2:0.50]
 ; BROADWELL-NEXT:    adcb $7, %dil # sched: [2:0.50]
 ; BROADWELL-NEXT:    adcb $7, (%rsi) # sched: [8:1.00]
-; BROADWELL-NEXT:    adcb %dil, %dil # sched: [1:0.50]
+; BROADWELL-NEXT:    adcb %dl, %dil # sched: [1:0.50]
 ; BROADWELL-NEXT:    adcb %dil, (%rsi) # sched: [8:1.00]
 ; BROADWELL-NEXT:    adcb (%rsi), %dil # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -90,7 +90,7 @@ define void @test_adc_8(i8 %a0, i8* %a1)
 ; SKYLAKE-NEXT:    adcb $7, %al # sched: [2:0.50]
 ; SKYLAKE-NEXT:    adcb $7, %dil # sched: [2:0.50]
 ; SKYLAKE-NEXT:    adcb $7, (%rsi) # sched: [8:1.00]
-; SKYLAKE-NEXT:    adcb %dil, %dil # sched: [1:0.50]
+; SKYLAKE-NEXT:    adcb %dl, %dil # sched: [1:0.50]
 ; SKYLAKE-NEXT:    adcb %dil, (%rsi) # sched: [8:1.00]
 ; SKYLAKE-NEXT:    adcb (%rsi), %dil # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -102,7 +102,7 @@ define void @test_adc_8(i8 %a0, i8* %a1)
 ; SKX-NEXT:    adcb $7, %al # sched: [2:0.50]
 ; SKX-NEXT:    adcb $7, %dil # sched: [2:0.50]
 ; SKX-NEXT:    adcb $7, (%rsi) # sched: [8:1.00]
-; SKX-NEXT:    adcb %dil, %dil # sched: [1:0.50]
+; SKX-NEXT:    adcb %dl, %dil # sched: [1:0.50]
 ; SKX-NEXT:    adcb %dil, (%rsi) # sched: [8:1.00]
 ; SKX-NEXT:    adcb (%rsi), %dil # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -114,7 +114,7 @@ define void @test_adc_8(i8 %a0, i8* %a1)
 ; BTVER2-NEXT:    adcb $7, %al # sched: [1:1.00]
 ; BTVER2-NEXT:    adcb $7, %dil # sched: [1:1.00]
 ; BTVER2-NEXT:    adcb $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    adcb %dil, %dil # sched: [1:1.00]
+; BTVER2-NEXT:    adcb %dl, %dil # sched: [1:1.00]
 ; BTVER2-NEXT:    adcb %dil, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    adcb (%rsi), %dil # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -126,15 +126,15 @@ define void @test_adc_8(i8 %a0, i8* %a1)
 ; ZNVER1-NEXT:    adcb $7, %al # sched: [1:0.25]
 ; ZNVER1-NEXT:    adcb $7, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    adcb $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    adcb %dil, %dil # sched: [1:0.25]
+; ZNVER1-NEXT:    adcb %dl, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    adcb %dil, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    adcb (%rsi), %dil # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "adcb $2, %AL \0A\09 adcb $2, $0 \0A\09 adcb $2, $1 \0A\09 adcb $0, $0 \0A\09 adcb $0, $1 \0A\09 adcb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind
+  tail call void asm "adcb $3, %AL \0A\09 adcb $3, $0 \0A\09 adcb $3, $2 \0A\09 adcb $1, $0 \0A\09 adcb $0, $2 \0A\09 adcb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
   ret void
 }
-define void @test_adc_16(i16 %a0, i16* %a1) optsize {
+define void @test_adc_16(i16 %a0, i16* %a1, i16 %a2) optsize {
 ; GENERIC-LABEL: test_adc_16:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -146,7 +146,7 @@ define void @test_adc_16(i16 %a0, i16* %
 ; GENERIC-NEXT:    # sched: [9:1.00]
 ; GENERIC-NEXT:    adcw $7, %di # sched: [2:0.67]
 ; GENERIC-NEXT:    adcw $7, (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    adcw %di, %di # sched: [2:0.67]
+; GENERIC-NEXT:    adcw %dx, %di # sched: [2:0.67]
 ; GENERIC-NEXT:    adcw %di, (%rsi) # sched: [9:1.00]
 ; GENERIC-NEXT:    adcw (%rsi), %di # sched: [7:0.67]
 ; GENERIC-NEXT:    #NO_APP
@@ -163,7 +163,7 @@ define void @test_adc_16(i16 %a0, i16* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    adcw $7, %di # sched: [1:0.50]
 ; ATOM-NEXT:    adcw $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    adcw %di, %di # sched: [1:0.50]
+; ATOM-NEXT:    adcw %dx, %di # sched: [1:0.50]
 ; ATOM-NEXT:    adcw %di, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    adcw (%rsi), %di # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -180,7 +180,7 @@ define void @test_adc_16(i16 %a0, i16* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    adcw $7, %di # sched: [1:0.50]
 ; SLM-NEXT:    adcw $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    adcw %di, %di # sched: [1:0.50]
+; SLM-NEXT:    adcw %dx, %di # sched: [1:0.50]
 ; SLM-NEXT:    adcw %di, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    adcw (%rsi), %di # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -197,7 +197,7 @@ define void @test_adc_16(i16 %a0, i16* %
 ; SANDY-NEXT:    # sched: [9:1.00]
 ; SANDY-NEXT:    adcw $7, %di # sched: [2:0.67]
 ; SANDY-NEXT:    adcw $7, (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    adcw %di, %di # sched: [2:0.67]
+; SANDY-NEXT:    adcw %dx, %di # sched: [2:0.67]
 ; SANDY-NEXT:    adcw %di, (%rsi) # sched: [9:1.00]
 ; SANDY-NEXT:    adcw (%rsi), %di # sched: [7:0.67]
 ; SANDY-NEXT:    #NO_APP
@@ -214,7 +214,7 @@ define void @test_adc_16(i16 %a0, i16* %
 ; HASWELL-NEXT:    # sched: [9:1.00]
 ; HASWELL-NEXT:    adcw $7, %di # sched: [2:0.50]
 ; HASWELL-NEXT:    adcw $7, (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    adcw %di, %di # sched: [2:0.50]
+; HASWELL-NEXT:    adcw %dx, %di # sched: [2:0.50]
 ; HASWELL-NEXT:    adcw %di, (%rsi) # sched: [9:1.00]
 ; HASWELL-NEXT:    adcw (%rsi), %di # sched: [7:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -231,7 +231,7 @@ define void @test_adc_16(i16 %a0, i16* %
 ; BROADWELL-NEXT:    # sched: [8:1.00]
 ; BROADWELL-NEXT:    adcw $7, %di # sched: [1:0.50]
 ; BROADWELL-NEXT:    adcw $7, (%rsi) # sched: [8:1.00]
-; BROADWELL-NEXT:    adcw %di, %di # sched: [1:0.50]
+; BROADWELL-NEXT:    adcw %dx, %di # sched: [1:0.50]
 ; BROADWELL-NEXT:    adcw %di, (%rsi) # sched: [8:1.00]
 ; BROADWELL-NEXT:    adcw (%rsi), %di # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -248,7 +248,7 @@ define void @test_adc_16(i16 %a0, i16* %
 ; SKYLAKE-NEXT:    # sched: [8:1.00]
 ; SKYLAKE-NEXT:    adcw $7, %di # sched: [1:0.50]
 ; SKYLAKE-NEXT:    adcw $7, (%rsi) # sched: [8:1.00]
-; SKYLAKE-NEXT:    adcw %di, %di # sched: [1:0.50]
+; SKYLAKE-NEXT:    adcw %dx, %di # sched: [1:0.50]
 ; SKYLAKE-NEXT:    adcw %di, (%rsi) # sched: [8:1.00]
 ; SKYLAKE-NEXT:    adcw (%rsi), %di # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -265,7 +265,7 @@ define void @test_adc_16(i16 %a0, i16* %
 ; SKX-NEXT:    # sched: [8:1.00]
 ; SKX-NEXT:    adcw $7, %di # sched: [1:0.50]
 ; SKX-NEXT:    adcw $7, (%rsi) # sched: [8:1.00]
-; SKX-NEXT:    adcw %di, %di # sched: [1:0.50]
+; SKX-NEXT:    adcw %dx, %di # sched: [1:0.50]
 ; SKX-NEXT:    adcw %di, (%rsi) # sched: [8:1.00]
 ; SKX-NEXT:    adcw (%rsi), %di # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -282,7 +282,7 @@ define void @test_adc_16(i16 %a0, i16* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    adcw $7, %di # sched: [1:1.00]
 ; BTVER2-NEXT:    adcw $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    adcw %di, %di # sched: [1:1.00]
+; BTVER2-NEXT:    adcw %dx, %di # sched: [1:1.00]
 ; BTVER2-NEXT:    adcw %di, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    adcw (%rsi), %di # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -299,15 +299,15 @@ define void @test_adc_16(i16 %a0, i16* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    adcw $7, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    adcw $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    adcw %di, %di # sched: [1:0.25]
+; ZNVER1-NEXT:    adcw %dx, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    adcw %di, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    adcw (%rsi), %di # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "adcw $2, %AX \0A\09 adcw $2, $0 \0A\09 adcw $2, $1 \0A\09 adcw $3, $0 \0A\09 adcw $3, $1 \0A\09 adcw $0, $0 \0A\09 adcw $0, $1 \0A\09 adcw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind
+  tail call void asm "adcw $3, %AX \0A\09 adcw $3, $0 \0A\09 adcw $3, $2 \0A\09 adcw $4, $0 \0A\09 adcw $4, $2 \0A\09 adcw $1, $0 \0A\09 adcw $0, $2 \0A\09 adcw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
   ret void
 }
-define void @test_adc_32(i32 %a0, i32* %a1) optsize {
+define void @test_adc_32(i32 %a0, i32* %a1, i32 %a2) optsize {
 ; GENERIC-LABEL: test_adc_32:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -319,7 +319,7 @@ define void @test_adc_32(i32 %a0, i32* %
 ; GENERIC-NEXT:    # sched: [9:1.00]
 ; GENERIC-NEXT:    adcl $7, %edi # sched: [2:0.67]
 ; GENERIC-NEXT:    adcl $7, (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    adcl %edi, %edi # sched: [2:0.67]
+; GENERIC-NEXT:    adcl %edx, %edi # sched: [2:0.67]
 ; GENERIC-NEXT:    adcl %edi, (%rsi) # sched: [9:1.00]
 ; GENERIC-NEXT:    adcl (%rsi), %edi # sched: [7:0.67]
 ; GENERIC-NEXT:    #NO_APP
@@ -336,7 +336,7 @@ define void @test_adc_32(i32 %a0, i32* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    adcl $7, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    adcl $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    adcl %edi, %edi # sched: [1:0.50]
+; ATOM-NEXT:    adcl %edx, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    adcl %edi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    adcl (%rsi), %edi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -353,7 +353,7 @@ define void @test_adc_32(i32 %a0, i32* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    adcl $7, %edi # sched: [1:0.50]
 ; SLM-NEXT:    adcl $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    adcl %edi, %edi # sched: [1:0.50]
+; SLM-NEXT:    adcl %edx, %edi # sched: [1:0.50]
 ; SLM-NEXT:    adcl %edi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    adcl (%rsi), %edi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -370,7 +370,7 @@ define void @test_adc_32(i32 %a0, i32* %
 ; SANDY-NEXT:    # sched: [9:1.00]
 ; SANDY-NEXT:    adcl $7, %edi # sched: [2:0.67]
 ; SANDY-NEXT:    adcl $7, (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    adcl %edi, %edi # sched: [2:0.67]
+; SANDY-NEXT:    adcl %edx, %edi # sched: [2:0.67]
 ; SANDY-NEXT:    adcl %edi, (%rsi) # sched: [9:1.00]
 ; SANDY-NEXT:    adcl (%rsi), %edi # sched: [7:0.67]
 ; SANDY-NEXT:    #NO_APP
@@ -387,7 +387,7 @@ define void @test_adc_32(i32 %a0, i32* %
 ; HASWELL-NEXT:    # sched: [9:1.00]
 ; HASWELL-NEXT:    adcl $7, %edi # sched: [2:0.50]
 ; HASWELL-NEXT:    adcl $7, (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    adcl %edi, %edi # sched: [2:0.50]
+; HASWELL-NEXT:    adcl %edx, %edi # sched: [2:0.50]
 ; HASWELL-NEXT:    adcl %edi, (%rsi) # sched: [9:1.00]
 ; HASWELL-NEXT:    adcl (%rsi), %edi # sched: [7:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -404,7 +404,7 @@ define void @test_adc_32(i32 %a0, i32* %
 ; BROADWELL-NEXT:    # sched: [8:1.00]
 ; BROADWELL-NEXT:    adcl $7, %edi # sched: [1:0.50]
 ; BROADWELL-NEXT:    adcl $7, (%rsi) # sched: [8:1.00]
-; BROADWELL-NEXT:    adcl %edi, %edi # sched: [1:0.50]
+; BROADWELL-NEXT:    adcl %edx, %edi # sched: [1:0.50]
 ; BROADWELL-NEXT:    adcl %edi, (%rsi) # sched: [8:1.00]
 ; BROADWELL-NEXT:    adcl (%rsi), %edi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -421,7 +421,7 @@ define void @test_adc_32(i32 %a0, i32* %
 ; SKYLAKE-NEXT:    # sched: [8:1.00]
 ; SKYLAKE-NEXT:    adcl $7, %edi # sched: [1:0.50]
 ; SKYLAKE-NEXT:    adcl $7, (%rsi) # sched: [8:1.00]
-; SKYLAKE-NEXT:    adcl %edi, %edi # sched: [1:0.50]
+; SKYLAKE-NEXT:    adcl %edx, %edi # sched: [1:0.50]
 ; SKYLAKE-NEXT:    adcl %edi, (%rsi) # sched: [8:1.00]
 ; SKYLAKE-NEXT:    adcl (%rsi), %edi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -438,7 +438,7 @@ define void @test_adc_32(i32 %a0, i32* %
 ; SKX-NEXT:    # sched: [8:1.00]
 ; SKX-NEXT:    adcl $7, %edi # sched: [1:0.50]
 ; SKX-NEXT:    adcl $7, (%rsi) # sched: [8:1.00]
-; SKX-NEXT:    adcl %edi, %edi # sched: [1:0.50]
+; SKX-NEXT:    adcl %edx, %edi # sched: [1:0.50]
 ; SKX-NEXT:    adcl %edi, (%rsi) # sched: [8:1.00]
 ; SKX-NEXT:    adcl (%rsi), %edi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -455,7 +455,7 @@ define void @test_adc_32(i32 %a0, i32* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    adcl $7, %edi # sched: [1:1.00]
 ; BTVER2-NEXT:    adcl $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    adcl %edi, %edi # sched: [1:1.00]
+; BTVER2-NEXT:    adcl %edx, %edi # sched: [1:1.00]
 ; BTVER2-NEXT:    adcl %edi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    adcl (%rsi), %edi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -472,15 +472,15 @@ define void @test_adc_32(i32 %a0, i32* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    adcl $7, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    adcl $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    adcl %edi, %edi # sched: [1:0.25]
+; ZNVER1-NEXT:    adcl %edx, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    adcl %edi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    adcl (%rsi), %edi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "adcl $2, %EAX \0A\09 adcl $2, $0 \0A\09 adcl $2, $1 \0A\09 adcl $3, $0 \0A\09 adcl $3, $1 \0A\09 adcl $0, $0 \0A\09 adcl $0, $1 \0A\09 adcl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "adcl $3, %EAX \0A\09 adcl $3, $0 \0A\09 adcl $3, $2 \0A\09 adcl $4, $0 \0A\09 adcl $4, $2 \0A\09 adcl $1, $0 \0A\09 adcl $0, $2 \0A\09 adcl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
   ret void
 }
-define void @test_adc_64(i64 %a0, i64* %a1) optsize {
+define void @test_adc_64(i64 %a0, i64* %a1, i64 %a2) optsize {
 ; GENERIC-LABEL: test_adc_64:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -492,7 +492,7 @@ define void @test_adc_64(i64 %a0, i64* %
 ; GENERIC-NEXT:    # sched: [9:1.00]
 ; GENERIC-NEXT:    adcq $7, %rdi # sched: [2:0.67]
 ; GENERIC-NEXT:    adcq $7, (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    adcq %rdi, %rdi # sched: [2:0.67]
+; GENERIC-NEXT:    adcq %rdx, %rdi # sched: [2:0.67]
 ; GENERIC-NEXT:    adcq %rdi, (%rsi) # sched: [9:1.00]
 ; GENERIC-NEXT:    adcq (%rsi), %rdi # sched: [7:0.67]
 ; GENERIC-NEXT:    #NO_APP
@@ -509,7 +509,7 @@ define void @test_adc_64(i64 %a0, i64* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    adcq $7, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    adcq $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    adcq %rdi, %rdi # sched: [1:0.50]
+; ATOM-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    adcq %rdi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    adcq (%rsi), %rdi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -526,7 +526,7 @@ define void @test_adc_64(i64 %a0, i64* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    adcq $7, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    adcq $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    adcq %rdi, %rdi # sched: [1:0.50]
+; SLM-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    adcq %rdi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    adcq (%rsi), %rdi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -543,7 +543,7 @@ define void @test_adc_64(i64 %a0, i64* %
 ; SANDY-NEXT:    # sched: [9:1.00]
 ; SANDY-NEXT:    adcq $7, %rdi # sched: [2:0.67]
 ; SANDY-NEXT:    adcq $7, (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    adcq %rdi, %rdi # sched: [2:0.67]
+; SANDY-NEXT:    adcq %rdx, %rdi # sched: [2:0.67]
 ; SANDY-NEXT:    adcq %rdi, (%rsi) # sched: [9:1.00]
 ; SANDY-NEXT:    adcq (%rsi), %rdi # sched: [7:0.67]
 ; SANDY-NEXT:    #NO_APP
@@ -560,7 +560,7 @@ define void @test_adc_64(i64 %a0, i64* %
 ; HASWELL-NEXT:    # sched: [9:1.00]
 ; HASWELL-NEXT:    adcq $7, %rdi # sched: [2:0.50]
 ; HASWELL-NEXT:    adcq $7, (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    adcq %rdi, %rdi # sched: [2:0.50]
+; HASWELL-NEXT:    adcq %rdx, %rdi # sched: [2:0.50]
 ; HASWELL-NEXT:    adcq %rdi, (%rsi) # sched: [9:1.00]
 ; HASWELL-NEXT:    adcq (%rsi), %rdi # sched: [7:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -577,7 +577,7 @@ define void @test_adc_64(i64 %a0, i64* %
 ; BROADWELL-NEXT:    # sched: [8:1.00]
 ; BROADWELL-NEXT:    adcq $7, %rdi # sched: [1:0.50]
 ; BROADWELL-NEXT:    adcq $7, (%rsi) # sched: [8:1.00]
-; BROADWELL-NEXT:    adcq %rdi, %rdi # sched: [1:0.50]
+; BROADWELL-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
 ; BROADWELL-NEXT:    adcq %rdi, (%rsi) # sched: [8:1.00]
 ; BROADWELL-NEXT:    adcq (%rsi), %rdi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -594,7 +594,7 @@ define void @test_adc_64(i64 %a0, i64* %
 ; SKYLAKE-NEXT:    # sched: [8:1.00]
 ; SKYLAKE-NEXT:    adcq $7, %rdi # sched: [1:0.50]
 ; SKYLAKE-NEXT:    adcq $7, (%rsi) # sched: [8:1.00]
-; SKYLAKE-NEXT:    adcq %rdi, %rdi # sched: [1:0.50]
+; SKYLAKE-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
 ; SKYLAKE-NEXT:    adcq %rdi, (%rsi) # sched: [8:1.00]
 ; SKYLAKE-NEXT:    adcq (%rsi), %rdi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -611,7 +611,7 @@ define void @test_adc_64(i64 %a0, i64* %
 ; SKX-NEXT:    # sched: [8:1.00]
 ; SKX-NEXT:    adcq $7, %rdi # sched: [1:0.50]
 ; SKX-NEXT:    adcq $7, (%rsi) # sched: [8:1.00]
-; SKX-NEXT:    adcq %rdi, %rdi # sched: [1:0.50]
+; SKX-NEXT:    adcq %rdx, %rdi # sched: [1:0.50]
 ; SKX-NEXT:    adcq %rdi, (%rsi) # sched: [8:1.00]
 ; SKX-NEXT:    adcq (%rsi), %rdi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -628,7 +628,7 @@ define void @test_adc_64(i64 %a0, i64* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    adcq $7, %rdi # sched: [1:1.00]
 ; BTVER2-NEXT:    adcq $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    adcq %rdi, %rdi # sched: [1:1.00]
+; BTVER2-NEXT:    adcq %rdx, %rdi # sched: [1:1.00]
 ; BTVER2-NEXT:    adcq %rdi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    adcq (%rsi), %rdi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -645,23 +645,23 @@ define void @test_adc_64(i64 %a0, i64* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    adcq $7, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    adcq $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    adcq %rdi, %rdi # sched: [1:0.25]
+; ZNVER1-NEXT:    adcq %rdx, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    adcq %rdi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    adcq (%rsi), %rdi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "adcq $2, %RAX \0A\09 adcq $2, $0 \0A\09 adcq $2, $1 \0A\09 adcq $3, $0 \0A\09 adcq $3, $1 \0A\09 adcq $0, $0 \0A\09 adcq $0, $1 \0A\09 adcq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "adcq $3, %RAX \0A\09 adcq $3, $0 \0A\09 adcq $3, $2 \0A\09 adcq $4, $0 \0A\09 adcq $4, $2 \0A\09 adcq $1, $0 \0A\09 adcq $0, $2 \0A\09 adcq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
   ret void
 }
 
-define void @test_add_8(i8 %a0, i8* %a1) optsize {
+define void @test_add_8(i8 %a0, i8* %a1, i8 %a2) optsize {
 ; GENERIC-LABEL: test_add_8:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    addb $7, %al # sched: [1:0.33]
 ; GENERIC-NEXT:    addb $7, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    addb %dil, %dil # sched: [1:0.33]
+; GENERIC-NEXT:    addb %dl, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -673,7 +673,7 @@ define void @test_add_8(i8 %a0, i8* %a1)
 ; ATOM-NEXT:    addb $7, %al # sched: [1:0.50]
 ; ATOM-NEXT:    addb $7, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    addb $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    addb %dil, %dil # sched: [1:0.50]
+; ATOM-NEXT:    addb %dl, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    addb %dil, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    addb (%rsi), %dil # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -685,7 +685,7 @@ define void @test_add_8(i8 %a0, i8* %a1)
 ; SLM-NEXT:    addb $7, %al # sched: [1:0.50]
 ; SLM-NEXT:    addb $7, %dil # sched: [1:0.50]
 ; SLM-NEXT:    addb $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    addb %dil, %dil # sched: [1:0.50]
+; SLM-NEXT:    addb %dl, %dil # sched: [1:0.50]
 ; SLM-NEXT:    addb %dil, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    addb (%rsi), %dil # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -697,7 +697,7 @@ define void @test_add_8(i8 %a0, i8* %a1)
 ; SANDY-NEXT:    addb $7, %al # sched: [1:0.33]
 ; SANDY-NEXT:    addb $7, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    addb %dil, %dil # sched: [1:0.33]
+; SANDY-NEXT:    addb %dl, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -709,7 +709,7 @@ define void @test_add_8(i8 %a0, i8* %a1)
 ; HASWELL-NEXT:    addb $7, %al # sched: [1:0.25]
 ; HASWELL-NEXT:    addb $7, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    addb %dil, %dil # sched: [1:0.25]
+; HASWELL-NEXT:    addb %dl, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -721,7 +721,7 @@ define void @test_add_8(i8 %a0, i8* %a1)
 ; BROADWELL-NEXT:    addb $7, %al # sched: [1:0.25]
 ; BROADWELL-NEXT:    addb $7, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    addb %dil, %dil # sched: [1:0.25]
+; BROADWELL-NEXT:    addb %dl, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -733,7 +733,7 @@ define void @test_add_8(i8 %a0, i8* %a1)
 ; SKYLAKE-NEXT:    addb $7, %al # sched: [1:0.25]
 ; SKYLAKE-NEXT:    addb $7, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    addb %dil, %dil # sched: [1:0.25]
+; SKYLAKE-NEXT:    addb %dl, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -745,7 +745,7 @@ define void @test_add_8(i8 %a0, i8* %a1)
 ; SKX-NEXT:    addb $7, %al # sched: [1:0.25]
 ; SKX-NEXT:    addb $7, %dil # sched: [1:0.25]
 ; SKX-NEXT:    addb $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    addb %dil, %dil # sched: [1:0.25]
+; SKX-NEXT:    addb %dl, %dil # sched: [1:0.25]
 ; SKX-NEXT:    addb %dil, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    addb (%rsi), %dil # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -757,7 +757,7 @@ define void @test_add_8(i8 %a0, i8* %a1)
 ; BTVER2-NEXT:    addb $7, %al # sched: [1:0.50]
 ; BTVER2-NEXT:    addb $7, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    addb $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    addb %dil, %dil # sched: [1:0.50]
+; BTVER2-NEXT:    addb %dl, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    addb %dil, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    addb (%rsi), %dil # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -769,15 +769,15 @@ define void @test_add_8(i8 %a0, i8* %a1)
 ; ZNVER1-NEXT:    addb $7, %al # sched: [1:0.25]
 ; ZNVER1-NEXT:    addb $7, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    addb $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    addb %dil, %dil # sched: [1:0.25]
+; ZNVER1-NEXT:    addb %dl, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    addb %dil, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    addb (%rsi), %dil # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "addb $2, %AL \0A\09 addb $2, $0 \0A\09 addb $2, $1 \0A\09 addb $0, $0 \0A\09 addb $0, $1 \0A\09 addb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind
+  tail call void asm "addb $3, %AL \0A\09 addb $3, $0 \0A\09 addb $3, $2 \0A\09 addb $1, $0 \0A\09 addb $0, $2 \0A\09 addb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
   ret void
 }
-define void @test_add_16(i16 %a0, i16* %a1) optsize {
+define void @test_add_16(i16 %a0, i16* %a1, i16 %a2) optsize {
 ; GENERIC-LABEL: test_add_16:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -789,7 +789,7 @@ define void @test_add_16(i16 %a0, i16* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    addw $7, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    addw %di, %di # sched: [1:0.33]
+; GENERIC-NEXT:    addw %dx, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    addw (%rsi), %di # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -806,7 +806,7 @@ define void @test_add_16(i16 %a0, i16* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    addw $7, %di # sched: [1:0.50]
 ; ATOM-NEXT:    addw $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    addw %di, %di # sched: [1:0.50]
+; ATOM-NEXT:    addw %dx, %di # sched: [1:0.50]
 ; ATOM-NEXT:    addw %di, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    addw (%rsi), %di # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -823,7 +823,7 @@ define void @test_add_16(i16 %a0, i16* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    addw $7, %di # sched: [1:0.50]
 ; SLM-NEXT:    addw $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    addw %di, %di # sched: [1:0.50]
+; SLM-NEXT:    addw %dx, %di # sched: [1:0.50]
 ; SLM-NEXT:    addw %di, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    addw (%rsi), %di # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -840,7 +840,7 @@ define void @test_add_16(i16 %a0, i16* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    addw $7, %di # sched: [1:0.33]
 ; SANDY-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    addw %di, %di # sched: [1:0.33]
+; SANDY-NEXT:    addw %dx, %di # sched: [1:0.33]
 ; SANDY-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    addw (%rsi), %di # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -857,7 +857,7 @@ define void @test_add_16(i16 %a0, i16* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    addw $7, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    addw %di, %di # sched: [1:0.25]
+; HASWELL-NEXT:    addw %dx, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    addw (%rsi), %di # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -874,7 +874,7 @@ define void @test_add_16(i16 %a0, i16* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    addw $7, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    addw %di, %di # sched: [1:0.25]
+; BROADWELL-NEXT:    addw %dx, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    addw (%rsi), %di # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -891,7 +891,7 @@ define void @test_add_16(i16 %a0, i16* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    addw $7, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    addw %di, %di # sched: [1:0.25]
+; SKYLAKE-NEXT:    addw %dx, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    addw (%rsi), %di # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -908,7 +908,7 @@ define void @test_add_16(i16 %a0, i16* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    addw $7, %di # sched: [1:0.25]
 ; SKX-NEXT:    addw $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    addw %di, %di # sched: [1:0.25]
+; SKX-NEXT:    addw %dx, %di # sched: [1:0.25]
 ; SKX-NEXT:    addw %di, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    addw (%rsi), %di # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -925,7 +925,7 @@ define void @test_add_16(i16 %a0, i16* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    addw $7, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    addw $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    addw %di, %di # sched: [1:0.50]
+; BTVER2-NEXT:    addw %dx, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    addw %di, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    addw (%rsi), %di # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -942,15 +942,15 @@ define void @test_add_16(i16 %a0, i16* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    addw $7, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    addw $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    addw %di, %di # sched: [1:0.25]
+; ZNVER1-NEXT:    addw %dx, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    addw %di, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    addw (%rsi), %di # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "addw $2, %AX \0A\09 addw $2, $0 \0A\09 addw $2, $1 \0A\09 addw $3, $0 \0A\09 addw $3, $1 \0A\09 addw $0, $0 \0A\09 addw $0, $1 \0A\09 addw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind
+  tail call void asm "addw $3, %AX \0A\09 addw $3, $0 \0A\09 addw $3, $2 \0A\09 addw $4, $0 \0A\09 addw $4, $2 \0A\09 addw $1, $0 \0A\09 addw $0, $2 \0A\09 addw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
   ret void
 }
-define void @test_add_32(i32 %a0, i32* %a1) optsize {
+define void @test_add_32(i32 %a0, i32* %a1, i32 %a2) optsize {
 ; GENERIC-LABEL: test_add_32:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -962,7 +962,7 @@ define void @test_add_32(i32 %a0, i32* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    addl $7, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    addl %edi, %edi # sched: [1:0.33]
+; GENERIC-NEXT:    addl %edx, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -979,7 +979,7 @@ define void @test_add_32(i32 %a0, i32* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    addl $7, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    addl $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    addl %edi, %edi # sched: [1:0.50]
+; ATOM-NEXT:    addl %edx, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    addl %edi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    addl (%rsi), %edi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -996,7 +996,7 @@ define void @test_add_32(i32 %a0, i32* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    addl $7, %edi # sched: [1:0.50]
 ; SLM-NEXT:    addl $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    addl %edi, %edi # sched: [1:0.50]
+; SLM-NEXT:    addl %edx, %edi # sched: [1:0.50]
 ; SLM-NEXT:    addl %edi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    addl (%rsi), %edi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -1013,7 +1013,7 @@ define void @test_add_32(i32 %a0, i32* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    addl $7, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    addl %edi, %edi # sched: [1:0.33]
+; SANDY-NEXT:    addl %edx, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -1030,7 +1030,7 @@ define void @test_add_32(i32 %a0, i32* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    addl $7, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    addl %edi, %edi # sched: [1:0.25]
+; HASWELL-NEXT:    addl %edx, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -1047,7 +1047,7 @@ define void @test_add_32(i32 %a0, i32* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    addl $7, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    addl %edi, %edi # sched: [1:0.25]
+; BROADWELL-NEXT:    addl %edx, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -1064,7 +1064,7 @@ define void @test_add_32(i32 %a0, i32* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    addl $7, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    addl %edi, %edi # sched: [1:0.25]
+; SKYLAKE-NEXT:    addl %edx, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -1081,7 +1081,7 @@ define void @test_add_32(i32 %a0, i32* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    addl $7, %edi # sched: [1:0.25]
 ; SKX-NEXT:    addl $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    addl %edi, %edi # sched: [1:0.25]
+; SKX-NEXT:    addl %edx, %edi # sched: [1:0.25]
 ; SKX-NEXT:    addl %edi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    addl (%rsi), %edi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -1098,7 +1098,7 @@ define void @test_add_32(i32 %a0, i32* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    addl $7, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    addl $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    addl %edi, %edi # sched: [1:0.50]
+; BTVER2-NEXT:    addl %edx, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    addl %edi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    addl (%rsi), %edi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -1115,15 +1115,15 @@ define void @test_add_32(i32 %a0, i32* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    addl $7, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    addl $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    addl %edi, %edi # sched: [1:0.25]
+; ZNVER1-NEXT:    addl %edx, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    addl %edi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    addl (%rsi), %edi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "addl $2, %EAX \0A\09 addl $2, $0 \0A\09 addl $2, $1 \0A\09 addl $3, $0 \0A\09 addl $3, $1 \0A\09 addl $0, $0 \0A\09 addl $0, $1 \0A\09 addl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "addl $3, %EAX \0A\09 addl $3, $0 \0A\09 addl $3, $2 \0A\09 addl $4, $0 \0A\09 addl $4, $2 \0A\09 addl $1, $0 \0A\09 addl $0, $2 \0A\09 addl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
   ret void
 }
-define void @test_add_64(i64 %a0, i64* %a1) optsize {
+define void @test_add_64(i64 %a0, i64* %a1, i64 %a2) optsize {
 ; GENERIC-LABEL: test_add_64:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -1135,7 +1135,7 @@ define void @test_add_64(i64 %a0, i64* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    addq $7, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    addq %rdi, %rdi # sched: [1:0.33]
+; GENERIC-NEXT:    addq %rdx, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -1152,7 +1152,7 @@ define void @test_add_64(i64 %a0, i64* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    addq $7, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    addq $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    addq %rdi, %rdi # sched: [1:0.50]
+; ATOM-NEXT:    addq %rdx, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    addq %rdi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    addq (%rsi), %rdi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -1169,7 +1169,7 @@ define void @test_add_64(i64 %a0, i64* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    addq $7, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    addq $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    addq %rdi, %rdi # sched: [1:0.50]
+; SLM-NEXT:    addq %rdx, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    addq %rdi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    addq (%rsi), %rdi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -1186,7 +1186,7 @@ define void @test_add_64(i64 %a0, i64* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    addq $7, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    addq %rdi, %rdi # sched: [1:0.33]
+; SANDY-NEXT:    addq %rdx, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -1203,7 +1203,7 @@ define void @test_add_64(i64 %a0, i64* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    addq $7, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    addq %rdi, %rdi # sched: [1:0.25]
+; HASWELL-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -1220,7 +1220,7 @@ define void @test_add_64(i64 %a0, i64* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    addq $7, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    addq %rdi, %rdi # sched: [1:0.25]
+; BROADWELL-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -1237,7 +1237,7 @@ define void @test_add_64(i64 %a0, i64* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    addq $7, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    addq %rdi, %rdi # sched: [1:0.25]
+; SKYLAKE-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -1254,7 +1254,7 @@ define void @test_add_64(i64 %a0, i64* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    addq $7, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    addq $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    addq %rdi, %rdi # sched: [1:0.25]
+; SKX-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    addq %rdi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    addq (%rsi), %rdi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -1271,7 +1271,7 @@ define void @test_add_64(i64 %a0, i64* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    addq $7, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    addq $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    addq %rdi, %rdi # sched: [1:0.50]
+; BTVER2-NEXT:    addq %rdx, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    addq %rdi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    addq (%rsi), %rdi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -1288,23 +1288,23 @@ define void @test_add_64(i64 %a0, i64* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    addq $7, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    addq $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    addq %rdi, %rdi # sched: [1:0.25]
+; ZNVER1-NEXT:    addq %rdx, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    addq %rdi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    addq (%rsi), %rdi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "addq $2, %RAX \0A\09 addq $2, $0 \0A\09 addq $2, $1 \0A\09 addq $3, $0 \0A\09 addq $3, $1 \0A\09 addq $0, $0 \0A\09 addq $0, $1 \0A\09 addq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "addq $3, %RAX \0A\09 addq $3, $0 \0A\09 addq $3, $2 \0A\09 addq $4, $0 \0A\09 addq $4, $2 \0A\09 addq $1, $0 \0A\09 addq $0, $2 \0A\09 addq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
   ret void
 }
 
-define void @test_and_8(i8 %a0, i8* %a1) optsize {
+define void @test_and_8(i8 %a0, i8* %a1, i8 %a2) optsize {
 ; GENERIC-LABEL: test_and_8:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    andb $7, %al # sched: [1:0.33]
 ; GENERIC-NEXT:    andb $7, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    andb %dil, %dil # sched: [1:0.33]
+; GENERIC-NEXT:    andb %dl, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -1316,7 +1316,7 @@ define void @test_and_8(i8 %a0, i8* %a1)
 ; ATOM-NEXT:    andb $7, %al # sched: [1:0.50]
 ; ATOM-NEXT:    andb $7, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    andb $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    andb %dil, %dil # sched: [1:0.50]
+; ATOM-NEXT:    andb %dl, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    andb %dil, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    andb (%rsi), %dil # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -1328,7 +1328,7 @@ define void @test_and_8(i8 %a0, i8* %a1)
 ; SLM-NEXT:    andb $7, %al # sched: [1:0.50]
 ; SLM-NEXT:    andb $7, %dil # sched: [1:0.50]
 ; SLM-NEXT:    andb $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    andb %dil, %dil # sched: [1:0.50]
+; SLM-NEXT:    andb %dl, %dil # sched: [1:0.50]
 ; SLM-NEXT:    andb %dil, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    andb (%rsi), %dil # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -1340,7 +1340,7 @@ define void @test_and_8(i8 %a0, i8* %a1)
 ; SANDY-NEXT:    andb $7, %al # sched: [1:0.33]
 ; SANDY-NEXT:    andb $7, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    andb %dil, %dil # sched: [1:0.33]
+; SANDY-NEXT:    andb %dl, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -1352,7 +1352,7 @@ define void @test_and_8(i8 %a0, i8* %a1)
 ; HASWELL-NEXT:    andb $7, %al # sched: [1:0.25]
 ; HASWELL-NEXT:    andb $7, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    andb %dil, %dil # sched: [1:0.25]
+; HASWELL-NEXT:    andb %dl, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -1364,7 +1364,7 @@ define void @test_and_8(i8 %a0, i8* %a1)
 ; BROADWELL-NEXT:    andb $7, %al # sched: [1:0.25]
 ; BROADWELL-NEXT:    andb $7, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    andb %dil, %dil # sched: [1:0.25]
+; BROADWELL-NEXT:    andb %dl, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -1376,7 +1376,7 @@ define void @test_and_8(i8 %a0, i8* %a1)
 ; SKYLAKE-NEXT:    andb $7, %al # sched: [1:0.25]
 ; SKYLAKE-NEXT:    andb $7, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    andb %dil, %dil # sched: [1:0.25]
+; SKYLAKE-NEXT:    andb %dl, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -1388,7 +1388,7 @@ define void @test_and_8(i8 %a0, i8* %a1)
 ; SKX-NEXT:    andb $7, %al # sched: [1:0.25]
 ; SKX-NEXT:    andb $7, %dil # sched: [1:0.25]
 ; SKX-NEXT:    andb $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    andb %dil, %dil # sched: [1:0.25]
+; SKX-NEXT:    andb %dl, %dil # sched: [1:0.25]
 ; SKX-NEXT:    andb %dil, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    andb (%rsi), %dil # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -1400,7 +1400,7 @@ define void @test_and_8(i8 %a0, i8* %a1)
 ; BTVER2-NEXT:    andb $7, %al # sched: [1:0.50]
 ; BTVER2-NEXT:    andb $7, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    andb $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    andb %dil, %dil # sched: [1:0.50]
+; BTVER2-NEXT:    andb %dl, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    andb %dil, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    andb (%rsi), %dil # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -1412,15 +1412,15 @@ define void @test_and_8(i8 %a0, i8* %a1)
 ; ZNVER1-NEXT:    andb $7, %al # sched: [1:0.25]
 ; ZNVER1-NEXT:    andb $7, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    andb $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    andb %dil, %dil # sched: [1:0.25]
+; ZNVER1-NEXT:    andb %dl, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    andb %dil, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    andb (%rsi), %dil # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "andb $2, %AL \0A\09 andb $2, $0 \0A\09 andb $2, $1 \0A\09 andb $0, $0 \0A\09 andb $0, $1 \0A\09 andb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind
+  tail call void asm "andb $3, %AL \0A\09 andb $3, $0 \0A\09 andb $3, $2 \0A\09 andb $1, $0 \0A\09 andb $0, $2 \0A\09 andb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
   ret void
 }
-define void @test_and_16(i16 %a0, i16* %a1) optsize {
+define void @test_and_16(i16 %a0, i16* %a1, i16 %a2) optsize {
 ; GENERIC-LABEL: test_and_16:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -1432,7 +1432,7 @@ define void @test_and_16(i16 %a0, i16* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    andw $7, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    andw %di, %di # sched: [1:0.33]
+; GENERIC-NEXT:    andw %dx, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    andw (%rsi), %di # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -1449,7 +1449,7 @@ define void @test_and_16(i16 %a0, i16* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    andw $7, %di # sched: [1:0.50]
 ; ATOM-NEXT:    andw $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    andw %di, %di # sched: [1:0.50]
+; ATOM-NEXT:    andw %dx, %di # sched: [1:0.50]
 ; ATOM-NEXT:    andw %di, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    andw (%rsi), %di # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -1466,7 +1466,7 @@ define void @test_and_16(i16 %a0, i16* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    andw $7, %di # sched: [1:0.50]
 ; SLM-NEXT:    andw $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    andw %di, %di # sched: [1:0.50]
+; SLM-NEXT:    andw %dx, %di # sched: [1:0.50]
 ; SLM-NEXT:    andw %di, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    andw (%rsi), %di # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -1483,7 +1483,7 @@ define void @test_and_16(i16 %a0, i16* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    andw $7, %di # sched: [1:0.33]
 ; SANDY-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    andw %di, %di # sched: [1:0.33]
+; SANDY-NEXT:    andw %dx, %di # sched: [1:0.33]
 ; SANDY-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    andw (%rsi), %di # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -1500,7 +1500,7 @@ define void @test_and_16(i16 %a0, i16* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    andw $7, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    andw %di, %di # sched: [1:0.25]
+; HASWELL-NEXT:    andw %dx, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    andw (%rsi), %di # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -1517,7 +1517,7 @@ define void @test_and_16(i16 %a0, i16* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    andw $7, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    andw %di, %di # sched: [1:0.25]
+; BROADWELL-NEXT:    andw %dx, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    andw (%rsi), %di # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -1534,7 +1534,7 @@ define void @test_and_16(i16 %a0, i16* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    andw $7, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    andw %di, %di # sched: [1:0.25]
+; SKYLAKE-NEXT:    andw %dx, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    andw (%rsi), %di # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -1551,7 +1551,7 @@ define void @test_and_16(i16 %a0, i16* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    andw $7, %di # sched: [1:0.25]
 ; SKX-NEXT:    andw $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    andw %di, %di # sched: [1:0.25]
+; SKX-NEXT:    andw %dx, %di # sched: [1:0.25]
 ; SKX-NEXT:    andw %di, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    andw (%rsi), %di # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -1568,7 +1568,7 @@ define void @test_and_16(i16 %a0, i16* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    andw $7, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    andw $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    andw %di, %di # sched: [1:0.50]
+; BTVER2-NEXT:    andw %dx, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    andw %di, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    andw (%rsi), %di # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -1585,15 +1585,15 @@ define void @test_and_16(i16 %a0, i16* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    andw $7, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    andw $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    andw %di, %di # sched: [1:0.25]
+; ZNVER1-NEXT:    andw %dx, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    andw %di, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    andw (%rsi), %di # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "andw $2, %AX \0A\09 andw $2, $0 \0A\09 andw $2, $1 \0A\09 andw $3, $0 \0A\09 andw $3, $1 \0A\09 andw $0, $0 \0A\09 andw $0, $1 \0A\09 andw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind
+  tail call void asm "andw $3, %AX \0A\09 andw $3, $0 \0A\09 andw $3, $2 \0A\09 andw $4, $0 \0A\09 andw $4, $2 \0A\09 andw $1, $0 \0A\09 andw $0, $2 \0A\09 andw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
   ret void
 }
-define void @test_and_32(i32 %a0, i32* %a1) optsize {
+define void @test_and_32(i32 %a0, i32* %a1, i32 %a2) optsize {
 ; GENERIC-LABEL: test_and_32:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -1605,7 +1605,7 @@ define void @test_and_32(i32 %a0, i32* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    andl $7, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    andl %edi, %edi # sched: [1:0.33]
+; GENERIC-NEXT:    andl %edx, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -1622,7 +1622,7 @@ define void @test_and_32(i32 %a0, i32* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    andl $7, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    andl $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    andl %edi, %edi # sched: [1:0.50]
+; ATOM-NEXT:    andl %edx, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    andl %edi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    andl (%rsi), %edi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -1639,7 +1639,7 @@ define void @test_and_32(i32 %a0, i32* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    andl $7, %edi # sched: [1:0.50]
 ; SLM-NEXT:    andl $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    andl %edi, %edi # sched: [1:0.50]
+; SLM-NEXT:    andl %edx, %edi # sched: [1:0.50]
 ; SLM-NEXT:    andl %edi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    andl (%rsi), %edi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -1656,7 +1656,7 @@ define void @test_and_32(i32 %a0, i32* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    andl $7, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    andl %edi, %edi # sched: [1:0.33]
+; SANDY-NEXT:    andl %edx, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -1673,7 +1673,7 @@ define void @test_and_32(i32 %a0, i32* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    andl $7, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    andl %edi, %edi # sched: [1:0.25]
+; HASWELL-NEXT:    andl %edx, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -1690,7 +1690,7 @@ define void @test_and_32(i32 %a0, i32* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    andl $7, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    andl %edi, %edi # sched: [1:0.25]
+; BROADWELL-NEXT:    andl %edx, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -1707,7 +1707,7 @@ define void @test_and_32(i32 %a0, i32* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    andl $7, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    andl %edi, %edi # sched: [1:0.25]
+; SKYLAKE-NEXT:    andl %edx, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -1724,7 +1724,7 @@ define void @test_and_32(i32 %a0, i32* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    andl $7, %edi # sched: [1:0.25]
 ; SKX-NEXT:    andl $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    andl %edi, %edi # sched: [1:0.25]
+; SKX-NEXT:    andl %edx, %edi # sched: [1:0.25]
 ; SKX-NEXT:    andl %edi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    andl (%rsi), %edi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -1741,7 +1741,7 @@ define void @test_and_32(i32 %a0, i32* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    andl $7, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    andl $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    andl %edi, %edi # sched: [1:0.50]
+; BTVER2-NEXT:    andl %edx, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    andl %edi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    andl (%rsi), %edi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -1758,15 +1758,15 @@ define void @test_and_32(i32 %a0, i32* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    andl $7, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    andl $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    andl %edi, %edi # sched: [1:0.25]
+; ZNVER1-NEXT:    andl %edx, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    andl %edi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    andl (%rsi), %edi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "andl $2, %EAX \0A\09 andl $2, $0 \0A\09 andl $2, $1 \0A\09 andl $3, $0 \0A\09 andl $3, $1 \0A\09 andl $0, $0 \0A\09 andl $0, $1 \0A\09 andl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "andl $3, %EAX \0A\09 andl $3, $0 \0A\09 andl $3, $2 \0A\09 andl $4, $0 \0A\09 andl $4, $2 \0A\09 andl $1, $0 \0A\09 andl $0, $2 \0A\09 andl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
   ret void
 }
-define void @test_and_64(i64 %a0, i64* %a1) optsize {
+define void @test_and_64(i64 %a0, i64* %a1, i64 %a2) optsize {
 ; GENERIC-LABEL: test_and_64:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -1778,7 +1778,7 @@ define void @test_and_64(i64 %a0, i64* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    andq $7, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    andq %rdi, %rdi # sched: [1:0.33]
+; GENERIC-NEXT:    andq %rdx, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -1795,7 +1795,7 @@ define void @test_and_64(i64 %a0, i64* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    andq $7, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    andq $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    andq %rdi, %rdi # sched: [1:0.50]
+; ATOM-NEXT:    andq %rdx, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    andq %rdi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    andq (%rsi), %rdi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -1812,7 +1812,7 @@ define void @test_and_64(i64 %a0, i64* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    andq $7, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    andq $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    andq %rdi, %rdi # sched: [1:0.50]
+; SLM-NEXT:    andq %rdx, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    andq %rdi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    andq (%rsi), %rdi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -1829,7 +1829,7 @@ define void @test_and_64(i64 %a0, i64* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    andq $7, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    andq %rdi, %rdi # sched: [1:0.33]
+; SANDY-NEXT:    andq %rdx, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -1846,7 +1846,7 @@ define void @test_and_64(i64 %a0, i64* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    andq $7, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    andq %rdi, %rdi # sched: [1:0.25]
+; HASWELL-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -1863,7 +1863,7 @@ define void @test_and_64(i64 %a0, i64* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    andq $7, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    andq %rdi, %rdi # sched: [1:0.25]
+; BROADWELL-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -1880,7 +1880,7 @@ define void @test_and_64(i64 %a0, i64* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    andq $7, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    andq %rdi, %rdi # sched: [1:0.25]
+; SKYLAKE-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -1897,7 +1897,7 @@ define void @test_and_64(i64 %a0, i64* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    andq $7, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    andq $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    andq %rdi, %rdi # sched: [1:0.25]
+; SKX-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    andq %rdi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    andq (%rsi), %rdi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -1914,7 +1914,7 @@ define void @test_and_64(i64 %a0, i64* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    andq $7, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    andq $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    andq %rdi, %rdi # sched: [1:0.50]
+; BTVER2-NEXT:    andq %rdx, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    andq %rdi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    andq (%rsi), %rdi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -1931,12 +1931,12 @@ define void @test_and_64(i64 %a0, i64* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    andq $7, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    andq $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    andq %rdi, %rdi # sched: [1:0.25]
+; ZNVER1-NEXT:    andq %rdx, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    andq %rdi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    andq (%rsi), %rdi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "andq $2, %RAX \0A\09 andq $2, $0 \0A\09 andq $2, $1 \0A\09 andq $3, $0 \0A\09 andq $3, $1 \0A\09 andq $0, $0 \0A\09 andq $0, $1 \0A\09 andq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "andq $3, %RAX \0A\09 andq $3, $0 \0A\09 andq $3, $2 \0A\09 andq $4, $0 \0A\09 andq $4, $2 \0A\09 andq $1, $0 \0A\09 andq $0, $2 \0A\09 andq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
   ret void
 }
 
@@ -5620,13 +5620,13 @@ define void @test_imul_8(i8 %a0, i8* %a1
   tail call void asm "imulb $0 \0A\09 imulb $1", "r,*m"(i8 %a0, i8* %a1) nounwind
   ret void
 }
-define void @test_imul_16(i16 %a0, i16* %a1) optsize {
+define void @test_imul_16(i16 %a0, i16* %a1, i16 %a2) optsize {
 ; GENERIC-LABEL: test_imul_16:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    imulw %di # sched: [4:1.33]
 ; GENERIC-NEXT:    imulw (%rsi) # sched: [9:1.33]
-; GENERIC-NEXT:    imulw %di, %di # sched: [3:1.00]
+; GENERIC-NEXT:    imulw %dx, %di # sched: [3:1.00]
 ; GENERIC-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
 ; GENERIC-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; GENERIC-NEXT:    # sched: [4:1.00]
@@ -5642,7 +5642,7 @@ define void @test_imul_16(i16 %a0, i16*
 ; ATOM-NEXT:    #APP
 ; ATOM-NEXT:    imulw %di # sched: [7:3.50]
 ; ATOM-NEXT:    imulw (%rsi) # sched: [8:4.00]
-; ATOM-NEXT:    imulw %di, %di # sched: [6:3.00]
+; ATOM-NEXT:    imulw %dx, %di # sched: [6:3.00]
 ; ATOM-NEXT:    imulw (%rsi), %di # sched: [7:3.50]
 ; ATOM-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; ATOM-NEXT:    # sched: [6:3.00]
@@ -5658,7 +5658,7 @@ define void @test_imul_16(i16 %a0, i16*
 ; SLM-NEXT:    #APP
 ; SLM-NEXT:    imulw %di # sched: [3:1.00]
 ; SLM-NEXT:    imulw (%rsi) # sched: [6:1.00]
-; SLM-NEXT:    imulw %di, %di # sched: [3:1.00]
+; SLM-NEXT:    imulw %dx, %di # sched: [3:1.00]
 ; SLM-NEXT:    imulw (%rsi), %di # sched: [6:1.00]
 ; SLM-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; SLM-NEXT:    # sched: [3:1.00]
@@ -5674,7 +5674,7 @@ define void @test_imul_16(i16 %a0, i16*
 ; SANDY-NEXT:    #APP
 ; SANDY-NEXT:    imulw %di # sched: [4:1.33]
 ; SANDY-NEXT:    imulw (%rsi) # sched: [9:1.33]
-; SANDY-NEXT:    imulw %di, %di # sched: [3:1.00]
+; SANDY-NEXT:    imulw %dx, %di # sched: [3:1.00]
 ; SANDY-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
 ; SANDY-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; SANDY-NEXT:    # sched: [4:1.00]
@@ -5690,7 +5690,7 @@ define void @test_imul_16(i16 %a0, i16*
 ; HASWELL-NEXT:    #APP
 ; HASWELL-NEXT:    imulw %di # sched: [4:1.00]
 ; HASWELL-NEXT:    imulw (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    imulw %di, %di # sched: [3:1.00]
+; HASWELL-NEXT:    imulw %dx, %di # sched: [3:1.00]
 ; HASWELL-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
 ; HASWELL-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; HASWELL-NEXT:    # sched: [4:1.00]
@@ -5706,7 +5706,7 @@ define void @test_imul_16(i16 %a0, i16*
 ; BROADWELL-NEXT:    #APP
 ; BROADWELL-NEXT:    imulw %di # sched: [4:1.00]
 ; BROADWELL-NEXT:    imulw (%rsi) # sched: [9:1.00]
-; BROADWELL-NEXT:    imulw %di, %di # sched: [3:1.00]
+; BROADWELL-NEXT:    imulw %dx, %di # sched: [3:1.00]
 ; BROADWELL-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
 ; BROADWELL-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; BROADWELL-NEXT:    # sched: [4:1.00]
@@ -5722,7 +5722,7 @@ define void @test_imul_16(i16 %a0, i16*
 ; SKYLAKE-NEXT:    #APP
 ; SKYLAKE-NEXT:    imulw %di # sched: [4:1.00]
 ; SKYLAKE-NEXT:    imulw (%rsi) # sched: [9:1.00]
-; SKYLAKE-NEXT:    imulw %di, %di # sched: [3:1.00]
+; SKYLAKE-NEXT:    imulw %dx, %di # sched: [3:1.00]
 ; SKYLAKE-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
 ; SKYLAKE-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; SKYLAKE-NEXT:    # sched: [4:1.00]
@@ -5738,7 +5738,7 @@ define void @test_imul_16(i16 %a0, i16*
 ; SKX-NEXT:    #APP
 ; SKX-NEXT:    imulw %di # sched: [4:1.00]
 ; SKX-NEXT:    imulw (%rsi) # sched: [9:1.00]
-; SKX-NEXT:    imulw %di, %di # sched: [3:1.00]
+; SKX-NEXT:    imulw %dx, %di # sched: [3:1.00]
 ; SKX-NEXT:    imulw (%rsi), %di # sched: [8:1.00]
 ; SKX-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; SKX-NEXT:    # sched: [4:1.00]
@@ -5754,7 +5754,7 @@ define void @test_imul_16(i16 %a0, i16*
 ; BTVER2-NEXT:    #APP
 ; BTVER2-NEXT:    imulw %di # sched: [3:1.00]
 ; BTVER2-NEXT:    imulw (%rsi) # sched: [6:1.00]
-; BTVER2-NEXT:    imulw %di, %di # sched: [3:1.00]
+; BTVER2-NEXT:    imulw %dx, %di # sched: [3:1.00]
 ; BTVER2-NEXT:    imulw (%rsi), %di # sched: [6:1.00]
 ; BTVER2-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; BTVER2-NEXT:    # sched: [3:1.00]
@@ -5770,7 +5770,7 @@ define void @test_imul_16(i16 %a0, i16*
 ; ZNVER1-NEXT:    #APP
 ; ZNVER1-NEXT:    imulw %di # sched: [3:1.00]
 ; ZNVER1-NEXT:    imulw (%rsi) # sched: [8:1.00]
-; ZNVER1-NEXT:    imulw %di, %di # sched: [3:1.00]
+; ZNVER1-NEXT:    imulw %dx, %di # sched: [3:1.00]
 ; ZNVER1-NEXT:    imulw (%rsi), %di # sched: [3:1.00]
 ; ZNVER1-NEXT:    imulw $511, %di, %di # imm = 0x1FF
 ; ZNVER1-NEXT:    # sched: [3:1.00]
@@ -5780,16 +5780,16 @@ define void @test_imul_16(i16 %a0, i16*
 ; ZNVER1-NEXT:    imulw $7, (%rsi), %di # sched: [3:1.00]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "imulw $0 \0A\09 imulw $1 \0A\09 imulw $0, $0 \0A\09 imulw $1, $0 \0A\09 imulw $2, $0, $0 \0A\09 imulw $2, $1, $0 \0A\09 imulw $3, $0, $0 \0A\09 imulw $3, $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind
+  tail call void asm "imulw $0 \0A\09 imulw $2 \0A\09 imulw $1, $0 \0A\09 imulw $2, $0 \0A\09 imulw $3, $0, $0 \0A\09 imulw $3, $2, $0 \0A\09 imulw $4, $0, $0 \0A\09 imulw $4, $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
   ret void
 }
-define void @test_imul_32(i32 %a0, i32* %a1) optsize {
+define void @test_imul_32(i32 %a0, i32* %a1, i32 %a2) optsize {
 ; GENERIC-LABEL: test_imul_32:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    imull %edi # sched: [4:1.00]
 ; GENERIC-NEXT:    imull (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    imull %edi, %edi # sched: [3:1.00]
+; GENERIC-NEXT:    imull %edx, %edi # sched: [3:1.00]
 ; GENERIC-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
 ; GENERIC-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; GENERIC-NEXT:    # sched: [3:1.00]
@@ -5805,7 +5805,7 @@ define void @test_imul_32(i32 %a0, i32*
 ; ATOM-NEXT:    #APP
 ; ATOM-NEXT:    imull %edi # sched: [6:3.00]
 ; ATOM-NEXT:    imull (%rsi) # sched: [7:3.50]
-; ATOM-NEXT:    imull %edi, %edi # sched: [5:5.00]
+; ATOM-NEXT:    imull %edx, %edi # sched: [5:5.00]
 ; ATOM-NEXT:    imull (%rsi), %edi # sched: [5:5.00]
 ; ATOM-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; ATOM-NEXT:    # sched: [5:5.00]
@@ -5821,7 +5821,7 @@ define void @test_imul_32(i32 %a0, i32*
 ; SLM-NEXT:    #APP
 ; SLM-NEXT:    imull %edi # sched: [3:1.00]
 ; SLM-NEXT:    imull (%rsi) # sched: [6:1.00]
-; SLM-NEXT:    imull %edi, %edi # sched: [3:1.00]
+; SLM-NEXT:    imull %edx, %edi # sched: [3:1.00]
 ; SLM-NEXT:    imull (%rsi), %edi # sched: [6:1.00]
 ; SLM-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; SLM-NEXT:    # sched: [3:1.00]
@@ -5837,7 +5837,7 @@ define void @test_imul_32(i32 %a0, i32*
 ; SANDY-NEXT:    #APP
 ; SANDY-NEXT:    imull %edi # sched: [4:1.00]
 ; SANDY-NEXT:    imull (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    imull %edi, %edi # sched: [3:1.00]
+; SANDY-NEXT:    imull %edx, %edi # sched: [3:1.00]
 ; SANDY-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
 ; SANDY-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; SANDY-NEXT:    # sched: [3:1.00]
@@ -5853,7 +5853,7 @@ define void @test_imul_32(i32 %a0, i32*
 ; HASWELL-NEXT:    #APP
 ; HASWELL-NEXT:    imull %edi # sched: [4:1.00]
 ; HASWELL-NEXT:    imull (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    imull %edi, %edi # sched: [3:1.00]
+; HASWELL-NEXT:    imull %edx, %edi # sched: [3:1.00]
 ; HASWELL-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
 ; HASWELL-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; HASWELL-NEXT:    # sched: [3:1.00]
@@ -5869,7 +5869,7 @@ define void @test_imul_32(i32 %a0, i32*
 ; BROADWELL-NEXT:    #APP
 ; BROADWELL-NEXT:    imull %edi # sched: [4:1.00]
 ; BROADWELL-NEXT:    imull (%rsi) # sched: [9:1.00]
-; BROADWELL-NEXT:    imull %edi, %edi # sched: [3:1.00]
+; BROADWELL-NEXT:    imull %edx, %edi # sched: [3:1.00]
 ; BROADWELL-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
 ; BROADWELL-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; BROADWELL-NEXT:    # sched: [3:1.00]
@@ -5885,7 +5885,7 @@ define void @test_imul_32(i32 %a0, i32*
 ; SKYLAKE-NEXT:    #APP
 ; SKYLAKE-NEXT:    imull %edi # sched: [4:1.00]
 ; SKYLAKE-NEXT:    imull (%rsi) # sched: [9:1.00]
-; SKYLAKE-NEXT:    imull %edi, %edi # sched: [3:1.00]
+; SKYLAKE-NEXT:    imull %edx, %edi # sched: [3:1.00]
 ; SKYLAKE-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
 ; SKYLAKE-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; SKYLAKE-NEXT:    # sched: [3:1.00]
@@ -5901,7 +5901,7 @@ define void @test_imul_32(i32 %a0, i32*
 ; SKX-NEXT:    #APP
 ; SKX-NEXT:    imull %edi # sched: [4:1.00]
 ; SKX-NEXT:    imull (%rsi) # sched: [9:1.00]
-; SKX-NEXT:    imull %edi, %edi # sched: [3:1.00]
+; SKX-NEXT:    imull %edx, %edi # sched: [3:1.00]
 ; SKX-NEXT:    imull (%rsi), %edi # sched: [8:1.00]
 ; SKX-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; SKX-NEXT:    # sched: [3:1.00]
@@ -5917,7 +5917,7 @@ define void @test_imul_32(i32 %a0, i32*
 ; BTVER2-NEXT:    #APP
 ; BTVER2-NEXT:    imull %edi # sched: [3:1.00]
 ; BTVER2-NEXT:    imull (%rsi) # sched: [6:1.00]
-; BTVER2-NEXT:    imull %edi, %edi # sched: [3:1.00]
+; BTVER2-NEXT:    imull %edx, %edi # sched: [3:1.00]
 ; BTVER2-NEXT:    imull (%rsi), %edi # sched: [6:1.00]
 ; BTVER2-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; BTVER2-NEXT:    # sched: [3:1.00]
@@ -5933,7 +5933,7 @@ define void @test_imul_32(i32 %a0, i32*
 ; ZNVER1-NEXT:    #APP
 ; ZNVER1-NEXT:    imull %edi # sched: [3:1.00]
 ; ZNVER1-NEXT:    imull (%rsi) # sched: [8:1.00]
-; ZNVER1-NEXT:    imull %edi, %edi # sched: [3:1.00]
+; ZNVER1-NEXT:    imull %edx, %edi # sched: [3:1.00]
 ; ZNVER1-NEXT:    imull (%rsi), %edi # sched: [3:1.00]
 ; ZNVER1-NEXT:    imull $665536, %edi, %edi # imm = 0xA27C0
 ; ZNVER1-NEXT:    # sched: [3:1.00]
@@ -5943,16 +5943,16 @@ define void @test_imul_32(i32 %a0, i32*
 ; ZNVER1-NEXT:    imull $7, (%rsi), %edi # sched: [3:1.00]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "imull $0 \0A\09 imull $1 \0A\09 imull $0, $0 \0A\09 imull $1, $0 \0A\09 imull $2, $0, $0 \0A\09 imull $2, $1, $0 \0A\09 imull $3, $0, $0 \0A\09 imull $3, $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "imull $0 \0A\09 imull $2 \0A\09 imull $1, $0 \0A\09 imull $2, $0 \0A\09 imull $3, $0, $0 \0A\09 imull $3, $2, $0 \0A\09 imull $4, $0, $0 \0A\09 imull $4, $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
   ret void
 }
-define void @test_imul_64(i64 %a0, i64* %a1) optsize {
+define void @test_imul_64(i64 %a0, i64* %a1, i64 %a2) optsize {
 ; GENERIC-LABEL: test_imul_64:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    imulq %rdi # sched: [4:1.00]
 ; GENERIC-NEXT:    imulq (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    imulq %rdi, %rdi # sched: [3:1.00]
+; GENERIC-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
 ; GENERIC-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
 ; GENERIC-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; GENERIC-NEXT:    # sched: [3:1.00]
@@ -5968,7 +5968,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; ATOM-NEXT:    #APP
 ; ATOM-NEXT:    imulq %rdi # sched: [12:6.00]
 ; ATOM-NEXT:    imulq (%rsi) # sched: [12:6.00]
-; ATOM-NEXT:    imulq %rdi, %rdi # sched: [12:6.00]
+; ATOM-NEXT:    imulq %rdx, %rdi # sched: [12:6.00]
 ; ATOM-NEXT:    imulq (%rsi), %rdi # sched: [12:6.00]
 ; ATOM-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; ATOM-NEXT:    # sched: [14:7.00]
@@ -5984,7 +5984,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; SLM-NEXT:    #APP
 ; SLM-NEXT:    imulq %rdi # sched: [3:1.00]
 ; SLM-NEXT:    imulq (%rsi) # sched: [6:1.00]
-; SLM-NEXT:    imulq %rdi, %rdi # sched: [3:1.00]
+; SLM-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
 ; SLM-NEXT:    imulq (%rsi), %rdi # sched: [6:1.00]
 ; SLM-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; SLM-NEXT:    # sched: [3:1.00]
@@ -6000,7 +6000,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; SANDY-NEXT:    #APP
 ; SANDY-NEXT:    imulq %rdi # sched: [4:1.00]
 ; SANDY-NEXT:    imulq (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    imulq %rdi, %rdi # sched: [3:1.00]
+; SANDY-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
 ; SANDY-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
 ; SANDY-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; SANDY-NEXT:    # sched: [3:1.00]
@@ -6016,7 +6016,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; HASWELL-NEXT:    #APP
 ; HASWELL-NEXT:    imulq %rdi # sched: [4:1.00]
 ; HASWELL-NEXT:    imulq (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    imulq %rdi, %rdi # sched: [3:1.00]
+; HASWELL-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
 ; HASWELL-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
 ; HASWELL-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; HASWELL-NEXT:    # sched: [3:1.00]
@@ -6032,7 +6032,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; BROADWELL-NEXT:    #APP
 ; BROADWELL-NEXT:    imulq %rdi # sched: [4:1.00]
 ; BROADWELL-NEXT:    imulq (%rsi) # sched: [9:1.00]
-; BROADWELL-NEXT:    imulq %rdi, %rdi # sched: [3:1.00]
+; BROADWELL-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
 ; BROADWELL-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
 ; BROADWELL-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; BROADWELL-NEXT:    # sched: [3:1.00]
@@ -6048,7 +6048,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; SKYLAKE-NEXT:    #APP
 ; SKYLAKE-NEXT:    imulq %rdi # sched: [4:1.00]
 ; SKYLAKE-NEXT:    imulq (%rsi) # sched: [9:1.00]
-; SKYLAKE-NEXT:    imulq %rdi, %rdi # sched: [3:1.00]
+; SKYLAKE-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
 ; SKYLAKE-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
 ; SKYLAKE-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; SKYLAKE-NEXT:    # sched: [3:1.00]
@@ -6064,7 +6064,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; SKX-NEXT:    #APP
 ; SKX-NEXT:    imulq %rdi # sched: [4:1.00]
 ; SKX-NEXT:    imulq (%rsi) # sched: [9:1.00]
-; SKX-NEXT:    imulq %rdi, %rdi # sched: [3:1.00]
+; SKX-NEXT:    imulq %rdx, %rdi # sched: [3:1.00]
 ; SKX-NEXT:    imulq (%rsi), %rdi # sched: [8:1.00]
 ; SKX-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; SKX-NEXT:    # sched: [3:1.00]
@@ -6080,7 +6080,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; BTVER2-NEXT:    #APP
 ; BTVER2-NEXT:    imulq %rdi # sched: [6:4.00]
 ; BTVER2-NEXT:    imulq (%rsi) # sched: [9:4.00]
-; BTVER2-NEXT:    imulq %rdi, %rdi # sched: [6:4.00]
+; BTVER2-NEXT:    imulq %rdx, %rdi # sched: [6:4.00]
 ; BTVER2-NEXT:    imulq (%rsi), %rdi # sched: [9:4.00]
 ; BTVER2-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; BTVER2-NEXT:    # sched: [6:4.00]
@@ -6096,7 +6096,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; ZNVER1-NEXT:    #APP
 ; ZNVER1-NEXT:    imulq %rdi # sched: [4:1.00]
 ; ZNVER1-NEXT:    imulq (%rsi) # sched: [9:1.00]
-; ZNVER1-NEXT:    imulq %rdi, %rdi # sched: [4:1.00]
+; ZNVER1-NEXT:    imulq %rdx, %rdi # sched: [4:1.00]
 ; ZNVER1-NEXT:    imulq (%rsi), %rdi # sched: [4:1.00]
 ; ZNVER1-NEXT:    imulq $665536, %rdi, %rdi # imm = 0xA27C0
 ; ZNVER1-NEXT:    # sched: [4:1.00]
@@ -6106,7 +6106,7 @@ define void @test_imul_64(i64 %a0, i64*
 ; ZNVER1-NEXT:    imulq $7, (%rsi), %rdi # sched: [4:1.00]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "imulq $0 \0A\09 imulq $1 \0A\09 imulq $0, $0 \0A\09 imulq $1, $0 \0A\09 imulq $2, $0, $0 \0A\09 imulq $2, $1, $0 \0A\09 imulq $3, $0, $0 \0A\09 imulq $3, $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "imulq $0 \0A\09 imulq $2 \0A\09 imulq $1, $0 \0A\09 imulq $2, $0 \0A\09 imulq $3, $0, $0 \0A\09 imulq $3, $2, $0 \0A\09 imulq $4, $0, $0 \0A\09 imulq $4, $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
   ret void
 }
 
@@ -8579,14 +8579,14 @@ define void @test_not(i8 %a0, i16 %a1, i
   ret void
 }
 
-define void @test_or_8(i8 %a0, i8* %a1) optsize {
+define void @test_or_8(i8 %a0, i8* %a1, i8 %a2) optsize {
 ; GENERIC-LABEL: test_or_8:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    orb $7, %al # sched: [1:0.33]
 ; GENERIC-NEXT:    orb $7, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    orb %dil, %dil # sched: [1:0.33]
+; GENERIC-NEXT:    orb %dl, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -8598,7 +8598,7 @@ define void @test_or_8(i8 %a0, i8* %a1)
 ; ATOM-NEXT:    orb $7, %al # sched: [1:0.50]
 ; ATOM-NEXT:    orb $7, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    orb $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    orb %dil, %dil # sched: [1:0.50]
+; ATOM-NEXT:    orb %dl, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    orb %dil, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    orb (%rsi), %dil # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -8610,7 +8610,7 @@ define void @test_or_8(i8 %a0, i8* %a1)
 ; SLM-NEXT:    orb $7, %al # sched: [1:0.50]
 ; SLM-NEXT:    orb $7, %dil # sched: [1:0.50]
 ; SLM-NEXT:    orb $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    orb %dil, %dil # sched: [1:0.50]
+; SLM-NEXT:    orb %dl, %dil # sched: [1:0.50]
 ; SLM-NEXT:    orb %dil, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    orb (%rsi), %dil # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -8622,7 +8622,7 @@ define void @test_or_8(i8 %a0, i8* %a1)
 ; SANDY-NEXT:    orb $7, %al # sched: [1:0.33]
 ; SANDY-NEXT:    orb $7, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    orb %dil, %dil # sched: [1:0.33]
+; SANDY-NEXT:    orb %dl, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -8634,7 +8634,7 @@ define void @test_or_8(i8 %a0, i8* %a1)
 ; HASWELL-NEXT:    orb $7, %al # sched: [1:0.25]
 ; HASWELL-NEXT:    orb $7, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    orb %dil, %dil # sched: [1:0.25]
+; HASWELL-NEXT:    orb %dl, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -8646,7 +8646,7 @@ define void @test_or_8(i8 %a0, i8* %a1)
 ; BROADWELL-NEXT:    orb $7, %al # sched: [1:0.25]
 ; BROADWELL-NEXT:    orb $7, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    orb %dil, %dil # sched: [1:0.25]
+; BROADWELL-NEXT:    orb %dl, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -8658,7 +8658,7 @@ define void @test_or_8(i8 %a0, i8* %a1)
 ; SKYLAKE-NEXT:    orb $7, %al # sched: [1:0.25]
 ; SKYLAKE-NEXT:    orb $7, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    orb %dil, %dil # sched: [1:0.25]
+; SKYLAKE-NEXT:    orb %dl, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -8670,7 +8670,7 @@ define void @test_or_8(i8 %a0, i8* %a1)
 ; SKX-NEXT:    orb $7, %al # sched: [1:0.25]
 ; SKX-NEXT:    orb $7, %dil # sched: [1:0.25]
 ; SKX-NEXT:    orb $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    orb %dil, %dil # sched: [1:0.25]
+; SKX-NEXT:    orb %dl, %dil # sched: [1:0.25]
 ; SKX-NEXT:    orb %dil, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    orb (%rsi), %dil # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -8682,7 +8682,7 @@ define void @test_or_8(i8 %a0, i8* %a1)
 ; BTVER2-NEXT:    orb $7, %al # sched: [1:0.50]
 ; BTVER2-NEXT:    orb $7, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    orb $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    orb %dil, %dil # sched: [1:0.50]
+; BTVER2-NEXT:    orb %dl, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    orb %dil, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    orb (%rsi), %dil # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -8694,15 +8694,15 @@ define void @test_or_8(i8 %a0, i8* %a1)
 ; ZNVER1-NEXT:    orb $7, %al # sched: [1:0.25]
 ; ZNVER1-NEXT:    orb $7, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    orb $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    orb %dil, %dil # sched: [1:0.25]
+; ZNVER1-NEXT:    orb %dl, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    orb %dil, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    orb (%rsi), %dil # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "orb $2, %AL \0A\09 orb $2, $0 \0A\09 orb $2, $1 \0A\09 orb $0, $0 \0A\09 orb $0, $1 \0A\09 orb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind
+  tail call void asm "orb $3, %AL \0A\09 orb $3, $0 \0A\09 orb $3, $2 \0A\09 orb $1, $0 \0A\09 orb $0, $2 \0A\09 orb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
   ret void
 }
-define void @test_or_16(i16 %a0, i16* %a1) optsize {
+define void @test_or_16(i16 %a0, i16* %a1, i16 %a2) optsize {
 ; GENERIC-LABEL: test_or_16:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -8714,7 +8714,7 @@ define void @test_or_16(i16 %a0, i16* %a
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    orw $7, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    orw %di, %di # sched: [1:0.33]
+; GENERIC-NEXT:    orw %dx, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    orw (%rsi), %di # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -8731,7 +8731,7 @@ define void @test_or_16(i16 %a0, i16* %a
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    orw $7, %di # sched: [1:0.50]
 ; ATOM-NEXT:    orw $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    orw %di, %di # sched: [1:0.50]
+; ATOM-NEXT:    orw %dx, %di # sched: [1:0.50]
 ; ATOM-NEXT:    orw %di, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    orw (%rsi), %di # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -8748,7 +8748,7 @@ define void @test_or_16(i16 %a0, i16* %a
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    orw $7, %di # sched: [1:0.50]
 ; SLM-NEXT:    orw $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    orw %di, %di # sched: [1:0.50]
+; SLM-NEXT:    orw %dx, %di # sched: [1:0.50]
 ; SLM-NEXT:    orw %di, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    orw (%rsi), %di # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -8765,7 +8765,7 @@ define void @test_or_16(i16 %a0, i16* %a
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    orw $7, %di # sched: [1:0.33]
 ; SANDY-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    orw %di, %di # sched: [1:0.33]
+; SANDY-NEXT:    orw %dx, %di # sched: [1:0.33]
 ; SANDY-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    orw (%rsi), %di # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -8782,7 +8782,7 @@ define void @test_or_16(i16 %a0, i16* %a
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    orw $7, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    orw %di, %di # sched: [1:0.25]
+; HASWELL-NEXT:    orw %dx, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    orw (%rsi), %di # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -8799,7 +8799,7 @@ define void @test_or_16(i16 %a0, i16* %a
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    orw $7, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    orw %di, %di # sched: [1:0.25]
+; BROADWELL-NEXT:    orw %dx, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    orw (%rsi), %di # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -8816,7 +8816,7 @@ define void @test_or_16(i16 %a0, i16* %a
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    orw $7, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    orw %di, %di # sched: [1:0.25]
+; SKYLAKE-NEXT:    orw %dx, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    orw (%rsi), %di # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -8833,7 +8833,7 @@ define void @test_or_16(i16 %a0, i16* %a
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    orw $7, %di # sched: [1:0.25]
 ; SKX-NEXT:    orw $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    orw %di, %di # sched: [1:0.25]
+; SKX-NEXT:    orw %dx, %di # sched: [1:0.25]
 ; SKX-NEXT:    orw %di, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    orw (%rsi), %di # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -8850,7 +8850,7 @@ define void @test_or_16(i16 %a0, i16* %a
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    orw $7, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    orw $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    orw %di, %di # sched: [1:0.50]
+; BTVER2-NEXT:    orw %dx, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    orw %di, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    orw (%rsi), %di # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -8867,15 +8867,15 @@ define void @test_or_16(i16 %a0, i16* %a
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    orw $7, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    orw $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    orw %di, %di # sched: [1:0.25]
+; ZNVER1-NEXT:    orw %dx, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    orw %di, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    orw (%rsi), %di # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "orw $2, %AX \0A\09 orw $2, $0 \0A\09 orw $2, $1 \0A\09 orw $3, $0 \0A\09 orw $3, $1 \0A\09 orw $0, $0 \0A\09 orw $0, $1 \0A\09 orw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind
+  tail call void asm "orw $3, %AX \0A\09 orw $3, $0 \0A\09 orw $3, $2 \0A\09 orw $4, $0 \0A\09 orw $4, $2 \0A\09 orw $1, $0 \0A\09 orw $0, $2 \0A\09 orw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
   ret void
 }
-define void @test_or_32(i32 %a0, i32* %a1) optsize {
+define void @test_or_32(i32 %a0, i32* %a1, i32 %a2) optsize {
 ; GENERIC-LABEL: test_or_32:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -8887,7 +8887,7 @@ define void @test_or_32(i32 %a0, i32* %a
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    orl $7, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    orl %edi, %edi # sched: [1:0.33]
+; GENERIC-NEXT:    orl %edx, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -8904,7 +8904,7 @@ define void @test_or_32(i32 %a0, i32* %a
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    orl $7, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    orl $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    orl %edi, %edi # sched: [1:0.50]
+; ATOM-NEXT:    orl %edx, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    orl %edi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    orl (%rsi), %edi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -8921,7 +8921,7 @@ define void @test_or_32(i32 %a0, i32* %a
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    orl $7, %edi # sched: [1:0.50]
 ; SLM-NEXT:    orl $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    orl %edi, %edi # sched: [1:0.50]
+; SLM-NEXT:    orl %edx, %edi # sched: [1:0.50]
 ; SLM-NEXT:    orl %edi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    orl (%rsi), %edi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -8938,7 +8938,7 @@ define void @test_or_32(i32 %a0, i32* %a
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    orl $7, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    orl %edi, %edi # sched: [1:0.33]
+; SANDY-NEXT:    orl %edx, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -8955,7 +8955,7 @@ define void @test_or_32(i32 %a0, i32* %a
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    orl $7, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    orl %edi, %edi # sched: [1:0.25]
+; HASWELL-NEXT:    orl %edx, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -8972,7 +8972,7 @@ define void @test_or_32(i32 %a0, i32* %a
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    orl $7, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    orl %edi, %edi # sched: [1:0.25]
+; BROADWELL-NEXT:    orl %edx, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -8989,7 +8989,7 @@ define void @test_or_32(i32 %a0, i32* %a
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    orl $7, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    orl %edi, %edi # sched: [1:0.25]
+; SKYLAKE-NEXT:    orl %edx, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -9006,7 +9006,7 @@ define void @test_or_32(i32 %a0, i32* %a
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    orl $7, %edi # sched: [1:0.25]
 ; SKX-NEXT:    orl $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    orl %edi, %edi # sched: [1:0.25]
+; SKX-NEXT:    orl %edx, %edi # sched: [1:0.25]
 ; SKX-NEXT:    orl %edi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    orl (%rsi), %edi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -9023,7 +9023,7 @@ define void @test_or_32(i32 %a0, i32* %a
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    orl $7, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    orl $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    orl %edi, %edi # sched: [1:0.50]
+; BTVER2-NEXT:    orl %edx, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    orl %edi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    orl (%rsi), %edi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -9040,15 +9040,15 @@ define void @test_or_32(i32 %a0, i32* %a
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    orl $7, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    orl $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    orl %edi, %edi # sched: [1:0.25]
+; ZNVER1-NEXT:    orl %edx, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    orl %edi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    orl (%rsi), %edi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "orl $2, %EAX \0A\09 orl $2, $0 \0A\09 orl $2, $1 \0A\09 orl $3, $0 \0A\09 orl $3, $1 \0A\09 orl $0, $0 \0A\09 orl $0, $1 \0A\09 orl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "orl $3, %EAX \0A\09 orl $3, $0 \0A\09 orl $3, $2 \0A\09 orl $4, $0 \0A\09 orl $4, $2 \0A\09 orl $1, $0 \0A\09 orl $0, $2 \0A\09 orl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
   ret void
 }
-define void @test_or_64(i64 %a0, i64* %a1) optsize {
+define void @test_or_64(i64 %a0, i64* %a1, i64 %a2) optsize {
 ; GENERIC-LABEL: test_or_64:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -9060,7 +9060,7 @@ define void @test_or_64(i64 %a0, i64* %a
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    orq $7, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    orq %rdi, %rdi # sched: [1:0.33]
+; GENERIC-NEXT:    orq %rdx, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -9077,7 +9077,7 @@ define void @test_or_64(i64 %a0, i64* %a
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    orq $7, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    orq $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    orq %rdi, %rdi # sched: [1:0.50]
+; ATOM-NEXT:    orq %rdx, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    orq %rdi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    orq (%rsi), %rdi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -9094,7 +9094,7 @@ define void @test_or_64(i64 %a0, i64* %a
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    orq $7, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    orq $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    orq %rdi, %rdi # sched: [1:0.50]
+; SLM-NEXT:    orq %rdx, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    orq %rdi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    orq (%rsi), %rdi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -9111,7 +9111,7 @@ define void @test_or_64(i64 %a0, i64* %a
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    orq $7, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    orq %rdi, %rdi # sched: [1:0.33]
+; SANDY-NEXT:    orq %rdx, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -9128,7 +9128,7 @@ define void @test_or_64(i64 %a0, i64* %a
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    orq $7, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    orq %rdi, %rdi # sched: [1:0.25]
+; HASWELL-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -9145,7 +9145,7 @@ define void @test_or_64(i64 %a0, i64* %a
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    orq $7, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    orq %rdi, %rdi # sched: [1:0.25]
+; BROADWELL-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -9162,7 +9162,7 @@ define void @test_or_64(i64 %a0, i64* %a
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    orq $7, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    orq %rdi, %rdi # sched: [1:0.25]
+; SKYLAKE-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -9179,7 +9179,7 @@ define void @test_or_64(i64 %a0, i64* %a
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    orq $7, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    orq $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    orq %rdi, %rdi # sched: [1:0.25]
+; SKX-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    orq %rdi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    orq (%rsi), %rdi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -9196,7 +9196,7 @@ define void @test_or_64(i64 %a0, i64* %a
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    orq $7, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    orq $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    orq %rdi, %rdi # sched: [1:0.50]
+; BTVER2-NEXT:    orq %rdx, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    orq %rdi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    orq (%rsi), %rdi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -9213,12 +9213,12 @@ define void @test_or_64(i64 %a0, i64* %a
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    orq $7, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    orq $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    orq %rdi, %rdi # sched: [1:0.25]
+; ZNVER1-NEXT:    orq %rdx, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    orq %rdi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    orq (%rsi), %rdi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "orq $2, %RAX \0A\09 orq $2, $0 \0A\09 orq $2, $1 \0A\09 orq $3, $0 \0A\09 orq $3, $1 \0A\09 orq $0, $0 \0A\09 orq $0, $1 \0A\09 orq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "orq $3, %RAX \0A\09 orq $3, $0 \0A\09 orq $3, $2 \0A\09 orq $4, $0 \0A\09 orq $4, $2 \0A\09 orq $1, $0 \0A\09 orq $0, $2 \0A\09 orq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
   ret void
 }
 
@@ -12773,14 +12773,14 @@ define void @test_sar_shl_shr_64(i64 %a0
   ret void
 }
 
-define void @test_sbb_8(i8 %a0, i8* %a1) optsize {
+define void @test_sbb_8(i8 %a0, i8* %a1, i8 %a2) optsize {
 ; GENERIC-LABEL: test_sbb_8:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    sbbb $7, %al # sched: [2:0.67]
 ; GENERIC-NEXT:    sbbb $7, %dil # sched: [2:0.67]
 ; GENERIC-NEXT:    sbbb $7, (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    sbbb %dil, %dil # sched: [2:0.67]
+; GENERIC-NEXT:    sbbb %dl, %dil # sched: [2:0.67]
 ; GENERIC-NEXT:    sbbb %dil, (%rsi) # sched: [9:1.00]
 ; GENERIC-NEXT:    sbbb (%rsi), %dil # sched: [7:0.67]
 ; GENERIC-NEXT:    #NO_APP
@@ -12792,7 +12792,7 @@ define void @test_sbb_8(i8 %a0, i8* %a1)
 ; ATOM-NEXT:    sbbb $7, %al # sched: [1:0.50]
 ; ATOM-NEXT:    sbbb $7, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    sbbb $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    sbbb %dil, %dil # sched: [1:0.50]
+; ATOM-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    sbbb %dil, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    sbbb (%rsi), %dil # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -12804,7 +12804,7 @@ define void @test_sbb_8(i8 %a0, i8* %a1)
 ; SLM-NEXT:    sbbb $7, %al # sched: [1:0.50]
 ; SLM-NEXT:    sbbb $7, %dil # sched: [1:0.50]
 ; SLM-NEXT:    sbbb $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    sbbb %dil, %dil # sched: [1:0.50]
+; SLM-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
 ; SLM-NEXT:    sbbb %dil, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    sbbb (%rsi), %dil # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -12816,7 +12816,7 @@ define void @test_sbb_8(i8 %a0, i8* %a1)
 ; SANDY-NEXT:    sbbb $7, %al # sched: [2:0.67]
 ; SANDY-NEXT:    sbbb $7, %dil # sched: [2:0.67]
 ; SANDY-NEXT:    sbbb $7, (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    sbbb %dil, %dil # sched: [2:0.67]
+; SANDY-NEXT:    sbbb %dl, %dil # sched: [2:0.67]
 ; SANDY-NEXT:    sbbb %dil, (%rsi) # sched: [9:1.00]
 ; SANDY-NEXT:    sbbb (%rsi), %dil # sched: [7:0.67]
 ; SANDY-NEXT:    #NO_APP
@@ -12828,7 +12828,7 @@ define void @test_sbb_8(i8 %a0, i8* %a1)
 ; HASWELL-NEXT:    sbbb $7, %al # sched: [2:0.50]
 ; HASWELL-NEXT:    sbbb $7, %dil # sched: [2:0.50]
 ; HASWELL-NEXT:    sbbb $7, (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    sbbb %dil, %dil # sched: [2:0.50]
+; HASWELL-NEXT:    sbbb %dl, %dil # sched: [2:0.50]
 ; HASWELL-NEXT:    sbbb %dil, (%rsi) # sched: [9:1.00]
 ; HASWELL-NEXT:    sbbb (%rsi), %dil # sched: [7:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -12840,7 +12840,7 @@ define void @test_sbb_8(i8 %a0, i8* %a1)
 ; BROADWELL-NEXT:    sbbb $7, %al # sched: [2:0.50]
 ; BROADWELL-NEXT:    sbbb $7, %dil # sched: [2:0.50]
 ; BROADWELL-NEXT:    sbbb $7, (%rsi) # sched: [8:1.00]
-; BROADWELL-NEXT:    sbbb %dil, %dil # sched: [1:0.50]
+; BROADWELL-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
 ; BROADWELL-NEXT:    sbbb %dil, (%rsi) # sched: [8:1.00]
 ; BROADWELL-NEXT:    sbbb (%rsi), %dil # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -12852,7 +12852,7 @@ define void @test_sbb_8(i8 %a0, i8* %a1)
 ; SKYLAKE-NEXT:    sbbb $7, %al # sched: [2:0.50]
 ; SKYLAKE-NEXT:    sbbb $7, %dil # sched: [2:0.50]
 ; SKYLAKE-NEXT:    sbbb $7, (%rsi) # sched: [8:1.00]
-; SKYLAKE-NEXT:    sbbb %dil, %dil # sched: [1:0.50]
+; SKYLAKE-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
 ; SKYLAKE-NEXT:    sbbb %dil, (%rsi) # sched: [8:1.00]
 ; SKYLAKE-NEXT:    sbbb (%rsi), %dil # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -12864,7 +12864,7 @@ define void @test_sbb_8(i8 %a0, i8* %a1)
 ; SKX-NEXT:    sbbb $7, %al # sched: [2:0.50]
 ; SKX-NEXT:    sbbb $7, %dil # sched: [2:0.50]
 ; SKX-NEXT:    sbbb $7, (%rsi) # sched: [8:1.00]
-; SKX-NEXT:    sbbb %dil, %dil # sched: [1:0.50]
+; SKX-NEXT:    sbbb %dl, %dil # sched: [1:0.50]
 ; SKX-NEXT:    sbbb %dil, (%rsi) # sched: [8:1.00]
 ; SKX-NEXT:    sbbb (%rsi), %dil # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -12876,7 +12876,7 @@ define void @test_sbb_8(i8 %a0, i8* %a1)
 ; BTVER2-NEXT:    sbbb $7, %al # sched: [1:1.00]
 ; BTVER2-NEXT:    sbbb $7, %dil # sched: [1:1.00]
 ; BTVER2-NEXT:    sbbb $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    sbbb %dil, %dil # sched: [1:1.00]
+; BTVER2-NEXT:    sbbb %dl, %dil # sched: [1:1.00]
 ; BTVER2-NEXT:    sbbb %dil, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    sbbb (%rsi), %dil # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -12888,15 +12888,15 @@ define void @test_sbb_8(i8 %a0, i8* %a1)
 ; ZNVER1-NEXT:    sbbb $7, %al # sched: [1:0.25]
 ; ZNVER1-NEXT:    sbbb $7, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    sbbb $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    sbbb %dil, %dil # sched: [1:0.25]
+; ZNVER1-NEXT:    sbbb %dl, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    sbbb %dil, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    sbbb (%rsi), %dil # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "sbbb $2, %AL \0A\09 sbbb $2, $0 \0A\09 sbbb $2, $1 \0A\09 sbbb $0, $0 \0A\09 sbbb $0, $1 \0A\09 sbbb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind
+  tail call void asm "sbbb $3, %AL \0A\09 sbbb $3, $0 \0A\09 sbbb $3, $2 \0A\09 sbbb $1, $0 \0A\09 sbbb $0, $2 \0A\09 sbbb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
   ret void
 }
-define void @test_sbb_16(i16 %a0, i16* %a1) optsize {
+define void @test_sbb_16(i16 %a0, i16* %a1, i16 %a2) optsize {
 ; GENERIC-LABEL: test_sbb_16:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -12908,7 +12908,7 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; GENERIC-NEXT:    # sched: [9:1.00]
 ; GENERIC-NEXT:    sbbw $7, %di # sched: [2:0.67]
 ; GENERIC-NEXT:    sbbw $7, (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    sbbw %di, %di # sched: [2:0.67]
+; GENERIC-NEXT:    sbbw %dx, %di # sched: [2:0.67]
 ; GENERIC-NEXT:    sbbw %di, (%rsi) # sched: [9:1.00]
 ; GENERIC-NEXT:    sbbw (%rsi), %di # sched: [7:0.67]
 ; GENERIC-NEXT:    #NO_APP
@@ -12925,7 +12925,7 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    sbbw $7, %di # sched: [1:0.50]
 ; ATOM-NEXT:    sbbw $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    sbbw %di, %di # sched: [1:0.50]
+; ATOM-NEXT:    sbbw %dx, %di # sched: [1:0.50]
 ; ATOM-NEXT:    sbbw %di, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    sbbw (%rsi), %di # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -12942,7 +12942,7 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    sbbw $7, %di # sched: [1:0.50]
 ; SLM-NEXT:    sbbw $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    sbbw %di, %di # sched: [1:0.50]
+; SLM-NEXT:    sbbw %dx, %di # sched: [1:0.50]
 ; SLM-NEXT:    sbbw %di, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    sbbw (%rsi), %di # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -12959,7 +12959,7 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; SANDY-NEXT:    # sched: [9:1.00]
 ; SANDY-NEXT:    sbbw $7, %di # sched: [2:0.67]
 ; SANDY-NEXT:    sbbw $7, (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    sbbw %di, %di # sched: [2:0.67]
+; SANDY-NEXT:    sbbw %dx, %di # sched: [2:0.67]
 ; SANDY-NEXT:    sbbw %di, (%rsi) # sched: [9:1.00]
 ; SANDY-NEXT:    sbbw (%rsi), %di # sched: [7:0.67]
 ; SANDY-NEXT:    #NO_APP
@@ -12976,7 +12976,7 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; HASWELL-NEXT:    # sched: [9:1.00]
 ; HASWELL-NEXT:    sbbw $7, %di # sched: [2:0.50]
 ; HASWELL-NEXT:    sbbw $7, (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    sbbw %di, %di # sched: [2:0.50]
+; HASWELL-NEXT:    sbbw %dx, %di # sched: [2:0.50]
 ; HASWELL-NEXT:    sbbw %di, (%rsi) # sched: [9:1.00]
 ; HASWELL-NEXT:    sbbw (%rsi), %di # sched: [7:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -12993,7 +12993,7 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; BROADWELL-NEXT:    # sched: [8:1.00]
 ; BROADWELL-NEXT:    sbbw $7, %di # sched: [1:0.50]
 ; BROADWELL-NEXT:    sbbw $7, (%rsi) # sched: [8:1.00]
-; BROADWELL-NEXT:    sbbw %di, %di # sched: [1:0.50]
+; BROADWELL-NEXT:    sbbw %dx, %di # sched: [1:0.50]
 ; BROADWELL-NEXT:    sbbw %di, (%rsi) # sched: [8:1.00]
 ; BROADWELL-NEXT:    sbbw (%rsi), %di # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -13010,7 +13010,7 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; SKYLAKE-NEXT:    # sched: [8:1.00]
 ; SKYLAKE-NEXT:    sbbw $7, %di # sched: [1:0.50]
 ; SKYLAKE-NEXT:    sbbw $7, (%rsi) # sched: [8:1.00]
-; SKYLAKE-NEXT:    sbbw %di, %di # sched: [1:0.50]
+; SKYLAKE-NEXT:    sbbw %dx, %di # sched: [1:0.50]
 ; SKYLAKE-NEXT:    sbbw %di, (%rsi) # sched: [8:1.00]
 ; SKYLAKE-NEXT:    sbbw (%rsi), %di # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -13027,7 +13027,7 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; SKX-NEXT:    # sched: [8:1.00]
 ; SKX-NEXT:    sbbw $7, %di # sched: [1:0.50]
 ; SKX-NEXT:    sbbw $7, (%rsi) # sched: [8:1.00]
-; SKX-NEXT:    sbbw %di, %di # sched: [1:0.50]
+; SKX-NEXT:    sbbw %dx, %di # sched: [1:0.50]
 ; SKX-NEXT:    sbbw %di, (%rsi) # sched: [8:1.00]
 ; SKX-NEXT:    sbbw (%rsi), %di # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -13044,7 +13044,7 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    sbbw $7, %di # sched: [1:1.00]
 ; BTVER2-NEXT:    sbbw $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    sbbw %di, %di # sched: [1:1.00]
+; BTVER2-NEXT:    sbbw %dx, %di # sched: [1:1.00]
 ; BTVER2-NEXT:    sbbw %di, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    sbbw (%rsi), %di # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -13061,15 +13061,15 @@ define void @test_sbb_16(i16 %a0, i16* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    sbbw $7, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    sbbw $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    sbbw %di, %di # sched: [1:0.25]
+; ZNVER1-NEXT:    sbbw %dx, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    sbbw %di, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    sbbw (%rsi), %di # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "sbbw $2, %AX \0A\09 sbbw $2, $0 \0A\09 sbbw $2, $1 \0A\09 sbbw $3, $0 \0A\09 sbbw $3, $1 \0A\09 sbbw $0, $0 \0A\09 sbbw $0, $1 \0A\09 sbbw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind
+  tail call void asm "sbbw $3, %AX \0A\09 sbbw $3, $0 \0A\09 sbbw $3, $2 \0A\09 sbbw $4, $0 \0A\09 sbbw $4, $2 \0A\09 sbbw $1, $0 \0A\09 sbbw $0, $2 \0A\09 sbbw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
   ret void
 }
-define void @test_sbb_32(i32 %a0, i32* %a1) optsize {
+define void @test_sbb_32(i32 %a0, i32* %a1, i32 %a2) optsize {
 ; GENERIC-LABEL: test_sbb_32:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -13081,7 +13081,7 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; GENERIC-NEXT:    # sched: [9:1.00]
 ; GENERIC-NEXT:    sbbl $7, %edi # sched: [2:0.67]
 ; GENERIC-NEXT:    sbbl $7, (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    sbbl %edi, %edi # sched: [2:0.67]
+; GENERIC-NEXT:    sbbl %edx, %edi # sched: [2:0.67]
 ; GENERIC-NEXT:    sbbl %edi, (%rsi) # sched: [9:1.00]
 ; GENERIC-NEXT:    sbbl (%rsi), %edi # sched: [7:0.67]
 ; GENERIC-NEXT:    #NO_APP
@@ -13098,7 +13098,7 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    sbbl $7, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    sbbl $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    sbbl %edi, %edi # sched: [1:0.50]
+; ATOM-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    sbbl %edi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    sbbl (%rsi), %edi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -13115,7 +13115,7 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    sbbl $7, %edi # sched: [1:0.50]
 ; SLM-NEXT:    sbbl $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    sbbl %edi, %edi # sched: [1:0.50]
+; SLM-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
 ; SLM-NEXT:    sbbl %edi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    sbbl (%rsi), %edi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -13132,7 +13132,7 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; SANDY-NEXT:    # sched: [9:1.00]
 ; SANDY-NEXT:    sbbl $7, %edi # sched: [2:0.67]
 ; SANDY-NEXT:    sbbl $7, (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    sbbl %edi, %edi # sched: [2:0.67]
+; SANDY-NEXT:    sbbl %edx, %edi # sched: [2:0.67]
 ; SANDY-NEXT:    sbbl %edi, (%rsi) # sched: [9:1.00]
 ; SANDY-NEXT:    sbbl (%rsi), %edi # sched: [7:0.67]
 ; SANDY-NEXT:    #NO_APP
@@ -13149,7 +13149,7 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; HASWELL-NEXT:    # sched: [9:1.00]
 ; HASWELL-NEXT:    sbbl $7, %edi # sched: [2:0.50]
 ; HASWELL-NEXT:    sbbl $7, (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    sbbl %edi, %edi # sched: [2:0.50]
+; HASWELL-NEXT:    sbbl %edx, %edi # sched: [2:0.50]
 ; HASWELL-NEXT:    sbbl %edi, (%rsi) # sched: [9:1.00]
 ; HASWELL-NEXT:    sbbl (%rsi), %edi # sched: [7:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -13166,7 +13166,7 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; BROADWELL-NEXT:    # sched: [8:1.00]
 ; BROADWELL-NEXT:    sbbl $7, %edi # sched: [1:0.50]
 ; BROADWELL-NEXT:    sbbl $7, (%rsi) # sched: [8:1.00]
-; BROADWELL-NEXT:    sbbl %edi, %edi # sched: [1:0.50]
+; BROADWELL-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
 ; BROADWELL-NEXT:    sbbl %edi, (%rsi) # sched: [8:1.00]
 ; BROADWELL-NEXT:    sbbl (%rsi), %edi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -13183,7 +13183,7 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; SKYLAKE-NEXT:    # sched: [8:1.00]
 ; SKYLAKE-NEXT:    sbbl $7, %edi # sched: [1:0.50]
 ; SKYLAKE-NEXT:    sbbl $7, (%rsi) # sched: [8:1.00]
-; SKYLAKE-NEXT:    sbbl %edi, %edi # sched: [1:0.50]
+; SKYLAKE-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
 ; SKYLAKE-NEXT:    sbbl %edi, (%rsi) # sched: [8:1.00]
 ; SKYLAKE-NEXT:    sbbl (%rsi), %edi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -13200,7 +13200,7 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; SKX-NEXT:    # sched: [8:1.00]
 ; SKX-NEXT:    sbbl $7, %edi # sched: [1:0.50]
 ; SKX-NEXT:    sbbl $7, (%rsi) # sched: [8:1.00]
-; SKX-NEXT:    sbbl %edi, %edi # sched: [1:0.50]
+; SKX-NEXT:    sbbl %edx, %edi # sched: [1:0.50]
 ; SKX-NEXT:    sbbl %edi, (%rsi) # sched: [8:1.00]
 ; SKX-NEXT:    sbbl (%rsi), %edi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -13217,7 +13217,7 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    sbbl $7, %edi # sched: [1:1.00]
 ; BTVER2-NEXT:    sbbl $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    sbbl %edi, %edi # sched: [1:1.00]
+; BTVER2-NEXT:    sbbl %edx, %edi # sched: [1:1.00]
 ; BTVER2-NEXT:    sbbl %edi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    sbbl (%rsi), %edi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -13234,15 +13234,15 @@ define void @test_sbb_32(i32 %a0, i32* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    sbbl $7, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    sbbl $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    sbbl %edi, %edi # sched: [1:0.25]
+; ZNVER1-NEXT:    sbbl %edx, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    sbbl %edi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    sbbl (%rsi), %edi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "sbbl $2, %EAX \0A\09 sbbl $2, $0 \0A\09 sbbl $2, $1 \0A\09 sbbl $3, $0 \0A\09 sbbl $3, $1 \0A\09 sbbl $0, $0 \0A\09 sbbl $0, $1 \0A\09 sbbl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "sbbl $3, %EAX \0A\09 sbbl $3, $0 \0A\09 sbbl $3, $2 \0A\09 sbbl $4, $0 \0A\09 sbbl $4, $2 \0A\09 sbbl $1, $0 \0A\09 sbbl $0, $2 \0A\09 sbbl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
   ret void
 }
-define void @test_sbb_64(i64 %a0, i64* %a1) optsize {
+define void @test_sbb_64(i64 %a0, i64* %a1, i64 %a2) optsize {
 ; GENERIC-LABEL: test_sbb_64:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -13254,7 +13254,7 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; GENERIC-NEXT:    # sched: [9:1.00]
 ; GENERIC-NEXT:    sbbq $7, %rdi # sched: [2:0.67]
 ; GENERIC-NEXT:    sbbq $7, (%rsi) # sched: [9:1.00]
-; GENERIC-NEXT:    sbbq %rdi, %rdi # sched: [2:0.67]
+; GENERIC-NEXT:    sbbq %rdx, %rdi # sched: [2:0.67]
 ; GENERIC-NEXT:    sbbq %rdi, (%rsi) # sched: [9:1.00]
 ; GENERIC-NEXT:    sbbq (%rsi), %rdi # sched: [7:0.67]
 ; GENERIC-NEXT:    #NO_APP
@@ -13271,7 +13271,7 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    sbbq $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    sbbq %rdi, %rdi # sched: [1:0.50]
+; ATOM-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    sbbq %rdi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    sbbq (%rsi), %rdi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -13288,7 +13288,7 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    sbbq $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    sbbq %rdi, %rdi # sched: [1:0.50]
+; SLM-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    sbbq %rdi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    sbbq (%rsi), %rdi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -13305,7 +13305,7 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; SANDY-NEXT:    # sched: [9:1.00]
 ; SANDY-NEXT:    sbbq $7, %rdi # sched: [2:0.67]
 ; SANDY-NEXT:    sbbq $7, (%rsi) # sched: [9:1.00]
-; SANDY-NEXT:    sbbq %rdi, %rdi # sched: [2:0.67]
+; SANDY-NEXT:    sbbq %rdx, %rdi # sched: [2:0.67]
 ; SANDY-NEXT:    sbbq %rdi, (%rsi) # sched: [9:1.00]
 ; SANDY-NEXT:    sbbq (%rsi), %rdi # sched: [7:0.67]
 ; SANDY-NEXT:    #NO_APP
@@ -13322,7 +13322,7 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; HASWELL-NEXT:    # sched: [9:1.00]
 ; HASWELL-NEXT:    sbbq $7, %rdi # sched: [2:0.50]
 ; HASWELL-NEXT:    sbbq $7, (%rsi) # sched: [9:1.00]
-; HASWELL-NEXT:    sbbq %rdi, %rdi # sched: [2:0.50]
+; HASWELL-NEXT:    sbbq %rdx, %rdi # sched: [2:0.50]
 ; HASWELL-NEXT:    sbbq %rdi, (%rsi) # sched: [9:1.00]
 ; HASWELL-NEXT:    sbbq (%rsi), %rdi # sched: [7:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -13339,7 +13339,7 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; BROADWELL-NEXT:    # sched: [8:1.00]
 ; BROADWELL-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
 ; BROADWELL-NEXT:    sbbq $7, (%rsi) # sched: [8:1.00]
-; BROADWELL-NEXT:    sbbq %rdi, %rdi # sched: [1:0.50]
+; BROADWELL-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
 ; BROADWELL-NEXT:    sbbq %rdi, (%rsi) # sched: [8:1.00]
 ; BROADWELL-NEXT:    sbbq (%rsi), %rdi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -13356,7 +13356,7 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; SKYLAKE-NEXT:    # sched: [8:1.00]
 ; SKYLAKE-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
 ; SKYLAKE-NEXT:    sbbq $7, (%rsi) # sched: [8:1.00]
-; SKYLAKE-NEXT:    sbbq %rdi, %rdi # sched: [1:0.50]
+; SKYLAKE-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
 ; SKYLAKE-NEXT:    sbbq %rdi, (%rsi) # sched: [8:1.00]
 ; SKYLAKE-NEXT:    sbbq (%rsi), %rdi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -13373,7 +13373,7 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; SKX-NEXT:    # sched: [8:1.00]
 ; SKX-NEXT:    sbbq $7, %rdi # sched: [1:0.50]
 ; SKX-NEXT:    sbbq $7, (%rsi) # sched: [8:1.00]
-; SKX-NEXT:    sbbq %rdi, %rdi # sched: [1:0.50]
+; SKX-NEXT:    sbbq %rdx, %rdi # sched: [1:0.50]
 ; SKX-NEXT:    sbbq %rdi, (%rsi) # sched: [8:1.00]
 ; SKX-NEXT:    sbbq (%rsi), %rdi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -13390,7 +13390,7 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    sbbq $7, %rdi # sched: [1:1.00]
 ; BTVER2-NEXT:    sbbq $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    sbbq %rdi, %rdi # sched: [1:1.00]
+; BTVER2-NEXT:    sbbq %rdx, %rdi # sched: [1:1.00]
 ; BTVER2-NEXT:    sbbq %rdi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    sbbq (%rsi), %rdi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -13407,12 +13407,12 @@ define void @test_sbb_64(i64 %a0, i64* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    sbbq $7, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    sbbq $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    sbbq %rdi, %rdi # sched: [1:0.25]
+; ZNVER1-NEXT:    sbbq %rdx, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    sbbq %rdi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    sbbq (%rsi), %rdi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "sbbq $2, %RAX \0A\09 sbbq $2, $0 \0A\09 sbbq $2, $1 \0A\09 sbbq $3, $0 \0A\09 sbbq $3, $1 \0A\09 sbbq $0, $0 \0A\09 sbbq $0, $1 \0A\09 sbbq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "sbbq $3, %RAX \0A\09 sbbq $3, $0 \0A\09 sbbq $3, $2 \0A\09 sbbq $4, $0 \0A\09 sbbq $4, $2 \0A\09 sbbq $1, $0 \0A\09 sbbq $0, $2 \0A\09 sbbq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
   ret void
 }
 
@@ -14533,14 +14533,14 @@ define void @test_stos() optsize {
 
 ; TODO - test_str
 
-define void @test_sub_8(i8 %a0, i8* %a1) optsize {
+define void @test_sub_8(i8 %a0, i8* %a1, i8 %a2) optsize {
 ; GENERIC-LABEL: test_sub_8:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    subb $7, %al # sched: [1:0.33]
 ; GENERIC-NEXT:    subb $7, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    subb %dil, %dil # sched: [1:0.33]
+; GENERIC-NEXT:    subb %dl, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -14552,7 +14552,7 @@ define void @test_sub_8(i8 %a0, i8* %a1)
 ; ATOM-NEXT:    subb $7, %al # sched: [1:0.50]
 ; ATOM-NEXT:    subb $7, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    subb $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    subb %dil, %dil # sched: [1:0.50]
+; ATOM-NEXT:    subb %dl, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    subb %dil, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    subb (%rsi), %dil # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -14564,7 +14564,7 @@ define void @test_sub_8(i8 %a0, i8* %a1)
 ; SLM-NEXT:    subb $7, %al # sched: [1:0.50]
 ; SLM-NEXT:    subb $7, %dil # sched: [1:0.50]
 ; SLM-NEXT:    subb $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    subb %dil, %dil # sched: [1:0.50]
+; SLM-NEXT:    subb %dl, %dil # sched: [1:0.50]
 ; SLM-NEXT:    subb %dil, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    subb (%rsi), %dil # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -14576,7 +14576,7 @@ define void @test_sub_8(i8 %a0, i8* %a1)
 ; SANDY-NEXT:    subb $7, %al # sched: [1:0.33]
 ; SANDY-NEXT:    subb $7, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    subb %dil, %dil # sched: [1:0.33]
+; SANDY-NEXT:    subb %dl, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -14588,7 +14588,7 @@ define void @test_sub_8(i8 %a0, i8* %a1)
 ; HASWELL-NEXT:    subb $7, %al # sched: [1:0.25]
 ; HASWELL-NEXT:    subb $7, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    subb %dil, %dil # sched: [1:0.25]
+; HASWELL-NEXT:    subb %dl, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -14600,7 +14600,7 @@ define void @test_sub_8(i8 %a0, i8* %a1)
 ; BROADWELL-NEXT:    subb $7, %al # sched: [1:0.25]
 ; BROADWELL-NEXT:    subb $7, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    subb %dil, %dil # sched: [1:0.25]
+; BROADWELL-NEXT:    subb %dl, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -14612,7 +14612,7 @@ define void @test_sub_8(i8 %a0, i8* %a1)
 ; SKYLAKE-NEXT:    subb $7, %al # sched: [1:0.25]
 ; SKYLAKE-NEXT:    subb $7, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    subb %dil, %dil # sched: [1:0.25]
+; SKYLAKE-NEXT:    subb %dl, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -14624,7 +14624,7 @@ define void @test_sub_8(i8 %a0, i8* %a1)
 ; SKX-NEXT:    subb $7, %al # sched: [1:0.25]
 ; SKX-NEXT:    subb $7, %dil # sched: [1:0.25]
 ; SKX-NEXT:    subb $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    subb %dil, %dil # sched: [1:0.25]
+; SKX-NEXT:    subb %dl, %dil # sched: [1:0.25]
 ; SKX-NEXT:    subb %dil, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    subb (%rsi), %dil # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -14636,7 +14636,7 @@ define void @test_sub_8(i8 %a0, i8* %a1)
 ; BTVER2-NEXT:    subb $7, %al # sched: [1:0.50]
 ; BTVER2-NEXT:    subb $7, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    subb $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    subb %dil, %dil # sched: [1:0.50]
+; BTVER2-NEXT:    subb %dl, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    subb %dil, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    subb (%rsi), %dil # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -14648,15 +14648,15 @@ define void @test_sub_8(i8 %a0, i8* %a1)
 ; ZNVER1-NEXT:    subb $7, %al # sched: [1:0.25]
 ; ZNVER1-NEXT:    subb $7, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    subb $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    subb %dil, %dil # sched: [1:0.25]
+; ZNVER1-NEXT:    subb %dl, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    subb %dil, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    subb (%rsi), %dil # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "subb $2, %AL \0A\09 subb $2, $0 \0A\09 subb $2, $1 \0A\09 subb $0, $0 \0A\09 subb $0, $1 \0A\09 subb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind
+  tail call void asm "subb $3, %AL \0A\09 subb $3, $0 \0A\09 subb $3, $2 \0A\09 subb $1, $0 \0A\09 subb $0, $2 \0A\09 subb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
   ret void
 }
-define void @test_sub_16(i16 %a0, i16* %a1) optsize {
+define void @test_sub_16(i16 %a0, i16* %a1, i16 %a2) optsize {
 ; GENERIC-LABEL: test_sub_16:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -14668,7 +14668,7 @@ define void @test_sub_16(i16 %a0, i16* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    subw $7, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    subw %di, %di # sched: [1:0.33]
+; GENERIC-NEXT:    subw %dx, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    subw (%rsi), %di # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -14685,7 +14685,7 @@ define void @test_sub_16(i16 %a0, i16* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    subw $7, %di # sched: [1:0.50]
 ; ATOM-NEXT:    subw $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    subw %di, %di # sched: [1:0.50]
+; ATOM-NEXT:    subw %dx, %di # sched: [1:0.50]
 ; ATOM-NEXT:    subw %di, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    subw (%rsi), %di # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -14702,7 +14702,7 @@ define void @test_sub_16(i16 %a0, i16* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    subw $7, %di # sched: [1:0.50]
 ; SLM-NEXT:    subw $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    subw %di, %di # sched: [1:0.50]
+; SLM-NEXT:    subw %dx, %di # sched: [1:0.50]
 ; SLM-NEXT:    subw %di, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    subw (%rsi), %di # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -14719,7 +14719,7 @@ define void @test_sub_16(i16 %a0, i16* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    subw $7, %di # sched: [1:0.33]
 ; SANDY-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    subw %di, %di # sched: [1:0.33]
+; SANDY-NEXT:    subw %dx, %di # sched: [1:0.33]
 ; SANDY-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    subw (%rsi), %di # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -14736,7 +14736,7 @@ define void @test_sub_16(i16 %a0, i16* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    subw $7, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    subw %di, %di # sched: [1:0.25]
+; HASWELL-NEXT:    subw %dx, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    subw (%rsi), %di # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -14753,7 +14753,7 @@ define void @test_sub_16(i16 %a0, i16* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    subw $7, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    subw %di, %di # sched: [1:0.25]
+; BROADWELL-NEXT:    subw %dx, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    subw (%rsi), %di # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -14770,7 +14770,7 @@ define void @test_sub_16(i16 %a0, i16* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    subw $7, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    subw %di, %di # sched: [1:0.25]
+; SKYLAKE-NEXT:    subw %dx, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    subw (%rsi), %di # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -14787,7 +14787,7 @@ define void @test_sub_16(i16 %a0, i16* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    subw $7, %di # sched: [1:0.25]
 ; SKX-NEXT:    subw $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    subw %di, %di # sched: [1:0.25]
+; SKX-NEXT:    subw %dx, %di # sched: [1:0.25]
 ; SKX-NEXT:    subw %di, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    subw (%rsi), %di # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -14804,7 +14804,7 @@ define void @test_sub_16(i16 %a0, i16* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    subw $7, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    subw $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    subw %di, %di # sched: [1:0.50]
+; BTVER2-NEXT:    subw %dx, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    subw %di, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    subw (%rsi), %di # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -14821,15 +14821,15 @@ define void @test_sub_16(i16 %a0, i16* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    subw $7, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    subw $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    subw %di, %di # sched: [1:0.25]
+; ZNVER1-NEXT:    subw %dx, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    subw %di, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    subw (%rsi), %di # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "subw $2, %AX \0A\09 subw $2, $0 \0A\09 subw $2, $1 \0A\09 subw $3, $0 \0A\09 subw $3, $1 \0A\09 subw $0, $0 \0A\09 subw $0, $1 \0A\09 subw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind
+  tail call void asm "subw $3, %AX \0A\09 subw $3, $0 \0A\09 subw $3, $2 \0A\09 subw $4, $0 \0A\09 subw $4, $2 \0A\09 subw $1, $0 \0A\09 subw $0, $2 \0A\09 subw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
   ret void
 }
-define void @test_sub_32(i32 %a0, i32* %a1) optsize {
+define void @test_sub_32(i32 %a0, i32* %a1, i32 %a2) optsize {
 ; GENERIC-LABEL: test_sub_32:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -14841,7 +14841,7 @@ define void @test_sub_32(i32 %a0, i32* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    subl $7, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    subl %edi, %edi # sched: [1:0.33]
+; GENERIC-NEXT:    subl %edx, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -14858,7 +14858,7 @@ define void @test_sub_32(i32 %a0, i32* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    subl $7, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    subl $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    subl %edi, %edi # sched: [1:0.50]
+; ATOM-NEXT:    subl %edx, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    subl %edi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    subl (%rsi), %edi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -14875,7 +14875,7 @@ define void @test_sub_32(i32 %a0, i32* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    subl $7, %edi # sched: [1:0.50]
 ; SLM-NEXT:    subl $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    subl %edi, %edi # sched: [1:0.50]
+; SLM-NEXT:    subl %edx, %edi # sched: [1:0.50]
 ; SLM-NEXT:    subl %edi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    subl (%rsi), %edi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -14892,7 +14892,7 @@ define void @test_sub_32(i32 %a0, i32* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    subl $7, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    subl %edi, %edi # sched: [1:0.33]
+; SANDY-NEXT:    subl %edx, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -14909,7 +14909,7 @@ define void @test_sub_32(i32 %a0, i32* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    subl $7, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    subl %edi, %edi # sched: [1:0.25]
+; HASWELL-NEXT:    subl %edx, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -14926,7 +14926,7 @@ define void @test_sub_32(i32 %a0, i32* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    subl $7, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    subl %edi, %edi # sched: [1:0.25]
+; BROADWELL-NEXT:    subl %edx, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -14943,7 +14943,7 @@ define void @test_sub_32(i32 %a0, i32* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    subl $7, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    subl %edi, %edi # sched: [1:0.25]
+; SKYLAKE-NEXT:    subl %edx, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -14960,7 +14960,7 @@ define void @test_sub_32(i32 %a0, i32* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    subl $7, %edi # sched: [1:0.25]
 ; SKX-NEXT:    subl $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    subl %edi, %edi # sched: [1:0.25]
+; SKX-NEXT:    subl %edx, %edi # sched: [1:0.25]
 ; SKX-NEXT:    subl %edi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    subl (%rsi), %edi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -14977,7 +14977,7 @@ define void @test_sub_32(i32 %a0, i32* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    subl $7, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    subl $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    subl %edi, %edi # sched: [1:0.50]
+; BTVER2-NEXT:    subl %edx, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    subl %edi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    subl (%rsi), %edi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -14994,15 +14994,15 @@ define void @test_sub_32(i32 %a0, i32* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    subl $7, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    subl $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    subl %edi, %edi # sched: [1:0.25]
+; ZNVER1-NEXT:    subl %edx, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    subl %edi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    subl (%rsi), %edi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "subl $2, %EAX \0A\09 subl $2, $0 \0A\09 subl $2, $1 \0A\09 subl $3, $0 \0A\09 subl $3, $1 \0A\09 subl $0, $0 \0A\09 subl $0, $1 \0A\09 subl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "subl $3, %EAX \0A\09 subl $3, $0 \0A\09 subl $3, $2 \0A\09 subl $4, $0 \0A\09 subl $4, $2 \0A\09 subl $1, $0 \0A\09 subl $0, $2 \0A\09 subl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
   ret void
 }
-define void @test_sub_64(i64 %a0, i64* %a1) optsize {
+define void @test_sub_64(i64 %a0, i64* %a1, i64 %a2) optsize {
 ; GENERIC-LABEL: test_sub_64:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -15014,7 +15014,7 @@ define void @test_sub_64(i64 %a0, i64* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    subq $7, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    subq %rdi, %rdi # sched: [1:0.33]
+; GENERIC-NEXT:    subq %rdx, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -15031,7 +15031,7 @@ define void @test_sub_64(i64 %a0, i64* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    subq $7, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    subq $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    subq %rdi, %rdi # sched: [1:0.50]
+; ATOM-NEXT:    subq %rdx, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    subq %rdi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    subq (%rsi), %rdi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -15048,7 +15048,7 @@ define void @test_sub_64(i64 %a0, i64* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    subq $7, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    subq $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    subq %rdi, %rdi # sched: [1:0.50]
+; SLM-NEXT:    subq %rdx, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    subq %rdi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    subq (%rsi), %rdi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -15065,7 +15065,7 @@ define void @test_sub_64(i64 %a0, i64* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    subq $7, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    subq %rdi, %rdi # sched: [1:0.33]
+; SANDY-NEXT:    subq %rdx, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -15082,7 +15082,7 @@ define void @test_sub_64(i64 %a0, i64* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    subq $7, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    subq %rdi, %rdi # sched: [1:0.25]
+; HASWELL-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -15099,7 +15099,7 @@ define void @test_sub_64(i64 %a0, i64* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    subq $7, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    subq %rdi, %rdi # sched: [1:0.25]
+; BROADWELL-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -15116,7 +15116,7 @@ define void @test_sub_64(i64 %a0, i64* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    subq $7, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    subq %rdi, %rdi # sched: [1:0.25]
+; SKYLAKE-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -15133,7 +15133,7 @@ define void @test_sub_64(i64 %a0, i64* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    subq $7, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    subq $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    subq %rdi, %rdi # sched: [1:0.25]
+; SKX-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    subq %rdi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    subq (%rsi), %rdi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -15150,7 +15150,7 @@ define void @test_sub_64(i64 %a0, i64* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    subq $7, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    subq $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    subq %rdi, %rdi # sched: [1:0.50]
+; BTVER2-NEXT:    subq %rdx, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    subq %rdi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    subq (%rsi), %rdi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -15167,12 +15167,12 @@ define void @test_sub_64(i64 %a0, i64* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    subq $7, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    subq $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    subq %rdi, %rdi # sched: [1:0.25]
+; ZNVER1-NEXT:    subq %rdx, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    subq %rdi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    subq (%rsi), %rdi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "subq $2, %RAX \0A\09 subq $2, $0 \0A\09 subq $2, $1 \0A\09 subq $3, $0 \0A\09 subq $3, $1 \0A\09 subq $0, $0 \0A\09 subq $0, $1 \0A\09 subq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "subq $3, %RAX \0A\09 subq $3, $0 \0A\09 subq $3, $2 \0A\09 subq $4, $0 \0A\09 subq $4, $2 \0A\09 subq $1, $0 \0A\09 subq $0, $2 \0A\09 subq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
   ret void
 }
 
@@ -16578,14 +16578,14 @@ define void @test_xlat() optsize {
   ret void
 }
 
-define void @test_xor_8(i8 %a0, i8* %a1) optsize {
+define void @test_xor_8(i8 %a0, i8* %a1, i8 %a2) optsize {
 ; GENERIC-LABEL: test_xor_8:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
 ; GENERIC-NEXT:    xorb $7, %al # sched: [1:0.33]
 ; GENERIC-NEXT:    xorb $7, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    xorb %dil, %dil # sched: [1:0.33]
+; GENERIC-NEXT:    xorb %dl, %dil # sched: [1:0.33]
 ; GENERIC-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -16597,7 +16597,7 @@ define void @test_xor_8(i8 %a0, i8* %a1)
 ; ATOM-NEXT:    xorb $7, %al # sched: [1:0.50]
 ; ATOM-NEXT:    xorb $7, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    xorb $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    xorb %dil, %dil # sched: [1:0.50]
+; ATOM-NEXT:    xorb %dl, %dil # sched: [1:0.50]
 ; ATOM-NEXT:    xorb %dil, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    xorb (%rsi), %dil # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -16609,7 +16609,7 @@ define void @test_xor_8(i8 %a0, i8* %a1)
 ; SLM-NEXT:    xorb $7, %al # sched: [1:0.50]
 ; SLM-NEXT:    xorb $7, %dil # sched: [1:0.50]
 ; SLM-NEXT:    xorb $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    xorb %dil, %dil # sched: [1:0.50]
+; SLM-NEXT:    xorb %dl, %dil # sched: [1:0.50]
 ; SLM-NEXT:    xorb %dil, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    xorb (%rsi), %dil # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -16621,7 +16621,7 @@ define void @test_xor_8(i8 %a0, i8* %a1)
 ; SANDY-NEXT:    xorb $7, %al # sched: [1:0.33]
 ; SANDY-NEXT:    xorb $7, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    xorb %dil, %dil # sched: [1:0.33]
+; SANDY-NEXT:    xorb %dl, %dil # sched: [1:0.33]
 ; SANDY-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -16633,7 +16633,7 @@ define void @test_xor_8(i8 %a0, i8* %a1)
 ; HASWELL-NEXT:    xorb $7, %al # sched: [1:0.25]
 ; HASWELL-NEXT:    xorb $7, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    xorb %dil, %dil # sched: [1:0.25]
+; HASWELL-NEXT:    xorb %dl, %dil # sched: [1:0.25]
 ; HASWELL-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -16645,7 +16645,7 @@ define void @test_xor_8(i8 %a0, i8* %a1)
 ; BROADWELL-NEXT:    xorb $7, %al # sched: [1:0.25]
 ; BROADWELL-NEXT:    xorb $7, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    xorb %dil, %dil # sched: [1:0.25]
+; BROADWELL-NEXT:    xorb %dl, %dil # sched: [1:0.25]
 ; BROADWELL-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -16657,7 +16657,7 @@ define void @test_xor_8(i8 %a0, i8* %a1)
 ; SKYLAKE-NEXT:    xorb $7, %al # sched: [1:0.25]
 ; SKYLAKE-NEXT:    xorb $7, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    xorb %dil, %dil # sched: [1:0.25]
+; SKYLAKE-NEXT:    xorb %dl, %dil # sched: [1:0.25]
 ; SKYLAKE-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -16669,7 +16669,7 @@ define void @test_xor_8(i8 %a0, i8* %a1)
 ; SKX-NEXT:    xorb $7, %al # sched: [1:0.25]
 ; SKX-NEXT:    xorb $7, %dil # sched: [1:0.25]
 ; SKX-NEXT:    xorb $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    xorb %dil, %dil # sched: [1:0.25]
+; SKX-NEXT:    xorb %dl, %dil # sched: [1:0.25]
 ; SKX-NEXT:    xorb %dil, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    xorb (%rsi), %dil # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -16681,7 +16681,7 @@ define void @test_xor_8(i8 %a0, i8* %a1)
 ; BTVER2-NEXT:    xorb $7, %al # sched: [1:0.50]
 ; BTVER2-NEXT:    xorb $7, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    xorb $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    xorb %dil, %dil # sched: [1:0.50]
+; BTVER2-NEXT:    xorb %dl, %dil # sched: [1:0.50]
 ; BTVER2-NEXT:    xorb %dil, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    xorb (%rsi), %dil # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -16693,15 +16693,15 @@ define void @test_xor_8(i8 %a0, i8* %a1)
 ; ZNVER1-NEXT:    xorb $7, %al # sched: [1:0.25]
 ; ZNVER1-NEXT:    xorb $7, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    xorb $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    xorb %dil, %dil # sched: [1:0.25]
+; ZNVER1-NEXT:    xorb %dl, %dil # sched: [1:0.25]
 ; ZNVER1-NEXT:    xorb %dil, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    xorb (%rsi), %dil # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "xorb $2, %AL \0A\09 xorb $2, $0 \0A\09 xorb $2, $1 \0A\09 xorb $0, $0 \0A\09 xorb $0, $1 \0A\09 xorb $1, $0", "r,*m,i"(i8 %a0, i8* %a1, i8 7) nounwind
+  tail call void asm "xorb $3, %AL \0A\09 xorb $3, $0 \0A\09 xorb $3, $2 \0A\09 xorb $1, $0 \0A\09 xorb $0, $2 \0A\09 xorb $2, $0", "r,r,*m,i"(i8 %a0, i8 %a2, i8* %a1, i8 7) nounwind
   ret void
 }
-define void @test_xor_16(i16 %a0, i16* %a1) optsize {
+define void @test_xor_16(i16 %a0, i16* %a1, i16 %a2) optsize {
 ; GENERIC-LABEL: test_xor_16:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -16713,7 +16713,7 @@ define void @test_xor_16(i16 %a0, i16* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    xorw $7, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    xorw %di, %di # sched: [1:0.33]
+; GENERIC-NEXT:    xorw %dx, %di # sched: [1:0.33]
 ; GENERIC-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -16730,7 +16730,7 @@ define void @test_xor_16(i16 %a0, i16* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    xorw $7, %di # sched: [1:0.50]
 ; ATOM-NEXT:    xorw $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    xorw %di, %di # sched: [1:0.50]
+; ATOM-NEXT:    xorw %dx, %di # sched: [1:0.50]
 ; ATOM-NEXT:    xorw %di, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    xorw (%rsi), %di # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -16747,7 +16747,7 @@ define void @test_xor_16(i16 %a0, i16* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    xorw $7, %di # sched: [1:0.50]
 ; SLM-NEXT:    xorw $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    xorw %di, %di # sched: [1:0.50]
+; SLM-NEXT:    xorw %dx, %di # sched: [1:0.50]
 ; SLM-NEXT:    xorw %di, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    xorw (%rsi), %di # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -16764,7 +16764,7 @@ define void @test_xor_16(i16 %a0, i16* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    xorw $7, %di # sched: [1:0.33]
 ; SANDY-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    xorw %di, %di # sched: [1:0.33]
+; SANDY-NEXT:    xorw %dx, %di # sched: [1:0.33]
 ; SANDY-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -16781,7 +16781,7 @@ define void @test_xor_16(i16 %a0, i16* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    xorw $7, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    xorw %di, %di # sched: [1:0.25]
+; HASWELL-NEXT:    xorw %dx, %di # sched: [1:0.25]
 ; HASWELL-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -16798,7 +16798,7 @@ define void @test_xor_16(i16 %a0, i16* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    xorw $7, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    xorw %di, %di # sched: [1:0.25]
+; BROADWELL-NEXT:    xorw %dx, %di # sched: [1:0.25]
 ; BROADWELL-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -16815,7 +16815,7 @@ define void @test_xor_16(i16 %a0, i16* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    xorw $7, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    xorw %di, %di # sched: [1:0.25]
+; SKYLAKE-NEXT:    xorw %dx, %di # sched: [1:0.25]
 ; SKYLAKE-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -16832,7 +16832,7 @@ define void @test_xor_16(i16 %a0, i16* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    xorw $7, %di # sched: [1:0.25]
 ; SKX-NEXT:    xorw $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    xorw %di, %di # sched: [1:0.25]
+; SKX-NEXT:    xorw %dx, %di # sched: [1:0.25]
 ; SKX-NEXT:    xorw %di, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    xorw (%rsi), %di # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -16849,7 +16849,7 @@ define void @test_xor_16(i16 %a0, i16* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    xorw $7, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    xorw $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    xorw %di, %di # sched: [1:0.50]
+; BTVER2-NEXT:    xorw %dx, %di # sched: [1:0.50]
 ; BTVER2-NEXT:    xorw %di, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    xorw (%rsi), %di # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -16866,15 +16866,15 @@ define void @test_xor_16(i16 %a0, i16* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    xorw $7, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    xorw $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    xorw %di, %di # sched: [1:0.25]
+; ZNVER1-NEXT:    xorw %dx, %di # sched: [1:0.25]
 ; ZNVER1-NEXT:    xorw %di, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    xorw (%rsi), %di # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "xorw $2, %AX \0A\09 xorw $2, $0 \0A\09 xorw $2, $1 \0A\09 xorw $3, $0 \0A\09 xorw $3, $1 \0A\09 xorw $0, $0 \0A\09 xorw $0, $1 \0A\09 xorw $1, $0", "r,*m,i,i"(i16 %a0, i16* %a1, i16 511, i8 7) nounwind
+  tail call void asm "xorw $3, %AX \0A\09 xorw $3, $0 \0A\09 xorw $3, $2 \0A\09 xorw $4, $0 \0A\09 xorw $4, $2 \0A\09 xorw $1, $0 \0A\09 xorw $0, $2 \0A\09 xorw $2, $0", "r,r,*m,i,i"(i16 %a0, i16 %a2, i16* %a1, i16 511, i8 7) nounwind
   ret void
 }
-define void @test_xor_32(i32 %a0, i32* %a1) optsize {
+define void @test_xor_32(i32 %a0, i32* %a1, i32 %a2) optsize {
 ; GENERIC-LABEL: test_xor_32:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -16886,7 +16886,7 @@ define void @test_xor_32(i32 %a0, i32* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    xorl $7, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    xorl %edi, %edi # sched: [1:0.33]
+; GENERIC-NEXT:    xorl %edx, %edi # sched: [1:0.33]
 ; GENERIC-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -16903,7 +16903,7 @@ define void @test_xor_32(i32 %a0, i32* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    xorl $7, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    xorl $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    xorl %edi, %edi # sched: [1:0.50]
+; ATOM-NEXT:    xorl %edx, %edi # sched: [1:0.50]
 ; ATOM-NEXT:    xorl %edi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    xorl (%rsi), %edi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -16920,7 +16920,7 @@ define void @test_xor_32(i32 %a0, i32* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    xorl $7, %edi # sched: [1:0.50]
 ; SLM-NEXT:    xorl $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    xorl %edi, %edi # sched: [1:0.50]
+; SLM-NEXT:    xorl %edx, %edi # sched: [1:0.50]
 ; SLM-NEXT:    xorl %edi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    xorl (%rsi), %edi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -16937,7 +16937,7 @@ define void @test_xor_32(i32 %a0, i32* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    xorl $7, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    xorl %edi, %edi # sched: [1:0.33]
+; SANDY-NEXT:    xorl %edx, %edi # sched: [1:0.33]
 ; SANDY-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -16954,7 +16954,7 @@ define void @test_xor_32(i32 %a0, i32* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    xorl $7, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    xorl %edi, %edi # sched: [1:0.25]
+; HASWELL-NEXT:    xorl %edx, %edi # sched: [1:0.25]
 ; HASWELL-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -16971,7 +16971,7 @@ define void @test_xor_32(i32 %a0, i32* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    xorl $7, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    xorl %edi, %edi # sched: [1:0.25]
+; BROADWELL-NEXT:    xorl %edx, %edi # sched: [1:0.25]
 ; BROADWELL-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -16988,7 +16988,7 @@ define void @test_xor_32(i32 %a0, i32* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    xorl $7, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    xorl %edi, %edi # sched: [1:0.25]
+; SKYLAKE-NEXT:    xorl %edx, %edi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -17005,7 +17005,7 @@ define void @test_xor_32(i32 %a0, i32* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    xorl $7, %edi # sched: [1:0.25]
 ; SKX-NEXT:    xorl $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    xorl %edi, %edi # sched: [1:0.25]
+; SKX-NEXT:    xorl %edx, %edi # sched: [1:0.25]
 ; SKX-NEXT:    xorl %edi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    xorl (%rsi), %edi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -17022,7 +17022,7 @@ define void @test_xor_32(i32 %a0, i32* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    xorl $7, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    xorl $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    xorl %edi, %edi # sched: [1:0.50]
+; BTVER2-NEXT:    xorl %edx, %edi # sched: [1:0.50]
 ; BTVER2-NEXT:    xorl %edi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    xorl (%rsi), %edi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -17039,15 +17039,15 @@ define void @test_xor_32(i32 %a0, i32* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    xorl $7, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    xorl $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    xorl %edi, %edi # sched: [1:0.25]
+; ZNVER1-NEXT:    xorl %edx, %edi # sched: [1:0.25]
 ; ZNVER1-NEXT:    xorl %edi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    xorl (%rsi), %edi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "xorl $2, %EAX \0A\09 xorl $2, $0 \0A\09 xorl $2, $1 \0A\09 xorl $3, $0 \0A\09 xorl $3, $1 \0A\09 xorl $0, $0 \0A\09 xorl $0, $1 \0A\09 xorl $1, $0", "r,*m,i,i"(i32 %a0, i32* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "xorl $3, %EAX \0A\09 xorl $3, $0 \0A\09 xorl $3, $2 \0A\09 xorl $4, $0 \0A\09 xorl $4, $2 \0A\09 xorl $1, $0 \0A\09 xorl $0, $2 \0A\09 xorl $2, $0", "r,r,*m,i,i"(i32 %a0, i32 %a2, i32* %a1, i32 665536, i8 7) nounwind
   ret void
 }
-define void @test_xor_64(i64 %a0, i64* %a1) optsize {
+define void @test_xor_64(i64 %a0, i64* %a1, i64 %a2) optsize {
 ; GENERIC-LABEL: test_xor_64:
 ; GENERIC:       # %bb.0:
 ; GENERIC-NEXT:    #APP
@@ -17059,7 +17059,7 @@ define void @test_xor_64(i64 %a0, i64* %
 ; GENERIC-NEXT:    # sched: [7:1.00]
 ; GENERIC-NEXT:    xorq $7, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
-; GENERIC-NEXT:    xorq %rdi, %rdi # sched: [1:0.33]
+; GENERIC-NEXT:    xorq %rdx, %rdi # sched: [1:0.33]
 ; GENERIC-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
 ; GENERIC-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
 ; GENERIC-NEXT:    #NO_APP
@@ -17076,7 +17076,7 @@ define void @test_xor_64(i64 %a0, i64* %
 ; ATOM-NEXT:    # sched: [1:1.00]
 ; ATOM-NEXT:    xorq $7, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    xorq $7, (%rsi) # sched: [1:1.00]
-; ATOM-NEXT:    xorq %rdi, %rdi # sched: [1:0.50]
+; ATOM-NEXT:    xorq %rdx, %rdi # sched: [1:0.50]
 ; ATOM-NEXT:    xorq %rdi, (%rsi) # sched: [1:1.00]
 ; ATOM-NEXT:    xorq (%rsi), %rdi # sched: [1:1.00]
 ; ATOM-NEXT:    #NO_APP
@@ -17093,7 +17093,7 @@ define void @test_xor_64(i64 %a0, i64* %
 ; SLM-NEXT:    # sched: [5:2.00]
 ; SLM-NEXT:    xorq $7, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    xorq $7, (%rsi) # sched: [5:2.00]
-; SLM-NEXT:    xorq %rdi, %rdi # sched: [1:0.50]
+; SLM-NEXT:    xorq %rdx, %rdi # sched: [1:0.50]
 ; SLM-NEXT:    xorq %rdi, (%rsi) # sched: [5:2.00]
 ; SLM-NEXT:    xorq (%rsi), %rdi # sched: [4:1.00]
 ; SLM-NEXT:    #NO_APP
@@ -17110,7 +17110,7 @@ define void @test_xor_64(i64 %a0, i64* %
 ; SANDY-NEXT:    # sched: [7:1.00]
 ; SANDY-NEXT:    xorq $7, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
-; SANDY-NEXT:    xorq %rdi, %rdi # sched: [1:0.33]
+; SANDY-NEXT:    xorq %rdx, %rdi # sched: [1:0.33]
 ; SANDY-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
 ; SANDY-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
 ; SANDY-NEXT:    #NO_APP
@@ -17127,7 +17127,7 @@ define void @test_xor_64(i64 %a0, i64* %
 ; HASWELL-NEXT:    # sched: [7:1.00]
 ; HASWELL-NEXT:    xorq $7, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
-; HASWELL-NEXT:    xorq %rdi, %rdi # sched: [1:0.25]
+; HASWELL-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
 ; HASWELL-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
 ; HASWELL-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
 ; HASWELL-NEXT:    #NO_APP
@@ -17144,7 +17144,7 @@ define void @test_xor_64(i64 %a0, i64* %
 ; BROADWELL-NEXT:    # sched: [7:1.00]
 ; BROADWELL-NEXT:    xorq $7, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
-; BROADWELL-NEXT:    xorq %rdi, %rdi # sched: [1:0.25]
+; BROADWELL-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
 ; BROADWELL-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
 ; BROADWELL-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
 ; BROADWELL-NEXT:    #NO_APP
@@ -17161,7 +17161,7 @@ define void @test_xor_64(i64 %a0, i64* %
 ; SKYLAKE-NEXT:    # sched: [7:1.00]
 ; SKYLAKE-NEXT:    xorq $7, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
-; SKYLAKE-NEXT:    xorq %rdi, %rdi # sched: [1:0.25]
+; SKYLAKE-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
 ; SKYLAKE-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
 ; SKYLAKE-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
 ; SKYLAKE-NEXT:    #NO_APP
@@ -17178,7 +17178,7 @@ define void @test_xor_64(i64 %a0, i64* %
 ; SKX-NEXT:    # sched: [7:1.00]
 ; SKX-NEXT:    xorq $7, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    xorq $7, (%rsi) # sched: [7:1.00]
-; SKX-NEXT:    xorq %rdi, %rdi # sched: [1:0.25]
+; SKX-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
 ; SKX-NEXT:    xorq %rdi, (%rsi) # sched: [7:1.00]
 ; SKX-NEXT:    xorq (%rsi), %rdi # sched: [6:0.50]
 ; SKX-NEXT:    #NO_APP
@@ -17195,7 +17195,7 @@ define void @test_xor_64(i64 %a0, i64* %
 ; BTVER2-NEXT:    # sched: [5:1.00]
 ; BTVER2-NEXT:    xorq $7, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    xorq $7, (%rsi) # sched: [5:1.00]
-; BTVER2-NEXT:    xorq %rdi, %rdi # sched: [1:0.50]
+; BTVER2-NEXT:    xorq %rdx, %rdi # sched: [1:0.50]
 ; BTVER2-NEXT:    xorq %rdi, (%rsi) # sched: [5:1.00]
 ; BTVER2-NEXT:    xorq (%rsi), %rdi # sched: [4:1.00]
 ; BTVER2-NEXT:    #NO_APP
@@ -17212,11 +17212,11 @@ define void @test_xor_64(i64 %a0, i64* %
 ; ZNVER1-NEXT:    # sched: [5:0.50]
 ; ZNVER1-NEXT:    xorq $7, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    xorq $7, (%rsi) # sched: [5:0.50]
-; ZNVER1-NEXT:    xorq %rdi, %rdi # sched: [1:0.25]
+; ZNVER1-NEXT:    xorq %rdx, %rdi # sched: [1:0.25]
 ; ZNVER1-NEXT:    xorq %rdi, (%rsi) # sched: [5:0.50]
 ; ZNVER1-NEXT:    xorq (%rsi), %rdi # sched: [5:0.50]
 ; ZNVER1-NEXT:    #NO_APP
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
-  tail call void asm "xorq $2, %RAX \0A\09 xorq $2, $0 \0A\09 xorq $2, $1 \0A\09 xorq $3, $0 \0A\09 xorq $3, $1 \0A\09 xorq $0, $0 \0A\09 xorq $0, $1 \0A\09 xorq $1, $0", "r,*m,i,i"(i64 %a0, i64* %a1, i32 665536, i8 7) nounwind
+  tail call void asm "xorq $3, %RAX \0A\09 xorq $3, $0 \0A\09 xorq $3, $2 \0A\09 xorq $4, $0 \0A\09 xorq $4, $2 \0A\09 xorq $1, $0 \0A\09 xorq $0, $2 \0A\09 xorq $2, $0", "r,r,*m,i,i"(i64 %a0, i64 %a2, i64* %a1, i32 665536, i8 7) nounwind
   ret void
 }




More information about the llvm-commits mailing list