[llvm] 8cc0907 - [X86] subcarry.ll - regenerate to show stack math and missing AVX512 codegen (#195524)

via llvm-commits llvm-commits at lists.llvm.org
Sun May 3 06:42:38 PDT 2026


Author: Simon Pilgrim
Date: 2026-05-03T13:42:33Z
New Revision: 8cc090723d67fa24698240d6eb5f845cc26cdcbd

URL: https://github.com/llvm/llvm-project/commit/8cc090723d67fa24698240d6eb5f845cc26cdcbd
DIFF: https://github.com/llvm/llvm-project/commit/8cc090723d67fa24698240d6eb5f845cc26cdcbd.diff

LOG: [X86] subcarry.ll - regenerate to show stack math and missing AVX512 codegen (#195524)

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/subcarry.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/subcarry.ll b/llvm/test/CodeGen/X86/subcarry.ll
index c618cc9efbfb6..cd361babf53fb 100644
--- a/llvm/test/CodeGen/X86/subcarry.ll
+++ b/llvm/test/CodeGen/X86/subcarry.ll
@@ -1,7 +1,7 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefixes=CHECK,X64
-; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefixes=CHECK,X86
-; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f,+avx512vl,+avx512bw | FileCheck %s --check-prefixes=AVX512
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp
+; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefixes=X64,X64-SSE2
+; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f,+avx512vl,+avx512bw | FileCheck %s --check-prefixes=X64,X64-AVX512
+; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefixes=X86
 
 define i128 @sub128(i128 %a, i128 %b) nounwind {
 ; X64-LABEL: sub128:
@@ -47,9 +47,9 @@ define i256 @sub256(i256 %a, i256 %b) nounwind {
 ; X64:       # %bb.0: # %entry
 ; X64-NEXT:    movq %rdi, %rax
 ; X64-NEXT:    subq %r9, %rsi
-; X64-NEXT:    sbbq {{[0-9]+}}(%rsp), %rdx
-; X64-NEXT:    sbbq {{[0-9]+}}(%rsp), %rcx
-; X64-NEXT:    sbbq {{[0-9]+}}(%rsp), %r8
+; X64-NEXT:    sbbq 8(%rsp), %rdx
+; X64-NEXT:    sbbq 16(%rsp), %rcx
+; X64-NEXT:    sbbq 24(%rsp), %r8
 ; X64-NEXT:    movq %rcx, 16(%rdi)
 ; X64-NEXT:    movq %rdx, 8(%rdi)
 ; X64-NEXT:    movq %rsi, (%rdi)
@@ -59,30 +59,30 @@ define i256 @sub256(i256 %a, i256 %b) nounwind {
 ; X86-LABEL: sub256:
 ; X86:       # %bb.0: # %entry
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl 8(%esp), %eax
+; X86-NEXT:    movl 20(%esp), %edx
+; X86-NEXT:    movl 12(%esp), %ecx
+; X86-NEXT:    movl 16(%esp), %esi
+; X86-NEXT:    subl 44(%esp), %ecx
+; X86-NEXT:    sbbl 48(%esp), %esi
+; X86-NEXT:    sbbl 52(%esp), %edx
 ; X86-NEXT:    movl %edx, 8(%eax)
 ; X86-NEXT:    movl %esi, 4(%eax)
 ; X86-NEXT:    movl %ecx, (%eax)
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 24(%esp), %ecx
+; X86-NEXT:    sbbl 56(%esp), %ecx
 ; X86-NEXT:    movl %ecx, 12(%eax)
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 28(%esp), %ecx
+; X86-NEXT:    sbbl 60(%esp), %ecx
 ; X86-NEXT:    movl %ecx, 16(%eax)
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 32(%esp), %ecx
+; X86-NEXT:    sbbl 64(%esp), %ecx
 ; X86-NEXT:    movl %ecx, 20(%eax)
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 36(%esp), %ecx
+; X86-NEXT:    sbbl 68(%esp), %ecx
 ; X86-NEXT:    movl %ecx, 24(%eax)
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 40(%esp), %ecx
+; X86-NEXT:    sbbl 72(%esp), %ecx
 ; X86-NEXT:    movl %ecx, 28(%eax)
 ; X86-NEXT:    popl %esi
 ; X86-NEXT:    retl $4
@@ -118,7 +118,7 @@ define %S @negate(ptr nocapture readonly %this) nounwind {
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
 ; X86-NEXT:    subl $12, %esp
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    movl 36(%esp), %eax
 ; X86-NEXT:    movl $0, (%esp) # 4-byte Folded Spill
 ; X86-NEXT:    xorl %ecx, %ecx
 ; X86-NEXT:    subl (%eax), %ecx
@@ -139,7 +139,7 @@ define %S @negate(ptr nocapture readonly %this) nounwind {
 ; X86-NEXT:    movl (%esp), %esi # 4-byte Reload
 ; X86-NEXT:    sbbl 28(%eax), %esi
 ; X86-NEXT:    movl %esi, (%esp) # 4-byte Spill
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    movl 32(%esp), %eax
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
 ; X86-NEXT:    movl %esi, (%eax)
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
@@ -227,9 +227,9 @@ define %S @sub(ptr nocapture readonly %this, %S %arg.b) nounwind {
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
 ; X86-NEXT:    subl $8, %esp
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 32(%esp), %edx
+; X86-NEXT:    movl 36(%esp), %esi
+; X86-NEXT:    movl 40(%esp), %ecx
 ; X86-NEXT:    notl %esi
 ; X86-NEXT:    addl (%edx), %esi
 ; X86-NEXT:    notl %ecx
@@ -243,7 +243,7 @@ define %S @sub(ptr nocapture readonly %this, %S %arg.b) nounwind {
 ; X86-NEXT:    movl %edi, %eax
 ; X86-NEXT:    adcl $0, %eax
 ; X86-NEXT:    setb %al
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NEXT:    movl 44(%esp), %ebx
 ; X86-NEXT:    movzbl %al, %eax
 ; X86-NEXT:    addb $255, %cl
 ; X86-NEXT:    adcl 8(%edx), %edi
@@ -252,7 +252,7 @@ define %S @sub(ptr nocapture readonly %this, %S %arg.b) nounwind {
 ; X86-NEXT:    notl %ebx
 ; X86-NEXT:    addl %edi, %ebx
 ; X86-NEXT:    movl %ebx, (%esp) # 4-byte Spill
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NEXT:    movl 48(%esp), %edi
 ; X86-NEXT:    movzbl %cl, %ebp
 ; X86-NEXT:    notl %edi
 ; X86-NEXT:    adcl %eax, %edi
@@ -264,11 +264,11 @@ define %S @sub(ptr nocapture readonly %this, %S %arg.b) nounwind {
 ; X86-NEXT:    movzbl %cl, %eax
 ; X86-NEXT:    adcl 16(%edx), %ebp
 ; X86-NEXT:    adcl 20(%edx), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NEXT:    movl 52(%esp), %ebx
 ; X86-NEXT:    notl %ebx
 ; X86-NEXT:    setb %cl
 ; X86-NEXT:    addl %ebp, %ebx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NEXT:    movl 56(%esp), %ebp
 ; X86-NEXT:    notl %ebp
 ; X86-NEXT:    adcl %eax, %ebp
 ; X86-NEXT:    movzbl %cl, %edx
@@ -277,17 +277,17 @@ define %S @sub(ptr nocapture readonly %this, %S %arg.b) nounwind {
 ; X86-NEXT:    adcl $0, %eax
 ; X86-NEXT:    setb %al
 ; X86-NEXT:    addb $255, %cl
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 32(%esp), %ecx
 ; X86-NEXT:    adcl 24(%ecx), %edx
 ; X86-NEXT:    movzbl %al, %eax
 ; X86-NEXT:    adcl 28(%ecx), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 60(%esp), %ecx
 ; X86-NEXT:    notl %ecx
 ; X86-NEXT:    addl %edx, %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl 64(%esp), %edx
 ; X86-NEXT:    notl %edx
 ; X86-NEXT:    adcl %eax, %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    movl 28(%esp), %eax
 ; X86-NEXT:    movl %esi, (%eax)
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
 ; X86-NEXT:    movl %esi, 4(%eax)
@@ -368,18 +368,18 @@ define i64 @sub_from_carry(i64 %x, i64 %y, ptr %valout, i64 %z) nounwind {
 ; X86-LABEL: sub_from_carry:
 ; X86:       # %bb.0:
 ; X86-NEXT:    pushl %ebx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    addl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    adcl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl 24(%esp), %eax
+; X86-NEXT:    movl 8(%esp), %ecx
+; X86-NEXT:    movl 12(%esp), %edx
+; X86-NEXT:    addl 16(%esp), %ecx
+; X86-NEXT:    adcl 20(%esp), %edx
 ; X86-NEXT:    setb %bl
 ; X86-NEXT:    movl %ecx, (%eax)
 ; X86-NEXT:    movl %edx, 4(%eax)
 ; X86-NEXT:    movzbl %bl, %eax
 ; X86-NEXT:    xorl %edx, %edx
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    subl 28(%esp), %eax
+; X86-NEXT:    sbbl 32(%esp), %edx
 ; X86-NEXT:    popl %ebx
 ; X86-NEXT:    retl
   %agg = call {i64, i1} @llvm.uadd.with.overflow(i64 %x, i64 %y)
@@ -407,16 +407,16 @@ define { i64, i64, i1 } @subcarry_2x64(i64 %x0, i64 %x1, i64 %y0, i64 %y1) nounw
 ; X86-NEXT:    pushl %ebx
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 16(%esp), %eax
+; X86-NEXT:    movl 20(%esp), %ecx
+; X86-NEXT:    movl 24(%esp), %edx
+; X86-NEXT:    movl 28(%esp), %edi
+; X86-NEXT:    movl 32(%esp), %esi
+; X86-NEXT:    subl 44(%esp), %edi
+; X86-NEXT:    sbbl 48(%esp), %esi
 ; X86-NEXT:    setb %bl
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    subl 36(%esp), %ecx
+; X86-NEXT:    sbbl 40(%esp), %edx
 ; X86-NEXT:    sbbl $0, %edi
 ; X86-NEXT:    sbbl $0, %esi
 ; X86-NEXT:    setb %bh
@@ -466,16 +466,16 @@ define { i64, i64, i1 } @subcarry_2x64_or_reversed(i64 %x0, i64 %x1, i64 %y0, i6
 ; X86-NEXT:    pushl %ebx
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 16(%esp), %eax
+; X86-NEXT:    movl 20(%esp), %ecx
+; X86-NEXT:    movl 24(%esp), %edx
+; X86-NEXT:    movl 28(%esp), %edi
+; X86-NEXT:    movl 32(%esp), %esi
+; X86-NEXT:    subl 44(%esp), %edi
+; X86-NEXT:    sbbl 48(%esp), %esi
 ; X86-NEXT:    setb %bl
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    subl 36(%esp), %ecx
+; X86-NEXT:    sbbl 40(%esp), %edx
 ; X86-NEXT:    sbbl $0, %edi
 ; X86-NEXT:    sbbl $0, %esi
 ; X86-NEXT:    setb %bh
@@ -525,16 +525,16 @@ define { i64, i64, i1 } @subcarry_2x64_xor_reversed(i64 %x0, i64 %x1, i64 %y0, i
 ; X86-NEXT:    pushl %ebx
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 16(%esp), %eax
+; X86-NEXT:    movl 20(%esp), %ecx
+; X86-NEXT:    movl 24(%esp), %edx
+; X86-NEXT:    movl 28(%esp), %edi
+; X86-NEXT:    movl 32(%esp), %esi
+; X86-NEXT:    subl 44(%esp), %edi
+; X86-NEXT:    sbbl 48(%esp), %esi
 ; X86-NEXT:    setb %bl
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    subl 36(%esp), %ecx
+; X86-NEXT:    sbbl 40(%esp), %edx
 ; X86-NEXT:    sbbl $0, %edi
 ; X86-NEXT:    sbbl $0, %esi
 ; X86-NEXT:    setb %bh
@@ -584,16 +584,16 @@ define { i64, i64, i1 } @subcarry_2x64_and_reversed(i64 %x0, i64 %x1, i64 %y0, i
 ; X86-NEXT:    pushl %ebx
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 16(%esp), %eax
+; X86-NEXT:    movl 20(%esp), %ecx
+; X86-NEXT:    movl 24(%esp), %edx
+; X86-NEXT:    movl 28(%esp), %edi
+; X86-NEXT:    movl 32(%esp), %esi
+; X86-NEXT:    subl 44(%esp), %edi
+; X86-NEXT:    sbbl 48(%esp), %esi
 ; X86-NEXT:    setb %bl
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    subl 36(%esp), %ecx
+; X86-NEXT:    sbbl 40(%esp), %edx
 ; X86-NEXT:    sbbl $0, %edi
 ; X86-NEXT:    sbbl $0, %esi
 ; X86-NEXT:    setb %bh
@@ -643,16 +643,16 @@ define { i64, i64, i1 } @subcarry_2x64_add_reversed(i64 %x0, i64 %x1, i64 %y0, i
 ; X86-NEXT:    pushl %ebx
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %edi
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 16(%esp), %eax
+; X86-NEXT:    movl 20(%esp), %ecx
+; X86-NEXT:    movl 24(%esp), %edx
+; X86-NEXT:    movl 28(%esp), %edi
+; X86-NEXT:    movl 32(%esp), %esi
+; X86-NEXT:    subl 44(%esp), %edi
+; X86-NEXT:    sbbl 48(%esp), %esi
 ; X86-NEXT:    setb %bl
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    subl 36(%esp), %ecx
+; X86-NEXT:    sbbl 40(%esp), %edx
 ; X86-NEXT:    sbbl $0, %edi
 ; X86-NEXT:    sbbl $0, %esi
 ; X86-NEXT:    setb %bh
@@ -700,12 +700,12 @@ define { i64, i1 } @subcarry_fake_carry(i64 %a, i64 %b, i1 %carryin) nounwind {
 ; X86-LABEL: subcarry_fake_carry:
 ; X86:       # %bb.0:
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl 8(%esp), %eax
+; X86-NEXT:    movl 12(%esp), %edx
+; X86-NEXT:    subl 16(%esp), %eax
+; X86-NEXT:    sbbl 20(%esp), %edx
 ; X86-NEXT:    setb %ch
-; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movzbl 24(%esp), %esi
 ; X86-NEXT:    andl $1, %esi
 ; X86-NEXT:    subl %esi, %eax
 ; X86-NEXT:    sbbl $0, %edx
@@ -741,13 +741,13 @@ define { i64, i1 } @subcarry_carry_not_zext(i64 %a, i64 %b, i64 %carryin) nounwi
 ;
 ; X86-LABEL: subcarry_carry_not_zext:
 ; X86:       # %bb.0:
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl 4(%esp), %eax
+; X86-NEXT:    movl 8(%esp), %edx
+; X86-NEXT:    subl 12(%esp), %eax
+; X86-NEXT:    sbbl 16(%esp), %edx
 ; X86-NEXT:    setb %ch
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    subl 20(%esp), %eax
+; X86-NEXT:    sbbl 24(%esp), %edx
 ; X86-NEXT:    setb %cl
 ; X86-NEXT:    orb %ch, %cl
 ; X86-NEXT:    retl
@@ -780,11 +780,11 @@ define { i64, i1 } @subcarry_carry_not_i1(i64 %a, i64 %b, i8 %carryin) nounwind
 ; X86-LABEL: subcarry_carry_not_i1:
 ; X86:       # %bb.0:
 ; X86-NEXT:    pushl %ebx
-; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movzbl 24(%esp), %ecx
+; X86-NEXT:    movl 8(%esp), %eax
+; X86-NEXT:    movl 12(%esp), %edx
+; X86-NEXT:    subl 16(%esp), %eax
+; X86-NEXT:    sbbl 20(%esp), %edx
 ; X86-NEXT:    setb %bl
 ; X86-NEXT:    subl %ecx, %eax
 ; X86-NEXT:    sbbl $0, %edx
@@ -827,7 +827,7 @@ define i32 @sub_U320_without_i128_or(ptr nocapture dereferenceable(40) %0, i64 %
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
 ; X86-NEXT:    subl $28, %esp
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NEXT:    movl 48(%esp), %edi
 ; X86-NEXT:    movl 8(%edi), %eax
 ; X86-NEXT:    movl 12(%edi), %esi
 ; X86-NEXT:    movl 20(%edi), %ecx
@@ -836,18 +836,18 @@ define i32 @sub_U320_without_i128_or(ptr nocapture dereferenceable(40) %0, i64 %
 ; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
 ; X86-NEXT:    movl 28(%edi), %ecx
 ; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    subl 60(%esp), %eax
 ; X86-NEXT:    movl %eax, %ecx
 ; X86-NEXT:    movl %esi, %eax
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    sbbl 64(%esp), %eax
 ; X86-NEXT:    setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
 ; X86-NEXT:    movl 24(%edi), %ebp
 ; X86-NEXT:    movl 36(%edi), %edx
 ; X86-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
 ; X86-NEXT:    movl 32(%edi), %ebx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl 52(%esp), %edx
 ; X86-NEXT:    subl %edx, (%edi)
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 56(%esp), %esi
 ; X86-NEXT:    sbbl %esi, 4(%edi)
 ; X86-NEXT:    sbbl $0, %ecx
 ; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
@@ -855,9 +855,9 @@ define i32 @sub_U320_without_i128_or(ptr nocapture dereferenceable(40) %0, i64 %
 ; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
 ; X86-NEXT:    setb %dl
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    subl 68(%esp), %eax
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    sbbl 72(%esp), %ecx
 ; X86-NEXT:    setb %dh
 ; X86-NEXT:    orb {{[-0-9]+}}(%e{{[sb]}}p), %dl # 1-byte Folded Reload
 ; X86-NEXT:    movzbl %dl, %esi
@@ -865,18 +865,18 @@ define i32 @sub_U320_without_i128_or(ptr nocapture dereferenceable(40) %0, i64 %
 ; X86-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
 ; X86-NEXT:    sbbl $0, %ecx
 ; X86-NEXT:    setb %al
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ebp
+; X86-NEXT:    subl 76(%esp), %ebp
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    sbbl 80(%esp), %esi
 ; X86-NEXT:    setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
 ; X86-NEXT:    orb %dh, %al
 ; X86-NEXT:    movzbl %al, %eax
 ; X86-NEXT:    subl %eax, %ebp
 ; X86-NEXT:    sbbl $0, %esi
 ; X86-NEXT:    setb %al
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ebx
+; X86-NEXT:    subl 84(%esp), %ebx
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    sbbl 88(%esp), %edx
 ; X86-NEXT:    setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
 ; X86-NEXT:    orb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Folded Reload
 ; X86-NEXT:    movzbl %al, %eax
@@ -966,7 +966,7 @@ define i32 @sub_U320_usubo(ptr nocapture dereferenceable(40) %0, i64 %1, i64 %2,
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
 ; X86-NEXT:    subl $24, %esp
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl 44(%esp), %edx
 ; X86-NEXT:    movl 8(%edx), %eax
 ; X86-NEXT:    movl 12(%edx), %esi
 ; X86-NEXT:    movl 20(%edx), %ecx
@@ -975,17 +975,17 @@ define i32 @sub_U320_usubo(ptr nocapture dereferenceable(40) %0, i64 %1, i64 %2,
 ; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
 ; X86-NEXT:    movl 28(%edx), %ecx
 ; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    subl 56(%esp), %eax
 ; X86-NEXT:    movl %eax, %ecx
 ; X86-NEXT:    movl %esi, %eax
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    sbbl 60(%esp), %eax
 ; X86-NEXT:    setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
 ; X86-NEXT:    movl 24(%edx), %edi
 ; X86-NEXT:    movl 36(%edx), %ebp
 ; X86-NEXT:    movl 32(%edx), %ebx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 48(%esp), %esi
 ; X86-NEXT:    subl %esi, (%edx)
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 52(%esp), %esi
 ; X86-NEXT:    sbbl %esi, 4(%edx)
 ; X86-NEXT:    sbbl $0, %ecx
 ; X86-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
@@ -994,9 +994,9 @@ define i32 @sub_U320_usubo(ptr nocapture dereferenceable(40) %0, i64 %1, i64 %2,
 ; X86-NEXT:    setb %al
 ; X86-NEXT:    orb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Folded Reload
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    subl 64(%esp), %ecx
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    sbbl 68(%esp), %esi
 ; X86-NEXT:    movzbl %al, %eax
 ; X86-NEXT:    setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
 ; X86-NEXT:    subl %eax, %ecx
@@ -1004,17 +1004,17 @@ define i32 @sub_U320_usubo(ptr nocapture dereferenceable(40) %0, i64 %1, i64 %2,
 ; X86-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
 ; X86-NEXT:    setb %al
 ; X86-NEXT:    orb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Folded Reload
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %edi
+; X86-NEXT:    subl 72(%esp), %edi
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    sbbl 76(%esp), %esi
 ; X86-NEXT:    movzbl %al, %eax
 ; X86-NEXT:    setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
 ; X86-NEXT:    subl %eax, %edi
 ; X86-NEXT:    sbbl $0, %esi
 ; X86-NEXT:    setb %al
 ; X86-NEXT:    orb {{[-0-9]+}}(%e{{[sb]}}p), %al # 1-byte Folded Reload
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %ebx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ebp
+; X86-NEXT:    subl 80(%esp), %ebx
+; X86-NEXT:    sbbl 84(%esp), %ebp
 ; X86-NEXT:    movzbl %al, %eax
 ; X86-NEXT:    setb {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Folded Spill
 ; X86-NEXT:    subl %eax, %ebx
@@ -1114,9 +1114,9 @@ define void @PR39464(ptr noalias nocapture sret(%struct.U192) %0, ptr nocapture
 ; X86-NEXT:    pushl %ebx
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl 16(%esp), %eax
+; X86-NEXT:    movl 24(%esp), %ecx
+; X86-NEXT:    movl 20(%esp), %edx
 ; X86-NEXT:    movl (%edx), %esi
 ; X86-NEXT:    movl 4(%edx), %edi
 ; X86-NEXT:    subl (%ecx), %esi
@@ -1215,8 +1215,8 @@ define void @sub_U256_without_i128_or_recursive(ptr sret(%uint256) %0, ptr %1, p
 ; X86-NEXT:    pushl %edi
 ; X86-NEXT:    pushl %esi
 ; X86-NEXT:    subl $12, %esp
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    movl 40(%esp), %ebp
+; X86-NEXT:    movl 36(%esp), %eax
 ; X86-NEXT:    movl (%eax), %ecx
 ; X86-NEXT:    movl 4(%eax), %ebx
 ; X86-NEXT:    movl 12(%eax), %esi
@@ -1237,7 +1237,7 @@ define void @sub_U256_without_i128_or_recursive(ptr sret(%uint256) %0, ptr %1, p
 ; X86-NEXT:    movl 16(%eax), %edx
 ; X86-NEXT:    movl 28(%eax), %ebx
 ; X86-NEXT:    movl 24(%eax), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 40(%esp), %esi
 ; X86-NEXT:    subl 24(%esi), %eax
 ; X86-NEXT:    sbbl 28(%esi), %ebx
 ; X86-NEXT:    subl 16(%esi), %edx
@@ -1246,7 +1246,7 @@ define void @sub_U256_without_i128_or_recursive(ptr sret(%uint256) %0, ptr %1, p
 ; X86-NEXT:    sbbl $0, %ebx
 ; X86-NEXT:    movzbl %cl, %ecx
 ; X86-NEXT:    subl %ecx, %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 32(%esp), %ecx
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
 ; X86-NEXT:    movl %esi, (%ecx)
 ; X86-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
@@ -1327,15 +1327,15 @@ define i1 @subcarry_ult_2x64(i64 %x0, i64 %x1, i64 %y0, i64 %y1) nounwind {
 ; X86:       # %bb.0:
 ; X86-NEXT:    pushl %ebx
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    subl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
+; X86-NEXT:    movl 12(%esp), %eax
+; X86-NEXT:    movl 16(%esp), %ecx
+; X86-NEXT:    movl 20(%esp), %edx
+; X86-NEXT:    movl 24(%esp), %esi
+; X86-NEXT:    subl 36(%esp), %edx
+; X86-NEXT:    sbbl 40(%esp), %esi
 ; X86-NEXT:    setb %bl
-; X86-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    cmpl 28(%esp), %eax
+; X86-NEXT:    sbbl 32(%esp), %ecx
 ; X86-NEXT:    sbbl $0, %edx
 ; X86-NEXT:    sbbl $0, %esi
 ; X86-NEXT:    setb %al
@@ -1368,14 +1368,14 @@ define i1 @subcarry_ult_2x64_2(i64 %x0, i64 %x1, i64 %y0, i64 %y1) nounwind {
 ; X86-LABEL: subcarry_ult_2x64_2:
 ; X86:       # %bb.0: # %entry
 ; X86-NEXT:    pushl %esi
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    cmpl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %esi
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %ecx
+; X86-NEXT:    movl 16(%esp), %eax
+; X86-NEXT:    movl 20(%esp), %ecx
+; X86-NEXT:    movl 8(%esp), %edx
+; X86-NEXT:    movl 12(%esp), %esi
+; X86-NEXT:    cmpl 24(%esp), %edx
+; X86-NEXT:    sbbl 28(%esp), %esi
+; X86-NEXT:    sbbl 32(%esp), %eax
+; X86-NEXT:    sbbl 36(%esp), %ecx
 ; X86-NEXT:    setb %al
 ; X86-NEXT:    popl %esi
 ; X86-NEXT:    retl
@@ -1404,13 +1404,13 @@ define i1 @subcarry_ult_2x64_1x64(i64 %x0, i64 %x1, i64 %y) nounwind {
 ;
 ; X86-LABEL: subcarry_ult_2x64_1x64:
 ; X86:       # %bb.0: # %entry
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X86-NEXT:    cmpl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT:    sbbl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl 12(%esp), %eax
+; X86-NEXT:    movl 4(%esp), %ecx
+; X86-NEXT:    movl 8(%esp), %edx
+; X86-NEXT:    cmpl 20(%esp), %ecx
+; X86-NEXT:    sbbl 24(%esp), %edx
 ; X86-NEXT:    setb %cl
-; X86-NEXT:    orl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    orl 16(%esp), %eax
 ; X86-NEXT:    sete %al
 ; X86-NEXT:    andb %cl, %al
 ; X86-NEXT:    retl
@@ -1427,8 +1427,8 @@ define i1 @subcarry_ult_2x128(i128 %x0, i128 %x1, i128 %y0, i128 %y1) nounwind {
 ; X64:       # %bb.0:
 ; X64-NEXT:    cmpq %r8, %rdi
 ; X64-NEXT:    sbbq %r9, %rsi
-; X64-NEXT:    sbbq {{[0-9]+}}(%rsp), %rdx
-; X64-NEXT:    sbbq {{[0-9]+}}(%rsp), %rcx
+; X64-NEXT:    sbbq 8(%rsp), %rdx
+; X64-NEXT:    sbbq 16(%rsp), %rcx
 ; X64-NEXT:    setb %al
 ; X64-NEXT:    retq
 ;
@@ -1466,22 +1466,37 @@ define i1 @subcarry_ult_2x128(i128 %x0, i128 %x1, i128 %y0, i128 %y1) nounwind {
   ret i1 %br
 }
 
-; i256 borrow chain — exercises the non-simple EVT path (i256->i128->i64/i32).
+; i256 borrow chain - exercises the non-simple EVT path (i256->i128->i64/i32).
 define i1 @subcarry_ult_2x256(i256 %x0, i256 %x1, i256 %y0, i256 %y1) nounwind {
-; X64-LABEL: subcarry_ult_2x256:
-; X64:       # %bb.0:
-; X64-NEXT:    movq 16(%rsp), %rax
-; X64-NEXT:    movq 8(%rsp), %r10
-; X64-NEXT:    cmpq 24(%rsp), %rdi
-; X64-NEXT:    sbbq 32(%rsp), %rsi
-; X64-NEXT:    sbbq 40(%rsp), %rdx
-; X64-NEXT:    sbbq 48(%rsp), %rcx
-; X64-NEXT:    sbbq 56(%rsp), %r8
-; X64-NEXT:    sbbq 64(%rsp), %r9
-; X64-NEXT:    sbbq 72(%rsp), %r10
-; X64-NEXT:    sbbq 80(%rsp), %rax
-; X64-NEXT:    setb %al
-; X64-NEXT:    retq
+; X64-SSE2-LABEL: subcarry_ult_2x256:
+; X64-SSE2:       # %bb.0:
+; X64-SSE2-NEXT:    movq 16(%rsp), %rax
+; X64-SSE2-NEXT:    movq 8(%rsp), %r10
+; X64-SSE2-NEXT:    cmpq 24(%rsp), %rdi
+; X64-SSE2-NEXT:    sbbq 32(%rsp), %rsi
+; X64-SSE2-NEXT:    sbbq 40(%rsp), %rdx
+; X64-SSE2-NEXT:    sbbq 48(%rsp), %rcx
+; X64-SSE2-NEXT:    sbbq 56(%rsp), %r8
+; X64-SSE2-NEXT:    sbbq 64(%rsp), %r9
+; X64-SSE2-NEXT:    sbbq 72(%rsp), %r10
+; X64-SSE2-NEXT:    sbbq 80(%rsp), %rax
+; X64-SSE2-NEXT:    setb %al
+; X64-SSE2-NEXT:    retq
+;
+; X64-AVX512-LABEL: subcarry_ult_2x256:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    movq 8(%rsp), %rax
+; X64-AVX512-NEXT:    movq 16(%rsp), %r10
+; X64-AVX512-NEXT:    cmpq 24(%rsp), %rdi
+; X64-AVX512-NEXT:    sbbq 32(%rsp), %rsi
+; X64-AVX512-NEXT:    sbbq 40(%rsp), %rdx
+; X64-AVX512-NEXT:    sbbq 48(%rsp), %rcx
+; X64-AVX512-NEXT:    sbbq 56(%rsp), %r8
+; X64-AVX512-NEXT:    sbbq 64(%rsp), %r9
+; X64-AVX512-NEXT:    sbbq 72(%rsp), %rax
+; X64-AVX512-NEXT:    sbbq 80(%rsp), %r10
+; X64-AVX512-NEXT:    setb %al
+; X64-AVX512-NEXT:    retq
 ;
 ; X86-LABEL: subcarry_ult_2x256:
 ; X86:       # %bb.0:
@@ -1526,17 +1541,34 @@ define i1 @subcarry_ult_2x256(i256 %x0, i256 %x1, i256 %y0, i256 %y1) nounwind {
   %br = or i1 %b1, %bp
   ret i1 %br
 }
+
 ; Negative test: vector types are not a borrow chain.
 define <4 x i1> @no_subcarry_vector(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %y0, <4 x i32> %y1) nounwind {
-; AVX512-LABEL: no_subcarry_vector:
-; AVX512:       # %bb.0:
-; AVX512-NEXT:    vpcmpltud %xmm2, %xmm0, %k1
-; AVX512-NEXT:    vpcmpltud %xmm3, %xmm1, %k0
-; AVX512-NEXT:    vpcmpeqd %xmm3, %xmm1, %k1 {%k1}
-; AVX512-NEXT:    korw %k1, %k0, %k1
-; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
-; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
-; AVX512-NEXT:    retq
+; X64-SSE2-LABEL: no_subcarry_vector:
+; X64-SSE2:       # %bb.0:
+; X64-SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
+; X64-SSE2-NEXT:    pxor %xmm4, %xmm0
+; X64-SSE2-NEXT:    pxor %xmm4, %xmm2
+; X64-SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
+; X64-SSE2-NEXT:    movdqa %xmm1, %xmm0
+; X64-SSE2-NEXT:    pxor %xmm4, %xmm0
+; X64-SSE2-NEXT:    pxor %xmm3, %xmm4
+; X64-SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
+; X64-SSE2-NEXT:    pcmpeqd %xmm3, %xmm1
+; X64-SSE2-NEXT:    pand %xmm2, %xmm1
+; X64-SSE2-NEXT:    por %xmm1, %xmm4
+; X64-SSE2-NEXT:    movdqa %xmm4, %xmm0
+; X64-SSE2-NEXT:    retq
+;
+; X64-AVX512-LABEL: no_subcarry_vector:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    vpcmpltud %xmm2, %xmm0, %k1
+; X64-AVX512-NEXT:    vpcmpltud %xmm3, %xmm1, %k0
+; X64-AVX512-NEXT:    vpcmpeqd %xmm3, %xmm1, %k1 {%k1}
+; X64-AVX512-NEXT:    korw %k1, %k0, %k1
+; X64-AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
+; X64-AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
+; X64-AVX512-NEXT:    retq
 ;
 ; X86-LABEL: no_subcarry_vector:
 ; X86:       # %bb.0:
@@ -1575,5 +1607,3 @@ define <4 x i1> @no_subcarry_vector(<4 x i32> %x0, <4 x i32> %x1, <4 x i32> %y0,
   ret <4 x i1> %br
 }
 
-;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
-; CHECK: {{.*}}


        


More information about the llvm-commits mailing list