[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