[llvm] [X86] Truncates i64 add arithmetic to i32 when known zeroes in upper 33 bits (PR #191619)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 13 02:57:04 PDT 2026
https://github.com/2elliti updated https://github.com/llvm/llvm-project/pull/191619
>From 570b5156eb816729aa5c872ea847603695ec783f Mon Sep 17 00:00:00 2001
From: 2elliti <forstoic724321 at gmail.com>
Date: Sat, 11 Apr 2026 16:35:22 +0530
Subject: [PATCH 1/3] [X86] Truncates i64 add arithmetic to i32 when known
zeroes in upper 33 bits
---
llvm/lib/Target/X86/X86ISelLowering.cpp | 25 +++
llvm/test/CodeGen/X86/truncate-i64-add.ll | 178 ++++++++++++++++++++++
2 files changed, 203 insertions(+)
create mode 100644 llvm/test/CodeGen/X86/truncate-i64-add.ll
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 7ccfc412ff184..e2e6a5ad1d5e9 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -59402,6 +59402,31 @@ static SDValue combineAdd(SDNode *N, SelectionDAG &DAG,
if (SDValue IFMA52 = matchVPMADD52(N, DAG, DL, VT, Subtarget))
return IFMA52;
+ // If upper 33 bits of operands are 0, truncates opcode from i64 to i32.
+ if (VT == MVT::i64) {
+ APInt mask = APInt::getHighBitsSet(64, 33);
+ if (DAG.MaskedValueIsZero(Op0, mask) && DAG.MaskedValueIsZero(Op1, mask)) {
+ // Truncate operands MVT::i64 -> MVT::i32
+ SDValue X = DAG.getNode(ISD::TRUNCATE, DL, MVT::i32, Op0);
+ SDValue Y = DAG.getNode(ISD::TRUNCATE, DL, MVT::i32, Op1);
+
+ // now check for NUW and NSW
+ SDNodeFlags flags;
+ // No unsigned wrap, both operands has their upper 33bits 0, making their
+ // sum lower then max unsigned int32.
+ flags.setNoUnsignedWrap(true);
+ // Now check id node had NSW set true or false.
+ bool isNSW = N->getFlags().hasNoSignedWrap();
+
+ // Verify if new nodes has NSW.
+ isNSW = isNSW & DAG.willNotOverflowAdd(true, X, Y);
+ flags.setNoSignedWrap(isNSW);
+ auto addl = DAG.getNode(ISD::ADD, DL, MVT::i32, X, Y, flags);
+
+ return DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i64, addl);
+ }
+ }
+
return combineAddOrSubToADCOrSBB(N, DL, DAG);
}
diff --git a/llvm/test/CodeGen/X86/truncate-i64-add.ll b/llvm/test/CodeGen/X86/truncate-i64-add.ll
new file mode 100644
index 0000000000000..b51e0d954163d
--- /dev/null
+++ b/llvm/test/CodeGen/X86/truncate-i64-add.ll
@@ -0,0 +1,178 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X86
+; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X64-LINUX
+; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s --check-prefix=X64-WIN32
+
+; Both operands upper 33 bits are zero
+define i64 @test_add_i64_narrow(i64 %a, i64 %b) {
+; X86-LABEL: test_add_i64_narrow:
+; X86: # %bb.0:
+; X86-NEXT: movl $2147483647, %eax # imm = 0x7FFFFFFF
+; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT: andl %eax, %ecx
+; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: addl %ecx, %eax
+; X86-NEXT: xorl %edx, %edx
+; X86-NEXT: retl
+;
+; X64-LINUX-LABEL: test_add_i64_narrow:
+; X64-LINUX: # %bb.0:
+; X64-LINUX-NEXT: andl $2147483647, %edi # imm = 0x7FFFFFFF
+; X64-LINUX-NEXT: andl $2147483647, %esi # imm = 0x7FFFFFFF
+; X64-LINUX-NEXT: leal (%rsi,%rdi), %eax
+; X64-LINUX-NEXT: retq
+;
+; X64-WIN32-LABEL: test_add_i64_narrow:
+; X64-WIN32: # %bb.0:
+; X64-WIN32-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
+; X64-WIN32-NEXT: andl $2147483647, %edx # imm = 0x7FFFFFFF
+; X64-WIN32-NEXT: leal (%rdx,%rcx), %eax
+; X64-WIN32-NEXT: retq
+ %a_masked = and i64 %a, 2147483647
+ %b_masked = and i64 %b, 2147483647
+ %res = add i64 %a_masked, %b_masked
+ ret i64 %res
+}
+
+; Both operands zero-extended from i16, should truncate to 32-bit add
+define i64 @add_zext_i16(i16 %a, i16 %b) nounwind {
+; X86-LABEL: add_zext_i16:
+; X86: # %bb.0:
+; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: addl %ecx, %eax
+; X86-NEXT: xorl %edx, %edx
+; X86-NEXT: retl
+;
+; X64-LINUX-LABEL: add_zext_i16:
+; X64-LINUX: # %bb.0:
+; X64-LINUX-NEXT: movzwl %si, %ecx
+; X64-LINUX-NEXT: movzwl %di, %eax
+; X64-LINUX-NEXT: addl %ecx, %eax
+; X64-LINUX-NEXT: retq
+;
+; X64-WIN32-LABEL: add_zext_i16:
+; X64-WIN32: # %bb.0:
+; X64-WIN32-NEXT: movzwl %dx, %edx
+; X64-WIN32-NEXT: movzwl %cx, %eax
+; X64-WIN32-NEXT: addl %edx, %eax
+; X64-WIN32-NEXT: retq
+ %za = zext i16 %a to i64
+ %zb = zext i16 %b to i64
+ %sum = add nuw nsw i64 %za, %zb
+ ret i64 %sum
+}
+
+; One operand is a small constant
+define i64 @add_zext_i16_const(i16 %a) nounwind {
+; X86-LABEL: add_zext_i16_const:
+; X86: # %bb.0:
+; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: addl $42, %eax
+; X86-NEXT: xorl %edx, %edx
+; X86-NEXT: retl
+;
+; X64-LINUX-LABEL: add_zext_i16_const:
+; X64-LINUX: # %bb.0:
+; X64-LINUX-NEXT: movzwl %di, %eax
+; X64-LINUX-NEXT: addl $42, %eax
+; X64-LINUX-NEXT: retq
+;
+; X64-WIN32-LABEL: add_zext_i16_const:
+; X64-WIN32: # %bb.0:
+; X64-WIN32-NEXT: movzwl %cx, %eax
+; X64-WIN32-NEXT: addl $42, %eax
+; X64-WIN32-NEXT: retq
+ %za = zext i16 %a to i64
+ %sum = add nuw nsw i64 %za, 42
+ ret i64 %sum
+}
+
+; Bit 32 set — must NOT truncate
+define i64 @add_bit32_set(i16 %a) nounwind {
+; X86-LABEL: add_bit32_set:
+; X86: # %bb.0:
+; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: addl $42, %eax
+; X86-NEXT: movl $1, %edx
+; X86-NEXT: retl
+;
+; X64-LINUX-LABEL: add_bit32_set:
+; X64-LINUX: # %bb.0:
+; X64-LINUX-NEXT: movzwl %di, %ecx
+; X64-LINUX-NEXT: movabsq $4294967338, %rax # imm = 0x10000002A
+; X64-LINUX-NEXT: addq %rcx, %rax
+; X64-LINUX-NEXT: retq
+;
+; X64-WIN32-LABEL: add_bit32_set:
+; X64-WIN32: # %bb.0:
+; X64-WIN32-NEXT: movzwl %cx, %ecx
+; X64-WIN32-NEXT: movabsq $4294967338, %rax # imm = 0x10000002A
+; X64-WIN32-NEXT: addq %rcx, %rax
+; X64-WIN32-NEXT: retq
+ %za = zext i16 %a to i64
+ %or = or i64 %za, 4294967296
+ %sum = add nuw nsw i64 %or, 42
+ ret i64 %sum
+}
+
+; Sign-extended — must NOT truncate
+define i64 @add_sext_i16(i16 %a, i16 %b) nounwind {
+; X86-LABEL: add_sext_i16:
+; X86: # %bb.0:
+; X86-NEXT: movswl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT: movl %ecx, %edx
+; X86-NEXT: sarl $31, %edx
+; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: addl %ecx, %eax
+; X86-NEXT: adcl $0, %edx
+; X86-NEXT: retl
+;
+; X64-LINUX-LABEL: add_sext_i16:
+; X64-LINUX: # %bb.0:
+; X64-LINUX-NEXT: # kill: def $edi killed $edi def $rdi
+; X64-LINUX-NEXT: movswq %di, %rcx
+; X64-LINUX-NEXT: movzwl %si, %eax
+; X64-LINUX-NEXT: addq %rcx, %rax
+; X64-LINUX-NEXT: retq
+;
+; X64-WIN32-LABEL: add_sext_i16:
+; X64-WIN32: # %bb.0:
+; X64-WIN32-NEXT: movswq %cx, %rcx
+; X64-WIN32-NEXT: movzwl %dx, %eax
+; X64-WIN32-NEXT: addq %rcx, %rax
+; X64-WIN32-NEXT: retq
+ %sa = sext i16 %a to i64
+ %zb = zext i16 %b to i64
+ %sum = add nuw nsw i64 %sa, %zb
+ ret i64 %sum
+}
+
+; i8 source
+define i64 @test_i8_add(i8 %a, i8 %b) nounwind {
+; X86-LABEL: test_i8_add:
+; X86: # %bb.0:
+; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: addl %ecx, %eax
+; X86-NEXT: xorl %edx, %edx
+; X86-NEXT: retl
+;
+; X64-LINUX-LABEL: test_i8_add:
+; X64-LINUX: # %bb.0:
+; X64-LINUX-NEXT: movzbl %sil, %ecx
+; X64-LINUX-NEXT: movzbl %dil, %eax
+; X64-LINUX-NEXT: addl %ecx, %eax
+; X64-LINUX-NEXT: retq
+;
+; X64-WIN32-LABEL: test_i8_add:
+; X64-WIN32: # %bb.0:
+; X64-WIN32-NEXT: movzbl %dl, %edx
+; X64-WIN32-NEXT: movzbl %cl, %eax
+; X64-WIN32-NEXT: addl %edx, %eax
+; X64-WIN32-NEXT: retq
+ %za = zext i8 %a to i64
+ %zb = zext i8 %b to i64
+ %sum = add i64 %za, %zb ; no nuw/nsw — should still fire
+ ret i64 %sum
+}
>From 4ac21a2f563c5431bd10c1e2651c48bbdb401064 Mon Sep 17 00:00:00 2001
From: 2elliti <forstoic724321 at gmail.com>
Date: Mon, 13 Apr 2026 00:44:38 +0530
Subject: [PATCH 2/3] Address review feedback: simplify wrap flags and update
tests
---
llvm/lib/Target/X86/X86ISelLowering.cpp | 14 +--
llvm/test/CodeGen/X86/truncate-i64-add.ll | 137 +++++++++-------------
2 files changed, 63 insertions(+), 88 deletions(-)
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index e2e6a5ad1d5e9..15c7264f61249 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -59411,19 +59411,15 @@ static SDValue combineAdd(SDNode *N, SelectionDAG &DAG,
SDValue Y = DAG.getNode(ISD::TRUNCATE, DL, MVT::i32, Op1);
// now check for NUW and NSW
- SDNodeFlags flags;
+ SDNodeFlags Flags;
// No unsigned wrap, both operands has their upper 33bits 0, making their
// sum lower then max unsigned int32.
- flags.setNoUnsignedWrap(true);
- // Now check id node had NSW set true or false.
- bool isNSW = N->getFlags().hasNoSignedWrap();
+ Flags.setNoUnsignedWrap(true);
+ Flags.setNoSignedWrap(DAG.willNotOverflowAdd(true, X, Y));
- // Verify if new nodes has NSW.
- isNSW = isNSW & DAG.willNotOverflowAdd(true, X, Y);
- flags.setNoSignedWrap(isNSW);
- auto addl = DAG.getNode(ISD::ADD, DL, MVT::i32, X, Y, flags);
+ SDValue Add32 = DAG.getNode(ISD::ADD, DL, MVT::i32, X, Y, Flags);
- return DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i64, addl);
+ return DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i64, Add32);
}
}
diff --git a/llvm/test/CodeGen/X86/truncate-i64-add.ll b/llvm/test/CodeGen/X86/truncate-i64-add.ll
index b51e0d954163d..1ea5374b91694 100644
--- a/llvm/test/CodeGen/X86/truncate-i64-add.ll
+++ b/llvm/test/CodeGen/X86/truncate-i64-add.ll
@@ -1,7 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X86
-; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X64-LINUX
-; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s --check-prefix=X64-WIN32
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=X64
; Both operands upper 33 bits are zero
define i64 @test_add_i64_narrow(i64 %a, i64 %b) {
@@ -15,19 +14,12 @@ define i64 @test_add_i64_narrow(i64 %a, i64 %b) {
; X86-NEXT: xorl %edx, %edx
; X86-NEXT: retl
;
-; X64-LINUX-LABEL: test_add_i64_narrow:
-; X64-LINUX: # %bb.0:
-; X64-LINUX-NEXT: andl $2147483647, %edi # imm = 0x7FFFFFFF
-; X64-LINUX-NEXT: andl $2147483647, %esi # imm = 0x7FFFFFFF
-; X64-LINUX-NEXT: leal (%rsi,%rdi), %eax
-; X64-LINUX-NEXT: retq
-;
-; X64-WIN32-LABEL: test_add_i64_narrow:
-; X64-WIN32: # %bb.0:
-; X64-WIN32-NEXT: andl $2147483647, %ecx # imm = 0x7FFFFFFF
-; X64-WIN32-NEXT: andl $2147483647, %edx # imm = 0x7FFFFFFF
-; X64-WIN32-NEXT: leal (%rdx,%rcx), %eax
-; X64-WIN32-NEXT: retq
+; X64-LABEL: test_add_i64_narrow:
+; X64: # %bb.0:
+; X64-NEXT: andl $2147483647, %edi # imm = 0x7FFFFFFF
+; X64-NEXT: andl $2147483647, %esi # imm = 0x7FFFFFFF
+; X64-NEXT: leal (%rsi,%rdi), %eax
+; X64-NEXT: retq
%a_masked = and i64 %a, 2147483647
%b_masked = and i64 %b, 2147483647
%res = add i64 %a_masked, %b_masked
@@ -44,19 +36,12 @@ define i64 @add_zext_i16(i16 %a, i16 %b) nounwind {
; X86-NEXT: xorl %edx, %edx
; X86-NEXT: retl
;
-; X64-LINUX-LABEL: add_zext_i16:
-; X64-LINUX: # %bb.0:
-; X64-LINUX-NEXT: movzwl %si, %ecx
-; X64-LINUX-NEXT: movzwl %di, %eax
-; X64-LINUX-NEXT: addl %ecx, %eax
-; X64-LINUX-NEXT: retq
-;
-; X64-WIN32-LABEL: add_zext_i16:
-; X64-WIN32: # %bb.0:
-; X64-WIN32-NEXT: movzwl %dx, %edx
-; X64-WIN32-NEXT: movzwl %cx, %eax
-; X64-WIN32-NEXT: addl %edx, %eax
-; X64-WIN32-NEXT: retq
+; X64-LABEL: add_zext_i16:
+; X64: # %bb.0:
+; X64-NEXT: movzwl %si, %ecx
+; X64-NEXT: movzwl %di, %eax
+; X64-NEXT: addl %ecx, %eax
+; X64-NEXT: retq
%za = zext i16 %a to i64
%zb = zext i16 %b to i64
%sum = add nuw nsw i64 %za, %zb
@@ -72,17 +57,11 @@ define i64 @add_zext_i16_const(i16 %a) nounwind {
; X86-NEXT: xorl %edx, %edx
; X86-NEXT: retl
;
-; X64-LINUX-LABEL: add_zext_i16_const:
-; X64-LINUX: # %bb.0:
-; X64-LINUX-NEXT: movzwl %di, %eax
-; X64-LINUX-NEXT: addl $42, %eax
-; X64-LINUX-NEXT: retq
-;
-; X64-WIN32-LABEL: add_zext_i16_const:
-; X64-WIN32: # %bb.0:
-; X64-WIN32-NEXT: movzwl %cx, %eax
-; X64-WIN32-NEXT: addl $42, %eax
-; X64-WIN32-NEXT: retq
+; X64-LABEL: add_zext_i16_const:
+; X64: # %bb.0:
+; X64-NEXT: movzwl %di, %eax
+; X64-NEXT: addl $42, %eax
+; X64-NEXT: retq
%za = zext i16 %a to i64
%sum = add nuw nsw i64 %za, 42
ret i64 %sum
@@ -97,19 +76,12 @@ define i64 @add_bit32_set(i16 %a) nounwind {
; X86-NEXT: movl $1, %edx
; X86-NEXT: retl
;
-; X64-LINUX-LABEL: add_bit32_set:
-; X64-LINUX: # %bb.0:
-; X64-LINUX-NEXT: movzwl %di, %ecx
-; X64-LINUX-NEXT: movabsq $4294967338, %rax # imm = 0x10000002A
-; X64-LINUX-NEXT: addq %rcx, %rax
-; X64-LINUX-NEXT: retq
-;
-; X64-WIN32-LABEL: add_bit32_set:
-; X64-WIN32: # %bb.0:
-; X64-WIN32-NEXT: movzwl %cx, %ecx
-; X64-WIN32-NEXT: movabsq $4294967338, %rax # imm = 0x10000002A
-; X64-WIN32-NEXT: addq %rcx, %rax
-; X64-WIN32-NEXT: retq
+; X64-LABEL: add_bit32_set:
+; X64: # %bb.0:
+; X64-NEXT: movzwl %di, %ecx
+; X64-NEXT: movabsq $4294967338, %rax # imm = 0x10000002A
+; X64-NEXT: addq %rcx, %rax
+; X64-NEXT: retq
%za = zext i16 %a to i64
%or = or i64 %za, 4294967296
%sum = add nuw nsw i64 %or, 42
@@ -128,20 +100,13 @@ define i64 @add_sext_i16(i16 %a, i16 %b) nounwind {
; X86-NEXT: adcl $0, %edx
; X86-NEXT: retl
;
-; X64-LINUX-LABEL: add_sext_i16:
-; X64-LINUX: # %bb.0:
-; X64-LINUX-NEXT: # kill: def $edi killed $edi def $rdi
-; X64-LINUX-NEXT: movswq %di, %rcx
-; X64-LINUX-NEXT: movzwl %si, %eax
-; X64-LINUX-NEXT: addq %rcx, %rax
-; X64-LINUX-NEXT: retq
-;
-; X64-WIN32-LABEL: add_sext_i16:
-; X64-WIN32: # %bb.0:
-; X64-WIN32-NEXT: movswq %cx, %rcx
-; X64-WIN32-NEXT: movzwl %dx, %eax
-; X64-WIN32-NEXT: addq %rcx, %rax
-; X64-WIN32-NEXT: retq
+; X64-LABEL: add_sext_i16:
+; X64: # %bb.0:
+; X64-NEXT: # kill: def $edi killed $edi def $rdi
+; X64-NEXT: movswq %di, %rcx
+; X64-NEXT: movzwl %si, %eax
+; X64-NEXT: addq %rcx, %rax
+; X64-NEXT: retq
%sa = sext i16 %a to i64
%zb = zext i16 %b to i64
%sum = add nuw nsw i64 %sa, %zb
@@ -158,21 +123,35 @@ define i64 @test_i8_add(i8 %a, i8 %b) nounwind {
; X86-NEXT: xorl %edx, %edx
; X86-NEXT: retl
;
-; X64-LINUX-LABEL: test_i8_add:
-; X64-LINUX: # %bb.0:
-; X64-LINUX-NEXT: movzbl %sil, %ecx
-; X64-LINUX-NEXT: movzbl %dil, %eax
-; X64-LINUX-NEXT: addl %ecx, %eax
-; X64-LINUX-NEXT: retq
-;
-; X64-WIN32-LABEL: test_i8_add:
-; X64-WIN32: # %bb.0:
-; X64-WIN32-NEXT: movzbl %dl, %edx
-; X64-WIN32-NEXT: movzbl %cl, %eax
-; X64-WIN32-NEXT: addl %edx, %eax
-; X64-WIN32-NEXT: retq
+; X64-LABEL: test_i8_add:
+; X64: # %bb.0:
+; X64-NEXT: movzbl %sil, %ecx
+; X64-NEXT: movzbl %dil, %eax
+; X64-NEXT: addl %ecx, %eax
+; X64-NEXT: retq
%za = zext i8 %a to i64
%zb = zext i8 %b to i64
%sum = add i64 %za, %zb ; no nuw/nsw — should still fire
ret i64 %sum
}
+
+define i64 @add_zext_i32(i32 %a, i32 %b) {
+; X86-LABEL: add_zext_i32:
+; X86: # %bb.0:
+; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: xorl %edx, %edx
+; X86-NEXT: addl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: setb %dl
+; X86-NEXT: retl
+;
+; X64-LABEL: add_zext_i32:
+; X64: # %bb.0:
+; X64-NEXT: movl %edi, %ecx
+; X64-NEXT: movl %esi, %eax
+; X64-NEXT: addq %rcx, %rax
+; X64-NEXT: retq
+ %za = zext i32 %a to i64
+ %zb = zext i32 %b to i64
+ %sum = add i64 %za, %zb
+ ret i64 %sum
+}
>From 5366f2b1b8f75dd67cf3a31270c11d3a0afd3261 Mon Sep 17 00:00:00 2001
From: 2elliti <forstoic724321 at gmail.com>
Date: Mon, 13 Apr 2026 15:04:59 +0530
Subject: [PATCH 3/3] update tests
---
llvm/test/CodeGen/X86/bit-manip-i256.ll | 163 +++---
llvm/test/CodeGen/X86/bit-manip-i512.ll | 549 +++++++++---------
llvm/test/CodeGen/X86/bitcnt-big-integer.ll | 455 +++++++--------
llvm/test/CodeGen/X86/bittest-big-integer.ll | 92 +--
llvm/test/CodeGen/X86/bsf.ll | 4 +-
llvm/test/CodeGen/X86/bsr.ll | 8 +-
.../CodeGen/X86/dag-update-nodetomatch.ll | 4 +-
llvm/test/CodeGen/X86/dagcombine-select.ll | 28 +-
llvm/test/CodeGen/X86/dagcombine-shifts.ll | 3 +-
llvm/test/CodeGen/X86/divrem8_ext.ll | 2 +-
.../X86/fold-int-pow2-with-fmul-or-fdiv.ll | 28 +-
llvm/test/CodeGen/X86/h-registers-1.ll | 28 +-
llvm/test/CodeGen/X86/narrow-add-i64.ll | 8 +-
llvm/test/CodeGen/X86/popcnt.ll | 168 +++---
llvm/test/CodeGen/X86/pr173924.ll | 105 +++-
.../CodeGen/X86/scheduler-backtracking.ll | 284 ++++-----
llvm/test/CodeGen/X86/vector-compress.ll | 414 +++++++------
llvm/test/CodeGen/X86/xaluo.ll | 2 +-
18 files changed, 1170 insertions(+), 1175 deletions(-)
diff --git a/llvm/test/CodeGen/X86/bit-manip-i256.ll b/llvm/test/CodeGen/X86/bit-manip-i256.ll
index 9bebab1834e41..af1327a367f3d 100644
--- a/llvm/test/CodeGen/X86/bit-manip-i256.ll
+++ b/llvm/test/CodeGen/X86/bit-manip-i256.ll
@@ -2413,22 +2413,23 @@ define i256 @isolate_msb_i256(i256 %a0, i256 %idx) nounwind {
; SSE-NEXT: movq %rcx, %rax
; SSE-NEXT: movq %rdx, %r9
; SSE-NEXT: orq %r8, %r9
-; SSE-NEXT: bsrq %rsi, %rcx
-; SSE-NEXT: orq %rax, %rsi
-; SSE-NEXT: bsrq %r8, %r10
-; SSE-NEXT: xorq $63, %r10
+; SSE-NEXT: movq %rsi, %r10
+; SSE-NEXT: orq %rcx, %r10
+; SSE-NEXT: bsrq %r8, %rcx
+; SSE-NEXT: xorq $63, %rcx
; SSE-NEXT: bsrq %rax, %r11
-; SSE-NEXT: xorq $63, %r11
-; SSE-NEXT: orq $64, %r11
+; SSE-NEXT: xorl $63, %r11d
+; SSE-NEXT: orl $64, %r11d
; SSE-NEXT: testq %r8, %r8
-; SSE-NEXT: cmovneq %r10, %r11
-; SSE-NEXT: bsrq %rdx, %r10
-; SSE-NEXT: xorq $63, %r10
-; SSE-NEXT: xorq $63, %rcx
-; SSE-NEXT: orq $64, %rcx
+; SSE-NEXT: cmovneq %rcx, %r11
+; SSE-NEXT: bsrq %rdx, %rbx
+; SSE-NEXT: xorl $63, %ebx
+; SSE-NEXT: bsrq %rsi, %rcx
+; SSE-NEXT: xorl $63, %ecx
+; SSE-NEXT: orl $64, %ecx
; SSE-NEXT: testq %rdx, %rdx
-; SSE-NEXT: cmovneq %r10, %rcx
-; SSE-NEXT: orq $128, %rcx
+; SSE-NEXT: cmovnel %ebx, %ecx
+; SSE-NEXT: subl $-128, %ecx
; SSE-NEXT: orq %r8, %rax
; SSE-NEXT: cmovneq %r11, %rcx
; SSE-NEXT: xorps %xmm0, %xmm0
@@ -2442,27 +2443,27 @@ define i256 @isolate_msb_i256(i256 %a0, i256 %idx) nounwind {
; SSE-NEXT: movzbl %al, %eax
; SSE-NEXT: movq $0, -{{[0-9]+}}(%rsp)
; SSE-NEXT: movq -40(%rsp,%rax,8), %rdx
-; SSE-NEXT: movq -48(%rsp,%rax,8), %r8
-; SSE-NEXT: movq %r8, %r10
-; SSE-NEXT: shrdq %cl, %rdx, %r10
+; SSE-NEXT: movq -48(%rsp,%rax,8), %rsi
+; SSE-NEXT: movq %rsi, %r8
+; SSE-NEXT: shrdq %cl, %rdx, %r8
; SSE-NEXT: movq -56(%rsp,%rax,8), %r11
; SSE-NEXT: movq %r11, %rbx
-; SSE-NEXT: shrdq %cl, %r8, %rbx
-; SSE-NEXT: movq -64(%rsp,%rax,8), %r8
+; SSE-NEXT: shrdq %cl, %rsi, %rbx
+; SSE-NEXT: movq -64(%rsp,%rax,8), %rsi
; SSE-NEXT: shrq %cl, %rdx
; SSE-NEXT: # kill: def $cl killed $cl killed $rcx
-; SSE-NEXT: shrdq %cl, %r11, %r8
+; SSE-NEXT: shrdq %cl, %r11, %rsi
; SSE-NEXT: xorl %ecx, %ecx
-; SSE-NEXT: orq %r9, %rsi
+; SSE-NEXT: orq %r9, %r10
; SSE-NEXT: cmoveq %rcx, %rbx
-; SSE-NEXT: cmoveq %rcx, %r10
; SSE-NEXT: cmoveq %rcx, %r8
+; SSE-NEXT: cmoveq %rcx, %rsi
; SSE-NEXT: movq %rdi, %rax
; SSE-NEXT: cmoveq %rcx, %rdx
; SSE-NEXT: movq %rdx, 24(%rdi)
-; SSE-NEXT: movq %r10, 16(%rdi)
+; SSE-NEXT: movq %r8, 16(%rdi)
; SSE-NEXT: movq %rbx, 8(%rdi)
-; SSE-NEXT: movq %r8, (%rdi)
+; SSE-NEXT: movq %rsi, (%rdi)
; SSE-NEXT: popq %rbx
; SSE-NEXT: retq
;
@@ -2477,15 +2478,15 @@ define i256 @isolate_msb_i256(i256 %a0, i256 %idx) nounwind {
; AVX2-NEXT: orq %rax, %rsi
; AVX2-NEXT: lzcntq %r8, %r10
; AVX2-NEXT: lzcntq %rax, %r11
-; AVX2-NEXT: addq $64, %r11
+; AVX2-NEXT: addl $64, %r11d
; AVX2-NEXT: testq %r8, %r8
; AVX2-NEXT: cmovneq %r10, %r11
; AVX2-NEXT: xorl %r10d, %r10d
; AVX2-NEXT: lzcntq %rdx, %r10
-; AVX2-NEXT: addq $64, %rcx
+; AVX2-NEXT: addl $64, %ecx
; AVX2-NEXT: testq %rdx, %rdx
-; AVX2-NEXT: cmovneq %r10, %rcx
-; AVX2-NEXT: subq $-128, %rcx
+; AVX2-NEXT: cmovnel %r10d, %ecx
+; AVX2-NEXT: subl $-128, %ecx
; AVX2-NEXT: orq %r8, %rax
; AVX2-NEXT: cmovneq %r11, %rcx
; AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0
@@ -2530,14 +2531,14 @@ define i256 @isolate_msb_i256(i256 %a0, i256 %idx) nounwind {
; AVX512F-NEXT: orq %rax, %rsi
; AVX512F-NEXT: lzcntq %r8, %r10
; AVX512F-NEXT: lzcntq %rax, %r11
-; AVX512F-NEXT: addq $64, %r11
+; AVX512F-NEXT: addl $64, %r11d
; AVX512F-NEXT: testq %r8, %r8
; AVX512F-NEXT: cmovneq %r10, %r11
; AVX512F-NEXT: lzcntq %rdx, %r10
-; AVX512F-NEXT: addq $64, %rcx
+; AVX512F-NEXT: addl $64, %ecx
; AVX512F-NEXT: testq %rdx, %rdx
-; AVX512F-NEXT: cmovneq %r10, %rcx
-; AVX512F-NEXT: subq $-128, %rcx
+; AVX512F-NEXT: cmovnel %r10d, %ecx
+; AVX512F-NEXT: subl $-128, %ecx
; AVX512F-NEXT: orq %r8, %rax
; AVX512F-NEXT: cmovneq %r11, %rcx
; AVX512F-NEXT: vmovaps {{.*#+}} zmm0 = [0,0,0,9223372036854775808,0,0,0,0]
@@ -2579,14 +2580,14 @@ define i256 @isolate_msb_i256(i256 %a0, i256 %idx) nounwind {
; AVX512VL-NEXT: orq %rax, %rsi
; AVX512VL-NEXT: lzcntq %r8, %r10
; AVX512VL-NEXT: lzcntq %rax, %r11
-; AVX512VL-NEXT: addq $64, %r11
+; AVX512VL-NEXT: addl $64, %r11d
; AVX512VL-NEXT: testq %r8, %r8
; AVX512VL-NEXT: cmovneq %r10, %r11
; AVX512VL-NEXT: lzcntq %rdx, %r10
-; AVX512VL-NEXT: addq $64, %rcx
+; AVX512VL-NEXT: addl $64, %ecx
; AVX512VL-NEXT: testq %rdx, %rdx
-; AVX512VL-NEXT: cmovneq %r10, %rcx
-; AVX512VL-NEXT: subq $-128, %rcx
+; AVX512VL-NEXT: cmovnel %r10d, %ecx
+; AVX512VL-NEXT: subl $-128, %ecx
; AVX512VL-NEXT: orq %r8, %rax
; AVX512VL-NEXT: cmovneq %r11, %rcx
; AVX512VL-NEXT: vxorps %xmm0, %xmm0, %xmm0
@@ -2631,14 +2632,14 @@ define i256 @isolate_msb_i256(i256 %a0, i256 %idx) nounwind {
; AVX512VBMI-NEXT: orq %rax, %rsi
; AVX512VBMI-NEXT: lzcntq %r8, %r10
; AVX512VBMI-NEXT: lzcntq %rax, %r11
-; AVX512VBMI-NEXT: addq $64, %r11
+; AVX512VBMI-NEXT: addl $64, %r11d
; AVX512VBMI-NEXT: testq %r8, %r8
; AVX512VBMI-NEXT: cmovneq %r10, %r11
; AVX512VBMI-NEXT: lzcntq %rdx, %r10
-; AVX512VBMI-NEXT: addq $64, %rcx
+; AVX512VBMI-NEXT: addl $64, %ecx
; AVX512VBMI-NEXT: testq %rdx, %rdx
-; AVX512VBMI-NEXT: cmovneq %r10, %rcx
-; AVX512VBMI-NEXT: subq $-128, %rcx
+; AVX512VBMI-NEXT: cmovnel %r10d, %ecx
+; AVX512VBMI-NEXT: subl $-128, %ecx
; AVX512VBMI-NEXT: orq %r8, %rax
; AVX512VBMI-NEXT: cmovneq %r11, %rcx
; AVX512VBMI-NEXT: vxorps %xmm0, %xmm0, %xmm0
@@ -2697,18 +2698,18 @@ define i256 @isolate_msb_i256_vector(<4 x i64> %v0, i256 %idx) nounwind {
; SSE2-NEXT: bsrq %r8, %r9
; SSE2-NEXT: xorq $63, %r9
; SSE2-NEXT: bsrq %rsi, %rsi
-; SSE2-NEXT: xorq $63, %rsi
-; SSE2-NEXT: orq $64, %rsi
+; SSE2-NEXT: xorl $63, %esi
+; SSE2-NEXT: orl $64, %esi
; SSE2-NEXT: testq %r8, %r8
; SSE2-NEXT: cmovneq %r9, %rsi
; SSE2-NEXT: bsrq %rdx, %r8
-; SSE2-NEXT: xorq $63, %r8
+; SSE2-NEXT: xorl $63, %r8d
; SSE2-NEXT: bsrq %rcx, %rcx
-; SSE2-NEXT: xorq $63, %rcx
-; SSE2-NEXT: orq $64, %rcx
+; SSE2-NEXT: xorl $63, %ecx
+; SSE2-NEXT: orl $64, %ecx
; SSE2-NEXT: testq %rdx, %rdx
-; SSE2-NEXT: cmovneq %r8, %rcx
-; SSE2-NEXT: orq $128, %rcx
+; SSE2-NEXT: cmovnel %r8d, %ecx
+; SSE2-NEXT: subl $-128, %ecx
; SSE2-NEXT: pcmpeqd %xmm2, %xmm1
; SSE2-NEXT: movmskps %xmm1, %edx
; SSE2-NEXT: xorl $15, %edx
@@ -2755,22 +2756,22 @@ define i256 @isolate_msb_i256_vector(<4 x i64> %v0, i256 %idx) nounwind {
; SSE42-NEXT: bsrq %rsi, %r8
; SSE42-NEXT: xorq $63, %r8
; SSE42-NEXT: bsrq %rax, %rax
-; SSE42-NEXT: xorq $63, %rax
-; SSE42-NEXT: orq $64, %rax
+; SSE42-NEXT: xorl $63, %eax
+; SSE42-NEXT: orl $64, %eax
; SSE42-NEXT: testq %rsi, %rsi
; SSE42-NEXT: cmovneq %r8, %rax
; SSE42-NEXT: bsrq %rdx, %rsi
-; SSE42-NEXT: xorq $63, %rsi
+; SSE42-NEXT: xorl $63, %esi
; SSE42-NEXT: bsrq %rcx, %rcx
-; SSE42-NEXT: xorq $63, %rcx
-; SSE42-NEXT: orq $64, %rcx
+; SSE42-NEXT: xorl $63, %ecx
+; SSE42-NEXT: orl $64, %ecx
; SSE42-NEXT: testq %rdx, %rdx
-; SSE42-NEXT: cmovneq %rsi, %rcx
+; SSE42-NEXT: cmovnel %esi, %ecx
; SSE42-NEXT: xorps %xmm2, %xmm2
; SSE42-NEXT: movaps %xmm2, -{{[0-9]+}}(%rsp)
; SSE42-NEXT: movaps %xmm2, -{{[0-9]+}}(%rsp)
; SSE42-NEXT: movaps %xmm2, -{{[0-9]+}}(%rsp)
-; SSE42-NEXT: orq $128, %rcx
+; SSE42-NEXT: subl $-128, %ecx
; SSE42-NEXT: ptest %xmm1, %xmm1
; SSE42-NEXT: cmovneq %rax, %rcx
; SSE42-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
@@ -2813,16 +2814,16 @@ define i256 @isolate_msb_i256_vector(<4 x i64> %v0, i256 %idx) nounwind {
; AVX2-NEXT: vpextrq $1, %xmm1, %r8
; AVX2-NEXT: lzcntq %r8, %rcx
; AVX2-NEXT: lzcntq %rsi, %r9
-; AVX2-NEXT: addq $64, %r9
+; AVX2-NEXT: addl $64, %r9d
; AVX2-NEXT: testq %r8, %r8
; AVX2-NEXT: cmovneq %rcx, %r9
; AVX2-NEXT: lzcntq %rdx, %r10
; AVX2-NEXT: xorl %ecx, %ecx
; AVX2-NEXT: lzcntq %rax, %rcx
-; AVX2-NEXT: addq $64, %rcx
+; AVX2-NEXT: addl $64, %ecx
; AVX2-NEXT: testq %rdx, %rdx
-; AVX2-NEXT: cmovneq %r10, %rcx
-; AVX2-NEXT: subq $-128, %rcx
+; AVX2-NEXT: cmovnel %r10d, %ecx
+; AVX2-NEXT: subl $-128, %ecx
; AVX2-NEXT: orq %r8, %rsi
; AVX2-NEXT: cmovneq %r9, %rcx
; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
@@ -2863,7 +2864,7 @@ define i256 @isolate_msb_i256_vector(<4 x i64> %v0, i256 %idx) nounwind {
; AVX512F-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,2,1,0]
; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k0
; AVX512F-NEXT: vplzcntq %zmm1, %zmm1
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512F-NEXT: kshiftlw $12, %k0, %k0
; AVX512F-NEXT: kshiftrw $12, %k0, %k1
; AVX512F-NEXT: vpcompressq %zmm1, %zmm1 {%k1}
@@ -2901,7 +2902,7 @@ define i256 @isolate_msb_i256_vector(<4 x i64> %v0, i256 %idx) nounwind {
; AVX512VL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,2,1,0]
; AVX512VL-NEXT: vptestmq %ymm1, %ymm1, %k1
; AVX512VL-NEXT: vplzcntq %ymm1, %ymm1
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VL-NEXT: vpcompressq %ymm1, %ymm1 {%k1}
; AVX512VL-NEXT: vxorps %xmm2, %xmm2, %xmm2
; AVX512VL-NEXT: vmovups %ymm2, -{{[0-9]+}}(%rsp)
@@ -2940,7 +2941,7 @@ define i256 @isolate_msb_i256_vector(<4 x i64> %v0, i256 %idx) nounwind {
; AVX512VBMI-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,2,1,0]
; AVX512VBMI-NEXT: vptestmq %ymm1, %ymm1, %k1
; AVX512VBMI-NEXT: vplzcntq %ymm1, %ymm1
-; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VBMI-NEXT: vpcompressq %ymm1, %ymm1 {%k1}
; AVX512VBMI-NEXT: vxorps %xmm2, %xmm2, %xmm2
; AVX512VBMI-NEXT: vmovups %ymm2, -{{[0-9]+}}(%rsp)
@@ -2997,18 +2998,18 @@ define i256 @isolate_msb_i256_load(ptr %p0, i256 %idx) nounwind {
; SSE2-NEXT: bsrq %r8, %rcx
; SSE2-NEXT: xorq $63, %rcx
; SSE2-NEXT: bsrq %rdx, %r10
-; SSE2-NEXT: xorq $63, %r10
-; SSE2-NEXT: orq $64, %r10
+; SSE2-NEXT: xorl $63, %r10d
+; SSE2-NEXT: orl $64, %r10d
; SSE2-NEXT: testq %r8, %r8
; SSE2-NEXT: cmovneq %rcx, %r10
; SSE2-NEXT: bsrq %r9, %r11
-; SSE2-NEXT: xorq $63, %r11
+; SSE2-NEXT: xorl $63, %r11d
; SSE2-NEXT: bsrq (%rsi), %rcx
-; SSE2-NEXT: xorq $63, %rcx
-; SSE2-NEXT: orq $64, %rcx
+; SSE2-NEXT: xorl $63, %ecx
+; SSE2-NEXT: orl $64, %ecx
; SSE2-NEXT: testq %r9, %r9
-; SSE2-NEXT: cmovneq %r11, %rcx
-; SSE2-NEXT: orq $128, %rcx
+; SSE2-NEXT: cmovnel %r11d, %ecx
+; SSE2-NEXT: subl $-128, %ecx
; SSE2-NEXT: orq %r8, %rdx
; SSE2-NEXT: cmovneq %r10, %rcx
; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp)
@@ -3053,19 +3054,19 @@ define i256 @isolate_msb_i256_load(ptr %p0, i256 %idx) nounwind {
; SSE42-NEXT: bsrq %rdx, %rcx
; SSE42-NEXT: xorq $63, %rcx
; SSE42-NEXT: bsrq %rax, %r8
-; SSE42-NEXT: xorq $63, %r8
-; SSE42-NEXT: orq $64, %r8
+; SSE42-NEXT: xorl $63, %r8d
+; SSE42-NEXT: orl $64, %r8d
; SSE42-NEXT: testq %rdx, %rdx
; SSE42-NEXT: cmovneq %rcx, %r8
; SSE42-NEXT: movq 8(%rsi), %r9
; SSE42-NEXT: bsrq %r9, %r10
; SSE42-NEXT: bsrq (%rsi), %rcx
-; SSE42-NEXT: xorq $63, %r10
-; SSE42-NEXT: xorq $63, %rcx
-; SSE42-NEXT: orq $64, %rcx
+; SSE42-NEXT: xorl $63, %r10d
+; SSE42-NEXT: xorl $63, %ecx
+; SSE42-NEXT: orl $64, %ecx
; SSE42-NEXT: testq %r9, %r9
-; SSE42-NEXT: cmovneq %r10, %rcx
-; SSE42-NEXT: orq $128, %rcx
+; SSE42-NEXT: cmovnel %r10d, %ecx
+; SSE42-NEXT: subl $-128, %ecx
; SSE42-NEXT: orq %rdx, %rax
; SSE42-NEXT: cmovneq %r8, %rcx
; SSE42-NEXT: xorps %xmm1, %xmm1
@@ -3108,17 +3109,17 @@ define i256 @isolate_msb_i256_load(ptr %p0, i256 %idx) nounwind {
; AVX2-NEXT: movq 24(%rsi), %rdx
; AVX2-NEXT: lzcntq %rdx, %rcx
; AVX2-NEXT: lzcntq %rax, %r8
-; AVX2-NEXT: addq $64, %r8
+; AVX2-NEXT: addl $64, %r8d
; AVX2-NEXT: testq %rdx, %rdx
; AVX2-NEXT: cmovneq %rcx, %r8
; AVX2-NEXT: movq 8(%rsi), %r9
; AVX2-NEXT: lzcntq %r9, %r10
; AVX2-NEXT: xorl %ecx, %ecx
; AVX2-NEXT: lzcntq (%rsi), %rcx
-; AVX2-NEXT: addq $64, %rcx
+; AVX2-NEXT: addl $64, %ecx
; AVX2-NEXT: testq %r9, %r9
-; AVX2-NEXT: cmovneq %r10, %rcx
-; AVX2-NEXT: subq $-128, %rcx
+; AVX2-NEXT: cmovnel %r10d, %ecx
+; AVX2-NEXT: subl $-128, %ecx
; AVX2-NEXT: orq %rdx, %rax
; AVX2-NEXT: cmovneq %r8, %rcx
; AVX2-NEXT: vmovdqu (%rsi), %ymm0
@@ -3161,7 +3162,7 @@ define i256 @isolate_msb_i256_load(ptr %p0, i256 %idx) nounwind {
; AVX512F-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,2,1,0]
; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k0
; AVX512F-NEXT: vplzcntq %zmm1, %zmm1
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512F-NEXT: kshiftlw $12, %k0, %k0
; AVX512F-NEXT: kshiftrw $12, %k0, %k1
; AVX512F-NEXT: vpcompressq %zmm1, %zmm1 {%k1} {z}
@@ -3199,7 +3200,7 @@ define i256 @isolate_msb_i256_load(ptr %p0, i256 %idx) nounwind {
; AVX512VL-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,2,1,0]
; AVX512VL-NEXT: vptestmq %ymm1, %ymm1, %k1
; AVX512VL-NEXT: vplzcntq %ymm1, %ymm1
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VL-NEXT: vpcompressq %ymm1, %ymm1 {%k1} {z}
; AVX512VL-NEXT: vxorps %xmm2, %xmm2, %xmm2
; AVX512VL-NEXT: vmovups %ymm2, -{{[0-9]+}}(%rsp)
@@ -3239,7 +3240,7 @@ define i256 @isolate_msb_i256_load(ptr %p0, i256 %idx) nounwind {
; AVX512VBMI-NEXT: vpermq {{.*#+}} ymm1 = ymm0[3,2,1,0]
; AVX512VBMI-NEXT: vptestmq %ymm1, %ymm1, %k1
; AVX512VBMI-NEXT: vplzcntq %ymm1, %ymm1
-; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VBMI-NEXT: vpcompressq %ymm1, %ymm1 {%k1} {z}
; AVX512VBMI-NEXT: vxorps %xmm2, %xmm2, %xmm2
; AVX512VBMI-NEXT: vmovups %ymm2, -{{[0-9]+}}(%rsp)
diff --git a/llvm/test/CodeGen/X86/bit-manip-i512.ll b/llvm/test/CodeGen/X86/bit-manip-i512.ll
index 1688e97d26272..c06dc1bcfae8d 100644
--- a/llvm/test/CodeGen/X86/bit-manip-i512.ll
+++ b/llvm/test/CodeGen/X86/bit-manip-i512.ll
@@ -4127,39 +4127,39 @@ define i512 @isolate_msb_i512(i512 %a0, i512 %idx) nounwind {
; SSE-NEXT: bsrq %r14, %r15
; SSE-NEXT: xorq $63, %r15
; SSE-NEXT: bsrq %rbx, %r12
-; SSE-NEXT: xorq $63, %r12
-; SSE-NEXT: orq $64, %r12
+; SSE-NEXT: xorl $63, %r12d
+; SSE-NEXT: orl $64, %r12d
; SSE-NEXT: testq %r14, %r14
; SSE-NEXT: cmovneq %r15, %r12
; SSE-NEXT: bsrq %r11, %r13
-; SSE-NEXT: xorq $63, %r13
+; SSE-NEXT: xorl $63, %r13d
; SSE-NEXT: bsrq %r9, %r15
-; SSE-NEXT: xorq $63, %r15
-; SSE-NEXT: orq $64, %r15
+; SSE-NEXT: xorl $63, %r15d
+; SSE-NEXT: orl $64, %r15d
; SSE-NEXT: testq %r11, %r11
-; SSE-NEXT: cmovneq %r13, %r15
-; SSE-NEXT: orq $128, %r15
+; SSE-NEXT: cmovnel %r13d, %r15d
+; SSE-NEXT: subl $-128, %r15d
; SSE-NEXT: movq %rbx, %r13
; SSE-NEXT: orq %r14, %r13
; SSE-NEXT: cmovneq %r12, %r15
; SSE-NEXT: bsrq %r8, %r12
-; SSE-NEXT: xorq $63, %r12
+; SSE-NEXT: xorl $63, %r12d
; SSE-NEXT: bsrq %rcx, %r13
-; SSE-NEXT: xorq $63, %r13
-; SSE-NEXT: orq $64, %r13
+; SSE-NEXT: xorl $63, %r13d
+; SSE-NEXT: orl $64, %r13d
; SSE-NEXT: testq %r8, %r8
-; SSE-NEXT: cmovneq %r12, %r13
+; SSE-NEXT: cmovnel %r12d, %r13d
; SSE-NEXT: bsrq %rdx, %r12
-; SSE-NEXT: xorq $63, %r12
+; SSE-NEXT: xorl $63, %r12d
; SSE-NEXT: bsrq %rsi, %rsi
-; SSE-NEXT: xorq $63, %rsi
-; SSE-NEXT: orq $64, %rsi
+; SSE-NEXT: xorl $63, %esi
+; SSE-NEXT: orl $64, %esi
; SSE-NEXT: testq %rdx, %rdx
-; SSE-NEXT: cmovneq %r12, %rsi
-; SSE-NEXT: orq $128, %rsi
+; SSE-NEXT: cmovnel %r12d, %esi
+; SSE-NEXT: subl $-128, %esi
; SSE-NEXT: orq %r8, %rcx
-; SSE-NEXT: cmovneq %r13, %rsi
-; SSE-NEXT: orq $256, %rsi # imm = 0x100
+; SSE-NEXT: cmovnel %r13d, %esi
+; SSE-NEXT: addl $256, %esi # imm = 0x100
; SSE-NEXT: orq %r14, %r11
; SSE-NEXT: orq %rbx, %r9
; SSE-NEXT: orq %r11, %r9
@@ -4230,124 +4230,119 @@ define i512 @isolate_msb_i512(i512 %a0, i512 %idx) nounwind {
;
; AVX2-LABEL: isolate_msb_i512:
; AVX2: # %bb.0:
-; AVX2-NEXT: pushq %rbp
; AVX2-NEXT: pushq %r15
; AVX2-NEXT: pushq %r14
; AVX2-NEXT: pushq %r13
; AVX2-NEXT: pushq %r12
; AVX2-NEXT: pushq %rbx
-; AVX2-NEXT: pushq %rax
+; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rax
; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %rbx
; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r14
-; AVX2-NEXT: movq {{[0-9]+}}(%rsp), %r15
-; AVX2-NEXT: movq %r8, %rax
-; AVX2-NEXT: orq %r15, %rax
+; AVX2-NEXT: movq %r8, %r11
+; AVX2-NEXT: orq %r14, %r11
; AVX2-NEXT: movq %rdx, %r10
-; AVX2-NEXT: orq %rbx, %r10
; AVX2-NEXT: orq %rax, %r10
-; AVX2-NEXT: movq %rcx, %rax
-; AVX2-NEXT: orq %r14, %rax
+; AVX2-NEXT: orq %r11, %r10
+; AVX2-NEXT: movq %rcx, %r15
+; AVX2-NEXT: orq %rbx, %r15
; AVX2-NEXT: movq %rsi, %r11
; AVX2-NEXT: orq %r9, %r11
-; AVX2-NEXT: orq %rax, %r11
-; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: lzcntq %r15, %rax
+; AVX2-NEXT: orq %r15, %r11
+; AVX2-NEXT: xorl %r15d, %r15d
+; AVX2-NEXT: lzcntq %r14, %r15
+; AVX2-NEXT: xorl %r12d, %r12d
+; AVX2-NEXT: lzcntq %rbx, %r12
+; AVX2-NEXT: addl $64, %r12d
+; AVX2-NEXT: testq %r14, %r14
+; AVX2-NEXT: cmovneq %r15, %r12
; AVX2-NEXT: xorl %r13d, %r13d
-; AVX2-NEXT: lzcntq %r14, %r13
-; AVX2-NEXT: addq $64, %r13
-; AVX2-NEXT: testq %r15, %r15
-; AVX2-NEXT: cmovneq %rax, %r13
-; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: lzcntq %rbx, %rax
+; AVX2-NEXT: lzcntq %rax, %r13
+; AVX2-NEXT: xorl %r15d, %r15d
+; AVX2-NEXT: lzcntq %r9, %r15
+; AVX2-NEXT: addl $64, %r15d
+; AVX2-NEXT: testq %rax, %rax
+; AVX2-NEXT: cmovnel %r13d, %r15d
+; AVX2-NEXT: subl $-128, %r15d
+; AVX2-NEXT: movq %rbx, %r13
+; AVX2-NEXT: orq %r14, %r13
+; AVX2-NEXT: cmovneq %r12, %r15
; AVX2-NEXT: xorl %r12d, %r12d
-; AVX2-NEXT: lzcntq %r9, %r12
-; AVX2-NEXT: addq $64, %r12
-; AVX2-NEXT: testq %rbx, %rbx
-; AVX2-NEXT: cmovneq %rax, %r12
-; AVX2-NEXT: subq $-128, %r12
-; AVX2-NEXT: movq %r14, %rax
-; AVX2-NEXT: orq %r15, %rax
-; AVX2-NEXT: cmovneq %r13, %r12
-; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: lzcntq %r8, %rax
+; AVX2-NEXT: lzcntq %r8, %r12
; AVX2-NEXT: xorl %r13d, %r13d
; AVX2-NEXT: lzcntq %rcx, %r13
-; AVX2-NEXT: addq $64, %r13
+; AVX2-NEXT: addl $64, %r13d
; AVX2-NEXT: testq %r8, %r8
-; AVX2-NEXT: cmovneq %rax, %r13
-; AVX2-NEXT: xorl %ebp, %ebp
-; AVX2-NEXT: lzcntq %rdx, %rbp
-; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: lzcntq %rsi, %rax
-; AVX2-NEXT: addq $64, %rax
+; AVX2-NEXT: cmovnel %r12d, %r13d
+; AVX2-NEXT: xorl %r12d, %r12d
+; AVX2-NEXT: lzcntq %rdx, %r12
+; AVX2-NEXT: lzcntq %rsi, %rsi
+; AVX2-NEXT: addl $64, %esi
; AVX2-NEXT: testq %rdx, %rdx
-; AVX2-NEXT: cmovneq %rbp, %rax
-; AVX2-NEXT: subq $-128, %rax
+; AVX2-NEXT: cmovnel %r12d, %esi
+; AVX2-NEXT: subl $-128, %esi
; AVX2-NEXT: orq %r8, %rcx
-; AVX2-NEXT: cmovneq %r13, %rax
-; AVX2-NEXT: addq $256, %rax # imm = 0x100
-; AVX2-NEXT: orq %r15, %rbx
-; AVX2-NEXT: orq %r14, %r9
+; AVX2-NEXT: cmovnel %r13d, %esi
+; AVX2-NEXT: addl $256, %esi # imm = 0x100
+; AVX2-NEXT: orq %r14, %rax
; AVX2-NEXT: orq %rbx, %r9
-; AVX2-NEXT: cmovneq %r12, %rax
+; AVX2-NEXT: orq %rax, %r9
+; AVX2-NEXT: cmovneq %r15, %rsi
; AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0
; AVX2-NEXT: vmovups %ymm0, -{{[0-9]+}}(%rsp)
; AVX2-NEXT: vmovups %ymm0, -{{[0-9]+}}(%rsp)
; AVX2-NEXT: vmovaps {{.*#+}} ymm1 = [0,0,0,9223372036854775808]
; AVX2-NEXT: vmovups %ymm1, -{{[0-9]+}}(%rsp)
; AVX2-NEXT: vmovups %ymm0, -{{[0-9]+}}(%rsp)
-; AVX2-NEXT: movl %eax, %ecx
+; AVX2-NEXT: movl %esi, %ecx
; AVX2-NEXT: andl $63, %ecx
-; AVX2-NEXT: shrl $3, %eax
-; AVX2-NEXT: andl $56, %eax
-; AVX2-NEXT: movq -72(%rsp,%rax), %rbx
-; AVX2-NEXT: movq -80(%rsp,%rax), %r8
-; AVX2-NEXT: movq %r8, %rdx
-; AVX2-NEXT: shrdq %cl, %rbx, %rdx
-; AVX2-NEXT: movq -88(%rsp,%rax), %r9
-; AVX2-NEXT: movq %r9, %rsi
-; AVX2-NEXT: shrdq %cl, %r8, %rsi
-; AVX2-NEXT: movq -96(%rsp,%rax), %r14
-; AVX2-NEXT: movq %r14, %r8
-; AVX2-NEXT: shrdq %cl, %r9, %r8
-; AVX2-NEXT: movq -104(%rsp,%rax), %r15
-; AVX2-NEXT: movq %r15, %r9
-; AVX2-NEXT: shrdq %cl, %r14, %r9
-; AVX2-NEXT: movq -112(%rsp,%rax), %r13
-; AVX2-NEXT: movq %r13, %r14
-; AVX2-NEXT: shrdq %cl, %r15, %r14
-; AVX2-NEXT: movq -128(%rsp,%rax), %r15
-; AVX2-NEXT: movq -120(%rsp,%rax), %rax
-; AVX2-NEXT: movq %rax, %r12
+; AVX2-NEXT: shrl $3, %esi
+; AVX2-NEXT: andl $56, %esi
+; AVX2-NEXT: movq -72(%rsp,%rsi), %r14
+; AVX2-NEXT: movq -80(%rsp,%rsi), %rax
+; AVX2-NEXT: movq %rax, %rdx
+; AVX2-NEXT: shrdq %cl, %r14, %rdx
+; AVX2-NEXT: movq -88(%rsp,%rsi), %rbx
+; AVX2-NEXT: movq %rbx, %r8
+; AVX2-NEXT: shrdq %cl, %rax, %r8
+; AVX2-NEXT: movq -96(%rsp,%rsi), %rax
+; AVX2-NEXT: movq %rax, %r9
+; AVX2-NEXT: shrdq %cl, %rbx, %r9
+; AVX2-NEXT: movq -104(%rsp,%rsi), %r12
+; AVX2-NEXT: movq %r12, %rbx
+; AVX2-NEXT: shrdq %cl, %rax, %rbx
+; AVX2-NEXT: movq -112(%rsp,%rsi), %rax
+; AVX2-NEXT: movq %rax, %r15
+; AVX2-NEXT: shrdq %cl, %r12, %r15
+; AVX2-NEXT: movq -128(%rsp,%rsi), %r12
+; AVX2-NEXT: movq -120(%rsp,%rsi), %r13
+; AVX2-NEXT: movq %r13, %rsi
+; AVX2-NEXT: shrdq %cl, %rax, %rsi
; AVX2-NEXT: shrdq %cl, %r13, %r12
-; AVX2-NEXT: shrdq %cl, %rax, %r15
; AVX2-NEXT: movq %rdi, %rax
; AVX2-NEXT: xorl %edi, %edi
; AVX2-NEXT: orq %r10, %r11
-; AVX2-NEXT: shrxq %rcx, %rbx, %rcx
-; AVX2-NEXT: cmoveq %rdi, %r12
-; AVX2-NEXT: cmoveq %rdi, %r14
+; AVX2-NEXT: shrxq %rcx, %r14, %rcx
+; AVX2-NEXT: cmoveq %rdi, %rsi
+; AVX2-NEXT: cmoveq %rdi, %r15
+; AVX2-NEXT: cmoveq %rdi, %rbx
; AVX2-NEXT: cmoveq %rdi, %r9
; AVX2-NEXT: cmoveq %rdi, %r8
-; AVX2-NEXT: cmoveq %rdi, %rsi
; AVX2-NEXT: cmoveq %rdi, %rdx
-; AVX2-NEXT: cmoveq %rdi, %r15
+; AVX2-NEXT: cmoveq %rdi, %r12
; AVX2-NEXT: cmoveq %rdi, %rcx
; AVX2-NEXT: movq %rcx, 56(%rax)
; AVX2-NEXT: movq %rdx, 48(%rax)
-; AVX2-NEXT: movq %rsi, 40(%rax)
-; AVX2-NEXT: movq %r8, 32(%rax)
-; AVX2-NEXT: movq %r9, 24(%rax)
-; AVX2-NEXT: movq %r14, 16(%rax)
-; AVX2-NEXT: movq %r12, 8(%rax)
-; AVX2-NEXT: movq %r15, (%rax)
-; AVX2-NEXT: addq $8, %rsp
+; AVX2-NEXT: movq %r8, 40(%rax)
+; AVX2-NEXT: movq %r9, 32(%rax)
+; AVX2-NEXT: movq %rbx, 24(%rax)
+; AVX2-NEXT: movq %r15, 16(%rax)
+; AVX2-NEXT: movq %rsi, 8(%rax)
+; AVX2-NEXT: movq %r12, (%rax)
; AVX2-NEXT: popq %rbx
; AVX2-NEXT: popq %r12
; AVX2-NEXT: popq %r13
; AVX2-NEXT: popq %r14
; AVX2-NEXT: popq %r15
-; AVX2-NEXT: popq %rbp
; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
@@ -4379,7 +4374,7 @@ define i512 @isolate_msb_i512(i512 %a0, i512 %idx) nounwind {
; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512F-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512F-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512F-NEXT: vmovq %xmm0, %rcx
; AVX512F-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
@@ -4424,7 +4419,7 @@ define i512 @isolate_msb_i512(i512 %a0, i512 %idx) nounwind {
; AVX512VL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512VL-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VL-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VL-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VL-NEXT: vmovq %xmm0, %rcx
; AVX512VL-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
@@ -4470,7 +4465,7 @@ define i512 @isolate_msb_i512(i512 %a0, i512 %idx) nounwind {
; AVX512VBMI-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512VBMI-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VBMI-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VBMI-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VBMI-NEXT: vmovq %xmm0, %rcx
; AVX512VBMI-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
@@ -4526,43 +4521,43 @@ define i512 @isolate_msb_i512_vector(<8 x i64> %v0, i512 %idx) nounwind {
; SSE2-NEXT: bsrq %rbx, %r14
; SSE2-NEXT: xorq $63, %r14
; SSE2-NEXT: bsrq %r10, %r10
-; SSE2-NEXT: xorq $63, %r10
-; SSE2-NEXT: orq $64, %r10
+; SSE2-NEXT: xorl $63, %r10d
+; SSE2-NEXT: orl $64, %r10d
; SSE2-NEXT: testq %rbx, %rbx
; SSE2-NEXT: cmovneq %r14, %r10
; SSE2-NEXT: bsrq %r11, %rbx
-; SSE2-NEXT: xorq $63, %rbx
+; SSE2-NEXT: xorl $63, %ebx
; SSE2-NEXT: bsrq %r9, %r9
-; SSE2-NEXT: xorq $63, %r9
-; SSE2-NEXT: orq $64, %r9
+; SSE2-NEXT: xorl $63, %r9d
+; SSE2-NEXT: orl $64, %r9d
; SSE2-NEXT: testq %r11, %r11
-; SSE2-NEXT: cmovneq %rbx, %r9
-; SSE2-NEXT: orq $128, %r9
+; SSE2-NEXT: cmovnel %ebx, %r9d
+; SSE2-NEXT: subl $-128, %r9d
; SSE2-NEXT: por %xmm3, %xmm2
; SSE2-NEXT: pcmpeqd %xmm4, %xmm3
; SSE2-NEXT: movmskps %xmm3, %r11d
; SSE2-NEXT: xorl $15, %r11d
; SSE2-NEXT: cmovneq %r10, %r9
; SSE2-NEXT: bsrq %rsi, %r10
-; SSE2-NEXT: xorq $63, %r10
+; SSE2-NEXT: xorl $63, %r10d
; SSE2-NEXT: bsrq %r8, %r8
-; SSE2-NEXT: xorq $63, %r8
-; SSE2-NEXT: orq $64, %r8
+; SSE2-NEXT: xorl $63, %r8d
+; SSE2-NEXT: orl $64, %r8d
; SSE2-NEXT: testq %rsi, %rsi
-; SSE2-NEXT: cmovneq %r10, %r8
+; SSE2-NEXT: cmovnel %r10d, %r8d
; SSE2-NEXT: bsrq %rcx, %rsi
-; SSE2-NEXT: xorq $63, %rsi
+; SSE2-NEXT: xorl $63, %esi
; SSE2-NEXT: bsrq %rdx, %rdx
-; SSE2-NEXT: xorq $63, %rdx
-; SSE2-NEXT: orq $64, %rdx
+; SSE2-NEXT: xorl $63, %edx
+; SSE2-NEXT: orl $64, %edx
; SSE2-NEXT: testq %rcx, %rcx
-; SSE2-NEXT: cmovneq %rsi, %rdx
-; SSE2-NEXT: orq $128, %rdx
+; SSE2-NEXT: cmovnel %esi, %edx
+; SSE2-NEXT: subl $-128, %edx
; SSE2-NEXT: pcmpeqd %xmm4, %xmm1
; SSE2-NEXT: movmskps %xmm1, %ecx
; SSE2-NEXT: xorl $15, %ecx
-; SSE2-NEXT: cmovneq %r8, %rdx
-; SSE2-NEXT: orq $256, %rdx # imm = 0x100
+; SSE2-NEXT: cmovnel %r8d, %edx
+; SSE2-NEXT: addl $256, %edx # imm = 0x100
; SSE2-NEXT: pcmpeqd %xmm4, %xmm2
; SSE2-NEXT: movmskps %xmm2, %ecx
; SSE2-NEXT: xorl $15, %ecx
@@ -4646,39 +4641,39 @@ define i512 @isolate_msb_i512_vector(<8 x i64> %v0, i512 %idx) nounwind {
; SSE42-NEXT: bsrq %r11, %rbx
; SSE42-NEXT: xorq $63, %rbx
; SSE42-NEXT: bsrq %r10, %r10
-; SSE42-NEXT: xorq $63, %r10
-; SSE42-NEXT: orq $64, %r10
+; SSE42-NEXT: xorl $63, %r10d
+; SSE42-NEXT: orl $64, %r10d
; SSE42-NEXT: testq %r11, %r11
; SSE42-NEXT: cmovneq %rbx, %r10
; SSE42-NEXT: bsrq %r9, %r11
-; SSE42-NEXT: xorq $63, %r11
+; SSE42-NEXT: xorl $63, %r11d
; SSE42-NEXT: bsrq %rsi, %rsi
-; SSE42-NEXT: xorq $63, %rsi
-; SSE42-NEXT: orq $64, %rsi
+; SSE42-NEXT: xorl $63, %esi
+; SSE42-NEXT: orl $64, %esi
; SSE42-NEXT: testq %r9, %r9
-; SSE42-NEXT: cmovneq %r11, %rsi
-; SSE42-NEXT: orq $128, %rsi
+; SSE42-NEXT: cmovnel %r11d, %esi
+; SSE42-NEXT: subl $-128, %esi
; SSE42-NEXT: ptest %xmm3, %xmm3
; SSE42-NEXT: cmovneq %r10, %rsi
; SSE42-NEXT: bsrq %rdx, %r9
-; SSE42-NEXT: xorq $63, %r9
+; SSE42-NEXT: xorl $63, %r9d
; SSE42-NEXT: bsrq %r8, %r8
-; SSE42-NEXT: xorq $63, %r8
-; SSE42-NEXT: orq $64, %r8
+; SSE42-NEXT: xorl $63, %r8d
+; SSE42-NEXT: orl $64, %r8d
; SSE42-NEXT: testq %rdx, %rdx
-; SSE42-NEXT: cmovneq %r9, %r8
+; SSE42-NEXT: cmovnel %r9d, %r8d
; SSE42-NEXT: bsrq %rcx, %rdx
-; SSE42-NEXT: xorq $63, %rdx
+; SSE42-NEXT: xorl $63, %edx
; SSE42-NEXT: bsrq %rax, %rax
-; SSE42-NEXT: xorq $63, %rax
-; SSE42-NEXT: orq $64, %rax
+; SSE42-NEXT: xorl $63, %eax
+; SSE42-NEXT: orl $64, %eax
; SSE42-NEXT: testq %rcx, %rcx
-; SSE42-NEXT: cmovneq %rdx, %rax
+; SSE42-NEXT: cmovnel %edx, %eax
; SSE42-NEXT: por %xmm2, %xmm0
-; SSE42-NEXT: orq $128, %rax
+; SSE42-NEXT: subl $-128, %eax
; SSE42-NEXT: ptest %xmm1, %xmm1
-; SSE42-NEXT: cmovneq %r8, %rax
-; SSE42-NEXT: orq $256, %rax # imm = 0x100
+; SSE42-NEXT: cmovnel %r8d, %eax
+; SSE42-NEXT: addl $256, %eax # imm = 0x100
; SSE42-NEXT: por %xmm3, %xmm2
; SSE42-NEXT: ptest %xmm2, %xmm2
; SSE42-NEXT: cmovneq %rsi, %rax
@@ -4769,35 +4764,35 @@ define i512 @isolate_msb_i512_vector(<8 x i64> %v0, i512 %idx) nounwind {
; AVX2-NEXT: lzcntq %rsi, %rbx
; AVX2-NEXT: xorl %r14d, %r14d
; AVX2-NEXT: lzcntq %rdx, %r14
-; AVX2-NEXT: addq $64, %r14
+; AVX2-NEXT: addl $64, %r14d
; AVX2-NEXT: testq %rsi, %rsi
; AVX2-NEXT: cmovneq %rbx, %r14
; AVX2-NEXT: xorl %ebx, %ebx
; AVX2-NEXT: lzcntq %r11, %rbx
; AVX2-NEXT: lzcntq %r10, %r10
-; AVX2-NEXT: addq $64, %r10
+; AVX2-NEXT: addl $64, %r10d
; AVX2-NEXT: testq %r11, %r11
-; AVX2-NEXT: cmovneq %rbx, %r10
-; AVX2-NEXT: subq $-128, %r10
+; AVX2-NEXT: cmovnel %ebx, %r10d
+; AVX2-NEXT: subl $-128, %r10d
; AVX2-NEXT: orq %rsi, %rdx
; AVX2-NEXT: cmovneq %r14, %r10
; AVX2-NEXT: xorl %edx, %edx
; AVX2-NEXT: lzcntq %rcx, %rdx
; AVX2-NEXT: xorl %esi, %esi
; AVX2-NEXT: lzcntq %rax, %rsi
-; AVX2-NEXT: addq $64, %rsi
+; AVX2-NEXT: addl $64, %esi
; AVX2-NEXT: testq %rcx, %rcx
-; AVX2-NEXT: cmovneq %rdx, %rsi
+; AVX2-NEXT: cmovnel %edx, %esi
; AVX2-NEXT: xorl %edx, %edx
; AVX2-NEXT: lzcntq %r9, %rdx
; AVX2-NEXT: lzcntq %r8, %r8
-; AVX2-NEXT: addq $64, %r8
+; AVX2-NEXT: addl $64, %r8d
; AVX2-NEXT: testq %r9, %r9
-; AVX2-NEXT: cmovneq %rdx, %r8
-; AVX2-NEXT: subq $-128, %r8
+; AVX2-NEXT: cmovnel %edx, %r8d
+; AVX2-NEXT: subl $-128, %r8d
; AVX2-NEXT: orq %rcx, %rax
-; AVX2-NEXT: cmovneq %rsi, %r8
-; AVX2-NEXT: addq $256, %r8 # imm = 0x100
+; AVX2-NEXT: cmovnel %esi, %r8d
+; AVX2-NEXT: addl $256, %r8d # imm = 0x100
; AVX2-NEXT: vptest %ymm1, %ymm1
; AVX2-NEXT: cmovneq %r10, %r8
; AVX2-NEXT: vmovdqu %ymm2, -{{[0-9]+}}(%rsp)
@@ -4865,7 +4860,7 @@ define i512 @isolate_msb_i512_vector(<8 x i64> %v0, i512 %idx) nounwind {
; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512F-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512F-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512F-NEXT: vmovq %xmm0, %rdx
; AVX512F-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
@@ -4893,7 +4888,7 @@ define i512 @isolate_msb_i512_vector(<8 x i64> %v0, i512 %idx) nounwind {
; AVX512VL-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512VL-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VL-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VL-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VL-NEXT: vmovq %xmm0, %rdx
; AVX512VL-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
@@ -4922,7 +4917,7 @@ define i512 @isolate_msb_i512_vector(<8 x i64> %v0, i512 %idx) nounwind {
; AVX512VBMI-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512VBMI-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VBMI-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VBMI-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VBMI-NEXT: vmovq %xmm0, %rdx
; AVX512VBMI-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
@@ -4956,10 +4951,10 @@ define i512 @isolate_msb_i512_load(ptr %p0, i512 %idx) nounwind {
; SSE2-NEXT: pushq %r12
; SSE2-NEXT: pushq %rbx
; SSE2-NEXT: pushq %rax
-; SSE2-NEXT: movq 8(%rsi), %r9
+; SSE2-NEXT: movq 8(%rsi), %r8
; SSE2-NEXT: movq 16(%rsi), %rcx
-; SSE2-NEXT: movq 24(%rsi), %r8
-; SSE2-NEXT: movq 48(%rsi), %rdx
+; SSE2-NEXT: movq 24(%rsi), %rdx
+; SSE2-NEXT: movq 48(%rsi), %r10
; SSE2-NEXT: movq 56(%rsi), %r11
; SSE2-NEXT: movdqa 32(%rsi), %xmm1
; SSE2-NEXT: movdqa 48(%rsi), %xmm2
@@ -4972,47 +4967,47 @@ define i512 @isolate_msb_i512_load(ptr %p0, i512 %idx) nounwind {
; SSE2-NEXT: pcmpeqd %xmm0, %xmm3
; SSE2-NEXT: movmskps %xmm3, %eax
; SSE2-NEXT: xorl $15, %eax
-; SSE2-NEXT: bsrq %r11, %r10
-; SSE2-NEXT: xorq $63, %r10
-; SSE2-NEXT: bsrq %rdx, %rbx
-; SSE2-NEXT: xorq $63, %rbx
-; SSE2-NEXT: orq $64, %rbx
+; SSE2-NEXT: bsrq %r11, %r9
+; SSE2-NEXT: xorq $63, %r9
+; SSE2-NEXT: bsrq %r10, %rbx
+; SSE2-NEXT: xorl $63, %ebx
+; SSE2-NEXT: orl $64, %ebx
; SSE2-NEXT: testq %r11, %r11
-; SSE2-NEXT: cmovneq %r10, %rbx
+; SSE2-NEXT: cmovneq %r9, %rbx
; SSE2-NEXT: movq 40(%rsi), %r14
; SSE2-NEXT: bsrq %r14, %r15
-; SSE2-NEXT: bsrq 32(%rsi), %r10
-; SSE2-NEXT: xorq $63, %r15
-; SSE2-NEXT: xorq $63, %r10
-; SSE2-NEXT: orq $64, %r10
+; SSE2-NEXT: bsrq 32(%rsi), %r9
+; SSE2-NEXT: xorl $63, %r15d
+; SSE2-NEXT: xorl $63, %r9d
+; SSE2-NEXT: orl $64, %r9d
; SSE2-NEXT: testq %r14, %r14
-; SSE2-NEXT: cmovneq %r15, %r10
-; SSE2-NEXT: orq $128, %r10
-; SSE2-NEXT: orq %r11, %rdx
-; SSE2-NEXT: cmovneq %rbx, %r10
-; SSE2-NEXT: bsrq %r8, %rdx
-; SSE2-NEXT: xorq $63, %rdx
+; SSE2-NEXT: cmovnel %r15d, %r9d
+; SSE2-NEXT: subl $-128, %r9d
+; SSE2-NEXT: orq %r11, %r10
+; SSE2-NEXT: cmovneq %rbx, %r9
+; SSE2-NEXT: bsrq %rdx, %r10
+; SSE2-NEXT: xorl $63, %r10d
; SSE2-NEXT: bsrq %rcx, %r11
-; SSE2-NEXT: xorq $63, %r11
-; SSE2-NEXT: orq $64, %r11
+; SSE2-NEXT: xorl $63, %r11d
+; SSE2-NEXT: orl $64, %r11d
+; SSE2-NEXT: testq %rdx, %rdx
+; SSE2-NEXT: cmovnel %r10d, %r11d
+; SSE2-NEXT: bsrq %r8, %r10
+; SSE2-NEXT: xorl $63, %r10d
+; SSE2-NEXT: bsrq (%rsi), %rsi
+; SSE2-NEXT: xorl $63, %esi
+; SSE2-NEXT: orl $64, %esi
; SSE2-NEXT: testq %r8, %r8
-; SSE2-NEXT: cmovneq %rdx, %r11
-; SSE2-NEXT: bsrq %r9, %rbx
-; SSE2-NEXT: xorq $63, %rbx
-; SSE2-NEXT: bsrq (%rsi), %rdx
-; SSE2-NEXT: xorq $63, %rdx
-; SSE2-NEXT: orq $64, %rdx
-; SSE2-NEXT: testq %r9, %r9
-; SSE2-NEXT: cmovneq %rbx, %rdx
-; SSE2-NEXT: orq $128, %rdx
-; SSE2-NEXT: orq %r8, %rcx
-; SSE2-NEXT: cmovneq %r11, %rdx
-; SSE2-NEXT: orq $256, %rdx # imm = 0x100
+; SSE2-NEXT: cmovnel %r10d, %esi
+; SSE2-NEXT: subl $-128, %esi
+; SSE2-NEXT: orq %rdx, %rcx
+; SSE2-NEXT: cmovnel %r11d, %esi
+; SSE2-NEXT: addl $256, %esi # imm = 0x100
; SSE2-NEXT: por %xmm2, %xmm1
; SSE2-NEXT: pcmpeqd %xmm0, %xmm1
; SSE2-NEXT: movmskps %xmm1, %ecx
; SSE2-NEXT: xorl $15, %ecx
-; SSE2-NEXT: cmovneq %r10, %rdx
+; SSE2-NEXT: cmovneq %r9, %rsi
; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp)
; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp)
; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp)
@@ -5022,34 +5017,34 @@ define i512 @isolate_msb_i512_load(ptr %p0, i512 %idx) nounwind {
; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp)
; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp)
; SSE2-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT: movl %edx, %ecx
+; SSE2-NEXT: movl %esi, %ecx
; SSE2-NEXT: andl $63, %ecx
-; SSE2-NEXT: shrl $3, %edx
-; SSE2-NEXT: andl $56, %edx
+; SSE2-NEXT: shrl $3, %esi
+; SSE2-NEXT: andl $56, %esi
; SSE2-NEXT: movq $0, -{{[0-9]+}}(%rsp)
-; SSE2-NEXT: movq -72(%rsp,%rdx), %rsi
-; SSE2-NEXT: movq -80(%rsp,%rdx), %r10
+; SSE2-NEXT: movq -72(%rsp,%rsi), %rdx
+; SSE2-NEXT: movq -80(%rsp,%rsi), %r10
; SSE2-NEXT: movq %r10, %r8
-; SSE2-NEXT: shrdq %cl, %rsi, %r8
-; SSE2-NEXT: movq -88(%rsp,%rdx), %r11
+; SSE2-NEXT: shrdq %cl, %rdx, %r8
+; SSE2-NEXT: movq -88(%rsp,%rsi), %r11
; SSE2-NEXT: movq %r11, %r9
; SSE2-NEXT: shrdq %cl, %r10, %r9
-; SSE2-NEXT: movq -96(%rsp,%rdx), %rbx
+; SSE2-NEXT: movq -96(%rsp,%rsi), %rbx
; SSE2-NEXT: movq %rbx, %r10
; SSE2-NEXT: shrdq %cl, %r11, %r10
-; SSE2-NEXT: movq -104(%rsp,%rdx), %r14
+; SSE2-NEXT: movq -104(%rsp,%rsi), %r14
; SSE2-NEXT: movq %r14, %r11
; SSE2-NEXT: shrdq %cl, %rbx, %r11
-; SSE2-NEXT: movq -112(%rsp,%rdx), %r15
+; SSE2-NEXT: movq -112(%rsp,%rsi), %r15
; SSE2-NEXT: movq %r15, %rbx
; SSE2-NEXT: shrdq %cl, %r14, %rbx
-; SSE2-NEXT: movq -120(%rsp,%rdx), %r12
+; SSE2-NEXT: movq -120(%rsp,%rsi), %r12
; SSE2-NEXT: movq %r12, %r14
; SSE2-NEXT: shrdq %cl, %r15, %r14
-; SSE2-NEXT: movq -128(%rsp,%rdx), %rdx
-; SSE2-NEXT: shrq %cl, %rsi
+; SSE2-NEXT: movq -128(%rsp,%rsi), %rsi
+; SSE2-NEXT: shrq %cl, %rdx
; SSE2-NEXT: # kill: def $cl killed $cl killed $ecx
-; SSE2-NEXT: shrdq %cl, %r12, %rdx
+; SSE2-NEXT: shrdq %cl, %r12, %rsi
; SSE2-NEXT: xorl %ecx, %ecx
; SSE2-NEXT: testl %eax, %eax
; SSE2-NEXT: cmoveq %rcx, %r14
@@ -5058,17 +5053,17 @@ define i512 @isolate_msb_i512_load(ptr %p0, i512 %idx) nounwind {
; SSE2-NEXT: cmoveq %rcx, %r10
; SSE2-NEXT: cmoveq %rcx, %r9
; SSE2-NEXT: cmoveq %rcx, %r8
-; SSE2-NEXT: cmoveq %rcx, %rdx
-; SSE2-NEXT: movq %rdi, %rax
; SSE2-NEXT: cmoveq %rcx, %rsi
-; SSE2-NEXT: movq %rsi, 56(%rdi)
+; SSE2-NEXT: movq %rdi, %rax
+; SSE2-NEXT: cmoveq %rcx, %rdx
+; SSE2-NEXT: movq %rdx, 56(%rdi)
; SSE2-NEXT: movq %r8, 48(%rdi)
; SSE2-NEXT: movq %r9, 40(%rdi)
; SSE2-NEXT: movq %r10, 32(%rdi)
; SSE2-NEXT: movq %r11, 24(%rdi)
; SSE2-NEXT: movq %rbx, 16(%rdi)
; SSE2-NEXT: movq %r14, 8(%rdi)
-; SSE2-NEXT: movq %rdx, (%rdi)
+; SSE2-NEXT: movq %rsi, (%rdi)
; SSE2-NEXT: addq $8, %rsp
; SSE2-NEXT: popq %rbx
; SSE2-NEXT: popq %r12
@@ -5082,113 +5077,113 @@ define i512 @isolate_msb_i512_load(ptr %p0, i512 %idx) nounwind {
; SSE42-NEXT: pushq %r14
; SSE42-NEXT: pushq %rbx
; SSE42-NEXT: movq 8(%rsi), %r8
-; SSE42-NEXT: movq 16(%rsi), %rcx
-; SSE42-NEXT: movq 24(%rsi), %rdx
+; SSE42-NEXT: movq 16(%rsi), %rax
+; SSE42-NEXT: movq 24(%rsi), %rcx
; SSE42-NEXT: movq 40(%rsi), %r11
-; SSE42-NEXT: movq 48(%rsi), %rax
+; SSE42-NEXT: movq 48(%rsi), %rdx
; SSE42-NEXT: movq 56(%rsi), %r10
; SSE42-NEXT: movdqa 32(%rsi), %xmm2
; SSE42-NEXT: movdqa 48(%rsi), %xmm0
; SSE42-NEXT: movdqa (%rsi), %xmm1
; SSE42-NEXT: bsrq %r10, %r9
; SSE42-NEXT: xorq $63, %r9
-; SSE42-NEXT: bsrq %rax, %rbx
-; SSE42-NEXT: xorq $63, %rbx
-; SSE42-NEXT: orq $64, %rbx
+; SSE42-NEXT: bsrq %rdx, %rbx
+; SSE42-NEXT: xorl $63, %ebx
+; SSE42-NEXT: orl $64, %ebx
; SSE42-NEXT: testq %r10, %r10
; SSE42-NEXT: cmovneq %r9, %rbx
; SSE42-NEXT: bsrq %r11, %r14
-; SSE42-NEXT: xorq $63, %r14
+; SSE42-NEXT: xorl $63, %r14d
; SSE42-NEXT: bsrq 32(%rsi), %r9
-; SSE42-NEXT: xorq $63, %r9
-; SSE42-NEXT: orq $64, %r9
+; SSE42-NEXT: xorl $63, %r9d
+; SSE42-NEXT: orl $64, %r9d
; SSE42-NEXT: testq %r11, %r11
-; SSE42-NEXT: cmovneq %r14, %r9
-; SSE42-NEXT: orq $128, %r9
-; SSE42-NEXT: orq %r10, %rax
+; SSE42-NEXT: cmovnel %r14d, %r9d
+; SSE42-NEXT: subl $-128, %r9d
+; SSE42-NEXT: orq %r10, %rdx
; SSE42-NEXT: cmovneq %rbx, %r9
-; SSE42-NEXT: bsrq %rdx, %rax
-; SSE42-NEXT: xorq $63, %rax
-; SSE42-NEXT: bsrq %rcx, %r10
-; SSE42-NEXT: xorq $63, %r10
-; SSE42-NEXT: orq $64, %r10
-; SSE42-NEXT: testq %rdx, %rdx
-; SSE42-NEXT: cmovneq %rax, %r10
+; SSE42-NEXT: bsrq %rcx, %rdx
+; SSE42-NEXT: xorl $63, %edx
+; SSE42-NEXT: bsrq %rax, %r10
+; SSE42-NEXT: xorl $63, %r10d
+; SSE42-NEXT: orl $64, %r10d
+; SSE42-NEXT: testq %rcx, %rcx
+; SSE42-NEXT: cmovnel %edx, %r10d
; SSE42-NEXT: por %xmm2, %xmm1
; SSE42-NEXT: bsrq %r8, %r11
-; SSE42-NEXT: bsrq (%rsi), %rax
-; SSE42-NEXT: xorq $63, %r11
-; SSE42-NEXT: xorq $63, %rax
-; SSE42-NEXT: orq $64, %rax
+; SSE42-NEXT: bsrq (%rsi), %rdx
+; SSE42-NEXT: xorl $63, %r11d
+; SSE42-NEXT: xorl $63, %edx
+; SSE42-NEXT: orl $64, %edx
; SSE42-NEXT: testq %r8, %r8
-; SSE42-NEXT: cmovneq %r11, %rax
-; SSE42-NEXT: orq $128, %rax
-; SSE42-NEXT: orq %rdx, %rcx
-; SSE42-NEXT: cmovneq %r10, %rax
-; SSE42-NEXT: orq $256, %rax # imm = 0x100
+; SSE42-NEXT: cmovnel %r11d, %edx
+; SSE42-NEXT: subl $-128, %edx
+; SSE42-NEXT: orq %rcx, %rax
+; SSE42-NEXT: cmovnel %r10d, %edx
+; SSE42-NEXT: addl $256, %edx # imm = 0x100
; SSE42-NEXT: por %xmm0, %xmm2
; SSE42-NEXT: ptest %xmm2, %xmm2
-; SSE42-NEXT: cmovneq %r9, %rax
+; SSE42-NEXT: cmovneq %r9, %rdx
; SSE42-NEXT: movdqa 16(%rsi), %xmm2
; SSE42-NEXT: xorps %xmm3, %xmm3
; SSE42-NEXT: movaps %xmm3, -{{[0-9]+}}(%rsp)
; SSE42-NEXT: movaps %xmm3, -{{[0-9]+}}(%rsp)
; SSE42-NEXT: movaps %xmm3, -{{[0-9]+}}(%rsp)
; SSE42-NEXT: movaps %xmm3, -{{[0-9]+}}(%rsp)
-; SSE42-NEXT: movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
-; SSE42-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
+; SSE42-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
+; SSE42-NEXT: movq %rax, -{{[0-9]+}}(%rsp)
; SSE42-NEXT: movaps %xmm3, -{{[0-9]+}}(%rsp)
; SSE42-NEXT: movaps %xmm3, -{{[0-9]+}}(%rsp)
; SSE42-NEXT: movaps %xmm3, -{{[0-9]+}}(%rsp)
-; SSE42-NEXT: movl %eax, %ecx
+; SSE42-NEXT: movl %edx, %ecx
; SSE42-NEXT: andl $63, %ecx
-; SSE42-NEXT: shrl $3, %eax
-; SSE42-NEXT: andl $56, %eax
+; SSE42-NEXT: shrl $3, %edx
+; SSE42-NEXT: andl $56, %edx
; SSE42-NEXT: movq $0, -{{[0-9]+}}(%rsp)
-; SSE42-NEXT: movq -72(%rsp,%rax), %rdx
-; SSE42-NEXT: movq -80(%rsp,%rax), %r9
-; SSE42-NEXT: movq %r9, %rsi
-; SSE42-NEXT: shrdq %cl, %rdx, %rsi
-; SSE42-NEXT: movq -88(%rsp,%rax), %r10
-; SSE42-NEXT: movq %r10, %r8
-; SSE42-NEXT: shrdq %cl, %r9, %r8
-; SSE42-NEXT: movq -96(%rsp,%rax), %r11
+; SSE42-NEXT: movq -72(%rsp,%rdx), %rsi
+; SSE42-NEXT: movq -80(%rsp,%rdx), %rax
+; SSE42-NEXT: movq %rax, %r8
+; SSE42-NEXT: shrdq %cl, %rsi, %r8
+; SSE42-NEXT: movq -88(%rsp,%rdx), %r11
; SSE42-NEXT: movq %r11, %r9
-; SSE42-NEXT: shrdq %cl, %r10, %r9
-; SSE42-NEXT: movq -104(%rsp,%rax), %rbx
-; SSE42-NEXT: movq %rbx, %r10
+; SSE42-NEXT: shrdq %cl, %rax, %r9
+; SSE42-NEXT: movq -96(%rsp,%rdx), %rax
+; SSE42-NEXT: movq %rax, %r10
; SSE42-NEXT: shrdq %cl, %r11, %r10
-; SSE42-NEXT: movq -112(%rsp,%rax), %r14
+; SSE42-NEXT: movq -104(%rsp,%rdx), %r14
; SSE42-NEXT: movq %r14, %r11
-; SSE42-NEXT: shrdq %cl, %rbx, %r11
-; SSE42-NEXT: movq -120(%rsp,%rax), %r15
-; SSE42-NEXT: movq %r15, %rbx
+; SSE42-NEXT: shrdq %cl, %rax, %r11
+; SSE42-NEXT: movq -112(%rsp,%rdx), %rax
+; SSE42-NEXT: movq %rax, %rbx
; SSE42-NEXT: shrdq %cl, %r14, %rbx
-; SSE42-NEXT: movq -128(%rsp,%rax), %r14
-; SSE42-NEXT: shrq %cl, %rdx
+; SSE42-NEXT: movq -120(%rsp,%rdx), %r15
+; SSE42-NEXT: movq %r15, %r14
+; SSE42-NEXT: shrdq %cl, %rax, %r14
+; SSE42-NEXT: movq -128(%rsp,%rdx), %rdx
+; SSE42-NEXT: shrq %cl, %rsi
; SSE42-NEXT: # kill: def $cl killed $cl killed $ecx
-; SSE42-NEXT: shrdq %cl, %r15, %r14
+; SSE42-NEXT: shrdq %cl, %r15, %rdx
; SSE42-NEXT: por %xmm0, %xmm2
; SSE42-NEXT: por %xmm2, %xmm1
; SSE42-NEXT: xorl %ecx, %ecx
; SSE42-NEXT: ptest %xmm1, %xmm1
+; SSE42-NEXT: cmoveq %rcx, %r14
; SSE42-NEXT: cmoveq %rcx, %rbx
; SSE42-NEXT: cmoveq %rcx, %r11
; SSE42-NEXT: cmoveq %rcx, %r10
; SSE42-NEXT: cmoveq %rcx, %r9
; SSE42-NEXT: cmoveq %rcx, %r8
-; SSE42-NEXT: cmoveq %rcx, %rsi
-; SSE42-NEXT: cmoveq %rcx, %r14
-; SSE42-NEXT: movq %rdi, %rax
; SSE42-NEXT: cmoveq %rcx, %rdx
-; SSE42-NEXT: movq %rdx, 56(%rdi)
-; SSE42-NEXT: movq %rsi, 48(%rdi)
-; SSE42-NEXT: movq %r8, 40(%rdi)
-; SSE42-NEXT: movq %r9, 32(%rdi)
-; SSE42-NEXT: movq %r10, 24(%rdi)
-; SSE42-NEXT: movq %r11, 16(%rdi)
-; SSE42-NEXT: movq %rbx, 8(%rdi)
-; SSE42-NEXT: movq %r14, (%rdi)
+; SSE42-NEXT: movq %rdi, %rax
+; SSE42-NEXT: cmoveq %rcx, %rsi
+; SSE42-NEXT: movq %rsi, 56(%rdi)
+; SSE42-NEXT: movq %r8, 48(%rdi)
+; SSE42-NEXT: movq %r9, 40(%rdi)
+; SSE42-NEXT: movq %r10, 32(%rdi)
+; SSE42-NEXT: movq %r11, 24(%rdi)
+; SSE42-NEXT: movq %rbx, 16(%rdi)
+; SSE42-NEXT: movq %r14, 8(%rdi)
+; SSE42-NEXT: movq %rdx, (%rdi)
; SSE42-NEXT: popq %rbx
; SSE42-NEXT: popq %r14
; SSE42-NEXT: popq %r15
@@ -5210,37 +5205,37 @@ define i512 @isolate_msb_i512_load(ptr %p0, i512 %idx) nounwind {
; AVX2-NEXT: lzcntq %r11, %r9
; AVX2-NEXT: xorl %ebx, %ebx
; AVX2-NEXT: lzcntq %r10, %rbx
-; AVX2-NEXT: addq $64, %rbx
+; AVX2-NEXT: addl $64, %ebx
; AVX2-NEXT: testq %r11, %r11
; AVX2-NEXT: cmovneq %r9, %rbx
; AVX2-NEXT: xorl %r14d, %r14d
; AVX2-NEXT: lzcntq %rdx, %r14
; AVX2-NEXT: xorl %r9d, %r9d
; AVX2-NEXT: lzcntq 32(%rsi), %r9
-; AVX2-NEXT: addq $64, %r9
+; AVX2-NEXT: addl $64, %r9d
; AVX2-NEXT: testq %rdx, %rdx
-; AVX2-NEXT: cmovneq %r14, %r9
-; AVX2-NEXT: subq $-128, %r9
+; AVX2-NEXT: cmovnel %r14d, %r9d
+; AVX2-NEXT: subl $-128, %r9d
; AVX2-NEXT: orq %r11, %r10
; AVX2-NEXT: cmovneq %rbx, %r9
; AVX2-NEXT: xorl %edx, %edx
; AVX2-NEXT: lzcntq %rcx, %rdx
; AVX2-NEXT: xorl %r10d, %r10d
; AVX2-NEXT: lzcntq %rax, %r10
-; AVX2-NEXT: addq $64, %r10
+; AVX2-NEXT: addl $64, %r10d
; AVX2-NEXT: testq %rcx, %rcx
-; AVX2-NEXT: cmovneq %rdx, %r10
+; AVX2-NEXT: cmovnel %edx, %r10d
; AVX2-NEXT: xorl %r11d, %r11d
; AVX2-NEXT: lzcntq %r8, %r11
; AVX2-NEXT: xorl %edx, %edx
; AVX2-NEXT: lzcntq (%rsi), %rdx
-; AVX2-NEXT: addq $64, %rdx
+; AVX2-NEXT: addl $64, %edx
; AVX2-NEXT: testq %r8, %r8
-; AVX2-NEXT: cmovneq %r11, %rdx
-; AVX2-NEXT: subq $-128, %rdx
+; AVX2-NEXT: cmovnel %r11d, %edx
+; AVX2-NEXT: subl $-128, %edx
; AVX2-NEXT: orq %rcx, %rax
-; AVX2-NEXT: cmovneq %r10, %rdx
-; AVX2-NEXT: addq $256, %rdx # imm = 0x100
+; AVX2-NEXT: cmovnel %r10d, %edx
+; AVX2-NEXT: addl $256, %edx # imm = 0x100
; AVX2-NEXT: vpor 48(%rsi), %xmm1, %xmm1
; AVX2-NEXT: vptest %xmm1, %xmm1
; AVX2-NEXT: cmovneq %r9, %rdx
@@ -5313,7 +5308,7 @@ define i512 @isolate_msb_i512_load(ptr %p0, i512 %idx) nounwind {
; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512F-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512F-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512F-NEXT: vmovq %xmm0, %rdx
; AVX512F-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
@@ -5342,7 +5337,7 @@ define i512 @isolate_msb_i512_load(ptr %p0, i512 %idx) nounwind {
; AVX512VL-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512VL-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VL-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VL-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VL-NEXT: vmovq %xmm0, %rdx
; AVX512VL-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
@@ -5372,7 +5367,7 @@ define i512 @isolate_msb_i512_load(ptr %p0, i512 %idx) nounwind {
; AVX512VBMI-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512VBMI-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VBMI-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VBMI-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VBMI-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VBMI-NEXT: vmovq %xmm0, %rdx
; AVX512VBMI-NEXT: movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
diff --git a/llvm/test/CodeGen/X86/bitcnt-big-integer.ll b/llvm/test/CodeGen/X86/bitcnt-big-integer.ll
index 5c9a9338bc32f..a0f83d8ac048a 100644
--- a/llvm/test/CodeGen/X86/bitcnt-big-integer.ll
+++ b/llvm/test/CodeGen/X86/bitcnt-big-integer.ll
@@ -123,84 +123,78 @@ define i32 @vector_ctpop_i128(<4 x i32> %v0) nounwind {
define <2 x i32> @load_ctpop_v2i128(ptr %p0) nounwind {
; SSE-LABEL: load_ctpop_v2i128:
; SSE: # %bb.0:
-; SSE-NEXT: popcntq 8(%rdi), %rax
-; SSE-NEXT: popcntq (%rdi), %rcx
-; SSE-NEXT: popcntq 24(%rdi), %rdx
+; SSE-NEXT: popcntq 24(%rdi), %rax
+; SSE-NEXT: popcntq 16(%rdi), %rcx
+; SSE-NEXT: popcntq 8(%rdi), %rdx
; SSE-NEXT: addl %eax, %ecx
; SSE-NEXT: xorl %eax, %eax
-; SSE-NEXT: popcntq 16(%rdi), %rax
+; SSE-NEXT: popcntq (%rdi), %rax
; SSE-NEXT: addl %edx, %eax
-; SSE-NEXT: movd %eax, %xmm1
-; SSE-NEXT: movd %ecx, %xmm0
-; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
+; SSE-NEXT: movd %eax, %xmm0
+; SSE-NEXT: pinsrd $1, %ecx, %xmm0
; SSE-NEXT: retq
;
; AVX2-LABEL: load_ctpop_v2i128:
; AVX2: # %bb.0:
-; AVX2-NEXT: popcntq 8(%rdi), %rax
-; AVX2-NEXT: popcntq (%rdi), %rcx
+; AVX2-NEXT: popcntq 24(%rdi), %rax
+; AVX2-NEXT: popcntq 16(%rdi), %rcx
; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: popcntq 24(%rdi), %rax
-; AVX2-NEXT: popcntq 16(%rdi), %rdx
+; AVX2-NEXT: popcntq 8(%rdi), %rax
+; AVX2-NEXT: popcntq (%rdi), %rdx
; AVX2-NEXT: addl %eax, %edx
; AVX2-NEXT: vmovd %edx, %xmm0
-; AVX2-NEXT: vmovd %ecx, %xmm1
-; AVX2-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; AVX2-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0
; AVX2-NEXT: retq
;
; AVX512F-LABEL: load_ctpop_v2i128:
; AVX512F: # %bb.0:
-; AVX512F-NEXT: popcntq 8(%rdi), %rax
-; AVX512F-NEXT: popcntq (%rdi), %rcx
-; AVX512F-NEXT: addl %eax, %ecx
; AVX512F-NEXT: popcntq 24(%rdi), %rax
-; AVX512F-NEXT: popcntq 16(%rdi), %rdx
+; AVX512F-NEXT: popcntq 16(%rdi), %rcx
+; AVX512F-NEXT: addl %eax, %ecx
+; AVX512F-NEXT: popcntq 8(%rdi), %rax
+; AVX512F-NEXT: popcntq (%rdi), %rdx
; AVX512F-NEXT: addl %eax, %edx
; AVX512F-NEXT: vmovd %edx, %xmm0
-; AVX512F-NEXT: vmovd %ecx, %xmm1
-; AVX512F-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; AVX512F-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0
; AVX512F-NEXT: retq
;
; AVX512POPCNT-LABEL: load_ctpop_v2i128:
; AVX512POPCNT: # %bb.0:
-; AVX512POPCNT-NEXT: popcntq 8(%rdi), %rax
-; AVX512POPCNT-NEXT: popcntq (%rdi), %rcx
-; AVX512POPCNT-NEXT: addl %eax, %ecx
; AVX512POPCNT-NEXT: popcntq 24(%rdi), %rax
-; AVX512POPCNT-NEXT: popcntq 16(%rdi), %rdx
+; AVX512POPCNT-NEXT: popcntq 16(%rdi), %rcx
+; AVX512POPCNT-NEXT: addl %eax, %ecx
+; AVX512POPCNT-NEXT: popcntq 8(%rdi), %rax
+; AVX512POPCNT-NEXT: popcntq (%rdi), %rdx
; AVX512POPCNT-NEXT: addl %eax, %edx
; AVX512POPCNT-NEXT: vmovd %edx, %xmm0
-; AVX512POPCNT-NEXT: vmovd %ecx, %xmm1
-; AVX512POPCNT-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; AVX512POPCNT-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0
; AVX512POPCNT-NEXT: retq
;
; AVX512VL-LABEL: load_ctpop_v2i128:
; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: popcntq 8(%rdi), %rax
-; AVX512VL-NEXT: popcntq (%rdi), %rcx
+; AVX512VL-NEXT: popcntq 24(%rdi), %rax
+; AVX512VL-NEXT: popcntq 16(%rdi), %rcx
; AVX512VL-NEXT: addl %eax, %ecx
; AVX512VL-NEXT: xorl %eax, %eax
-; AVX512VL-NEXT: popcntq 24(%rdi), %rax
-; AVX512VL-NEXT: popcntq 16(%rdi), %rdx
+; AVX512VL-NEXT: popcntq 8(%rdi), %rax
+; AVX512VL-NEXT: popcntq (%rdi), %rdx
; AVX512VL-NEXT: addl %eax, %edx
; AVX512VL-NEXT: vmovd %edx, %xmm0
-; AVX512VL-NEXT: vmovd %ecx, %xmm1
-; AVX512VL-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; AVX512VL-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0
; AVX512VL-NEXT: retq
;
; AVX512VLPOPCNT-LABEL: load_ctpop_v2i128:
; AVX512VLPOPCNT: # %bb.0:
-; AVX512VLPOPCNT-NEXT: popcntq 8(%rdi), %rax
-; AVX512VLPOPCNT-NEXT: popcntq (%rdi), %rcx
+; AVX512VLPOPCNT-NEXT: popcntq 24(%rdi), %rax
+; AVX512VLPOPCNT-NEXT: popcntq 16(%rdi), %rcx
; AVX512VLPOPCNT-NEXT: addl %eax, %ecx
; AVX512VLPOPCNT-NEXT: xorl %eax, %eax
-; AVX512VLPOPCNT-NEXT: popcntq 24(%rdi), %rax
-; AVX512VLPOPCNT-NEXT: popcntq 16(%rdi), %rdx
+; AVX512VLPOPCNT-NEXT: popcntq 8(%rdi), %rax
+; AVX512VLPOPCNT-NEXT: popcntq (%rdi), %rdx
; AVX512VLPOPCNT-NEXT: addl %eax, %edx
; AVX512VLPOPCNT-NEXT: vmovd %edx, %xmm0
-; AVX512VLPOPCNT-NEXT: vmovd %ecx, %xmm1
-; AVX512VLPOPCNT-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; AVX512VLPOPCNT-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0
; AVX512VLPOPCNT-NEXT: retq
%a0 = load <2 x i128>, ptr %p0
%cnt = call <2 x i128> @llvm.ctpop.v2i128(<2 x i128> %a0)
@@ -211,28 +205,25 @@ define <2 x i32> @load_ctpop_v2i128(ptr %p0) nounwind {
define <4 x i32> @load_ctpop_v4i128(ptr %p0) nounwind {
; SSE-LABEL: load_ctpop_v4i128:
; SSE: # %bb.0:
-; SSE-NEXT: popcntq 8(%rdi), %rax
-; SSE-NEXT: popcntq (%rdi), %rcx
-; SSE-NEXT: popcntq 24(%rdi), %rdx
-; SSE-NEXT: popcntq 16(%rdi), %rsi
-; SSE-NEXT: addl %eax, %ecx
-; SSE-NEXT: addl %edx, %esi
-; SSE-NEXT: xorl %eax, %eax
-; SSE-NEXT: popcntq 40(%rdi), %rax
-; SSE-NEXT: xorl %edx, %edx
+; SSE-NEXT: popcntq 56(%rdi), %rax
+; SSE-NEXT: popcntq 40(%rdi), %rcx
; SSE-NEXT: popcntq 32(%rdi), %rdx
-; SSE-NEXT: popcntq 56(%rdi), %r8
-; SSE-NEXT: addl %eax, %edx
-; SSE-NEXT: xorl %eax, %eax
-; SSE-NEXT: popcntq 48(%rdi), %rax
-; SSE-NEXT: addl %r8d, %eax
-; SSE-NEXT: movd %eax, %xmm0
-; SSE-NEXT: movd %edx, %xmm1
-; SSE-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
-; SSE-NEXT: movd %esi, %xmm2
-; SSE-NEXT: movd %ecx, %xmm0
-; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
-; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
+; SSE-NEXT: popcntq 24(%rdi), %rsi
+; SSE-NEXT: addl %ecx, %edx
+; SSE-NEXT: xorl %ecx, %ecx
+; SSE-NEXT: popcntq 16(%rdi), %rcx
+; SSE-NEXT: addl %esi, %ecx
+; SSE-NEXT: xorl %esi, %esi
+; SSE-NEXT: popcntq 8(%rdi), %rsi
+; SSE-NEXT: popcntq (%rdi), %r8
+; SSE-NEXT: addl %esi, %r8d
+; SSE-NEXT: xorl %esi, %esi
+; SSE-NEXT: popcntq 48(%rdi), %rsi
+; SSE-NEXT: movd %r8d, %xmm0
+; SSE-NEXT: pinsrd $1, %ecx, %xmm0
+; SSE-NEXT: pinsrd $2, %edx, %xmm0
+; SSE-NEXT: addl %eax, %esi
+; SSE-NEXT: pinsrd $3, %esi, %xmm0
; SSE-NEXT: retq
;
; AVX2-LABEL: load_ctpop_v4i128:
@@ -243,137 +234,105 @@ define <4 x i32> @load_ctpop_v4i128(ptr %p0) nounwind {
; AVX2-NEXT: xorl %eax, %eax
; AVX2-NEXT: popcntq 40(%rdi), %rax
; AVX2-NEXT: popcntq 32(%rdi), %rdx
-; AVX2-NEXT: popcntq 8(%rdi), %rsi
-; AVX2-NEXT: popcntq (%rdi), %r8
+; AVX2-NEXT: popcntq 24(%rdi), %rsi
; AVX2-NEXT: addl %eax, %edx
-; AVX2-NEXT: addl %esi, %r8d
; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: popcntq 24(%rdi), %rax
+; AVX2-NEXT: popcntq 16(%rdi), %rax
+; AVX2-NEXT: addl %esi, %eax
; AVX2-NEXT: xorl %esi, %esi
-; AVX2-NEXT: popcntq 16(%rdi), %rsi
-; AVX2-NEXT: addl %eax, %esi
-; AVX2-NEXT: vmovd %esi, %xmm0
-; AVX2-NEXT: vmovd %r8d, %xmm1
-; AVX2-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
-; AVX2-NEXT: vmovd %edx, %xmm1
-; AVX2-NEXT: vmovd %ecx, %xmm2
-; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1
-; AVX2-NEXT: vpbroadcastq {{.*#+}} xmm2 = [0,4,0,4]
-; AVX2-NEXT: vpermd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
-; AVX2-NEXT: vzeroupper
+; AVX2-NEXT: popcntq 8(%rdi), %rsi
+; AVX2-NEXT: popcntq (%rdi), %rdi
+; AVX2-NEXT: addl %esi, %edi
+; AVX2-NEXT: vmovd %edi, %xmm0
+; AVX2-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0
+; AVX2-NEXT: vpinsrd $2, %edx, %xmm0, %xmm0
+; AVX2-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0
; AVX2-NEXT: retq
;
; AVX512F-LABEL: load_ctpop_v4i128:
; AVX512F: # %bb.0:
-; AVX512F-NEXT: popcntq 24(%rdi), %rcx
+; AVX512F-NEXT: popcntq 56(%rdi), %rax
+; AVX512F-NEXT: popcntq 48(%rdi), %rcx
+; AVX512F-NEXT: addl %eax, %ecx
+; AVX512F-NEXT: popcntq 40(%rdi), %rax
+; AVX512F-NEXT: popcntq 32(%rdi), %rdx
+; AVX512F-NEXT: popcntq 24(%rdi), %rsi
+; AVX512F-NEXT: addl %eax, %edx
; AVX512F-NEXT: popcntq 16(%rdi), %rax
-; AVX512F-NEXT: addl %ecx, %eax
-; AVX512F-NEXT: popcntq 8(%rdi), %rcx
-; AVX512F-NEXT: popcntq (%rdi), %rdx
-; AVX512F-NEXT: popcntq 40(%rdi), %rsi
-; AVX512F-NEXT: popcntq 32(%rdi), %r8
-; AVX512F-NEXT: addl %ecx, %edx
-; AVX512F-NEXT: addl %esi, %r8d
-; AVX512F-NEXT: popcntq 56(%rdi), %rcx
-; AVX512F-NEXT: popcntq 48(%rdi), %rsi
-; AVX512F-NEXT: addl %ecx, %esi
-; AVX512F-NEXT: vpbroadcastq {{.*#+}} xmm0 = [0,16,0,16]
-; AVX512F-NEXT: vmovd %esi, %xmm1
-; AVX512F-NEXT: vmovd %r8d, %xmm2
-; AVX512F-NEXT: vpermt2d %zmm1, %zmm0, %zmm2
-; AVX512F-NEXT: vmovd %edx, %xmm0
-; AVX512F-NEXT: vmovd %eax, %xmm1
-; AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm1
-; AVX512F-NEXT: vmovdqa {{.*#+}} xmm0 = [0,4,18,19]
-; AVX512F-NEXT: vpermi2d %zmm2, %zmm1, %zmm0
-; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
+; AVX512F-NEXT: addl %esi, %eax
+; AVX512F-NEXT: popcntq 8(%rdi), %rsi
+; AVX512F-NEXT: popcntq (%rdi), %rdi
+; AVX512F-NEXT: addl %esi, %edi
+; AVX512F-NEXT: vmovd %edi, %xmm0
+; AVX512F-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0
+; AVX512F-NEXT: vpinsrd $2, %edx, %xmm0, %xmm0
+; AVX512F-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0
; AVX512F-NEXT: retq
;
; AVX512POPCNT-LABEL: load_ctpop_v4i128:
; AVX512POPCNT: # %bb.0:
-; AVX512POPCNT-NEXT: popcntq 24(%rdi), %rcx
+; AVX512POPCNT-NEXT: popcntq 56(%rdi), %rax
+; AVX512POPCNT-NEXT: popcntq 48(%rdi), %rcx
+; AVX512POPCNT-NEXT: addl %eax, %ecx
+; AVX512POPCNT-NEXT: popcntq 40(%rdi), %rax
+; AVX512POPCNT-NEXT: popcntq 32(%rdi), %rdx
+; AVX512POPCNT-NEXT: popcntq 24(%rdi), %rsi
+; AVX512POPCNT-NEXT: addl %eax, %edx
; AVX512POPCNT-NEXT: popcntq 16(%rdi), %rax
-; AVX512POPCNT-NEXT: addl %ecx, %eax
-; AVX512POPCNT-NEXT: popcntq 8(%rdi), %rcx
-; AVX512POPCNT-NEXT: popcntq (%rdi), %rdx
-; AVX512POPCNT-NEXT: popcntq 40(%rdi), %rsi
-; AVX512POPCNT-NEXT: popcntq 32(%rdi), %r8
-; AVX512POPCNT-NEXT: addl %ecx, %edx
-; AVX512POPCNT-NEXT: addl %esi, %r8d
-; AVX512POPCNT-NEXT: popcntq 56(%rdi), %rcx
-; AVX512POPCNT-NEXT: popcntq 48(%rdi), %rsi
-; AVX512POPCNT-NEXT: addl %ecx, %esi
-; AVX512POPCNT-NEXT: vpbroadcastq {{.*#+}} xmm0 = [0,16,0,16]
-; AVX512POPCNT-NEXT: vmovd %esi, %xmm1
-; AVX512POPCNT-NEXT: vmovd %r8d, %xmm2
-; AVX512POPCNT-NEXT: vpermt2d %zmm1, %zmm0, %zmm2
-; AVX512POPCNT-NEXT: vmovd %edx, %xmm0
-; AVX512POPCNT-NEXT: vmovd %eax, %xmm1
-; AVX512POPCNT-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm1
-; AVX512POPCNT-NEXT: vmovdqa {{.*#+}} xmm0 = [0,4,18,19]
-; AVX512POPCNT-NEXT: vpermi2d %zmm2, %zmm1, %zmm0
-; AVX512POPCNT-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
+; AVX512POPCNT-NEXT: addl %esi, %eax
+; AVX512POPCNT-NEXT: popcntq 8(%rdi), %rsi
+; AVX512POPCNT-NEXT: popcntq (%rdi), %rdi
+; AVX512POPCNT-NEXT: addl %esi, %edi
+; AVX512POPCNT-NEXT: vmovd %edi, %xmm0
+; AVX512POPCNT-NEXT: vpinsrd $1, %eax, %xmm0, %xmm0
+; AVX512POPCNT-NEXT: vpinsrd $2, %edx, %xmm0, %xmm0
+; AVX512POPCNT-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0
; AVX512POPCNT-NEXT: retq
;
; AVX512VL-LABEL: load_ctpop_v4i128:
; AVX512VL: # %bb.0:
-; AVX512VL-NEXT: popcntq 24(%rdi), %rcx
-; AVX512VL-NEXT: popcntq 16(%rdi), %rax
-; AVX512VL-NEXT: addl %ecx, %eax
-; AVX512VL-NEXT: xorl %ecx, %ecx
-; AVX512VL-NEXT: popcntq 8(%rdi), %rcx
-; AVX512VL-NEXT: popcntq (%rdi), %rdx
-; AVX512VL-NEXT: popcntq 40(%rdi), %rsi
-; AVX512VL-NEXT: popcntq 32(%rdi), %r8
-; AVX512VL-NEXT: addl %ecx, %edx
-; AVX512VL-NEXT: addl %esi, %r8d
-; AVX512VL-NEXT: xorl %ecx, %ecx
-; AVX512VL-NEXT: popcntq 56(%rdi), %rcx
-; AVX512VL-NEXT: xorl %esi, %esi
-; AVX512VL-NEXT: popcntq 48(%rdi), %rsi
-; AVX512VL-NEXT: addl %ecx, %esi
-; AVX512VL-NEXT: vmovd %esi, %xmm0
-; AVX512VL-NEXT: vmovd %r8d, %xmm1
-; AVX512VL-NEXT: vpbroadcastq {{.*#+}} xmm2 = [0,4,0,4]
-; AVX512VL-NEXT: vpermi2d %xmm0, %xmm1, %xmm2
-; AVX512VL-NEXT: vmovd %edx, %xmm0
-; AVX512VL-NEXT: vmovd %eax, %xmm1
-; AVX512VL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm1
-; AVX512VL-NEXT: vmovdqa {{.*#+}} xmm0 = [0,4,10,11]
-; AVX512VL-NEXT: vpermi2d %ymm2, %ymm1, %ymm0
-; AVX512VL-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
-; AVX512VL-NEXT: vzeroupper
+; AVX512VL-NEXT: popcntq 56(%rdi), %rax
+; AVX512VL-NEXT: popcntq 48(%rdi), %rcx
+; AVX512VL-NEXT: addl %eax, %ecx
+; AVX512VL-NEXT: xorl %eax, %eax
+; AVX512VL-NEXT: popcntq 40(%rdi), %rax
+; AVX512VL-NEXT: popcntq 32(%rdi), %rdx
+; AVX512VL-NEXT: addl %eax, %edx
+; AVX512VL-NEXT: xorl %eax, %eax
+; AVX512VL-NEXT: popcntq 24(%rdi), %rax
+; AVX512VL-NEXT: popcntq 16(%rdi), %rsi
+; AVX512VL-NEXT: addl %eax, %esi
+; AVX512VL-NEXT: xorl %eax, %eax
+; AVX512VL-NEXT: popcntq 8(%rdi), %rax
+; AVX512VL-NEXT: popcntq (%rdi), %rdi
+; AVX512VL-NEXT: addl %eax, %edi
+; AVX512VL-NEXT: vmovd %edi, %xmm0
+; AVX512VL-NEXT: vpinsrd $1, %esi, %xmm0, %xmm0
+; AVX512VL-NEXT: vpinsrd $2, %edx, %xmm0, %xmm0
+; AVX512VL-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0
; AVX512VL-NEXT: retq
;
; AVX512VLPOPCNT-LABEL: load_ctpop_v4i128:
; AVX512VLPOPCNT: # %bb.0:
-; AVX512VLPOPCNT-NEXT: popcntq 24(%rdi), %rcx
-; AVX512VLPOPCNT-NEXT: popcntq 16(%rdi), %rax
-; AVX512VLPOPCNT-NEXT: addl %ecx, %eax
-; AVX512VLPOPCNT-NEXT: xorl %ecx, %ecx
-; AVX512VLPOPCNT-NEXT: popcntq 8(%rdi), %rcx
-; AVX512VLPOPCNT-NEXT: popcntq (%rdi), %rdx
-; AVX512VLPOPCNT-NEXT: popcntq 40(%rdi), %rsi
-; AVX512VLPOPCNT-NEXT: popcntq 32(%rdi), %r8
-; AVX512VLPOPCNT-NEXT: addl %ecx, %edx
-; AVX512VLPOPCNT-NEXT: addl %esi, %r8d
-; AVX512VLPOPCNT-NEXT: xorl %ecx, %ecx
-; AVX512VLPOPCNT-NEXT: popcntq 56(%rdi), %rcx
-; AVX512VLPOPCNT-NEXT: xorl %esi, %esi
-; AVX512VLPOPCNT-NEXT: popcntq 48(%rdi), %rsi
-; AVX512VLPOPCNT-NEXT: addl %ecx, %esi
-; AVX512VLPOPCNT-NEXT: vmovd %esi, %xmm0
-; AVX512VLPOPCNT-NEXT: vmovd %r8d, %xmm1
-; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} xmm2 = [0,4,0,4]
-; AVX512VLPOPCNT-NEXT: vpermi2d %xmm0, %xmm1, %xmm2
-; AVX512VLPOPCNT-NEXT: vmovd %edx, %xmm0
-; AVX512VLPOPCNT-NEXT: vmovd %eax, %xmm1
-; AVX512VLPOPCNT-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm1
-; AVX512VLPOPCNT-NEXT: vmovdqa {{.*#+}} xmm0 = [0,4,10,11]
-; AVX512VLPOPCNT-NEXT: vpermi2d %ymm2, %ymm1, %ymm0
-; AVX512VLPOPCNT-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
-; AVX512VLPOPCNT-NEXT: vzeroupper
+; AVX512VLPOPCNT-NEXT: popcntq 56(%rdi), %rax
+; AVX512VLPOPCNT-NEXT: popcntq 48(%rdi), %rcx
+; AVX512VLPOPCNT-NEXT: addl %eax, %ecx
+; AVX512VLPOPCNT-NEXT: xorl %eax, %eax
+; AVX512VLPOPCNT-NEXT: popcntq 40(%rdi), %rax
+; AVX512VLPOPCNT-NEXT: popcntq 32(%rdi), %rdx
+; AVX512VLPOPCNT-NEXT: addl %eax, %edx
+; AVX512VLPOPCNT-NEXT: xorl %eax, %eax
+; AVX512VLPOPCNT-NEXT: popcntq 24(%rdi), %rax
+; AVX512VLPOPCNT-NEXT: popcntq 16(%rdi), %rsi
+; AVX512VLPOPCNT-NEXT: addl %eax, %esi
+; AVX512VLPOPCNT-NEXT: xorl %eax, %eax
+; AVX512VLPOPCNT-NEXT: popcntq 8(%rdi), %rax
+; AVX512VLPOPCNT-NEXT: popcntq (%rdi), %rdi
+; AVX512VLPOPCNT-NEXT: addl %eax, %edi
+; AVX512VLPOPCNT-NEXT: vmovd %edi, %xmm0
+; AVX512VLPOPCNT-NEXT: vpinsrd $1, %esi, %xmm0, %xmm0
+; AVX512VLPOPCNT-NEXT: vpinsrd $2, %edx, %xmm0, %xmm0
+; AVX512VLPOPCNT-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0
; AVX512VLPOPCNT-NEXT: retq
%a0 = load <4 x i128>, ptr %p0
%cnt = call <4 x i128> @llvm.ctpop.v4i128(<4 x i128> %a0)
@@ -635,52 +594,50 @@ define i32 @vector_ctpop_i256(<8 x i32> %v0) nounwind {
define <2 x i32> @load_ctpop_v2i256_v2i32(ptr %p0) nounwind {
; SSE-LABEL: load_ctpop_v2i256_v2i32:
; SSE: # %bb.0:
-; SSE-NEXT: popcntq 24(%rdi), %rax
-; SSE-NEXT: popcntq 16(%rdi), %rcx
-; SSE-NEXT: popcntq 8(%rdi), %rdx
+; SSE-NEXT: popcntq 56(%rdi), %rax
+; SSE-NEXT: popcntq 48(%rdi), %rcx
+; SSE-NEXT: popcntq 40(%rdi), %rdx
; SSE-NEXT: addl %eax, %ecx
; SSE-NEXT: xorl %eax, %eax
-; SSE-NEXT: popcntq (%rdi), %rax
+; SSE-NEXT: popcntq 32(%rdi), %rax
; SSE-NEXT: addl %edx, %eax
; SSE-NEXT: xorl %edx, %edx
-; SSE-NEXT: popcntq 56(%rdi), %rdx
-; SSE-NEXT: popcntq 48(%rdi), %rsi
+; SSE-NEXT: popcntq 24(%rdi), %rdx
+; SSE-NEXT: popcntq 16(%rdi), %rsi
; SSE-NEXT: addl %ecx, %eax
; SSE-NEXT: addl %edx, %esi
; SSE-NEXT: xorl %ecx, %ecx
-; SSE-NEXT: popcntq 40(%rdi), %rcx
+; SSE-NEXT: popcntq 8(%rdi), %rcx
; SSE-NEXT: xorl %edx, %edx
-; SSE-NEXT: popcntq 32(%rdi), %rdx
+; SSE-NEXT: popcntq (%rdi), %rdx
; SSE-NEXT: addl %ecx, %edx
; SSE-NEXT: addl %esi, %edx
-; SSE-NEXT: movd %edx, %xmm1
-; SSE-NEXT: movd %eax, %xmm0
-; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
+; SSE-NEXT: movd %edx, %xmm0
+; SSE-NEXT: pinsrd $1, %eax, %xmm0
; SSE-NEXT: retq
;
; AVX2-LABEL: load_ctpop_v2i256_v2i32:
; AVX2: # %bb.0:
-; AVX2-NEXT: popcntq 24(%rdi), %rax
-; AVX2-NEXT: popcntq 16(%rdi), %rcx
+; AVX2-NEXT: popcntq 56(%rdi), %rax
+; AVX2-NEXT: popcntq 48(%rdi), %rcx
; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: popcntq 8(%rdi), %rax
-; AVX2-NEXT: popcntq (%rdi), %rdx
+; AVX2-NEXT: popcntq 40(%rdi), %rax
+; AVX2-NEXT: popcntq 32(%rdi), %rdx
; AVX2-NEXT: addl %eax, %edx
; AVX2-NEXT: addl %ecx, %edx
; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: popcntq 56(%rdi), %rax
+; AVX2-NEXT: popcntq 24(%rdi), %rax
; AVX2-NEXT: xorl %ecx, %ecx
-; AVX2-NEXT: popcntq 48(%rdi), %rcx
-; AVX2-NEXT: popcntq 40(%rdi), %rsi
+; AVX2-NEXT: popcntq 16(%rdi), %rcx
+; AVX2-NEXT: popcntq 8(%rdi), %rsi
; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: popcntq 32(%rdi), %rax
+; AVX2-NEXT: popcntq (%rdi), %rax
; AVX2-NEXT: addl %esi, %eax
; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: vmovd %eax, %xmm0
-; AVX2-NEXT: vmovd %edx, %xmm1
-; AVX2-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; AVX2-NEXT: vpinsrd $1, %edx, %xmm0, %xmm0
; AVX2-NEXT: retq
;
; AVX512F-LABEL: load_ctpop_v2i256_v2i32:
@@ -2018,7 +1975,7 @@ define i32 @load_ctlz_i256(ptr %p0) nounwind {
; AVX512F-NEXT: vpbroadcastq {{.*#+}} ymm0 = [256,256,256,256]
; AVX512F-NEXT: vpermq {{.*#+}} ymm1 = mem[3,2,1,0]
; AVX512F-NEXT: vplzcntq %zmm1, %zmm2
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [0,64,128,192]
; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k0
; AVX512F-NEXT: kshiftlw $12, %k0, %k0
; AVX512F-NEXT: kshiftrw $12, %k0, %k1
@@ -2031,7 +1988,7 @@ define i32 @load_ctlz_i256(ptr %p0) nounwind {
; AVX512POPCNT-NEXT: vpbroadcastq {{.*#+}} ymm0 = [256,256,256,256]
; AVX512POPCNT-NEXT: vpermq {{.*#+}} ymm1 = mem[3,2,1,0]
; AVX512POPCNT-NEXT: vplzcntq %zmm1, %zmm2
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [0,64,128,192]
; AVX512POPCNT-NEXT: vptestmq %zmm1, %zmm1, %k0
; AVX512POPCNT-NEXT: kshiftlw $12, %k0, %k0
; AVX512POPCNT-NEXT: kshiftrw $12, %k0, %k1
@@ -2043,7 +2000,7 @@ define i32 @load_ctlz_i256(ptr %p0) nounwind {
; AVX512VL: # %bb.0:
; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = mem[3,2,1,0]
; AVX512VL-NEXT: vplzcntq %ymm0, %ymm1
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VL-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VL-NEXT: vpbroadcastq {{.*#+}} ymm0 = [256,256,256,256]
; AVX512VL-NEXT: vpcompressq %ymm1, %ymm0 {%k1}
@@ -2055,7 +2012,7 @@ define i32 @load_ctlz_i256(ptr %p0) nounwind {
; AVX512VLPOPCNT: # %bb.0:
; AVX512VLPOPCNT-NEXT: vpermq {{.*#+}} ymm0 = mem[3,2,1,0]
; AVX512VLPOPCNT-NEXT: vplzcntq %ymm0, %ymm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VLPOPCNT-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} ymm0 = [256,256,256,256]
; AVX512VLPOPCNT-NEXT: vpcompressq %ymm1, %ymm0 {%k1}
@@ -2126,7 +2083,7 @@ define i32 @vector_ctlz_i256(<8 x i32> %v0) nounwind {
; AVX512F-NEXT: vpbroadcastq {{.*#+}} ymm1 = [256,256,256,256]
; AVX512F-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
; AVX512F-NEXT: vplzcntq %zmm0, %zmm2
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [0,64,128,192]
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512F-NEXT: kshiftlw $12, %k0, %k0
; AVX512F-NEXT: kshiftrw $12, %k0, %k1
@@ -2139,7 +2096,7 @@ define i32 @vector_ctlz_i256(<8 x i32> %v0) nounwind {
; AVX512POPCNT-NEXT: vpbroadcastq {{.*#+}} ymm1 = [256,256,256,256]
; AVX512POPCNT-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
; AVX512POPCNT-NEXT: vplzcntq %zmm0, %zmm2
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [0,64,128,192]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512POPCNT-NEXT: kshiftlw $12, %k0, %k0
; AVX512POPCNT-NEXT: kshiftrw $12, %k0, %k1
@@ -2151,7 +2108,7 @@ define i32 @vector_ctlz_i256(<8 x i32> %v0) nounwind {
; AVX512VL: # %bb.0:
; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
; AVX512VL-NEXT: vplzcntq %ymm0, %ymm1
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VL-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VL-NEXT: vpbroadcastq {{.*#+}} ymm0 = [256,256,256,256]
; AVX512VL-NEXT: vpcompressq %ymm1, %ymm0 {%k1}
@@ -2163,7 +2120,7 @@ define i32 @vector_ctlz_i256(<8 x i32> %v0) nounwind {
; AVX512VLPOPCNT: # %bb.0:
; AVX512VLPOPCNT-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
; AVX512VLPOPCNT-NEXT: vplzcntq %ymm0, %ymm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VLPOPCNT-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} ymm0 = [256,256,256,256]
; AVX512VLPOPCNT-NEXT: vpcompressq %ymm1, %ymm0 {%k1}
@@ -2300,7 +2257,7 @@ define i32 @test_ctlz_i512(i512 %a0) nounwind {
; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512F-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512F-NEXT: vpbroadcastq {{.*#+}} zmm1 = [512,512,512,512,512,512,512,512]
; AVX512F-NEXT: vpcompressq %zmm0, %zmm1 {%k1}
; AVX512F-NEXT: vmovd %xmm1, %eax
@@ -2323,7 +2280,7 @@ define i32 @test_ctlz_i512(i512 %a0) nounwind {
; AVX512POPCNT-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vpbroadcastq {{.*#+}} zmm1 = [512,512,512,512,512,512,512,512]
; AVX512POPCNT-NEXT: vpcompressq %zmm0, %zmm1 {%k1}
; AVX512POPCNT-NEXT: vmovd %xmm1, %eax
@@ -2345,7 +2302,7 @@ define i32 @test_ctlz_i512(i512 %a0) nounwind {
; AVX512VL-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1
; AVX512VL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512VL-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VL-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VL-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512VL-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -2369,7 +2326,7 @@ define i32 @test_ctlz_i512(i512 %a0) nounwind {
; AVX512VLPOPCNT-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1
; AVX512VLPOPCNT-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512VLPOPCNT-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -2486,7 +2443,7 @@ define i32 @load_ctlz_i512(ptr %p0) nounwind {
; AVX512F-NEXT: vpermq (%rdi), %zmm0, %zmm0
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512F-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512F-NEXT: vpbroadcastq {{.*#+}} zmm1 = [512,512,512,512,512,512,512,512]
; AVX512F-NEXT: vpcompressq %zmm0, %zmm1 {%k1}
; AVX512F-NEXT: vmovd %xmm1, %eax
@@ -2498,7 +2455,7 @@ define i32 @load_ctlz_i512(ptr %p0) nounwind {
; AVX512POPCNT-NEXT: vpermq (%rdi), %zmm0, %zmm0
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vpbroadcastq {{.*#+}} zmm1 = [512,512,512,512,512,512,512,512]
; AVX512POPCNT-NEXT: vpcompressq %zmm0, %zmm1 {%k1}
; AVX512POPCNT-NEXT: vmovd %xmm1, %eax
@@ -2509,7 +2466,7 @@ define i32 @load_ctlz_i512(ptr %p0) nounwind {
; AVX512VL-NEXT: vmovdqa64 {{.*#+}} zmm0 = [7,6,5,4,3,2,1,0]
; AVX512VL-NEXT: vpermq (%rdi), %zmm0, %zmm0
; AVX512VL-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VL-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VL-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512VL-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -2522,7 +2479,7 @@ define i32 @load_ctlz_i512(ptr %p0) nounwind {
; AVX512VLPOPCNT-NEXT: vmovdqa64 {{.*#+}} zmm0 = [7,6,5,4,3,2,1,0]
; AVX512VLPOPCNT-NEXT: vpermq (%rdi), %zmm0, %zmm0
; AVX512VLPOPCNT-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -2643,7 +2600,7 @@ define i32 @vector_ctlz_i512(<16 x i32> %v0) nounwind {
; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512F-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512F-NEXT: vpbroadcastq {{.*#+}} zmm1 = [512,512,512,512,512,512,512,512]
; AVX512F-NEXT: vpcompressq %zmm0, %zmm1 {%k1}
; AVX512F-NEXT: vmovd %xmm1, %eax
@@ -2655,7 +2612,7 @@ define i32 @vector_ctlz_i512(<16 x i32> %v0) nounwind {
; AVX512POPCNT-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vpbroadcastq {{.*#+}} zmm1 = [512,512,512,512,512,512,512,512]
; AVX512POPCNT-NEXT: vpcompressq %zmm0, %zmm1 {%k1}
; AVX512POPCNT-NEXT: vmovd %xmm1, %eax
@@ -2666,7 +2623,7 @@ define i32 @vector_ctlz_i512(<16 x i32> %v0) nounwind {
; AVX512VL-NEXT: vmovdqa64 {{.*#+}} zmm1 = [7,6,5,4,3,2,1,0]
; AVX512VL-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512VL-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VL-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VL-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512VL-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -2679,7 +2636,7 @@ define i32 @vector_ctlz_i512(<16 x i32> %v0) nounwind {
; AVX512VLPOPCNT-NEXT: vmovdqa64 {{.*#+}} zmm1 = [7,6,5,4,3,2,1,0]
; AVX512VLPOPCNT-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512VLPOPCNT-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -3643,7 +3600,7 @@ define i32 @load_ctlz_undef_i256(ptr %p0) nounwind {
; AVX512F: # %bb.0:
; AVX512F-NEXT: vpermq {{.*#+}} ymm0 = mem[3,2,1,0]
; AVX512F-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512F-NEXT: kshiftlw $12, %k0, %k0
; AVX512F-NEXT: kshiftrw $12, %k0, %k1
@@ -3655,7 +3612,7 @@ define i32 @load_ctlz_undef_i256(ptr %p0) nounwind {
; AVX512POPCNT: # %bb.0:
; AVX512POPCNT-NEXT: vpermq {{.*#+}} ymm0 = mem[3,2,1,0]
; AVX512POPCNT-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512POPCNT-NEXT: kshiftlw $12, %k0, %k0
; AVX512POPCNT-NEXT: kshiftrw $12, %k0, %k1
@@ -3668,7 +3625,7 @@ define i32 @load_ctlz_undef_i256(ptr %p0) nounwind {
; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = mem[3,2,1,0]
; AVX512VL-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VL-NEXT: vplzcntq %ymm0, %ymm0
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [0,64,128,192]
; AVX512VL-NEXT: vpcompressq %ymm0, %ymm0 {%k1} {z}
; AVX512VL-NEXT: vmovd %xmm0, %eax
; AVX512VL-NEXT: vzeroupper
@@ -3679,7 +3636,7 @@ define i32 @load_ctlz_undef_i256(ptr %p0) nounwind {
; AVX512VLPOPCNT-NEXT: vpermq {{.*#+}} ymm0 = mem[3,2,1,0]
; AVX512VLPOPCNT-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VLPOPCNT-NEXT: vplzcntq %ymm0, %ymm0
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [0,64,128,192]
; AVX512VLPOPCNT-NEXT: vpcompressq %ymm0, %ymm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
; AVX512VLPOPCNT-NEXT: vzeroupper
@@ -3746,7 +3703,7 @@ define i32 @vector_ctlz_undef_i256(<8 x i32> %v0) nounwind {
; AVX512F: # %bb.0:
; AVX512F-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
; AVX512F-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512F-NEXT: kshiftlw $12, %k0, %k0
; AVX512F-NEXT: kshiftrw $12, %k0, %k1
@@ -3758,7 +3715,7 @@ define i32 @vector_ctlz_undef_i256(<8 x i32> %v0) nounwind {
; AVX512POPCNT: # %bb.0:
; AVX512POPCNT-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
; AVX512POPCNT-NEXT: vplzcntq %zmm0, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512POPCNT-NEXT: kshiftlw $12, %k0, %k0
; AVX512POPCNT-NEXT: kshiftrw $12, %k0, %k1
@@ -3771,7 +3728,7 @@ define i32 @vector_ctlz_undef_i256(<8 x i32> %v0) nounwind {
; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
; AVX512VL-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VL-NEXT: vplzcntq %ymm0, %ymm0
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [0,64,128,192]
; AVX512VL-NEXT: vpcompressq %ymm0, %ymm0 {%k1} {z}
; AVX512VL-NEXT: vmovd %xmm0, %eax
; AVX512VL-NEXT: vzeroupper
@@ -3782,7 +3739,7 @@ define i32 @vector_ctlz_undef_i256(<8 x i32> %v0) nounwind {
; AVX512VLPOPCNT-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0]
; AVX512VLPOPCNT-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VLPOPCNT-NEXT: vplzcntq %ymm0, %ymm0
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0 # [0,64,128,192]
; AVX512VLPOPCNT-NEXT: vpcompressq %ymm0, %ymm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
; AVX512VLPOPCNT-NEXT: vzeroupper
@@ -3916,7 +3873,7 @@ define i32 @test_ctlz_undef_i512(i512 %a0) nounwind {
; AVX512F-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512F-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512F-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512F-NEXT: vmovd %xmm0, %eax
; AVX512F-NEXT: retq
@@ -3938,7 +3895,7 @@ define i32 @test_ctlz_undef_i512(i512 %a0) nounwind {
; AVX512POPCNT-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512POPCNT-NEXT: vmovd %xmm0, %eax
; AVX512POPCNT-NEXT: retq
@@ -3960,7 +3917,7 @@ define i32 @test_ctlz_undef_i512(i512 %a0) nounwind {
; AVX512VL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512VL-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VL-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VL-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VL-NEXT: vmovd %xmm0, %eax
; AVX512VL-NEXT: vzeroupper
@@ -3983,7 +3940,7 @@ define i32 @test_ctlz_undef_i512(i512 %a0) nounwind {
; AVX512VLPOPCNT-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
; AVX512VLPOPCNT-NEXT: vzeroupper
@@ -4099,7 +4056,7 @@ define i32 @load_ctlz_undef_i512(ptr %p0) nounwind {
; AVX512F-NEXT: vpermq (%rdi), %zmm0, %zmm0
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512F-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512F-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512F-NEXT: vmovd %xmm0, %eax
; AVX512F-NEXT: retq
@@ -4110,7 +4067,7 @@ define i32 @load_ctlz_undef_i512(ptr %p0) nounwind {
; AVX512POPCNT-NEXT: vpermq (%rdi), %zmm0, %zmm0
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512POPCNT-NEXT: vmovd %xmm0, %eax
; AVX512POPCNT-NEXT: retq
@@ -4121,7 +4078,7 @@ define i32 @load_ctlz_undef_i512(ptr %p0) nounwind {
; AVX512VL-NEXT: vpermq (%rdi), %zmm0, %zmm0
; AVX512VL-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VL-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VL-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VL-NEXT: vmovd %xmm0, %eax
; AVX512VL-NEXT: vzeroupper
@@ -4133,7 +4090,7 @@ define i32 @load_ctlz_undef_i512(ptr %p0) nounwind {
; AVX512VLPOPCNT-NEXT: vpermq (%rdi), %zmm0, %zmm0
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
; AVX512VLPOPCNT-NEXT: vzeroupper
@@ -4251,7 +4208,7 @@ define i32 @vector_ctlz_undef_i512(<16 x i32> %v0) nounwind {
; AVX512F-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512F-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512F-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512F-NEXT: vmovd %xmm0, %eax
; AVX512F-NEXT: retq
@@ -4262,7 +4219,7 @@ define i32 @vector_ctlz_undef_i512(<16 x i32> %v0) nounwind {
; AVX512POPCNT-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512POPCNT-NEXT: vmovd %xmm0, %eax
; AVX512POPCNT-NEXT: retq
@@ -4273,7 +4230,7 @@ define i32 @vector_ctlz_undef_i512(<16 x i32> %v0) nounwind {
; AVX512VL-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512VL-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VL-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VL-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VL-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VL-NEXT: vmovd %xmm0, %eax
; AVX512VL-NEXT: vzeroupper
@@ -4285,7 +4242,7 @@ define i32 @vector_ctlz_undef_i512(<16 x i32> %v0) nounwind {
; AVX512VLPOPCNT-NEXT: vpermq %zmm0, %zmm1, %zmm0
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vplzcntq %zmm0, %zmm0
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm0, %zmm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
; AVX512VLPOPCNT-NEXT: vzeroupper
@@ -5211,7 +5168,7 @@ define i32 @load_cttz_i256(ptr %p0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %ymm2, %ymm0, %ymm2
; AVX512POPCNT-NEXT: vpandn %ymm2, %ymm0, %ymm2
; AVX512POPCNT-NEXT: vpopcntq %zmm2, %zmm2
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [0,64,128,192]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512POPCNT-NEXT: kshiftlw $12, %k0, %k0
; AVX512POPCNT-NEXT: kshiftrw $12, %k0, %k1
@@ -5242,7 +5199,7 @@ define i32 @load_cttz_i256(ptr %p0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %ymm1, %ymm0, %ymm1
; AVX512VLPOPCNT-NEXT: vpandn %ymm1, %ymm0, %ymm1
; AVX512VLPOPCNT-NEXT: vpopcntq %ymm1, %ymm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VLPOPCNT-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} ymm0 = [256,256,256,256]
; AVX512VLPOPCNT-NEXT: vpcompressq %ymm1, %ymm0 {%k1}
@@ -5329,7 +5286,7 @@ define i32 @vector_cttz_i256(<8 x i32> %v0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %ymm2, %ymm0, %ymm2
; AVX512POPCNT-NEXT: vpandn %ymm2, %ymm0, %ymm2
; AVX512POPCNT-NEXT: vpopcntq %zmm2, %zmm2
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [0,64,128,192]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512POPCNT-NEXT: kshiftlw $12, %k0, %k0
; AVX512POPCNT-NEXT: kshiftrw $12, %k0, %k1
@@ -5358,7 +5315,7 @@ define i32 @vector_cttz_i256(<8 x i32> %v0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %ymm1, %ymm0, %ymm1
; AVX512VLPOPCNT-NEXT: vpandn %ymm1, %ymm0, %ymm1
; AVX512VLPOPCNT-NEXT: vpopcntq %ymm1, %ymm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VLPOPCNT-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} ymm0 = [256,256,256,256]
; AVX512VLPOPCNT-NEXT: vpcompressq %ymm1, %ymm0 {%k1}
@@ -5506,7 +5463,7 @@ define i32 @test_cttz_i512(i512 %a0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512POPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -5558,7 +5515,7 @@ define i32 @test_cttz_i512(i512 %a0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -5683,7 +5640,7 @@ define i32 @load_cttz_i512(ptr %p0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512POPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -5713,7 +5670,7 @@ define i32 @load_cttz_i512(ptr %p0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -5840,7 +5797,7 @@ define i32 @vector_cttz_i512(<16 x i32> %v0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512POPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -5868,7 +5825,7 @@ define i32 @vector_cttz_i512(<16 x i32> %v0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vpbroadcastq {{.*#+}} zmm0 = [512,512,512,512,512,512,512,512]
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1}
@@ -6834,7 +6791,7 @@ define i32 @load_cttz_undef_i256(ptr %p0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %ymm1, %ymm0, %ymm1
; AVX512POPCNT-NEXT: vpandn %ymm1, %ymm0, %ymm1
; AVX512POPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512POPCNT-NEXT: kshiftlw $12, %k0, %k0
; AVX512POPCNT-NEXT: kshiftrw $12, %k0, %k1
@@ -6864,7 +6821,7 @@ define i32 @load_cttz_undef_i256(ptr %p0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %ymm1, %ymm0, %ymm1
; AVX512VLPOPCNT-NEXT: vpandn %ymm1, %ymm0, %ymm1
; AVX512VLPOPCNT-NEXT: vpopcntq %ymm1, %ymm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VLPOPCNT-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VLPOPCNT-NEXT: vpcompressq %ymm1, %ymm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
@@ -6947,7 +6904,7 @@ define i32 @vector_cttz_undef_i256(<8 x i32> %v0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %ymm1, %ymm0, %ymm1
; AVX512POPCNT-NEXT: vpandn %ymm1, %ymm0, %ymm1
; AVX512POPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k0
; AVX512POPCNT-NEXT: kshiftlw $12, %k0, %k0
; AVX512POPCNT-NEXT: kshiftrw $12, %k0, %k1
@@ -6975,7 +6932,7 @@ define i32 @vector_cttz_undef_i256(<8 x i32> %v0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %ymm1, %ymm0, %ymm1
; AVX512VLPOPCNT-NEXT: vpandn %ymm1, %ymm0, %ymm1
; AVX512VLPOPCNT-NEXT: vpopcntq %ymm1, %ymm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [0,64,128,192]
; AVX512VLPOPCNT-NEXT: vptestmq %ymm0, %ymm0, %k1
; AVX512VLPOPCNT-NEXT: vpcompressq %ymm1, %ymm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
@@ -7120,7 +7077,7 @@ define i32 @test_cttz_undef_i512(i512 %a0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1} {z}
; AVX512POPCNT-NEXT: vmovd %xmm0, %eax
@@ -7170,7 +7127,7 @@ define i32 @test_cttz_undef_i512(i512 %a0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
@@ -7294,7 +7251,7 @@ define i32 @load_cttz_undef_i512(ptr %p0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1} {z}
; AVX512POPCNT-NEXT: vmovd %xmm0, %eax
@@ -7322,7 +7279,7 @@ define i32 @load_cttz_undef_i512(ptr %p0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
@@ -7446,7 +7403,7 @@ define i32 @vector_cttz_undef_i512(<16 x i32> %v0) nounwind {
; AVX512POPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512POPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512POPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512POPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512POPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1} {z}
; AVX512POPCNT-NEXT: vmovd %xmm0, %eax
@@ -7472,7 +7429,7 @@ define i32 @vector_cttz_undef_i512(<16 x i32> %v0) nounwind {
; AVX512VLPOPCNT-NEXT: vpaddq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpandnq %zmm1, %zmm0, %zmm1
; AVX512VLPOPCNT-NEXT: vpopcntq %zmm1, %zmm1
-; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
+; AVX512VLPOPCNT-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,64,128,192,256,320,384,448]
; AVX512VLPOPCNT-NEXT: vptestmq %zmm0, %zmm0, %k1
; AVX512VLPOPCNT-NEXT: vpcompressq %zmm1, %zmm0 {%k1} {z}
; AVX512VLPOPCNT-NEXT: vmovd %xmm0, %eax
diff --git a/llvm/test/CodeGen/X86/bittest-big-integer.ll b/llvm/test/CodeGen/X86/bittest-big-integer.ll
index 96ccc7b0f7527..03bc9046fe9b8 100644
--- a/llvm/test/CodeGen/X86/bittest-big-integer.ll
+++ b/llvm/test/CodeGen/X86/bittest-big-integer.ll
@@ -1897,45 +1897,45 @@ define i32 @blsr_u512(ptr %word) nounwind {
; SSE2-NEXT: pushq %rbx
; SSE2-NEXT: movdqa (%rdi), %xmm0
; SSE2-NEXT: movq 48(%rdi), %r8
-; SSE2-NEXT: movq 40(%rdi), %rdx
-; SSE2-NEXT: movq 32(%rdi), %rsi
+; SSE2-NEXT: movq 40(%rdi), %rcx
+; SSE2-NEXT: movq 32(%rdi), %rdx
; SSE2-NEXT: movq (%rdi), %rax
; SSE2-NEXT: movq 8(%rdi), %r9
-; SSE2-NEXT: rep bsfq %rax, %rcx
+; SSE2-NEXT: rep bsfq %rax, %rsi
; SSE2-NEXT: rep bsfq %r9, %r10
-; SSE2-NEXT: addq $64, %r10
+; SSE2-NEXT: addl $64, %r10d
; SSE2-NEXT: testq %rax, %rax
-; SSE2-NEXT: cmovneq %rcx, %r10
+; SSE2-NEXT: cmovneq %rsi, %r10
; SSE2-NEXT: movq 16(%rdi), %r11
; SSE2-NEXT: rep bsfq %r11, %rbx
-; SSE2-NEXT: rep bsfq 24(%rdi), %rcx
-; SSE2-NEXT: addq $64, %rcx
+; SSE2-NEXT: rep bsfq 24(%rdi), %rsi
+; SSE2-NEXT: addl $64, %esi
; SSE2-NEXT: testq %r11, %r11
-; SSE2-NEXT: cmovneq %rbx, %rcx
-; SSE2-NEXT: subq $-128, %rcx
+; SSE2-NEXT: cmovnel %ebx, %esi
+; SSE2-NEXT: subl $-128, %esi
; SSE2-NEXT: orq %r9, %rax
-; SSE2-NEXT: cmovneq %r10, %rcx
-; SSE2-NEXT: rep bsfq %rsi, %rax
-; SSE2-NEXT: rep bsfq %rdx, %r9
-; SSE2-NEXT: addq $64, %r9
-; SSE2-NEXT: testq %rsi, %rsi
-; SSE2-NEXT: cmovneq %rax, %r9
+; SSE2-NEXT: cmovneq %r10, %rsi
+; SSE2-NEXT: rep bsfq %rdx, %rax
+; SSE2-NEXT: rep bsfq %rcx, %r9
+; SSE2-NEXT: addl $64, %r9d
+; SSE2-NEXT: testq %rdx, %rdx
+; SSE2-NEXT: cmovnel %eax, %r9d
; SSE2-NEXT: rep bsfq %r8, %r10
; SSE2-NEXT: movl $64, %eax
; SSE2-NEXT: rep bsfq 56(%rdi), %rax
-; SSE2-NEXT: addq $64, %rax
+; SSE2-NEXT: addl $64, %eax
; SSE2-NEXT: testq %r8, %r8
-; SSE2-NEXT: cmovneq %r10, %rax
-; SSE2-NEXT: subq $-128, %rax
-; SSE2-NEXT: orq %rdx, %rsi
-; SSE2-NEXT: cmovneq %r9, %rax
+; SSE2-NEXT: cmovnel %r10d, %eax
+; SSE2-NEXT: subl $-128, %eax
+; SSE2-NEXT: orq %rcx, %rdx
+; SSE2-NEXT: cmovnel %r9d, %eax
; SSE2-NEXT: por 16(%rdi), %xmm0
-; SSE2-NEXT: addq $256, %rax # imm = 0x100
+; SSE2-NEXT: addl $256, %eax # imm = 0x100
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: pcmpeqd %xmm0, %xmm1
-; SSE2-NEXT: movmskps %xmm1, %edx
-; SSE2-NEXT: xorl $15, %edx
-; SSE2-NEXT: cmovneq %rcx, %rax
+; SSE2-NEXT: movmskps %xmm1, %ecx
+; SSE2-NEXT: xorl $15, %ecx
+; SSE2-NEXT: cmovneq %rsi, %rax
; SSE2-NEXT: movl $-2, %edx
; SSE2-NEXT: movl %eax, %ecx
; SSE2-NEXT: roll %cl, %edx
@@ -1956,34 +1956,34 @@ define i32 @blsr_u512(ptr %word) nounwind {
; SSE4-NEXT: movq 8(%rdi), %r8
; SSE4-NEXT: rep bsfq %rax, %rsi
; SSE4-NEXT: rep bsfq %r8, %r9
-; SSE4-NEXT: addq $64, %r9
+; SSE4-NEXT: addl $64, %r9d
; SSE4-NEXT: testq %rax, %rax
; SSE4-NEXT: cmovneq %rsi, %r9
; SSE4-NEXT: movq 16(%rdi), %r10
; SSE4-NEXT: rep bsfq %r10, %r11
; SSE4-NEXT: rep bsfq 24(%rdi), %rsi
-; SSE4-NEXT: addq $64, %rsi
+; SSE4-NEXT: addl $64, %esi
; SSE4-NEXT: testq %r10, %r10
-; SSE4-NEXT: cmovneq %r11, %rsi
-; SSE4-NEXT: subq $-128, %rsi
+; SSE4-NEXT: cmovnel %r11d, %esi
+; SSE4-NEXT: subl $-128, %esi
; SSE4-NEXT: orq %r8, %rax
; SSE4-NEXT: cmovneq %r9, %rsi
; SSE4-NEXT: movq 32(%rdi), %r8
; SSE4-NEXT: rep bsfq %r8, %rax
; SSE4-NEXT: rep bsfq %rcx, %r9
-; SSE4-NEXT: addq $64, %r9
+; SSE4-NEXT: addl $64, %r9d
; SSE4-NEXT: testq %r8, %r8
-; SSE4-NEXT: cmovneq %rax, %r9
+; SSE4-NEXT: cmovnel %eax, %r9d
; SSE4-NEXT: rep bsfq %rdx, %r10
; SSE4-NEXT: movl $64, %eax
; SSE4-NEXT: rep bsfq 56(%rdi), %rax
-; SSE4-NEXT: addq $64, %rax
+; SSE4-NEXT: addl $64, %eax
; SSE4-NEXT: testq %rdx, %rdx
-; SSE4-NEXT: cmovneq %r10, %rax
-; SSE4-NEXT: subq $-128, %rax
+; SSE4-NEXT: cmovnel %r10d, %eax
+; SSE4-NEXT: subl $-128, %eax
; SSE4-NEXT: orq %rcx, %r8
-; SSE4-NEXT: cmovneq %r9, %rax
-; SSE4-NEXT: addq $256, %rax # imm = 0x100
+; SSE4-NEXT: cmovnel %r9d, %eax
+; SSE4-NEXT: addl $256, %eax # imm = 0x100
; SSE4-NEXT: por 16(%rdi), %xmm0
; SSE4-NEXT: ptest %xmm0, %xmm0
; SSE4-NEXT: cmovneq %rsi, %rax
@@ -2009,37 +2009,37 @@ define i32 @blsr_u512(ptr %word) nounwind {
; AVX2-NEXT: movq 8(%rdi), %r10
; AVX2-NEXT: tzcntq %r9, %r8
; AVX2-NEXT: tzcntq %r10, %r11
-; AVX2-NEXT: addq $64, %r11
+; AVX2-NEXT: addl $64, %r11d
; AVX2-NEXT: testq %r9, %r9
; AVX2-NEXT: cmovneq %r8, %r11
; AVX2-NEXT: xorl %ebx, %ebx
; AVX2-NEXT: tzcntq %rax, %rbx
; AVX2-NEXT: xorl %r8d, %r8d
; AVX2-NEXT: tzcntq 24(%rdi), %r8
-; AVX2-NEXT: addq $64, %r8
+; AVX2-NEXT: addl $64, %r8d
; AVX2-NEXT: testq %rax, %rax
-; AVX2-NEXT: cmovneq %rbx, %r8
-; AVX2-NEXT: subq $-128, %r8
+; AVX2-NEXT: cmovnel %ebx, %r8d
+; AVX2-NEXT: subl $-128, %r8d
; AVX2-NEXT: orq %r10, %r9
; AVX2-NEXT: cmovneq %r11, %r8
; AVX2-NEXT: xorl %eax, %eax
; AVX2-NEXT: tzcntq %rdx, %rax
; AVX2-NEXT: xorl %r9d, %r9d
; AVX2-NEXT: tzcntq %rcx, %r9
-; AVX2-NEXT: addq $64, %r9
+; AVX2-NEXT: addl $64, %r9d
; AVX2-NEXT: testq %rdx, %rdx
-; AVX2-NEXT: cmovneq %rax, %r9
+; AVX2-NEXT: cmovnel %eax, %r9d
; AVX2-NEXT: xorl %r10d, %r10d
; AVX2-NEXT: tzcntq %rsi, %r10
; AVX2-NEXT: xorl %eax, %eax
; AVX2-NEXT: tzcntq 56(%rdi), %rax
-; AVX2-NEXT: addq $64, %rax
+; AVX2-NEXT: addl $64, %eax
; AVX2-NEXT: testq %rsi, %rsi
-; AVX2-NEXT: cmovneq %r10, %rax
-; AVX2-NEXT: subq $-128, %rax
+; AVX2-NEXT: cmovnel %r10d, %eax
+; AVX2-NEXT: subl $-128, %eax
; AVX2-NEXT: orq %rcx, %rdx
-; AVX2-NEXT: cmovneq %r9, %rax
-; AVX2-NEXT: addq $256, %rax # imm = 0x100
+; AVX2-NEXT: cmovnel %r9d, %eax
+; AVX2-NEXT: addl $256, %eax # imm = 0x100
; AVX2-NEXT: vpor 16(%rdi), %xmm0, %xmm0
; AVX2-NEXT: vptest %xmm0, %xmm0
; AVX2-NEXT: cmovneq %r8, %rax
diff --git a/llvm/test/CodeGen/X86/bsf.ll b/llvm/test/CodeGen/X86/bsf.ll
index f780f0172647f..8109bedd988af 100644
--- a/llvm/test/CodeGen/X86/bsf.ll
+++ b/llvm/test/CodeGen/X86/bsf.ll
@@ -342,7 +342,7 @@ define i128 @cmov_bsf128(i128 %x, i128 %y) nounwind {
; X64-NEXT: rep bsfq %rdi, %rcx
; X64-NEXT: movl $64, %eax
; X64-NEXT: rep bsfq %rsi, %rax
-; X64-NEXT: addq $64, %rax
+; X64-NEXT: addl $64, %eax
; X64-NEXT: testq %rdi, %rdi
; X64-NEXT: cmovneq %rcx, %rax
; X64-NEXT: xorl %edx, %edx
@@ -434,7 +434,7 @@ define i128 @cmov_bsf128_undef(i128 %x, i128 %y) nounwind {
; X64-NEXT: # %bb.1: # %select.true.sink
; X64-NEXT: rep bsfq %rdi, %rcx
; X64-NEXT: rep bsfq %rsi, %rax
-; X64-NEXT: addq $64, %rax
+; X64-NEXT: addl $64, %eax
; X64-NEXT: testq %rdi, %rdi
; X64-NEXT: cmovneq %rcx, %rax
; X64-NEXT: xorl %edx, %edx
diff --git a/llvm/test/CodeGen/X86/bsr.ll b/llvm/test/CodeGen/X86/bsr.ll
index affacc5ee6487..0a8d71e7e7738 100644
--- a/llvm/test/CodeGen/X86/bsr.ll
+++ b/llvm/test/CodeGen/X86/bsr.ll
@@ -376,8 +376,8 @@ define i128 @cmov_bsr128(i128 %x, i128 %y) nounwind {
; X64-NEXT: xorq $63, %r8
; X64-NEXT: movl $127, %eax
; X64-NEXT: bsrq %rdi, %rax
-; X64-NEXT: xorq $63, %rax
-; X64-NEXT: addq $64, %rax
+; X64-NEXT: xorl $63, %eax
+; X64-NEXT: addl $64, %eax
; X64-NEXT: testq %rsi, %rsi
; X64-NEXT: cmovneq %r8, %rax
; X64-NEXT: xorq $127, %rax
@@ -470,8 +470,8 @@ define i128 @cmov_bsr128_undef(i128 %x, i128 %y) nounwind {
; X64-NEXT: bsrq %rsi, %r8
; X64-NEXT: xorq $63, %r8
; X64-NEXT: bsrq %rdi, %rax
-; X64-NEXT: xorq $63, %rax
-; X64-NEXT: orq $64, %rax
+; X64-NEXT: xorl $63, %eax
+; X64-NEXT: orl $64, %eax
; X64-NEXT: testq %rsi, %rsi
; X64-NEXT: cmovneq %r8, %rax
; X64-NEXT: xorq $127, %rax
diff --git a/llvm/test/CodeGen/X86/dag-update-nodetomatch.ll b/llvm/test/CodeGen/X86/dag-update-nodetomatch.ll
index 71ad598abe683..2d66c0efc995b 100644
--- a/llvm/test/CodeGen/X86/dag-update-nodetomatch.ll
+++ b/llvm/test/CodeGen/X86/dag-update-nodetomatch.ll
@@ -99,7 +99,7 @@ define void @_Z2x6v() local_unnamed_addr {
; CHECK-NEXT: movq x1 at GOTPCREL(%rip), %rax
; CHECK-NEXT: movl (%rax), %edx
; CHECK-NEXT: andl $511, %edx # imm = 0x1FF
-; CHECK-NEXT: leaq 1(%rdx), %rax
+; CHECK-NEXT: leal 1(%rdx), %eax
; CHECK-NEXT: movq x4 at GOTPCREL(%rip), %rcx
; CHECK-NEXT: movl %eax, (%rcx)
; CHECK-NEXT: movq x3 at GOTPCREL(%rip), %rcx
@@ -137,7 +137,7 @@ define void @_Z2x6v() local_unnamed_addr {
; CHECK-NEXT: leal 8(,%rdx,8), %eax
; CHECK-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; CHECK-NEXT: leaq 32(%rsi), %rbx
-; CHECK-NEXT: leaq 8(,%rdx,8), %r14
+; CHECK-NEXT: leal 8(,%rdx,8), %r14d
; CHECK-NEXT: xorl %r15d, %r15d
; CHECK-NEXT: movq x0 at GOTPCREL(%rip), %r12
; CHECK-NEXT: movq %rsi, %r13
diff --git a/llvm/test/CodeGen/X86/dagcombine-select.ll b/llvm/test/CodeGen/X86/dagcombine-select.ll
index 1380c02663ee0..58e6c46327e9f 100644
--- a/llvm/test/CodeGen/X86/dagcombine-select.ll
+++ b/llvm/test/CodeGen/X86/dagcombine-select.ll
@@ -325,18 +325,20 @@ declare i64 @llvm.cttz.i64(i64, i1)
define i64 @cttz_64_eq_select(i64 %v) nounwind {
; NOBMI-LABEL: cttz_64_eq_select:
; NOBMI: # %bb.0:
-; NOBMI-NEXT: bsfq %rdi, %rcx
-; NOBMI-NEXT: movq $-1, %rax
+; NOBMI-NEXT: rep bsfq %rdi, %rcx
+; NOBMI-NEXT: addl $6, %ecx
+; NOBMI-NEXT: testq %rdi, %rdi
+; NOBMI-NEXT: movl $5, %eax
; NOBMI-NEXT: cmovneq %rcx, %rax
-; NOBMI-NEXT: addq $6, %rax
; NOBMI-NEXT: retq
;
; BMI-LABEL: cttz_64_eq_select:
; BMI: # %bb.0:
; BMI-NEXT: tzcntq %rdi, %rcx
-; BMI-NEXT: movq $-1, %rax
-; BMI-NEXT: cmovaeq %rcx, %rax
-; BMI-NEXT: addq $6, %rax
+; BMI-NEXT: addl $6, %ecx
+; BMI-NEXT: testq %rdi, %rdi
+; BMI-NEXT: movl $5, %eax
+; BMI-NEXT: cmovneq %rcx, %rax
; BMI-NEXT: retq
%cnt = tail call i64 @llvm.cttz.i64(i64 %v, i1 true)
@@ -349,18 +351,20 @@ define i64 @cttz_64_eq_select(i64 %v) nounwind {
define i64 @cttz_64_ne_select(i64 %v) nounwind {
; NOBMI-LABEL: cttz_64_ne_select:
; NOBMI: # %bb.0:
-; NOBMI-NEXT: bsfq %rdi, %rcx
-; NOBMI-NEXT: movq $-1, %rax
+; NOBMI-NEXT: rep bsfq %rdi, %rcx
+; NOBMI-NEXT: addl $6, %ecx
+; NOBMI-NEXT: testq %rdi, %rdi
+; NOBMI-NEXT: movl $5, %eax
; NOBMI-NEXT: cmovneq %rcx, %rax
-; NOBMI-NEXT: addq $6, %rax
; NOBMI-NEXT: retq
;
; BMI-LABEL: cttz_64_ne_select:
; BMI: # %bb.0:
; BMI-NEXT: tzcntq %rdi, %rcx
-; BMI-NEXT: movq $-1, %rax
-; BMI-NEXT: cmovaeq %rcx, %rax
-; BMI-NEXT: addq $6, %rax
+; BMI-NEXT: addl $6, %ecx
+; BMI-NEXT: testq %rdi, %rdi
+; BMI-NEXT: movl $5, %eax
+; BMI-NEXT: cmovneq %rcx, %rax
; BMI-NEXT: retq
%cnt = tail call i64 @llvm.cttz.i64(i64 %v, i1 true)
diff --git a/llvm/test/CodeGen/X86/dagcombine-shifts.ll b/llvm/test/CodeGen/X86/dagcombine-shifts.ll
index e9a1e8ed728a4..e8a1da31b3f82 100644
--- a/llvm/test/CodeGen/X86/dagcombine-shifts.ll
+++ b/llvm/test/CodeGen/X86/dagcombine-shifts.ll
@@ -243,11 +243,10 @@ define i64 @fun11(i16 zeroext %v) {
;
; X64-LABEL: fun11:
; X64: # %bb.0: # %entry
-; X64-NEXT: # kill: def $edi killed $edi def $rdi
; X64-NEXT: movl %edi, %eax
; X64-NEXT: shrl $4, %eax
; X64-NEXT: andl $-16, %edi
-; X64-NEXT: addq %rdi, %rax
+; X64-NEXT: addl %edi, %eax
; X64-NEXT: retq
entry:
%shr = lshr i16 %v, 4
diff --git a/llvm/test/CodeGen/X86/divrem8_ext.ll b/llvm/test/CodeGen/X86/divrem8_ext.ll
index bfc982d2def5d..6fb25d8a2443d 100644
--- a/llvm/test/CodeGen/X86/divrem8_ext.ll
+++ b/llvm/test/CodeGen/X86/divrem8_ext.ll
@@ -197,7 +197,7 @@ define i64 @pr25754(i8 %a, i8 %c) {
; X64-NEXT: divb %sil
; X64-NEXT: movzbl %ah, %ecx
; X64-NEXT: movzbl %al, %eax
-; X64-NEXT: addq %rcx, %rax
+; X64-NEXT: addl %ecx, %eax
; X64-NEXT: retq
%r1 = urem i8 %a, %c
%d1 = udiv i8 %a, %c
diff --git a/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll b/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll
index a8a6786d97ea0..58bd4e4ff5abb 100644
--- a/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll
+++ b/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll
@@ -13,7 +13,7 @@ define <4 x float> @fmul_pow2_4xfloat(<4 x i32> %i) {
; CHECK-SSE-LABEL: fmul_pow2_4xfloat:
; CHECK-SSE: # %bb.0:
; CHECK-SSE-NEXT: pslld $23, %xmm0
-; CHECK-SSE-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-SSE-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1091567616,1091567616,1091567616,1091567616]
; CHECK-SSE-NEXT: retq
;
; CHECK-AVX2-LABEL: fmul_pow2_4xfloat:
@@ -772,7 +772,8 @@ define double @fmul_pow_mul_max_pow2(i16 %cnt) nounwind {
; CHECK-SSE-LABEL: fmul_pow_mul_max_pow2:
; CHECK-SSE: # %bb.0:
; CHECK-SSE-NEXT: movzbl %dil, %eax
-; CHECK-SSE-NEXT: leaq 1(%rax), %rcx
+; CHECK-SSE-NEXT: movl %eax, %ecx
+; CHECK-SSE-NEXT: incl %ecx
; CHECK-SSE-NEXT: cmpq %rcx, %rax
; CHECK-SSE-NEXT: cmovaq %rax, %rcx
; CHECK-SSE-NEXT: shlq $52, %rcx
@@ -784,7 +785,8 @@ define double @fmul_pow_mul_max_pow2(i16 %cnt) nounwind {
; CHECK-AVX-LABEL: fmul_pow_mul_max_pow2:
; CHECK-AVX: # %bb.0:
; CHECK-AVX-NEXT: movzbl %dil, %eax
-; CHECK-AVX-NEXT: leaq 1(%rax), %rcx
+; CHECK-AVX-NEXT: movl %eax, %ecx
+; CHECK-AVX-NEXT: incl %ecx
; CHECK-AVX-NEXT: cmpq %rcx, %rax
; CHECK-AVX-NEXT: cmovaq %rax, %rcx
; CHECK-AVX-NEXT: shlq $52, %rcx
@@ -911,19 +913,19 @@ define <2 x double> @fmul_pow_shl_cnt_vec(<2 x i64> %cnt) nounwind {
; CHECK-SSE-LABEL: fmul_pow_shl_cnt_vec:
; CHECK-SSE: # %bb.0:
; CHECK-SSE-NEXT: psllq $52, %xmm0
-; CHECK-SSE-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-SSE-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [4629137466983448576,4629137466983448576]
; CHECK-SSE-NEXT: retq
;
; CHECK-AVX2-LABEL: fmul_pow_shl_cnt_vec:
; CHECK-AVX2: # %bb.0:
; CHECK-AVX2-NEXT: vpsllq $52, %xmm0, %xmm0
-; CHECK-AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; CHECK-AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4629137466983448576,4629137466983448576]
; CHECK-AVX2-NEXT: retq
;
; CHECK-ONLY-AVX512F-LABEL: fmul_pow_shl_cnt_vec:
; CHECK-ONLY-AVX512F: # %bb.0:
; CHECK-ONLY-AVX512F-NEXT: vpsllq $52, %xmm0, %xmm0
-; CHECK-ONLY-AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; CHECK-ONLY-AVX512F-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4629137466983448576,4629137466983448576]
; CHECK-ONLY-AVX512F-NEXT: retq
;
; CHECK-SKX-LABEL: fmul_pow_shl_cnt_vec:
@@ -941,7 +943,7 @@ define <4 x float> @fmul_pow_shl_cnt_vec_preserve_fma(<4 x i32> %cnt, <4 x float
; CHECK-SSE-LABEL: fmul_pow_shl_cnt_vec_preserve_fma:
; CHECK-SSE: # %bb.0:
; CHECK-SSE-NEXT: pslld $23, %xmm0
-; CHECK-SSE-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-SSE-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1092616192,1092616192,1092616192,1092616192]
; CHECK-SSE-NEXT: addps %xmm1, %xmm0
; CHECK-SSE-NEXT: retq
;
@@ -980,7 +982,7 @@ define <4 x float> @fmul_pow_shl_cnt_vec_no_fma(<4 x i32> %cnt, <4 x float> %add
; CHECK-SSE-LABEL: fmul_pow_shl_cnt_vec_no_fma:
; CHECK-SSE: # %bb.0:
; CHECK-SSE-NEXT: pslld $23, %xmm0
-; CHECK-SSE-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-SSE-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1092616192,1092616192,1092616192,1092616192]
; CHECK-SSE-NEXT: addps %xmm1, %xmm0
; CHECK-SSE-NEXT: retq
;
@@ -1017,13 +1019,13 @@ define <2 x double> @fmul_pow_shl_cnt_vec_non_splat_todo(<2 x i64> %cnt) nounwin
; CHECK-SSE-LABEL: fmul_pow_shl_cnt_vec_non_splat_todo:
; CHECK-SSE: # %bb.0:
; CHECK-SSE-NEXT: psllq $52, %xmm0
-; CHECK-SSE-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-SSE-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [4629137466983448576,4628574517030027264]
; CHECK-SSE-NEXT: retq
;
; CHECK-AVX-LABEL: fmul_pow_shl_cnt_vec_non_splat_todo:
; CHECK-AVX: # %bb.0:
; CHECK-AVX-NEXT: vpsllq $52, %xmm0, %xmm0
-; CHECK-AVX-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; CHECK-AVX-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4629137466983448576,4628574517030027264]
; CHECK-AVX-NEXT: retq
%shl = shl nsw nuw <2 x i64> <i64 2, i64 2>, %cnt
%conv = uitofp <2 x i64> %shl to <2 x double>
@@ -1035,13 +1037,13 @@ define <2 x double> @fmul_pow_shl_cnt_vec_non_splat2_todo(<2 x i64> %cnt) nounwi
; CHECK-SSE-LABEL: fmul_pow_shl_cnt_vec_non_splat2_todo:
; CHECK-SSE: # %bb.0:
; CHECK-SSE-NEXT: psllq $52, %xmm0
-; CHECK-SSE-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-SSE-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [4629137466983448576,4624633867356078080]
; CHECK-SSE-NEXT: retq
;
; CHECK-AVX-LABEL: fmul_pow_shl_cnt_vec_non_splat2_todo:
; CHECK-AVX: # %bb.0:
; CHECK-AVX-NEXT: vpsllq $52, %xmm0, %xmm0
-; CHECK-AVX-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; CHECK-AVX-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4629137466983448576,4624633867356078080]
; CHECK-AVX-NEXT: retq
%shl = shl nsw nuw <2 x i64> <i64 2, i64 1>, %cnt
%conv = uitofp <2 x i64> %shl to <2 x double>
@@ -1056,7 +1058,7 @@ define <2 x half> @fmul_pow_shl_cnt_vec_fail_to_large(<2 x i16> %cnt) nounwind {
; CHECK-SSE-NEXT: pxor %xmm1, %xmm1
; CHECK-SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
; CHECK-SSE-NEXT: pslld $23, %xmm0
-; CHECK-SSE-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; CHECK-SSE-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [1065353216,1065353216,1065353216,1065353216]
; CHECK-SSE-NEXT: cvttps2dq %xmm0, %xmm0
; CHECK-SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
; CHECK-SSE-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [2,2,u,u,u,u,u,u]
diff --git a/llvm/test/CodeGen/X86/h-registers-1.ll b/llvm/test/CodeGen/X86/h-registers-1.ll
index 07d85d260a37a..db8fb569f3fcd 100644
--- a/llvm/test/CodeGen/X86/h-registers-1.ll
+++ b/llvm/test/CodeGen/X86/h-registers-1.ll
@@ -28,13 +28,13 @@ define i64 @foo(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g, i64 %h)
; CHECK-NEXT: movzbl %ah, %ebx
; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %eax
; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %r8d
-; CHECK-NEXT: addq %rdi, %rsi
-; CHECK-NEXT: addq %rbp, %rdx
-; CHECK-NEXT: addq %rsi, %rdx
-; CHECK-NEXT: addq %rbx, %rcx
-; CHECK-NEXT: addq %r8, %rax
-; CHECK-NEXT: addq %rcx, %rax
-; CHECK-NEXT: addq %rdx, %rax
+; CHECK-NEXT: addl %edi, %esi
+; CHECK-NEXT: addl %ebp, %edx
+; CHECK-NEXT: addl %esi, %edx
+; CHECK-NEXT: addl %ebx, %ecx
+; CHECK-NEXT: addl %r8d, %eax
+; CHECK-NEXT: addl %ecx, %eax
+; CHECK-NEXT: addl %edx, %eax
; CHECK-NEXT: popq %rbx
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: popq %rbp
@@ -61,13 +61,13 @@ define i64 @foo(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f, i64 %g, i64 %h)
; GNUX32-NEXT: movzbl %ah, %ebx
; GNUX32-NEXT: movzbl {{[0-9]+}}(%esp), %eax
; GNUX32-NEXT: movzbl {{[0-9]+}}(%esp), %r8d
-; GNUX32-NEXT: addq %rdi, %rsi
-; GNUX32-NEXT: addq %rbp, %rdx
-; GNUX32-NEXT: addq %rsi, %rdx
-; GNUX32-NEXT: addq %rbx, %rcx
-; GNUX32-NEXT: addq %r8, %rax
-; GNUX32-NEXT: addq %rcx, %rax
-; GNUX32-NEXT: addq %rdx, %rax
+; GNUX32-NEXT: addl %edi, %esi
+; GNUX32-NEXT: addl %ebp, %edx
+; GNUX32-NEXT: addl %esi, %edx
+; GNUX32-NEXT: addl %ebx, %ecx
+; GNUX32-NEXT: addl %r8d, %eax
+; GNUX32-NEXT: addl %ecx, %eax
+; GNUX32-NEXT: addl %edx, %eax
; GNUX32-NEXT: popq %rbx
; GNUX32-NEXT: .cfi_def_cfa_offset 16
; GNUX32-NEXT: popq %rbp
diff --git a/llvm/test/CodeGen/X86/narrow-add-i64.ll b/llvm/test/CodeGen/X86/narrow-add-i64.ll
index a7a54fd57413b..3d05395085d7f 100644
--- a/llvm/test/CodeGen/X86/narrow-add-i64.ll
+++ b/llvm/test/CodeGen/X86/narrow-add-i64.ll
@@ -13,7 +13,7 @@ define i64 @test_add_i64_i16_const(i16 %a) nounwind {
; X64-LABEL: test_add_i64_i16_const:
; X64: # %bb.0:
; X64-NEXT: movzwl %di, %eax
-; X64-NEXT: addq $42, %rax
+; X64-NEXT: addl $42, %eax
; X64-NEXT: retq
%zext_a = zext i16 %a to i64
%sum = add nuw nsw i64 %zext_a, 42
@@ -32,9 +32,9 @@ define i64 @test_add_i64_i16_zext(i16 %a, i16 %b) nounwind {
;
; X64-LABEL: test_add_i64_i16_zext:
; X64: # %bb.0:
-; X64-NEXT: movzwl %di, %ecx
-; X64-NEXT: movzwl %si, %eax
-; X64-NEXT: addq %rcx, %rax
+; X64-NEXT: movzwl %si, %ecx
+; X64-NEXT: movzwl %di, %eax
+; X64-NEXT: addl %ecx, %eax
; X64-NEXT: retq
%zext_a = zext i16 %a to i64
%zext_b = zext i16 %b to i64
diff --git a/llvm/test/CodeGen/X86/popcnt.ll b/llvm/test/CodeGen/X86/popcnt.ll
index 3004b8b72fcc5..e9398b788a7b6 100644
--- a/llvm/test/CodeGen/X86/popcnt.ll
+++ b/llvm/test/CodeGen/X86/popcnt.ll
@@ -427,39 +427,39 @@ define i128 @cnt128(i128 %x) nounwind readnone {
; X64-BASE: # %bb.0:
; X64-BASE-NEXT: movq %rsi, %rax
; X64-BASE-NEXT: shrq %rax
-; X64-BASE-NEXT: movabsq $6148914691236517205, %r8 # imm = 0x5555555555555555
-; X64-BASE-NEXT: andq %r8, %rax
+; X64-BASE-NEXT: movabsq $6148914691236517205, %rdx # imm = 0x5555555555555555
+; X64-BASE-NEXT: andq %rdx, %rax
; X64-BASE-NEXT: subq %rax, %rsi
-; X64-BASE-NEXT: movabsq $3689348814741910323, %rcx # imm = 0x3333333333333333
-; X64-BASE-NEXT: movq %rsi, %rax
-; X64-BASE-NEXT: andq %rcx, %rax
+; X64-BASE-NEXT: movabsq $3689348814741910323, %rax # imm = 0x3333333333333333
+; X64-BASE-NEXT: movq %rsi, %r8
+; X64-BASE-NEXT: andq %rax, %r8
; X64-BASE-NEXT: shrq $2, %rsi
-; X64-BASE-NEXT: andq %rcx, %rsi
-; X64-BASE-NEXT: addq %rsi, %rax
-; X64-BASE-NEXT: movq %rax, %rdx
-; X64-BASE-NEXT: shrq $4, %rdx
-; X64-BASE-NEXT: addq %rax, %rdx
+; X64-BASE-NEXT: andq %rax, %rsi
+; X64-BASE-NEXT: addq %rsi, %r8
+; X64-BASE-NEXT: movq %r8, %rcx
+; X64-BASE-NEXT: shrq $4, %rcx
+; X64-BASE-NEXT: addq %r8, %rcx
; X64-BASE-NEXT: movabsq $1085102592571150095, %rsi # imm = 0xF0F0F0F0F0F0F0F
-; X64-BASE-NEXT: andq %rsi, %rdx
-; X64-BASE-NEXT: movabsq $72340172838076673, %r9 # imm = 0x101010101010101
-; X64-BASE-NEXT: imulq %r9, %rdx
-; X64-BASE-NEXT: shrq $56, %rdx
-; X64-BASE-NEXT: movq %rdi, %rax
-; X64-BASE-NEXT: shrq %rax
-; X64-BASE-NEXT: andq %r8, %rax
-; X64-BASE-NEXT: subq %rax, %rdi
-; X64-BASE-NEXT: movq %rdi, %rax
-; X64-BASE-NEXT: andq %rcx, %rax
+; X64-BASE-NEXT: andq %rsi, %rcx
+; X64-BASE-NEXT: movabsq $72340172838076673, %r8 # imm = 0x101010101010101
+; X64-BASE-NEXT: imulq %r8, %rcx
+; X64-BASE-NEXT: shrq $56, %rcx
+; X64-BASE-NEXT: movq %rdi, %r9
+; X64-BASE-NEXT: shrq %r9
+; X64-BASE-NEXT: andq %rdx, %r9
+; X64-BASE-NEXT: subq %r9, %rdi
+; X64-BASE-NEXT: movq %rdi, %rdx
+; X64-BASE-NEXT: andq %rax, %rdx
; X64-BASE-NEXT: shrq $2, %rdi
-; X64-BASE-NEXT: andq %rdi, %rcx
-; X64-BASE-NEXT: addq %rax, %rcx
-; X64-BASE-NEXT: movq %rcx, %rax
+; X64-BASE-NEXT: andq %rax, %rdi
+; X64-BASE-NEXT: addq %rdx, %rdi
+; X64-BASE-NEXT: movq %rdi, %rax
; X64-BASE-NEXT: shrq $4, %rax
-; X64-BASE-NEXT: addq %rcx, %rax
+; X64-BASE-NEXT: addq %rdi, %rax
; X64-BASE-NEXT: andq %rsi, %rax
-; X64-BASE-NEXT: imulq %r9, %rax
+; X64-BASE-NEXT: imulq %r8, %rax
; X64-BASE-NEXT: shrq $56, %rax
-; X64-BASE-NEXT: addq %rdx, %rax
+; X64-BASE-NEXT: addl %ecx, %eax
; X64-BASE-NEXT: xorl %edx, %edx
; X64-BASE-NEXT: retq
;
@@ -491,7 +491,7 @@ define i128 @cnt128(i128 %x) nounwind readnone {
; X64-POPCNT: # %bb.0:
; X64-POPCNT-NEXT: popcntq %rsi, %rcx
; X64-POPCNT-NEXT: popcntq %rdi, %rax
-; X64-POPCNT-NEXT: addq %rcx, %rax
+; X64-POPCNT-NEXT: addl %ecx, %eax
; X64-POPCNT-NEXT: xorl %edx, %edx
; X64-POPCNT-NEXT: retq
;
@@ -525,7 +525,7 @@ define i128 @cnt128(i128 %x) nounwind readnone {
; X64-NDD-NEXT: andq %rsi, %rax
; X64-NDD-NEXT: imulq %r8, %rax
; X64-NDD-NEXT: shrq $56, %rax
-; X64-NDD-NEXT: addq %rdx, %rax
+; X64-NDD-NEXT: addl %edx, %eax
; X64-NDD-NEXT: xorl %edx, %edx
; X64-NDD-NEXT: retq
;
@@ -1045,39 +1045,39 @@ define i128 @cnt128_optsize(i128 %x) nounwind readnone optsize {
; X64-BASE: # %bb.0:
; X64-BASE-NEXT: movq %rsi, %rax
; X64-BASE-NEXT: shrq %rax
-; X64-BASE-NEXT: movabsq $6148914691236517205, %r8 # imm = 0x5555555555555555
-; X64-BASE-NEXT: andq %r8, %rax
+; X64-BASE-NEXT: movabsq $6148914691236517205, %rdx # imm = 0x5555555555555555
+; X64-BASE-NEXT: andq %rdx, %rax
; X64-BASE-NEXT: subq %rax, %rsi
-; X64-BASE-NEXT: movabsq $3689348814741910323, %rcx # imm = 0x3333333333333333
-; X64-BASE-NEXT: movq %rsi, %rax
-; X64-BASE-NEXT: andq %rcx, %rax
+; X64-BASE-NEXT: movabsq $3689348814741910323, %rax # imm = 0x3333333333333333
+; X64-BASE-NEXT: movq %rsi, %r8
+; X64-BASE-NEXT: andq %rax, %r8
; X64-BASE-NEXT: shrq $2, %rsi
-; X64-BASE-NEXT: andq %rcx, %rsi
-; X64-BASE-NEXT: addq %rsi, %rax
-; X64-BASE-NEXT: movq %rax, %rdx
-; X64-BASE-NEXT: shrq $4, %rdx
-; X64-BASE-NEXT: addq %rax, %rdx
+; X64-BASE-NEXT: andq %rax, %rsi
+; X64-BASE-NEXT: addq %rsi, %r8
+; X64-BASE-NEXT: movq %r8, %rcx
+; X64-BASE-NEXT: shrq $4, %rcx
+; X64-BASE-NEXT: addq %r8, %rcx
; X64-BASE-NEXT: movabsq $1085102592571150095, %rsi # imm = 0xF0F0F0F0F0F0F0F
-; X64-BASE-NEXT: andq %rsi, %rdx
-; X64-BASE-NEXT: movabsq $72340172838076673, %r9 # imm = 0x101010101010101
-; X64-BASE-NEXT: imulq %r9, %rdx
-; X64-BASE-NEXT: shrq $56, %rdx
-; X64-BASE-NEXT: movq %rdi, %rax
-; X64-BASE-NEXT: shrq %rax
-; X64-BASE-NEXT: andq %r8, %rax
-; X64-BASE-NEXT: subq %rax, %rdi
-; X64-BASE-NEXT: movq %rdi, %rax
-; X64-BASE-NEXT: andq %rcx, %rax
+; X64-BASE-NEXT: andq %rsi, %rcx
+; X64-BASE-NEXT: movabsq $72340172838076673, %r8 # imm = 0x101010101010101
+; X64-BASE-NEXT: imulq %r8, %rcx
+; X64-BASE-NEXT: shrq $56, %rcx
+; X64-BASE-NEXT: movq %rdi, %r9
+; X64-BASE-NEXT: shrq %r9
+; X64-BASE-NEXT: andq %rdx, %r9
+; X64-BASE-NEXT: subq %r9, %rdi
+; X64-BASE-NEXT: movq %rdi, %rdx
+; X64-BASE-NEXT: andq %rax, %rdx
; X64-BASE-NEXT: shrq $2, %rdi
-; X64-BASE-NEXT: andq %rdi, %rcx
-; X64-BASE-NEXT: addq %rax, %rcx
-; X64-BASE-NEXT: movq %rcx, %rax
+; X64-BASE-NEXT: andq %rax, %rdi
+; X64-BASE-NEXT: addq %rdx, %rdi
+; X64-BASE-NEXT: movq %rdi, %rax
; X64-BASE-NEXT: shrq $4, %rax
-; X64-BASE-NEXT: addq %rcx, %rax
+; X64-BASE-NEXT: addq %rdi, %rax
; X64-BASE-NEXT: andq %rsi, %rax
-; X64-BASE-NEXT: imulq %r9, %rax
+; X64-BASE-NEXT: imulq %r8, %rax
; X64-BASE-NEXT: shrq $56, %rax
-; X64-BASE-NEXT: addq %rdx, %rax
+; X64-BASE-NEXT: addl %ecx, %eax
; X64-BASE-NEXT: xorl %edx, %edx
; X64-BASE-NEXT: retq
;
@@ -1110,7 +1110,7 @@ define i128 @cnt128_optsize(i128 %x) nounwind readnone optsize {
; X64-POPCNT: # %bb.0:
; X64-POPCNT-NEXT: popcntq %rsi, %rcx
; X64-POPCNT-NEXT: popcntq %rdi, %rax
-; X64-POPCNT-NEXT: addq %rcx, %rax
+; X64-POPCNT-NEXT: addl %ecx, %eax
; X64-POPCNT-NEXT: xorl %edx, %edx
; X64-POPCNT-NEXT: retq
;
@@ -1144,7 +1144,7 @@ define i128 @cnt128_optsize(i128 %x) nounwind readnone optsize {
; X64-NDD-NEXT: andq %rsi, %rax
; X64-NDD-NEXT: imulq %r8, %rax
; X64-NDD-NEXT: shrq $56, %rax
-; X64-NDD-NEXT: addq %rdx, %rax
+; X64-NDD-NEXT: addl %edx, %eax
; X64-NDD-NEXT: xorl %edx, %edx
; X64-NDD-NEXT: retq
;
@@ -1547,39 +1547,39 @@ define i128 @cnt128_pgso(i128 %x) nounwind readnone !prof !14 {
; X64-BASE: # %bb.0:
; X64-BASE-NEXT: movq %rsi, %rax
; X64-BASE-NEXT: shrq %rax
-; X64-BASE-NEXT: movabsq $6148914691236517205, %r8 # imm = 0x5555555555555555
-; X64-BASE-NEXT: andq %r8, %rax
+; X64-BASE-NEXT: movabsq $6148914691236517205, %rdx # imm = 0x5555555555555555
+; X64-BASE-NEXT: andq %rdx, %rax
; X64-BASE-NEXT: subq %rax, %rsi
-; X64-BASE-NEXT: movabsq $3689348814741910323, %rcx # imm = 0x3333333333333333
-; X64-BASE-NEXT: movq %rsi, %rax
-; X64-BASE-NEXT: andq %rcx, %rax
+; X64-BASE-NEXT: movabsq $3689348814741910323, %rax # imm = 0x3333333333333333
+; X64-BASE-NEXT: movq %rsi, %r8
+; X64-BASE-NEXT: andq %rax, %r8
; X64-BASE-NEXT: shrq $2, %rsi
-; X64-BASE-NEXT: andq %rcx, %rsi
-; X64-BASE-NEXT: addq %rsi, %rax
-; X64-BASE-NEXT: movq %rax, %rdx
-; X64-BASE-NEXT: shrq $4, %rdx
-; X64-BASE-NEXT: addq %rax, %rdx
+; X64-BASE-NEXT: andq %rax, %rsi
+; X64-BASE-NEXT: addq %rsi, %r8
+; X64-BASE-NEXT: movq %r8, %rcx
+; X64-BASE-NEXT: shrq $4, %rcx
+; X64-BASE-NEXT: addq %r8, %rcx
; X64-BASE-NEXT: movabsq $1085102592571150095, %rsi # imm = 0xF0F0F0F0F0F0F0F
-; X64-BASE-NEXT: andq %rsi, %rdx
-; X64-BASE-NEXT: movabsq $72340172838076673, %r9 # imm = 0x101010101010101
-; X64-BASE-NEXT: imulq %r9, %rdx
-; X64-BASE-NEXT: shrq $56, %rdx
-; X64-BASE-NEXT: movq %rdi, %rax
-; X64-BASE-NEXT: shrq %rax
-; X64-BASE-NEXT: andq %r8, %rax
-; X64-BASE-NEXT: subq %rax, %rdi
-; X64-BASE-NEXT: movq %rdi, %rax
-; X64-BASE-NEXT: andq %rcx, %rax
+; X64-BASE-NEXT: andq %rsi, %rcx
+; X64-BASE-NEXT: movabsq $72340172838076673, %r8 # imm = 0x101010101010101
+; X64-BASE-NEXT: imulq %r8, %rcx
+; X64-BASE-NEXT: shrq $56, %rcx
+; X64-BASE-NEXT: movq %rdi, %r9
+; X64-BASE-NEXT: shrq %r9
+; X64-BASE-NEXT: andq %rdx, %r9
+; X64-BASE-NEXT: subq %r9, %rdi
+; X64-BASE-NEXT: movq %rdi, %rdx
+; X64-BASE-NEXT: andq %rax, %rdx
; X64-BASE-NEXT: shrq $2, %rdi
-; X64-BASE-NEXT: andq %rdi, %rcx
-; X64-BASE-NEXT: addq %rax, %rcx
-; X64-BASE-NEXT: movq %rcx, %rax
+; X64-BASE-NEXT: andq %rax, %rdi
+; X64-BASE-NEXT: addq %rdx, %rdi
+; X64-BASE-NEXT: movq %rdi, %rax
; X64-BASE-NEXT: shrq $4, %rax
-; X64-BASE-NEXT: addq %rcx, %rax
+; X64-BASE-NEXT: addq %rdi, %rax
; X64-BASE-NEXT: andq %rsi, %rax
-; X64-BASE-NEXT: imulq %r9, %rax
+; X64-BASE-NEXT: imulq %r8, %rax
; X64-BASE-NEXT: shrq $56, %rax
-; X64-BASE-NEXT: addq %rdx, %rax
+; X64-BASE-NEXT: addl %ecx, %eax
; X64-BASE-NEXT: xorl %edx, %edx
; X64-BASE-NEXT: retq
;
@@ -1612,7 +1612,7 @@ define i128 @cnt128_pgso(i128 %x) nounwind readnone !prof !14 {
; X64-POPCNT: # %bb.0:
; X64-POPCNT-NEXT: popcntq %rsi, %rcx
; X64-POPCNT-NEXT: popcntq %rdi, %rax
-; X64-POPCNT-NEXT: addq %rcx, %rax
+; X64-POPCNT-NEXT: addl %ecx, %eax
; X64-POPCNT-NEXT: xorl %edx, %edx
; X64-POPCNT-NEXT: retq
;
@@ -1646,7 +1646,7 @@ define i128 @cnt128_pgso(i128 %x) nounwind readnone !prof !14 {
; X64-NDD-NEXT: andq %rsi, %rax
; X64-NDD-NEXT: imulq %r8, %rax
; X64-NDD-NEXT: shrq $56, %rax
-; X64-NDD-NEXT: addq %rdx, %rax
+; X64-NDD-NEXT: addl %edx, %eax
; X64-NDD-NEXT: xorl %edx, %edx
; X64-NDD-NEXT: retq
;
diff --git a/llvm/test/CodeGen/X86/pr173924.ll b/llvm/test/CodeGen/X86/pr173924.ll
index a25f62a0ab071..60e5b03d3e6dd 100644
--- a/llvm/test/CodeGen/X86/pr173924.ll
+++ b/llvm/test/CodeGen/X86/pr173924.ll
@@ -1,38 +1,81 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
-; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v3 | FileCheck %s
-; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v3 | FileCheck %s --check-prefixes=CHECK,V3
+; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=CHECK,V4
define i256 @PR173924(<8 x i256> %a0) {
-; CHECK-LABEL: PR173924:
-; CHECK: # %bb.0:
-; CHECK-NEXT: movq %rdi, %rax
-; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rdi
-; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rdx
-; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rcx
-; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %r8
-; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %r10
-; CHECK-NEXT: vmovd {{.*#+}} xmm0 = [1,0,0,0]
-; CHECK-NEXT: vpand {{[0-9]+}}(%rsp), %ymm0, %ymm0
-; CHECK-NEXT: vmovq %xmm0, %r11
-; CHECK-NEXT: andl $1, %r10d
-; CHECK-NEXT: andl $1, %esi
-; CHECK-NEXT: addq %r10, %rsi
-; CHECK-NEXT: andl $1, %r8d
-; CHECK-NEXT: andl $1, %ecx
-; CHECK-NEXT: addq %r8, %rcx
-; CHECK-NEXT: addq %rsi, %rcx
-; CHECK-NEXT: andl $1, %edx
-; CHECK-NEXT: addq %r11, %rdx
-; CHECK-NEXT: andl $1, %edi
-; CHECK-NEXT: andl $1, %r9d
-; CHECK-NEXT: addq %rdi, %r9
-; CHECK-NEXT: addq %rdx, %r9
-; CHECK-NEXT: addq %rcx, %r9
-; CHECK-NEXT: vmovq %r9, %xmm0
-; CHECK-NEXT: vmovdqu %ymm0, (%rax)
-; CHECK-NEXT: vzeroupper
-; CHECK-NEXT: retq
+; V3-LABEL: PR173924:
+; V3: # %bb.0:
+; V3-NEXT: movq %rdi, %rax
+; V3-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
+; V3-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
+; V3-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
+; V3-NEXT: vmovq {{.*#+}} xmm3 = mem[0],zero
+; V3-NEXT: vmovq {{.*#+}} xmm4 = mem[0],zero
+; V3-NEXT: vmovq {{.*#+}} xmm5 = mem[0],zero
+; V3-NEXT: andl $1, %r9d
+; V3-NEXT: andl $1, %esi
+; V3-NEXT: vmovd {{.*#+}} xmm6 = [1,0,0,0]
+; V3-NEXT: vpand %xmm6, %xmm5, %xmm5
+; V3-NEXT: vmovd %xmm5, %ecx
+; V3-NEXT: vpand %xmm6, %xmm4, %xmm4
+; V3-NEXT: vmovd %xmm4, %edx
+; V3-NEXT: addl %ecx, %edx
+; V3-NEXT: vpand %xmm6, %xmm3, %xmm3
+; V3-NEXT: vmovd %xmm3, %ecx
+; V3-NEXT: vpand %xmm6, %xmm2, %xmm2
+; V3-NEXT: vmovd %xmm2, %edi
+; V3-NEXT: addl %ecx, %edi
+; V3-NEXT: vpand %xmm6, %xmm1, %xmm1
+; V3-NEXT: vmovd %xmm1, %ecx
+; V3-NEXT: addl %esi, %ecx
+; V3-NEXT: addl %edx, %ecx
+; V3-NEXT: vpand %xmm6, %xmm0, %xmm0
+; V3-NEXT: vmovd %xmm0, %edx
+; V3-NEXT: addl %r9d, %edx
+; V3-NEXT: addl %edi, %edx
+; V3-NEXT: addl %ecx, %edx
+; V3-NEXT: vmovd %edx, %xmm0
+; V3-NEXT: vmovdqu %ymm0, (%rax)
+; V3-NEXT: vzeroupper
+; V3-NEXT: retq
+;
+; V4-LABEL: PR173924:
+; V4: # %bb.0:
+; V4-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
+; V4-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
+; V4-NEXT: vmovq {{.*#+}} xmm2 = mem[0],zero
+; V4-NEXT: vmovq {{.*#+}} xmm3 = mem[0],zero
+; V4-NEXT: vmovq {{.*#+}} xmm4 = mem[0],zero
+; V4-NEXT: vmovd {{.*#+}} xmm5 = [1,0,0,0]
+; V4-NEXT: vpand {{[0-9]+}}(%rsp), %ymm5, %ymm6
+; V4-NEXT: movq %rdi, %rax
+; V4-NEXT: andl $1, %esi
+; V4-NEXT: andl $1, %r9d
+; V4-NEXT: vpand %xmm5, %xmm4, %xmm4
+; V4-NEXT: vmovd %xmm4, %ecx
+; V4-NEXT: vmovd %xmm6, %edx
+; V4-NEXT: addl %ecx, %edx
+; V4-NEXT: vpand %xmm5, %xmm3, %xmm3
+; V4-NEXT: vmovd %xmm3, %ecx
+; V4-NEXT: vpand %xmm5, %xmm2, %xmm2
+; V4-NEXT: vmovd %xmm2, %edi
+; V4-NEXT: addl %ecx, %edi
+; V4-NEXT: vpand %xmm5, %xmm1, %xmm1
+; V4-NEXT: vmovd %xmm1, %ecx
+; V4-NEXT: addl %r9d, %ecx
+; V4-NEXT: addl %edx, %ecx
+; V4-NEXT: vpand %xmm5, %xmm0, %xmm0
+; V4-NEXT: vmovd %xmm0, %edx
+; V4-NEXT: addl %esi, %edx
+; V4-NEXT: addl %edi, %edx
+; V4-NEXT: addl %ecx, %edx
+; V4-NEXT: vmovd %edx, %xmm0
+; V4-NEXT: vmovdqu %ymm0, (%rax)
+; V4-NEXT: vzeroupper
+; V4-NEXT: retq
%m = and <8 x i256> %a0, splat (i256 1)
%r = call i256 @llvm.vector.reduce.add.v8i256(<8 x i256> %m)
ret i256 %r
}
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; CHECK: {{.*}}
diff --git a/llvm/test/CodeGen/X86/scheduler-backtracking.ll b/llvm/test/CodeGen/X86/scheduler-backtracking.ll
index 28029793211f0..fade8cbd21685 100644
--- a/llvm/test/CodeGen/X86/scheduler-backtracking.ll
+++ b/llvm/test/CodeGen/X86/scheduler-backtracking.ll
@@ -220,30 +220,30 @@ define i256 @test2(i256 %a) nounwind {
; ILP-NEXT: movl $0, %r9d
; ILP-NEXT: sbbq %rcx, %r9
; ILP-NEXT: sbbq %r8, %rdi
+; ILP-NEXT: andq %rcx, %r9
; ILP-NEXT: andq %r8, %rdi
; ILP-NEXT: bsrq %rdi, %r8
; ILP-NEXT: andq %rdx, %r10
; ILP-NEXT: bsrq %r10, %rdx
; ILP-NEXT: xorq $63, %r8
-; ILP-NEXT: andq %rcx, %r9
; ILP-NEXT: bsrq %r9, %rcx
-; ILP-NEXT: xorq $63, %rcx
-; ILP-NEXT: orq $64, %rcx
+; ILP-NEXT: xorl $63, %ecx
+; ILP-NEXT: orl $64, %ecx
; ILP-NEXT: testq %rdi, %rdi
+; ILP-NEXT: movq $0, 8(%rax)
; ILP-NEXT: cmovneq %r8, %rcx
-; ILP-NEXT: xorq $63, %rdx
+; ILP-NEXT: xorl $63, %edx
; ILP-NEXT: andq %rsi, %r11
; ILP-NEXT: movl $127, %esi
; ILP-NEXT: bsrq %r11, %rsi
-; ILP-NEXT: xorq $63, %rsi
-; ILP-NEXT: addq $64, %rsi
+; ILP-NEXT: xorl $63, %esi
+; ILP-NEXT: addl $64, %esi
; ILP-NEXT: testq %r10, %r10
-; ILP-NEXT: cmovneq %rdx, %rsi
-; ILP-NEXT: subq $-128, %rsi
-; ILP-NEXT: orq %rdi, %r9
+; ILP-NEXT: cmovnel %edx, %esi
+; ILP-NEXT: subl $-128, %esi
+; ILP-NEXT: orq %r9, %rdi
; ILP-NEXT: cmovneq %rcx, %rsi
; ILP-NEXT: movq %rsi, (%rax)
-; ILP-NEXT: movq $0, 8(%rax)
; ILP-NEXT: retq
;
; HYBRID-LABEL: test2:
@@ -264,21 +264,21 @@ define i256 @test2(i256 %a) nounwind {
; HYBRID-NEXT: xorq $63, %r8
; HYBRID-NEXT: andq %rcx, %r9
; HYBRID-NEXT: bsrq %r9, %rcx
-; HYBRID-NEXT: xorq $63, %rcx
-; HYBRID-NEXT: orq $64, %rcx
+; HYBRID-NEXT: xorl $63, %ecx
+; HYBRID-NEXT: orl $64, %ecx
; HYBRID-NEXT: testq %rdi, %rdi
; HYBRID-NEXT: cmovneq %r8, %rcx
; HYBRID-NEXT: andq %rdx, %r10
; HYBRID-NEXT: bsrq %r10, %rdx
-; HYBRID-NEXT: xorq $63, %rdx
+; HYBRID-NEXT: xorl $63, %edx
; HYBRID-NEXT: andq %rsi, %r11
; HYBRID-NEXT: movl $127, %esi
; HYBRID-NEXT: bsrq %r11, %rsi
-; HYBRID-NEXT: xorq $63, %rsi
-; HYBRID-NEXT: addq $64, %rsi
+; HYBRID-NEXT: xorl $63, %esi
+; HYBRID-NEXT: addl $64, %esi
; HYBRID-NEXT: testq %r10, %r10
-; HYBRID-NEXT: cmovneq %rdx, %rsi
-; HYBRID-NEXT: subq $-128, %rsi
+; HYBRID-NEXT: cmovnel %edx, %esi
+; HYBRID-NEXT: subl $-128, %esi
; HYBRID-NEXT: orq %rdi, %r9
; HYBRID-NEXT: cmovneq %rcx, %rsi
; HYBRID-NEXT: movq %rsi, (%rax)
@@ -303,21 +303,21 @@ define i256 @test2(i256 %a) nounwind {
; BURR-NEXT: xorq $63, %r8
; BURR-NEXT: andq %rcx, %r9
; BURR-NEXT: bsrq %r9, %rcx
-; BURR-NEXT: xorq $63, %rcx
-; BURR-NEXT: orq $64, %rcx
+; BURR-NEXT: xorl $63, %ecx
+; BURR-NEXT: orl $64, %ecx
; BURR-NEXT: testq %rdi, %rdi
; BURR-NEXT: cmovneq %r8, %rcx
; BURR-NEXT: andq %rdx, %r10
; BURR-NEXT: bsrq %r10, %rdx
-; BURR-NEXT: xorq $63, %rdx
+; BURR-NEXT: xorl $63, %edx
; BURR-NEXT: andq %rsi, %r11
; BURR-NEXT: movl $127, %esi
; BURR-NEXT: bsrq %r11, %rsi
-; BURR-NEXT: xorq $63, %rsi
-; BURR-NEXT: addq $64, %rsi
+; BURR-NEXT: xorl $63, %esi
+; BURR-NEXT: addl $64, %esi
; BURR-NEXT: testq %r10, %r10
-; BURR-NEXT: cmovneq %rdx, %rsi
-; BURR-NEXT: subq $-128, %rsi
+; BURR-NEXT: cmovnel %edx, %esi
+; BURR-NEXT: subl $-128, %esi
; BURR-NEXT: orq %rdi, %r9
; BURR-NEXT: cmovneq %rcx, %rsi
; BURR-NEXT: movq %rsi, (%rax)
@@ -339,24 +339,24 @@ define i256 @test2(i256 %a) nounwind {
; SRC-NEXT: andq %rcx, %r9
; SRC-NEXT: andq %r8, %rdi
; SRC-NEXT: andq %rsi, %r11
-; SRC-NEXT: bsrq %rdi, %rcx
-; SRC-NEXT: xorq $63, %rcx
-; SRC-NEXT: bsrq %r9, %rdx
+; SRC-NEXT: bsrq %rdi, %rdx
; SRC-NEXT: xorq $63, %rdx
-; SRC-NEXT: orq $64, %rdx
+; SRC-NEXT: bsrq %r9, %rcx
+; SRC-NEXT: xorl $63, %ecx
+; SRC-NEXT: orl $64, %ecx
; SRC-NEXT: testq %rdi, %rdi
-; SRC-NEXT: cmovneq %rcx, %rdx
-; SRC-NEXT: bsrq %r10, %rcx
-; SRC-NEXT: xorq $63, %rcx
+; SRC-NEXT: cmovneq %rdx, %rcx
+; SRC-NEXT: bsrq %r10, %rdx
+; SRC-NEXT: xorl $63, %edx
; SRC-NEXT: movl $127, %esi
; SRC-NEXT: bsrq %r11, %rsi
-; SRC-NEXT: xorq $63, %rsi
-; SRC-NEXT: addq $64, %rsi
+; SRC-NEXT: xorl $63, %esi
+; SRC-NEXT: addl $64, %esi
; SRC-NEXT: testq %r10, %r10
-; SRC-NEXT: cmovneq %rcx, %rsi
-; SRC-NEXT: subq $-128, %rsi
+; SRC-NEXT: cmovnel %edx, %esi
+; SRC-NEXT: subl $-128, %esi
; SRC-NEXT: orq %r9, %rdi
-; SRC-NEXT: cmovneq %rdx, %rsi
+; SRC-NEXT: cmovneq %rcx, %rsi
; SRC-NEXT: xorps %xmm0, %xmm0
; SRC-NEXT: movaps %xmm0, 16(%rax)
; SRC-NEXT: movq %rsi, (%rax)
@@ -373,23 +373,23 @@ define i256 @test2(i256 %a) nounwind {
; LIN-NEXT: negq %r9
; LIN-NEXT: andq %rsi, %r9
; LIN-NEXT: bsrq %r9, %rdi
-; LIN-NEXT: xorq $63, %rdi
-; LIN-NEXT: addq $64, %rdi
+; LIN-NEXT: xorl $63, %edi
+; LIN-NEXT: addl $64, %edi
; LIN-NEXT: xorl %esi, %esi
; LIN-NEXT: movl $0, %r9d
; LIN-NEXT: sbbq %rdx, %r9
; LIN-NEXT: andq %rdx, %r9
; LIN-NEXT: bsrq %r9, %rdx
-; LIN-NEXT: xorq $63, %rdx
+; LIN-NEXT: xorl $63, %edx
; LIN-NEXT: testq %r9, %r9
-; LIN-NEXT: cmoveq %rdi, %rdx
-; LIN-NEXT: subq $-128, %rdx
+; LIN-NEXT: cmovel %edi, %edx
+; LIN-NEXT: subl $-128, %edx
; LIN-NEXT: movl $0, %edi
; LIN-NEXT: sbbq %rcx, %rdi
; LIN-NEXT: andq %rcx, %rdi
; LIN-NEXT: bsrq %rdi, %rcx
-; LIN-NEXT: xorq $63, %rcx
-; LIN-NEXT: orq $64, %rcx
+; LIN-NEXT: xorl $63, %ecx
+; LIN-NEXT: orl $64, %ecx
; LIN-NEXT: sbbq %r8, %rsi
; LIN-NEXT: andq %r8, %rsi
; LIN-NEXT: bsrq %rsi, %r8
@@ -413,42 +413,42 @@ define i256 @test3(i256 %n) nounwind {
; ILP-NEXT: movq %rdi, %rax
; ILP-NEXT: xorps %xmm0, %xmm0
; ILP-NEXT: movaps %xmm0, 16(%rdi)
-; ILP-NEXT: xorl %r9d, %r9d
-; ILP-NEXT: movq %rsi, %rdi
-; ILP-NEXT: negq %rdi
+; ILP-NEXT: xorl %edi, %edi
+; ILP-NEXT: movq %rsi, %r9
+; ILP-NEXT: negq %r9
; ILP-NEXT: movl $0, %r10d
; ILP-NEXT: sbbq %rdx, %r10
; ILP-NEXT: movl $0, %r11d
; ILP-NEXT: sbbq %rcx, %r11
-; ILP-NEXT: sbbq %r8, %r9
+; ILP-NEXT: sbbq %r8, %rdi
+; ILP-NEXT: notq %rcx
+; ILP-NEXT: andq %r11, %rcx
; ILP-NEXT: notq %r8
-; ILP-NEXT: andq %r9, %r8
-; ILP-NEXT: bsrq %r8, %r9
+; ILP-NEXT: andq %rdi, %r8
+; ILP-NEXT: bsrq %rcx, %rdi
+; ILP-NEXT: bsrq %r8, %r11
; ILP-NEXT: notq %rdx
; ILP-NEXT: andq %r10, %rdx
; ILP-NEXT: bsrq %rdx, %r10
-; ILP-NEXT: xorq $63, %r9
-; ILP-NEXT: notq %rcx
-; ILP-NEXT: andq %r11, %rcx
-; ILP-NEXT: bsrq %rcx, %r11
; ILP-NEXT: xorq $63, %r11
-; ILP-NEXT: orq $64, %r11
-; ILP-NEXT: testq %r8, %r8
-; ILP-NEXT: cmovneq %r9, %r11
-; ILP-NEXT: xorq $63, %r10
+; ILP-NEXT: xorl $63, %edi
; ILP-NEXT: notq %rsi
-; ILP-NEXT: andq %rdi, %rsi
-; ILP-NEXT: movl $127, %edi
-; ILP-NEXT: bsrq %rsi, %rdi
-; ILP-NEXT: xorq $63, %rdi
-; ILP-NEXT: addq $64, %rdi
-; ILP-NEXT: testq %rdx, %rdx
-; ILP-NEXT: cmovneq %r10, %rdi
-; ILP-NEXT: subq $-128, %rdi
-; ILP-NEXT: orq %r8, %rcx
-; ILP-NEXT: cmovneq %r11, %rdi
-; ILP-NEXT: movq %rdi, (%rax)
+; ILP-NEXT: orl $64, %edi
+; ILP-NEXT: testq %r8, %r8
; ILP-NEXT: movq $0, 8(%rax)
+; ILP-NEXT: cmovneq %r11, %rdi
+; ILP-NEXT: xorl $63, %r10d
+; ILP-NEXT: andq %r9, %rsi
+; ILP-NEXT: movl $127, %r9d
+; ILP-NEXT: bsrq %rsi, %r9
+; ILP-NEXT: xorl $63, %r9d
+; ILP-NEXT: addl $64, %r9d
+; ILP-NEXT: testq %rdx, %rdx
+; ILP-NEXT: cmovnel %r10d, %r9d
+; ILP-NEXT: subl $-128, %r9d
+; ILP-NEXT: orq %rcx, %r8
+; ILP-NEXT: cmovneq %rdi, %r9
+; ILP-NEXT: movq %r9, (%rax)
; ILP-NEXT: retq
;
; HYBRID-LABEL: test3:
@@ -472,23 +472,23 @@ define i256 @test3(i256 %n) nounwind {
; HYBRID-NEXT: notq %rcx
; HYBRID-NEXT: andq %r11, %rcx
; HYBRID-NEXT: bsrq %rcx, %r9
-; HYBRID-NEXT: xorq $63, %r9
-; HYBRID-NEXT: orq $64, %r9
+; HYBRID-NEXT: xorl $63, %r9d
+; HYBRID-NEXT: orl $64, %r9d
; HYBRID-NEXT: testq %r8, %r8
; HYBRID-NEXT: cmovneq %rbx, %r9
; HYBRID-NEXT: notq %rdx
; HYBRID-NEXT: andq %r10, %rdx
; HYBRID-NEXT: bsrq %rdx, %r10
-; HYBRID-NEXT: xorq $63, %r10
+; HYBRID-NEXT: xorl $63, %r10d
; HYBRID-NEXT: notq %rsi
; HYBRID-NEXT: andq %rdi, %rsi
; HYBRID-NEXT: movl $127, %edi
; HYBRID-NEXT: bsrq %rsi, %rdi
-; HYBRID-NEXT: xorq $63, %rdi
-; HYBRID-NEXT: addq $64, %rdi
+; HYBRID-NEXT: xorl $63, %edi
+; HYBRID-NEXT: addl $64, %edi
; HYBRID-NEXT: testq %rdx, %rdx
-; HYBRID-NEXT: cmovneq %r10, %rdi
-; HYBRID-NEXT: subq $-128, %rdi
+; HYBRID-NEXT: cmovnel %r10d, %edi
+; HYBRID-NEXT: subl $-128, %edi
; HYBRID-NEXT: orq %r8, %rcx
; HYBRID-NEXT: cmovneq %r9, %rdi
; HYBRID-NEXT: movq %rdi, (%rax)
@@ -517,23 +517,23 @@ define i256 @test3(i256 %n) nounwind {
; BURR-NEXT: notq %rcx
; BURR-NEXT: andq %r11, %rcx
; BURR-NEXT: bsrq %rcx, %r9
-; BURR-NEXT: xorq $63, %r9
-; BURR-NEXT: orq $64, %r9
+; BURR-NEXT: xorl $63, %r9d
+; BURR-NEXT: orl $64, %r9d
; BURR-NEXT: testq %r8, %r8
; BURR-NEXT: cmovneq %rbx, %r9
; BURR-NEXT: notq %rdx
; BURR-NEXT: andq %r10, %rdx
; BURR-NEXT: bsrq %rdx, %r10
-; BURR-NEXT: xorq $63, %r10
+; BURR-NEXT: xorl $63, %r10d
; BURR-NEXT: notq %rsi
; BURR-NEXT: andq %rdi, %rsi
; BURR-NEXT: movl $127, %edi
; BURR-NEXT: bsrq %rsi, %rdi
-; BURR-NEXT: xorq $63, %rdi
-; BURR-NEXT: addq $64, %rdi
+; BURR-NEXT: xorl $63, %edi
+; BURR-NEXT: addl $64, %edi
; BURR-NEXT: testq %rdx, %rdx
-; BURR-NEXT: cmovneq %r10, %rdi
-; BURR-NEXT: subq $-128, %rdi
+; BURR-NEXT: cmovnel %r10d, %edi
+; BURR-NEXT: subl $-128, %edi
; BURR-NEXT: orq %r8, %rcx
; BURR-NEXT: cmovneq %r9, %rdi
; BURR-NEXT: movq %rdi, (%rax)
@@ -560,24 +560,24 @@ define i256 @test3(i256 %n) nounwind {
; SRC-NEXT: andq %r11, %rcx
; SRC-NEXT: andq %r9, %r8
; SRC-NEXT: andq %rdi, %rsi
-; SRC-NEXT: bsrq %r8, %rdi
-; SRC-NEXT: xorq $63, %rdi
-; SRC-NEXT: bsrq %rcx, %r9
+; SRC-NEXT: bsrq %r8, %r9
; SRC-NEXT: xorq $63, %r9
-; SRC-NEXT: orq $64, %r9
+; SRC-NEXT: bsrq %rcx, %rdi
+; SRC-NEXT: xorl $63, %edi
+; SRC-NEXT: orl $64, %edi
; SRC-NEXT: testq %r8, %r8
-; SRC-NEXT: cmovneq %rdi, %r9
-; SRC-NEXT: bsrq %rdx, %rdi
-; SRC-NEXT: xorq $63, %rdi
+; SRC-NEXT: cmovneq %r9, %rdi
+; SRC-NEXT: bsrq %rdx, %r9
+; SRC-NEXT: xorl $63, %r9d
; SRC-NEXT: movl $127, %r10d
; SRC-NEXT: bsrq %rsi, %r10
-; SRC-NEXT: xorq $63, %r10
-; SRC-NEXT: addq $64, %r10
+; SRC-NEXT: xorl $63, %r10d
+; SRC-NEXT: addl $64, %r10d
; SRC-NEXT: testq %rdx, %rdx
-; SRC-NEXT: cmovneq %rdi, %r10
-; SRC-NEXT: subq $-128, %r10
+; SRC-NEXT: cmovnel %r9d, %r10d
+; SRC-NEXT: subl $-128, %r10d
; SRC-NEXT: orq %rcx, %r8
-; SRC-NEXT: cmovneq %r9, %r10
+; SRC-NEXT: cmovneq %rdi, %r10
; SRC-NEXT: xorps %xmm0, %xmm0
; SRC-NEXT: movaps %xmm0, 16(%rax)
; SRC-NEXT: movq %r10, (%rax)
@@ -595,25 +595,25 @@ define i256 @test3(i256 %n) nounwind {
; LIN-NEXT: notq %rsi
; LIN-NEXT: andq %rdi, %rsi
; LIN-NEXT: bsrq %rsi, %r9
-; LIN-NEXT: xorq $63, %r9
-; LIN-NEXT: addq $64, %r9
+; LIN-NEXT: xorl $63, %r9d
+; LIN-NEXT: addl $64, %r9d
; LIN-NEXT: xorl %edi, %edi
; LIN-NEXT: movl $0, %esi
; LIN-NEXT: sbbq %rdx, %rsi
; LIN-NEXT: notq %rdx
; LIN-NEXT: andq %rsi, %rdx
; LIN-NEXT: bsrq %rdx, %rsi
-; LIN-NEXT: xorq $63, %rsi
+; LIN-NEXT: xorl $63, %esi
; LIN-NEXT: testq %rdx, %rdx
-; LIN-NEXT: cmoveq %r9, %rsi
-; LIN-NEXT: subq $-128, %rsi
+; LIN-NEXT: cmovel %r9d, %esi
+; LIN-NEXT: subl $-128, %esi
; LIN-NEXT: movl $0, %edx
; LIN-NEXT: sbbq %rcx, %rdx
; LIN-NEXT: notq %rcx
; LIN-NEXT: andq %rdx, %rcx
; LIN-NEXT: bsrq %rcx, %rdx
-; LIN-NEXT: xorq $63, %rdx
-; LIN-NEXT: orq $64, %rdx
+; LIN-NEXT: xorl $63, %edx
+; LIN-NEXT: orl $64, %edx
; LIN-NEXT: sbbq %r8, %rdi
; LIN-NEXT: notq %r8
; LIN-NEXT: andq %rdi, %r8
@@ -738,22 +738,22 @@ define i256 @PR25498(i256 %a) nounwind {
; ILP-NEXT: je .LBB4_1
; ILP-NEXT: # %bb.2: # %cond.false
; ILP-NEXT: bsrq %r10, %rdx
-; ILP-NEXT: bsrq %rdi, %rcx
-; ILP-NEXT: xorq $63, %rcx
-; ILP-NEXT: bsrq %r9, %rsi
-; ILP-NEXT: xorq $63, %rsi
-; ILP-NEXT: orq $64, %rsi
-; ILP-NEXT: testq %rdi, %rdi
-; ILP-NEXT: cmovneq %rcx, %rsi
-; ILP-NEXT: xorq $63, %rdx
+; ILP-NEXT: bsrq %rdi, %rsi
+; ILP-NEXT: xorl $63, %edx
; ILP-NEXT: bsrq %r11, %rcx
-; ILP-NEXT: xorq $63, %rcx
-; ILP-NEXT: orq $64, %rcx
+; ILP-NEXT: xorl $63, %ecx
+; ILP-NEXT: orl $64, %ecx
; ILP-NEXT: testq %r10, %r10
-; ILP-NEXT: cmovneq %rdx, %rcx
-; ILP-NEXT: orq $128, %rcx
+; ILP-NEXT: cmovnel %edx, %ecx
+; ILP-NEXT: xorq $63, %rsi
+; ILP-NEXT: bsrq %r9, %rdx
+; ILP-NEXT: xorl $63, %edx
+; ILP-NEXT: orl $64, %edx
+; ILP-NEXT: testq %rdi, %rdi
+; ILP-NEXT: cmovneq %rsi, %rdx
+; ILP-NEXT: subl $-128, %ecx
; ILP-NEXT: orq %rdi, %r9
-; ILP-NEXT: cmovneq %rsi, %rcx
+; ILP-NEXT: cmovneq %rdx, %rcx
; ILP-NEXT: jmp .LBB4_3
; ILP-NEXT: .LBB4_1:
; ILP-NEXT: movl $256, %ecx # imm = 0x100
@@ -783,18 +783,18 @@ define i256 @PR25498(i256 %a) nounwind {
; HYBRID-NEXT: bsrq %rdi, %rcx
; HYBRID-NEXT: xorq $63, %rcx
; HYBRID-NEXT: bsrq %r9, %rdx
-; HYBRID-NEXT: xorq $63, %rdx
-; HYBRID-NEXT: orq $64, %rdx
+; HYBRID-NEXT: xorl $63, %edx
+; HYBRID-NEXT: orl $64, %edx
; HYBRID-NEXT: testq %rdi, %rdi
; HYBRID-NEXT: cmovneq %rcx, %rdx
; HYBRID-NEXT: bsrq %r10, %rsi
-; HYBRID-NEXT: xorq $63, %rsi
+; HYBRID-NEXT: xorl $63, %esi
; HYBRID-NEXT: bsrq %r11, %rcx
-; HYBRID-NEXT: xorq $63, %rcx
-; HYBRID-NEXT: orq $64, %rcx
+; HYBRID-NEXT: xorl $63, %ecx
+; HYBRID-NEXT: orl $64, %ecx
; HYBRID-NEXT: testq %r10, %r10
-; HYBRID-NEXT: cmovneq %rsi, %rcx
-; HYBRID-NEXT: orq $128, %rcx
+; HYBRID-NEXT: cmovnel %esi, %ecx
+; HYBRID-NEXT: subl $-128, %ecx
; HYBRID-NEXT: orq %rdi, %r9
; HYBRID-NEXT: cmovneq %rdx, %rcx
; HYBRID-NEXT: jmp .LBB4_3
@@ -826,18 +826,18 @@ define i256 @PR25498(i256 %a) nounwind {
; BURR-NEXT: bsrq %rdi, %rcx
; BURR-NEXT: xorq $63, %rcx
; BURR-NEXT: bsrq %r9, %rdx
-; BURR-NEXT: xorq $63, %rdx
-; BURR-NEXT: orq $64, %rdx
+; BURR-NEXT: xorl $63, %edx
+; BURR-NEXT: orl $64, %edx
; BURR-NEXT: testq %rdi, %rdi
; BURR-NEXT: cmovneq %rcx, %rdx
; BURR-NEXT: bsrq %r10, %rsi
-; BURR-NEXT: xorq $63, %rsi
+; BURR-NEXT: xorl $63, %esi
; BURR-NEXT: bsrq %r11, %rcx
-; BURR-NEXT: xorq $63, %rcx
-; BURR-NEXT: orq $64, %rcx
+; BURR-NEXT: xorl $63, %ecx
+; BURR-NEXT: orl $64, %ecx
; BURR-NEXT: testq %r10, %r10
-; BURR-NEXT: cmovneq %rsi, %rcx
-; BURR-NEXT: orq $128, %rcx
+; BURR-NEXT: cmovnel %esi, %ecx
+; BURR-NEXT: subl $-128, %ecx
; BURR-NEXT: orq %rdi, %r9
; BURR-NEXT: cmovneq %rdx, %rcx
; BURR-NEXT: jmp .LBB4_3
@@ -869,18 +869,18 @@ define i256 @PR25498(i256 %a) nounwind {
; SRC-NEXT: bsrq %rdi, %rcx
; SRC-NEXT: xorq $63, %rcx
; SRC-NEXT: bsrq %r9, %rdx
-; SRC-NEXT: xorq $63, %rdx
-; SRC-NEXT: orq $64, %rdx
+; SRC-NEXT: xorl $63, %edx
+; SRC-NEXT: orl $64, %edx
; SRC-NEXT: testq %rdi, %rdi
; SRC-NEXT: cmovneq %rcx, %rdx
; SRC-NEXT: bsrq %r10, %rsi
-; SRC-NEXT: xorq $63, %rsi
+; SRC-NEXT: xorl $63, %esi
; SRC-NEXT: bsrq %r11, %rcx
-; SRC-NEXT: xorq $63, %rcx
-; SRC-NEXT: orq $64, %rcx
+; SRC-NEXT: xorl $63, %ecx
+; SRC-NEXT: orl $64, %ecx
; SRC-NEXT: testq %r10, %r10
-; SRC-NEXT: cmovneq %rsi, %rcx
-; SRC-NEXT: orq $128, %rcx
+; SRC-NEXT: cmovnel %esi, %ecx
+; SRC-NEXT: subl $-128, %ecx
; SRC-NEXT: orq %rdi, %r9
; SRC-NEXT: cmovneq %rdx, %rcx
; SRC-NEXT: jmp .LBB4_3
@@ -910,16 +910,16 @@ define i256 @PR25498(i256 %a) nounwind {
; LIN-NEXT: je .LBB4_1
; LIN-NEXT: # %bb.2: # %cond.false
; LIN-NEXT: bsrq %r11, %rcx
-; LIN-NEXT: xorq $63, %rcx
-; LIN-NEXT: orq $64, %rcx
+; LIN-NEXT: xorl $63, %ecx
+; LIN-NEXT: orl $64, %ecx
; LIN-NEXT: bsrq %r10, %rdx
-; LIN-NEXT: xorq $63, %rdx
+; LIN-NEXT: xorl $63, %edx
; LIN-NEXT: testq %r10, %r10
-; LIN-NEXT: cmoveq %rcx, %rdx
-; LIN-NEXT: orq $128, %rdx
+; LIN-NEXT: cmovel %ecx, %edx
+; LIN-NEXT: subl $-128, %edx
; LIN-NEXT: bsrq %r9, %rsi
-; LIN-NEXT: xorq $63, %rsi
-; LIN-NEXT: orq $64, %rsi
+; LIN-NEXT: xorl $63, %esi
+; LIN-NEXT: orl $64, %esi
; LIN-NEXT: bsrq %rdi, %rcx
; LIN-NEXT: xorq $63, %rcx
; LIN-NEXT: testq %rdi, %rdi
diff --git a/llvm/test/CodeGen/X86/vector-compress.ll b/llvm/test/CodeGen/X86/vector-compress.ll
index 01bdf0a098e7a..15c27e5d02783 100644
--- a/llvm/test/CodeGen/X86/vector-compress.ll
+++ b/llvm/test/CodeGen/X86/vector-compress.ll
@@ -10,32 +10,30 @@ define <4 x i32> @test_compress_v4i32(<4 x i32> %vec, <4 x i1> %mask, <4 x i32>
; AVX2-NEXT: vpsrad $31, %xmm1, %xmm1
; AVX2-NEXT: vmovaps %xmm2, -{{[0-9]+}}(%rsp)
; AVX2-NEXT: vpextrd $1, %xmm1, %eax
-; AVX2-NEXT: vmovd %xmm1, %esi
-; AVX2-NEXT: andl $1, %esi
+; AVX2-NEXT: vmovd %xmm1, %ecx
+; AVX2-NEXT: andl $1, %ecx
+; AVX2-NEXT: movl %ecx, %edx
+; AVX2-NEXT: subl %eax, %edx
+; AVX2-NEXT: vpextrd $2, %xmm1, %eax
+; AVX2-NEXT: movl %edx, %esi
+; AVX2-NEXT: subl %eax, %esi
+; AVX2-NEXT: vpextrd $3, %xmm1, %eax
; AVX2-NEXT: movl %esi, %edi
; AVX2-NEXT: subl %eax, %edi
-; AVX2-NEXT: vpextrd $2, %xmm1, %edx
-; AVX2-NEXT: subl %edx, %edi
-; AVX2-NEXT: vpextrd $3, %xmm1, %ecx
-; AVX2-NEXT: subl %ecx, %edi
-; AVX2-NEXT: andl $3, %edi
-; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rsi, %rax
-; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rax, %rdx
-; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rdx, %rcx
+; AVX2-NEXT: movl %edi, %eax
+; AVX2-NEXT: andl $3, %eax
; AVX2-NEXT: vextractps $3, %xmm0, %r8d
-; AVX2-NEXT: cmpq $4, %rcx
-; AVX2-NEXT: cmovbl -24(%rsp,%rdi,4), %r8d
+; AVX2-NEXT: cmpq $4, %rdi
+; AVX2-NEXT: cmovbl -24(%rsp,%rax,4), %r8d
; AVX2-NEXT: vmovss %xmm0, -{{[0-9]+}}(%rsp)
-; AVX2-NEXT: vextractps $1, %xmm0, -24(%rsp,%rsi,4)
-; AVX2-NEXT: vextractps $2, %xmm0, -24(%rsp,%rax,4)
-; AVX2-NEXT: andl $3, %edx
-; AVX2-NEXT: vextractps $3, %xmm0, -24(%rsp,%rdx,4)
-; AVX2-NEXT: cmpq $3, %rcx
+; AVX2-NEXT: vextractps $1, %xmm0, -24(%rsp,%rcx,4)
+; AVX2-NEXT: shll $2, %edx
+; AVX2-NEXT: vextractps $2, %xmm0, -24(%rsp,%rdx)
+; AVX2-NEXT: andl $3, %esi
+; AVX2-NEXT: vextractps $3, %xmm0, -24(%rsp,%rsi,4)
+; AVX2-NEXT: cmpq $3, %rdi
; AVX2-NEXT: movl $3, %eax
-; AVX2-NEXT: cmovbq %rcx, %rax
+; AVX2-NEXT: cmovbq %rdi, %rax
; AVX2-NEXT: movl %r8d, -24(%rsp,%rax,4)
; AVX2-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0
; AVX2-NEXT: retq
@@ -70,38 +68,35 @@ define <4 x float> @test_compress_v4f32(<4 x float> %vec, <4 x i1> %mask, <4 x f
; AVX2-NEXT: vpslld $31, %xmm1, %xmm1
; AVX2-NEXT: vpsrad $31, %xmm1, %xmm1
; AVX2-NEXT: vmovaps %xmm2, -{{[0-9]+}}(%rsp)
-; AVX2-NEXT: vpextrd $1, %xmm1, %edx
-; AVX2-NEXT: vmovd %xmm1, %esi
-; AVX2-NEXT: andl $1, %esi
-; AVX2-NEXT: movl %esi, %edi
-; AVX2-NEXT: subl %edx, %edi
-; AVX2-NEXT: vpextrd $2, %xmm1, %ecx
-; AVX2-NEXT: subl %ecx, %edi
+; AVX2-NEXT: vpextrd $1, %xmm1, %eax
+; AVX2-NEXT: vmovd %xmm1, %ecx
+; AVX2-NEXT: andl $1, %ecx
+; AVX2-NEXT: movl %ecx, %edx
+; AVX2-NEXT: subl %eax, %edx
+; AVX2-NEXT: vpextrd $2, %xmm1, %eax
+; AVX2-NEXT: movl %edx, %esi
+; AVX2-NEXT: subl %eax, %esi
; AVX2-NEXT: vpextrd $3, %xmm1, %eax
+; AVX2-NEXT: movl %esi, %edi
; AVX2-NEXT: subl %eax, %edi
-; AVX2-NEXT: andl $3, %edi
+; AVX2-NEXT: movl %edi, %eax
+; AVX2-NEXT: andl $3, %eax
; AVX2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
; AVX2-NEXT: vmovss %xmm0, -{{[0-9]+}}(%rsp)
-; AVX2-NEXT: vextractps $1, %xmm0, -24(%rsp,%rsi,4)
-; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rsi, %rdx
-; AVX2-NEXT: vextractps $2, %xmm0, -24(%rsp,%rdx,4)
-; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rdx, %rcx
-; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
-; AVX2-NEXT: # kill: def $ecx killed $ecx killed $rcx def $rcx
-; AVX2-NEXT: andl $3, %ecx
+; AVX2-NEXT: vextractps $1, %xmm0, -24(%rsp,%rcx,4)
+; AVX2-NEXT: shll $2, %edx
+; AVX2-NEXT: vextractps $2, %xmm0, -24(%rsp,%rdx)
+; AVX2-NEXT: andl $3, %esi
; AVX2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
-; AVX2-NEXT: vmovss %xmm0, -24(%rsp,%rcx,4)
-; AVX2-NEXT: cmpq $3, %rax
-; AVX2-NEXT: movl $3, %ecx
-; AVX2-NEXT: cmovbq %rax, %rcx
+; AVX2-NEXT: vmovss %xmm0, -24(%rsp,%rsi,4)
+; AVX2-NEXT: cmpq $3, %rdi
+; AVX2-NEXT: movl $3, %eax
+; AVX2-NEXT: cmovbq %rdi, %rax
; AVX2-NEXT: ja .LBB1_2
; AVX2-NEXT: # %bb.1:
; AVX2-NEXT: vmovaps %xmm1, %xmm0
; AVX2-NEXT: .LBB1_2:
-; AVX2-NEXT: vmovss %xmm0, -24(%rsp,%rcx,4)
+; AVX2-NEXT: vmovss %xmm0, -24(%rsp,%rax,4)
; AVX2-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0
; AVX2-NEXT: retq
;
@@ -265,19 +260,19 @@ define <8 x i32> @test_compress_v8i32(<8 x i32> %vec, <8 x i1> %mask, <8 x i32>
; AVX2-NEXT: andl $1, %ecx
; AVX2-NEXT: vmovd %xmm3, %edx
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rdx, %rcx
+; AVX2-NEXT: addl %edx, %ecx
; AVX2-NEXT: vpextrd $2, %xmm3, %esi
; AVX2-NEXT: andl $1, %esi
-; AVX2-NEXT: addq %rcx, %rsi
+; AVX2-NEXT: addl %ecx, %esi
; AVX2-NEXT: vpextrd $3, %xmm3, %edi
; AVX2-NEXT: andl $1, %edi
-; AVX2-NEXT: addq %rsi, %rdi
+; AVX2-NEXT: addl %esi, %edi
; AVX2-NEXT: vmovd %xmm1, %r8d
; AVX2-NEXT: andl $1, %r8d
-; AVX2-NEXT: addq %rdi, %r8
+; AVX2-NEXT: addl %edi, %r8d
; AVX2-NEXT: vpextrd $1, %xmm1, %r9d
; AVX2-NEXT: andl $1, %r9d
-; AVX2-NEXT: addq %r8, %r9
+; AVX2-NEXT: addl %r8d, %r9d
; AVX2-NEXT: vpextrd $2, %xmm1, %r10d
; AVX2-NEXT: andl $1, %r10d
; AVX2-NEXT: addq %r9, %r10
@@ -366,26 +361,26 @@ define <8 x float> @test_compress_v8f32(<8 x float> %vec, <8 x i1> %mask, <8 x f
; AVX2-NEXT: vextractps $1, %xmm0, (%rsp,%rax,4)
; AVX2-NEXT: vpextrd $1, %xmm3, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: vextractps $2, %xmm0, (%rsp,%rcx,4)
; AVX2-NEXT: vpextrd $2, %xmm3, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: vextractps $3, %xmm0, (%rsp,%rax,4)
; AVX2-NEXT: vpextrd $3, %xmm3, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: vmovd %xmm1, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
-; AVX2-NEXT: # kill: def $ecx killed $ecx killed $rcx def $rcx
+; AVX2-NEXT: addl %ecx, %eax
+; AVX2-NEXT: # kill: def $ecx killed $ecx def $rcx
; AVX2-NEXT: andl $7, %ecx
; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX2-NEXT: vmovss %xmm0, (%rsp,%rcx,4)
; AVX2-NEXT: vpextrd $1, %xmm1, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
-; AVX2-NEXT: # kill: def $eax killed $eax killed $rax def $rax
+; AVX2-NEXT: addl %eax, %ecx
+; AVX2-NEXT: # kill: def $eax killed $eax def $rax
; AVX2-NEXT: andl $7, %eax
; AVX2-NEXT: vextractps $1, %xmm0, (%rsp,%rax,4)
; AVX2-NEXT: vpextrd $2, %xmm1, %edx
@@ -610,35 +605,34 @@ define <16 x i32> @test_compress_v16i32(<16 x i32> %vec, <16 x i1> %mask, <16 x
; AVX2-NEXT: vmovd %xmm3, %ecx
; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: vpextrd $2, %xmm3, %eax
-; AVX2-NEXT: vpextrd $3, %xmm3, %edx
-; AVX2-NEXT: addl %eax, %edx
-; AVX2-NEXT: addl %ecx, %edx
-; AVX2-NEXT: andl $15, %edx
-; AVX2-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
+; AVX2-NEXT: vpextrd $3, %xmm3, %esi
+; AVX2-NEXT: addl %eax, %esi
+; AVX2-NEXT: addl %ecx, %esi
+; AVX2-NEXT: andl $15, %esi
; AVX2-NEXT: vpextrb $1, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
; AVX2-NEXT: vmovd %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
; AVX2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrb $2, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrb $3, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrb $4, %xmm2, %r8d
; AVX2-NEXT: andl $1, %r8d
-; AVX2-NEXT: addq %rax, %r8
+; AVX2-NEXT: addl %eax, %r8d
; AVX2-NEXT: vpextrb $5, %xmm2, %r9d
; AVX2-NEXT: andl $1, %r9d
-; AVX2-NEXT: addq %r8, %r9
+; AVX2-NEXT: addl %r8d, %r9d
; AVX2-NEXT: vpextrb $6, %xmm2, %r10d
; AVX2-NEXT: andl $1, %r10d
-; AVX2-NEXT: addq %r9, %r10
+; AVX2-NEXT: addl %r9d, %r10d
; AVX2-NEXT: vpextrb $7, %xmm2, %r11d
; AVX2-NEXT: andl $1, %r11d
; AVX2-NEXT: addq %r10, %r11
@@ -668,10 +662,8 @@ define <16 x i32> @test_compress_v16i32(<16 x i32> %vec, <16 x i1> %mask, <16 x
; AVX2-NEXT: addq %rax, %rdx
; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm2
; AVX2-NEXT: cmpq $16, %rdx
-; AVX2-NEXT: vextractps $3, %xmm2, %esi
-; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rdi # 8-byte Reload
-; AVX2-NEXT: cmovbl (%rsp,%rdi,4), %esi
-; AVX2-NEXT: movl %esi, %edi
+; AVX2-NEXT: vextractps $3, %xmm2, %edi
+; AVX2-NEXT: cmovbl (%rsp,%rsi,4), %edi
; AVX2-NEXT: vmovss %xmm0, (%rsp)
; AVX2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload
; AVX2-NEXT: vextractps $1, %xmm0, (%rsp,%rsi,4)
@@ -771,30 +763,30 @@ define <16 x float> @test_compress_v16f32(<16 x float> %vec, <16 x i1> %mask, <1
; AVX2-NEXT: vextractps $1, %xmm0, (%rsp,%rax,4)
; AVX2-NEXT: vpextrb $1, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: vextractps $2, %xmm0, (%rsp,%rcx,4)
; AVX2-NEXT: vpextrb $2, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: vextractps $3, %xmm0, (%rsp,%rax,4)
; AVX2-NEXT: vpextrb $3, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX2-NEXT: vmovss %xmm0, (%rsp,%rcx,4)
; AVX2-NEXT: vpextrb $4, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: vpextrb $5, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
-; AVX2-NEXT: # kill: def $eax killed $eax killed $rax def $rax
+; AVX2-NEXT: addl %eax, %ecx
+; AVX2-NEXT: # kill: def $eax killed $eax def $rax
; AVX2-NEXT: andl $15, %eax
; AVX2-NEXT: vextractps $1, %xmm0, (%rsp,%rax,4)
; AVX2-NEXT: vpextrb $6, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
-; AVX2-NEXT: # kill: def $ecx killed $ecx killed $rcx def $rcx
+; AVX2-NEXT: addl %ecx, %eax
+; AVX2-NEXT: # kill: def $ecx killed $ecx def $rcx
; AVX2-NEXT: andl $15, %ecx
; AVX2-NEXT: vextractps $2, %xmm0, (%rsp,%rcx,4)
; AVX2-NEXT: vpextrb $7, %xmm2, %ecx
@@ -914,22 +906,22 @@ define <8 x i64> @test_compress_v8i64(<8 x i64> %vec, <8 x i1> %mask, <8 x i64>
; AVX2-NEXT: andl $1, %ecx
; AVX2-NEXT: vmovd %xmm2, %edx
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rdx, %rcx
+; AVX2-NEXT: addl %edx, %ecx
; AVX2-NEXT: vpextrw $2, %xmm2, %esi
; AVX2-NEXT: andl $1, %esi
-; AVX2-NEXT: addq %rcx, %rsi
+; AVX2-NEXT: addl %ecx, %esi
; AVX2-NEXT: vpextrw $3, %xmm2, %edi
; AVX2-NEXT: andl $1, %edi
-; AVX2-NEXT: addq %rsi, %rdi
+; AVX2-NEXT: addl %esi, %edi
; AVX2-NEXT: vpextrw $4, %xmm2, %r8d
; AVX2-NEXT: andl $1, %r8d
-; AVX2-NEXT: addq %rdi, %r8
+; AVX2-NEXT: addl %edi, %r8d
; AVX2-NEXT: vpextrw $5, %xmm2, %r9d
; AVX2-NEXT: andl $1, %r9d
-; AVX2-NEXT: addq %r8, %r9
+; AVX2-NEXT: addl %r8d, %r9d
; AVX2-NEXT: vpextrw $6, %xmm2, %r10d
; AVX2-NEXT: andl $1, %r10d
-; AVX2-NEXT: addq %r9, %r10
+; AVX2-NEXT: addl %r9d, %r10d
; AVX2-NEXT: vpextrw $7, %xmm2, %r11d
; AVX2-NEXT: andl $1, %r11d
; AVX2-NEXT: addq %r10, %r11
@@ -1009,35 +1001,35 @@ define <8 x double> @test_compress_v8f64(<8 x double> %vec, <8 x i1> %mask, <8 x
; AVX2-NEXT: vmovhps %xmm0, (%rsp,%rax,8)
; AVX2-NEXT: vpextrw $1, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0
; AVX2-NEXT: vmovlps %xmm0, (%rsp,%rcx,8)
; AVX2-NEXT: vpextrw $2, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: vmovhps %xmm0, (%rsp,%rax,8)
; AVX2-NEXT: vpextrw $3, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: vpextrw $4, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
-; AVX2-NEXT: # kill: def $ecx killed $ecx killed $rcx def $rcx
+; AVX2-NEXT: addl %ecx, %eax
+; AVX2-NEXT: # kill: def $ecx killed $ecx def $rcx
; AVX2-NEXT: andl $7, %ecx
; AVX2-NEXT: vmovlpd %xmm1, (%rsp,%rcx,8)
; AVX2-NEXT: vpextrw $5, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
-; AVX2-NEXT: # kill: def $eax killed $eax killed $rax def $rax
+; AVX2-NEXT: addl %eax, %ecx
+; AVX2-NEXT: # kill: def $eax killed $eax def $rax
; AVX2-NEXT: andl $7, %eax
; AVX2-NEXT: vmovhpd %xmm1, (%rsp,%rax,8)
; AVX2-NEXT: vpextrw $6, %xmm2, %edx
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rcx, %rdx
-; AVX2-NEXT: # kill: def $ecx killed $ecx killed $rcx def $rcx
-; AVX2-NEXT: andl $7, %ecx
+; AVX2-NEXT: addl %ecx, %edx
+; AVX2-NEXT: movl %ecx, %eax
+; AVX2-NEXT: andl $7, %eax
; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0
-; AVX2-NEXT: vmovlpd %xmm0, (%rsp,%rcx,8)
+; AVX2-NEXT: vmovlpd %xmm0, (%rsp,%rax,8)
; AVX2-NEXT: vpextrw $7, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
; AVX2-NEXT: addq %rdx, %rax
@@ -1093,19 +1085,19 @@ define <16 x i8> @test_compress_v16i8(<16 x i8> %vec, <16 x i1> %mask, <16 x i8>
; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3
; AVX2-NEXT: vpcmpgtb %xmm1, %xmm3, %xmm1
; AVX2-NEXT: vmovaps %xmm2, -{{[0-9]+}}(%rsp)
-; AVX2-NEXT: vpextrb $1, %xmm1, %r13d
+; AVX2-NEXT: vpextrb $1, %xmm1, %r12d
; AVX2-NEXT: vmovd %xmm1, %esi
; AVX2-NEXT: movl %esi, %eax
; AVX2-NEXT: andb $1, %al
-; AVX2-NEXT: subb %r13b, %al
+; AVX2-NEXT: subb %r12b, %al
; AVX2-NEXT: vpextrb $2, %xmm1, %edx
; AVX2-NEXT: subb %dl, %al
-; AVX2-NEXT: vpextrb $3, %xmm1, %ebp
-; AVX2-NEXT: subb %bpl, %al
-; AVX2-NEXT: vpextrb $4, %xmm1, %r12d
-; AVX2-NEXT: subb %r12b, %al
-; AVX2-NEXT: vpextrb $5, %xmm1, %r15d
+; AVX2-NEXT: vpextrb $3, %xmm1, %r13d
+; AVX2-NEXT: subb %r13b, %al
+; AVX2-NEXT: vpextrb $4, %xmm1, %r15d
; AVX2-NEXT: subb %r15b, %al
+; AVX2-NEXT: vpextrb $5, %xmm1, %ebp
+; AVX2-NEXT: subb %bpl, %al
; AVX2-NEXT: vpextrb $6, %xmm1, %r14d
; AVX2-NEXT: subb %r14b, %al
; AVX2-NEXT: vpextrb $7, %xmm1, %ebx
@@ -1135,27 +1127,27 @@ define <16 x i8> @test_compress_v16i8(<16 x i8> %vec, <16 x i1> %mask, <16 x i8>
; AVX2-NEXT: vpextrb $0, %xmm0, -{{[0-9]+}}(%rsp)
; AVX2-NEXT: andl $1, %esi
; AVX2-NEXT: vpextrb $1, %xmm0, -40(%rsp,%rsi)
-; AVX2-NEXT: andl $1, %r13d
-; AVX2-NEXT: addq %rsi, %r13
-; AVX2-NEXT: vpextrb $2, %xmm0, -40(%rsp,%r13)
+; AVX2-NEXT: andl $1, %r12d
+; AVX2-NEXT: addl %esi, %r12d
+; AVX2-NEXT: vpextrb $2, %xmm0, -40(%rsp,%r12)
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %r13, %rdx
+; AVX2-NEXT: addl %r12d, %edx
; AVX2-NEXT: vpextrb $3, %xmm0, -40(%rsp,%rdx)
-; AVX2-NEXT: andl $1, %ebp
-; AVX2-NEXT: addq %rdx, %rbp
-; AVX2-NEXT: vpextrb $4, %xmm0, -40(%rsp,%rbp)
-; AVX2-NEXT: andl $1, %r12d
-; AVX2-NEXT: addq %rbp, %r12
+; AVX2-NEXT: andl $1, %r13d
+; AVX2-NEXT: addl %edx, %r13d
+; AVX2-NEXT: vpextrb $4, %xmm0, -40(%rsp,%r13)
; AVX2-NEXT: andl $1, %r15d
-; AVX2-NEXT: addq %r12, %r15
-; AVX2-NEXT: # kill: def $r12d killed $r12d killed $r12 def $r12
-; AVX2-NEXT: andl $15, %r12d
-; AVX2-NEXT: vpextrb $5, %xmm0, -40(%rsp,%r12)
+; AVX2-NEXT: addl %r13d, %r15d
+; AVX2-NEXT: andl $1, %ebp
+; AVX2-NEXT: addl %r15d, %ebp
+; AVX2-NEXT: movl %r15d, %eax
+; AVX2-NEXT: andl $15, %eax
+; AVX2-NEXT: vpextrb $5, %xmm0, -40(%rsp,%rax)
; AVX2-NEXT: andl $1, %r14d
-; AVX2-NEXT: addq %r15, %r14
-; AVX2-NEXT: # kill: def $r15d killed $r15d killed $r15 def $r15
-; AVX2-NEXT: andl $15, %r15d
-; AVX2-NEXT: vpextrb $6, %xmm0, -40(%rsp,%r15)
+; AVX2-NEXT: addl %ebp, %r14d
+; AVX2-NEXT: movl %ebp, %eax
+; AVX2-NEXT: andl $15, %eax
+; AVX2-NEXT: vpextrb $6, %xmm0, -40(%rsp,%rax)
; AVX2-NEXT: andl $1, %ebx
; AVX2-NEXT: addq %r14, %rbx
; AVX2-NEXT: # kill: def $r14d killed $r14d killed $r14 def $r14
@@ -1252,53 +1244,47 @@ define <8 x i16> @test_compress_v8i16(<8 x i16> %vec, <8 x i1> %mask, <8 x i16>
; AVX2-NEXT: andl $1, %eax
; AVX2-NEXT: vmovd %xmm1, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: leal (%rcx,%rax), %esi
-; AVX2-NEXT: vpextrw $2, %xmm1, %edi
-; AVX2-NEXT: andl $1, %edi
-; AVX2-NEXT: vpextrw $3, %xmm1, %edx
+; AVX2-NEXT: addl %ecx, %eax
+; AVX2-NEXT: vpextrw $2, %xmm1, %edx
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: leal (%rdi,%rdx), %r10d
-; AVX2-NEXT: addl %esi, %r10d
-; AVX2-NEXT: vpextrw $4, %xmm1, %r9d
-; AVX2-NEXT: andl $1, %r9d
-; AVX2-NEXT: vpextrw $5, %xmm1, %esi
+; AVX2-NEXT: addl %eax, %edx
+; AVX2-NEXT: vpextrw $3, %xmm1, %esi
; AVX2-NEXT: andl $1, %esi
-; AVX2-NEXT: leal (%r9,%rsi), %r11d
-; AVX2-NEXT: vpextrw $6, %xmm1, %r8d
+; AVX2-NEXT: addl %edx, %esi
+; AVX2-NEXT: vpextrw $4, %xmm1, %edi
+; AVX2-NEXT: andl $1, %edi
+; AVX2-NEXT: addl %esi, %edi
+; AVX2-NEXT: vpextrw $5, %xmm1, %r8d
; AVX2-NEXT: andl $1, %r8d
-; AVX2-NEXT: addl %r8d, %r11d
-; AVX2-NEXT: addl %r10d, %r11d
+; AVX2-NEXT: addl %edi, %r8d
+; AVX2-NEXT: vpextrw $6, %xmm1, %r9d
+; AVX2-NEXT: andl $1, %r9d
+; AVX2-NEXT: addl %r8d, %r9d
; AVX2-NEXT: vpextrw $7, %xmm1, %r10d
; AVX2-NEXT: andl $1, %r10d
-; AVX2-NEXT: addl %r10d, %r11d
-; AVX2-NEXT: andl $7, %r11d
-; AVX2-NEXT: addq %rcx, %rax
-; AVX2-NEXT: addq %rax, %rdi
-; AVX2-NEXT: addq %rdi, %rdx
-; AVX2-NEXT: addq %rdx, %r9
-; AVX2-NEXT: addq %r9, %rsi
-; AVX2-NEXT: addq %rsi, %r8
-; AVX2-NEXT: addq %r8, %r10
-; AVX2-NEXT: vpextrw $7, %xmm0, %ebx
+; AVX2-NEXT: leal (%r9,%r10), %ebx
+; AVX2-NEXT: andl $7, %ebx
+; AVX2-NEXT: addq %r9, %r10
+; AVX2-NEXT: vpextrw $7, %xmm0, %r11d
; AVX2-NEXT: cmpq $8, %r10
-; AVX2-NEXT: cmovbw -16(%rsp,%r11,2), %bx
+; AVX2-NEXT: cmovbw -16(%rsp,%rbx,2), %r11w
; AVX2-NEXT: vpextrw $0, %xmm0, -{{[0-9]+}}(%rsp)
; AVX2-NEXT: vpextrw $1, %xmm0, -16(%rsp,%rcx,2)
; AVX2-NEXT: vpextrw $2, %xmm0, -16(%rsp,%rax,2)
-; AVX2-NEXT: vpextrw $3, %xmm0, -16(%rsp,%rdi,2)
-; AVX2-NEXT: andl $7, %edx
-; AVX2-NEXT: vpextrw $4, %xmm0, -16(%rsp,%rdx,2)
-; AVX2-NEXT: andl $7, %r9d
-; AVX2-NEXT: vpextrw $5, %xmm0, -16(%rsp,%r9,2)
+; AVX2-NEXT: vpextrw $3, %xmm0, -16(%rsp,%rdx,2)
; AVX2-NEXT: andl $7, %esi
-; AVX2-NEXT: vpextrw $6, %xmm0, -16(%rsp,%rsi,2)
+; AVX2-NEXT: vpextrw $4, %xmm0, -16(%rsp,%rsi,2)
+; AVX2-NEXT: andl $7, %edi
+; AVX2-NEXT: vpextrw $5, %xmm0, -16(%rsp,%rdi,2)
; AVX2-NEXT: andl $7, %r8d
-; AVX2-NEXT: vpextrw $7, %xmm0, -16(%rsp,%r8,2)
+; AVX2-NEXT: vpextrw $6, %xmm0, -16(%rsp,%r8,2)
+; AVX2-NEXT: andl $7, %r9d
+; AVX2-NEXT: vpextrw $7, %xmm0, -16(%rsp,%r9,2)
; AVX2-NEXT: cmpq $7, %r10
; AVX2-NEXT: movl $7, %eax
; AVX2-NEXT: cmovbq %r10, %rax
; AVX2-NEXT: movl %eax, %eax
-; AVX2-NEXT: movw %bx, -16(%rsp,%rax,2)
+; AVX2-NEXT: movw %r11w, -16(%rsp,%rax,2)
; AVX2-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0
; AVX2-NEXT: popq %rbx
; AVX2-NEXT: retq
@@ -1382,27 +1368,27 @@ define <32 x i8> @test_compress_v32i8(<32 x i8> %vec, <32 x i1> %mask, <32 x i8>
; AVX2-NEXT: vpextrb $1, %xmm0, (%rsp,%rcx)
; AVX2-NEXT: vpextrb $1, %xmm3, %edx
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rcx, %rdx
+; AVX2-NEXT: addl %ecx, %edx
; AVX2-NEXT: vpextrb $2, %xmm0, (%rsp,%rdx)
; AVX2-NEXT: vpextrb $2, %xmm3, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rdx, %rcx
+; AVX2-NEXT: addl %edx, %ecx
; AVX2-NEXT: vpextrb $3, %xmm0, (%rsp,%rcx)
; AVX2-NEXT: vpextrb $3, %xmm3, %edx
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rcx, %rdx
+; AVX2-NEXT: addl %ecx, %edx
; AVX2-NEXT: vpextrb $4, %xmm0, (%rsp,%rdx)
; AVX2-NEXT: vpextrb $4, %xmm3, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rdx, %rcx
+; AVX2-NEXT: addl %edx, %ecx
; AVX2-NEXT: vpextrb $5, %xmm0, (%rsp,%rcx)
; AVX2-NEXT: vpextrb $5, %xmm3, %edx
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rcx, %rdx
+; AVX2-NEXT: addl %ecx, %edx
; AVX2-NEXT: vpextrb $6, %xmm3, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rdx, %rcx
-; AVX2-NEXT: # kill: def $edx killed $edx killed $rdx def $rdx
+; AVX2-NEXT: addl %edx, %ecx
+; AVX2-NEXT: # kill: def $edx killed $edx def $rdx
; AVX2-NEXT: andl $31, %edx
; AVX2-NEXT: vpextrb $6, %xmm0, (%rsp,%rdx)
; AVX2-NEXT: vpextrb $7, %xmm3, %edx
@@ -1659,25 +1645,25 @@ define <16 x i16> @test_compress_v16i16(<16 x i16> %vec, <16 x i1> %mask, <16 x
; AVX2-NEXT: vmovd %xmm1, %ecx
; AVX2-NEXT: andl $1, %ecx
; AVX2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrw $2, %xmm1, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrw $3, %xmm1, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrw $4, %xmm1, %r8d
; AVX2-NEXT: andl $1, %r8d
-; AVX2-NEXT: addq %rax, %r8
+; AVX2-NEXT: addl %eax, %r8d
; AVX2-NEXT: vpextrw $5, %xmm1, %r9d
; AVX2-NEXT: andl $1, %r9d
-; AVX2-NEXT: addq %r8, %r9
+; AVX2-NEXT: addl %r8d, %r9d
; AVX2-NEXT: vpextrw $6, %xmm1, %r10d
; AVX2-NEXT: andl $1, %r10d
-; AVX2-NEXT: addq %r9, %r10
+; AVX2-NEXT: addl %r9d, %r10d
; AVX2-NEXT: vpextrw $7, %xmm1, %r11d
; AVX2-NEXT: andl $1, %r11d
; AVX2-NEXT: addq %r10, %r11
@@ -1969,20 +1955,19 @@ define <64 x i8> @test_compress_v64i8(<64 x i8> %vec, <64 x i1> %mask, <64 x i8>
; AVX2-NEXT: andl $1, %edi
; AVX2-NEXT: vpextrb $1, %xmm0, (%rsp,%rdi)
; AVX2-NEXT: andl $1, %esi
-; AVX2-NEXT: addq %rdi, %rsi
+; AVX2-NEXT: addl %edi, %esi
; AVX2-NEXT: vpextrb $2, %xmm0, (%rsp,%rsi)
; AVX2-NEXT: andl $1, %r8d
-; AVX2-NEXT: addq %rsi, %r8
+; AVX2-NEXT: addl %esi, %r8d
; AVX2-NEXT: vpextrb $3, %xmm0, (%rsp,%r8)
; AVX2-NEXT: andl $1, %r9d
-; AVX2-NEXT: addq %r8, %r9
+; AVX2-NEXT: addl %r8d, %r9d
; AVX2-NEXT: vpextrb $4, %xmm0, (%rsp,%r9)
; AVX2-NEXT: andl $1, %r10d
-; AVX2-NEXT: addq %r9, %r10
-; AVX2-NEXT: movl %r10d, %eax
-; AVX2-NEXT: vpextrb $5, %xmm0, (%rsp,%rax)
+; AVX2-NEXT: addl %r9d, %r10d
+; AVX2-NEXT: vpextrb $5, %xmm0, (%rsp,%r10)
; AVX2-NEXT: andl $1, %r11d
-; AVX2-NEXT: addq %r10, %r11
+; AVX2-NEXT: addl %r10d, %r11d
; AVX2-NEXT: movzbl %bl, %eax
; AVX2-NEXT: andl $1, %eax
; AVX2-NEXT: addq %r11, %rax
@@ -2972,27 +2957,27 @@ define <32 x i16> @test_compress_v32i16(<32 x i16> %vec, <32 x i1> %mask, <32 x
; AVX2-NEXT: vmovd %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
; AVX2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrb $2, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrb $3, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrb $4, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrb $5, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrb $6, %xmm2, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
; AVX2-NEXT: vpextrb $7, %xmm2, %eax
; AVX2-NEXT: andl $1, %eax
@@ -4317,22 +4302,22 @@ define <8 x i64> @test_compress_knownbits_zext_v8i16_8i64(<8 x i16> %vec, <8 x
; AVX2-NEXT: andl $1, %ecx
; AVX2-NEXT: vmovd %xmm1, %edx
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rdx, %rcx
+; AVX2-NEXT: addl %edx, %ecx
; AVX2-NEXT: vpextrw $2, %xmm1, %esi
; AVX2-NEXT: andl $1, %esi
-; AVX2-NEXT: addq %rcx, %rsi
+; AVX2-NEXT: addl %ecx, %esi
; AVX2-NEXT: vpextrw $3, %xmm1, %edi
; AVX2-NEXT: andl $1, %edi
-; AVX2-NEXT: addq %rsi, %rdi
+; AVX2-NEXT: addl %esi, %edi
; AVX2-NEXT: vpextrw $4, %xmm1, %r8d
; AVX2-NEXT: andl $1, %r8d
-; AVX2-NEXT: addq %rdi, %r8
+; AVX2-NEXT: addl %edi, %r8d
; AVX2-NEXT: vpextrw $5, %xmm1, %r9d
; AVX2-NEXT: andl $1, %r9d
-; AVX2-NEXT: addq %r8, %r9
+; AVX2-NEXT: addl %r8d, %r9d
; AVX2-NEXT: vpextrw $6, %xmm1, %r10d
; AVX2-NEXT: andl $1, %r10d
-; AVX2-NEXT: addq %r9, %r10
+; AVX2-NEXT: addl %r9d, %r10d
; AVX2-NEXT: vpextrw $7, %xmm1, %r11d
; AVX2-NEXT: andl $1, %r11d
; AVX2-NEXT: addq %r10, %r11
@@ -4421,22 +4406,22 @@ define <8 x i64> @test_compress_knownbits_sext_v8i16_8i64(<8 x i16> %vec, <8 x i
; AVX2-NEXT: andl $1, %ecx
; AVX2-NEXT: vmovd %xmm1, %edx
; AVX2-NEXT: andl $1, %edx
-; AVX2-NEXT: addq %rdx, %rcx
+; AVX2-NEXT: addl %edx, %ecx
; AVX2-NEXT: vpextrw $2, %xmm1, %esi
; AVX2-NEXT: andl $1, %esi
-; AVX2-NEXT: addq %rcx, %rsi
+; AVX2-NEXT: addl %ecx, %esi
; AVX2-NEXT: vpextrw $3, %xmm1, %edi
; AVX2-NEXT: andl $1, %edi
-; AVX2-NEXT: addq %rsi, %rdi
+; AVX2-NEXT: addl %esi, %edi
; AVX2-NEXT: vpextrw $4, %xmm1, %r8d
; AVX2-NEXT: andl $1, %r8d
-; AVX2-NEXT: addq %rdi, %r8
+; AVX2-NEXT: addl %edi, %r8d
; AVX2-NEXT: vpextrw $5, %xmm1, %r9d
; AVX2-NEXT: andl $1, %r9d
-; AVX2-NEXT: addq %r8, %r9
+; AVX2-NEXT: addl %r8d, %r9d
; AVX2-NEXT: vpextrw $6, %xmm1, %r10d
; AVX2-NEXT: andl $1, %r10d
-; AVX2-NEXT: addq %r9, %r10
+; AVX2-NEXT: addl %r9d, %r10d
; AVX2-NEXT: vpextrw $7, %xmm1, %r11d
; AVX2-NEXT: andl $1, %r11d
; AVX2-NEXT: addq %r10, %r11
@@ -4600,15 +4585,26 @@ define <4 x i8> @test_compress_small(<4 x i8> %vec, <4 x i1> %mask) nounwind {
; AVX2-NEXT: vpextrb $1, %xmm0, -24(%rsp,%rax)
; AVX2-NEXT: vpextrb $1, %xmm1, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
; AVX2-NEXT: vpextrb $2, %xmm0, -24(%rsp,%rcx)
; AVX2-NEXT: vpextrb $2, %xmm1, %eax
; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: addl %ecx, %eax
; AVX2-NEXT: vpextrb $3, %xmm0, -24(%rsp,%rax)
; AVX2-NEXT: vpextrb $3, %xmm1, %ecx
; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
+; AVX2-NEXT: addl %eax, %ecx
+; AVX2-NEXT: vpextrb $4, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $5, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $6, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $7, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $8, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $9, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $10, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $11, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $12, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $13, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrb $14, %xmm0, -24(%rsp,%rcx)
; AVX2-NEXT: vpextrb $15, %xmm0, -24(%rsp,%rcx)
; AVX2-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0
; AVX2-NEXT: retq
@@ -4852,25 +4848,23 @@ define <4 x i32> @test_compress_v4i32_zero_passthru(<4 x i32> %vec, <4 x i1> %ma
; AVX2-NEXT: andl $1, %eax
; AVX2-NEXT: vextractps $1, %xmm0, -24(%rsp,%rax,4)
; AVX2-NEXT: vpextrd $1, %xmm1, %ecx
-; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
-; AVX2-NEXT: vextractps $2, %xmm0, -24(%rsp,%rcx,4)
-; AVX2-NEXT: vpextrd $2, %xmm1, %eax
-; AVX2-NEXT: andl $1, %eax
-; AVX2-NEXT: addq %rcx, %rax
+; AVX2-NEXT: subl %ecx, %eax
+; AVX2-NEXT: leal (,%rax,4), %ecx
+; AVX2-NEXT: vextractps $2, %xmm0, -24(%rsp,%rcx)
+; AVX2-NEXT: vpextrd $2, %xmm1, %ecx
+; AVX2-NEXT: subl %ecx, %eax
+; AVX2-NEXT: movl %eax, %ecx
+; AVX2-NEXT: andl $3, %ecx
+; AVX2-NEXT: vextractps $3, %xmm0, -24(%rsp,%rcx,4)
; AVX2-NEXT: vpextrd $3, %xmm1, %ecx
-; AVX2-NEXT: andl $1, %ecx
-; AVX2-NEXT: addq %rax, %rcx
-; AVX2-NEXT: # kill: def $eax killed $eax killed $rax def $rax
-; AVX2-NEXT: andl $3, %eax
-; AVX2-NEXT: vextractps $3, %xmm0, -24(%rsp,%rax,4)
-; AVX2-NEXT: xorl %eax, %eax
-; AVX2-NEXT: cmpq $3, %rcx
+; AVX2-NEXT: subl %ecx, %eax
+; AVX2-NEXT: xorl %ecx, %ecx
+; AVX2-NEXT: cmpq $3, %rax
; AVX2-NEXT: movl $3, %edx
-; AVX2-NEXT: cmovbq %rcx, %rdx
-; AVX2-NEXT: vextractps $3, %xmm0, %ecx
-; AVX2-NEXT: cmovbel %eax, %ecx
-; AVX2-NEXT: movl %ecx, -24(%rsp,%rdx,4)
+; AVX2-NEXT: cmovbq %rax, %rdx
+; AVX2-NEXT: vextractps $3, %xmm0, %eax
+; AVX2-NEXT: cmovbel %ecx, %eax
+; AVX2-NEXT: movl %eax, -24(%rsp,%rdx,4)
; AVX2-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0
; AVX2-NEXT: retq
;
diff --git a/llvm/test/CodeGen/X86/xaluo.ll b/llvm/test/CodeGen/X86/xaluo.ll
index c2a8002c949ce..fb6f4590d9736 100644
--- a/llvm/test/CodeGen/X86/xaluo.ll
+++ b/llvm/test/CodeGen/X86/xaluo.ll
@@ -966,7 +966,7 @@ define {i64, i1} @uaddoovf(i64 %a, i64 %b) {
; CHECK: ## %bb.0:
; CHECK-NEXT: movzbl %dil, %ecx
; CHECK-NEXT: movzbl %sil, %eax
-; CHECK-NEXT: addq %rcx, %rax
+; CHECK-NEXT: addl %ecx, %eax
; CHECK-NEXT: xorl %edx, %edx
; CHECK-NEXT: retq
%1 = and i64 %a, 255
More information about the llvm-commits
mailing list