Files
TheRock/compiler/amd-llvm/llvm/test/CodeGen/X86/avx10_2fptosi_satcvtds.ll
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

721 lines
24 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=i686-linux -mattr=+avx10.2 | FileCheck %s --check-prefixes=CHECK,X86
; RUN: llc < %s -mtriple=x86_64-linux -mattr=+avx10.2 | FileCheck %s --check-prefixes=CHECK,X64
;
; 32-bit float to signed integer
;
declare i24 @llvm.fptosi.sat.i24.f32 (float)
declare i48 @llvm.fptosi.sat.i48.f32 (float)
define i24 @test_signed_i24_f32(float %f) nounwind {
; X86-LABEL: test_signed_i24_f32:
; X86: # %bb.0:
; X86-NEXT: vcvttss2sis {{[0-9]+}}(%esp), %eax
; X86-NEXT: cmpl $-8388607, %eax # imm = 0xFF800001
; X86-NEXT: movl $-8388608, %ecx # imm = 0xFF800000
; X86-NEXT: cmovgel %eax, %ecx
; X86-NEXT: cmpl $8388607, %ecx # imm = 0x7FFFFF
; X86-NEXT: movl $8388607, %eax # imm = 0x7FFFFF
; X86-NEXT: cmovll %ecx, %eax
; X86-NEXT: retl
;
; X64-LABEL: test_signed_i24_f32:
; X64: # %bb.0:
; X64-NEXT: vcvttss2sis %xmm0, %eax
; X64-NEXT: cmpl $-8388607, %eax # imm = 0xFF800001
; X64-NEXT: movl $-8388608, %ecx # imm = 0xFF800000
; X64-NEXT: cmovgel %eax, %ecx
; X64-NEXT: cmpl $8388607, %ecx # imm = 0x7FFFFF
; X64-NEXT: movl $8388607, %eax # imm = 0x7FFFFF
; X64-NEXT: cmovll %ecx, %eax
; X64-NEXT: retq
%x = call i24 @llvm.fptosi.sat.i24.f32(float %f)
ret i24 %x
}
define i48 @test_signed_i48_f32(float %f) nounwind {
; X86-LABEL: test_signed_i48_f32:
; X86: # %bb.0:
; X86-NEXT: pushl %edi
; X86-NEXT: pushl %esi
; X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
; X86-NEXT: vcvttps2qq %xmm1, %xmm1
; X86-NEXT: vmovd %xmm1, %esi
; X86-NEXT: xorl %ecx, %ecx
; X86-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-NEXT: cmovbl %ecx, %esi
; X86-NEXT: vpextrd $1, %xmm1, %eax
; X86-NEXT: movl $-32768, %edi # imm = 0x8000
; X86-NEXT: cmovael %eax, %edi
; X86-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-NEXT: movl $32767, %edx # imm = 0x7FFF
; X86-NEXT: cmovbel %edi, %edx
; X86-NEXT: movl $-1, %eax
; X86-NEXT: cmovbel %esi, %eax
; X86-NEXT: vucomiss %xmm0, %xmm0
; X86-NEXT: cmovpl %ecx, %eax
; X86-NEXT: cmovpl %ecx, %edx
; X86-NEXT: popl %esi
; X86-NEXT: popl %edi
; X86-NEXT: retl
;
; X64-LABEL: test_signed_i48_f32:
; X64: # %bb.0:
; X64-NEXT: vcvttss2sis %xmm0, %rcx
; X64-NEXT: movabsq $-140737488355328, %rax # imm = 0xFFFF800000000000
; X64-NEXT: cmpq %rax, %rcx
; X64-NEXT: cmovgq %rcx, %rax
; X64-NEXT: movabsq $140737488355327, %rcx # imm = 0x7FFFFFFFFFFF
; X64-NEXT: cmpq %rcx, %rax
; X64-NEXT: cmovgeq %rcx, %rax
; X64-NEXT: retq
%x = call i48 @llvm.fptosi.sat.i48.f32(float %f)
ret i48 %x
}
declare i32 @llvm.fptosi.sat.i32.f32 (float)
declare i64 @llvm.fptosi.sat.i64.f32 (float)
define i32 @test_signed_i32_f32(float %f) nounwind {
; X86-LABEL: test_signed_i32_f32:
; X86: # %bb.0:
; X86-NEXT: vcvttss2sis {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
; X64-LABEL: test_signed_i32_f32:
; X64: # %bb.0:
; X64-NEXT: vcvttss2sis %xmm0, %eax
; X64-NEXT: retq
%x = call i32 @llvm.fptosi.sat.i32.f32(float %f)
ret i32 %x
}
define i64 @test_signed_i64_f32(float %f) nounwind {
; X86-LABEL: test_signed_i64_f32:
; X86: # %bb.0:
; X86-NEXT: pushl %edi
; X86-NEXT: pushl %esi
; X86-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; X86-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
; X86-NEXT: vcvttps2qq %xmm1, %xmm1
; X86-NEXT: vmovd %xmm1, %esi
; X86-NEXT: xorl %ecx, %ecx
; X86-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-NEXT: cmovbl %ecx, %esi
; X86-NEXT: vpextrd $1, %xmm1, %eax
; X86-NEXT: movl $-2147483648, %edi # imm = 0x80000000
; X86-NEXT: cmovael %eax, %edi
; X86-NEXT: vucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-NEXT: movl $2147483647, %edx # imm = 0x7FFFFFFF
; X86-NEXT: cmovbel %edi, %edx
; X86-NEXT: movl $-1, %eax
; X86-NEXT: cmovbel %esi, %eax
; X86-NEXT: vucomiss %xmm0, %xmm0
; X86-NEXT: cmovpl %ecx, %eax
; X86-NEXT: cmovpl %ecx, %edx
; X86-NEXT: popl %esi
; X86-NEXT: popl %edi
; X86-NEXT: retl
;
; X64-LABEL: test_signed_i64_f32:
; X64: # %bb.0:
; X64-NEXT: vcvttss2sis %xmm0, %rax
; X64-NEXT: retq
%x = call i64 @llvm.fptosi.sat.i64.f32(float %f)
ret i64 %x
}
;
; 64-bit float to signed integer
;
declare i24 @llvm.fptosi.sat.i24.f64 (double)
declare i48 @llvm.fptosi.sat.i48.f64 (double)
define i24 @test_signed_i24_f64(double %f) nounwind {
; X86-LABEL: test_signed_i24_f64:
; X86: # %bb.0:
; X86-NEXT: vcvttsd2sis {{[0-9]+}}(%esp), %eax
; X86-NEXT: cmpl $-8388607, %eax # imm = 0xFF800001
; X86-NEXT: movl $-8388608, %ecx # imm = 0xFF800000
; X86-NEXT: cmovgel %eax, %ecx
; X86-NEXT: cmpl $8388607, %ecx # imm = 0x7FFFFF
; X86-NEXT: movl $8388607, %eax # imm = 0x7FFFFF
; X86-NEXT: cmovll %ecx, %eax
; X86-NEXT: retl
;
; X64-LABEL: test_signed_i24_f64:
; X64: # %bb.0:
; X64-NEXT: vcvttsd2sis %xmm0, %eax
; X64-NEXT: cmpl $-8388607, %eax # imm = 0xFF800001
; X64-NEXT: movl $-8388608, %ecx # imm = 0xFF800000
; X64-NEXT: cmovgel %eax, %ecx
; X64-NEXT: cmpl $8388607, %ecx # imm = 0x7FFFFF
; X64-NEXT: movl $8388607, %eax # imm = 0x7FFFFF
; X64-NEXT: cmovll %ecx, %eax
; X64-NEXT: retq
%x = call i24 @llvm.fptosi.sat.i24.f64(double %f)
ret i24 %x
}
define i48 @test_signed_i48_f64(double %f) nounwind {
; X86-LABEL: test_signed_i48_f64:
; X86: # %bb.0:
; X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
; X86-NEXT: vminmaxsd $21, {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-NEXT: vminmaxsd $20, {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1
; X86-NEXT: vcvttpd2qq %xmm1, %xmm1
; X86-NEXT: vmovd %xmm1, %eax
; X86-NEXT: xorl %ecx, %ecx
; X86-NEXT: vucomisd %xmm0, %xmm0
; X86-NEXT: cmovpl %ecx, %eax
; X86-NEXT: vpextrd $1, %xmm1, %edx
; X86-NEXT: cmovpl %ecx, %edx
; X86-NEXT: retl
;
; X64-LABEL: test_signed_i48_f64:
; X64: # %bb.0:
; X64-NEXT: vcvttsd2sis %xmm0, %rcx
; X64-NEXT: movabsq $-140737488355328, %rax # imm = 0xFFFF800000000000
; X64-NEXT: cmpq %rax, %rcx
; X64-NEXT: cmovgq %rcx, %rax
; X64-NEXT: movabsq $140737488355327, %rcx # imm = 0x7FFFFFFFFFFF
; X64-NEXT: cmpq %rcx, %rax
; X64-NEXT: cmovgeq %rcx, %rax
; X64-NEXT: retq
%x = call i48 @llvm.fptosi.sat.i48.f64(double %f)
ret i48 %x
}
declare i32 @llvm.fptosi.sat.i32.f64 (double)
declare i64 @llvm.fptosi.sat.i64.f64 (double)
define i32 @test_signed_i32_f64(double %f) nounwind {
; X86-LABEL: test_signed_i32_f64:
; X86: # %bb.0:
; X86-NEXT: vcvttsd2sis {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
; X64-LABEL: test_signed_i32_f64:
; X64: # %bb.0:
; X64-NEXT: vcvttsd2sis %xmm0, %eax
; X64-NEXT: retq
%x = call i32 @llvm.fptosi.sat.i32.f64(double %f)
ret i32 %x
}
define i64 @test_signed_i64_f64(double %f) nounwind {
; X86-LABEL: test_signed_i64_f64:
; X86: # %bb.0:
; X86-NEXT: pushl %edi
; X86-NEXT: pushl %esi
; X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
; X86-NEXT: vcvttpd2qq %xmm0, %xmm1
; X86-NEXT: vmovd %xmm1, %esi
; X86-NEXT: xorl %ecx, %ecx
; X86-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-NEXT: cmovbl %ecx, %esi
; X86-NEXT: vpextrd $1, %xmm1, %eax
; X86-NEXT: movl $-2147483648, %edi # imm = 0x80000000
; X86-NEXT: cmovael %eax, %edi
; X86-NEXT: vucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
; X86-NEXT: movl $2147483647, %edx # imm = 0x7FFFFFFF
; X86-NEXT: cmovbel %edi, %edx
; X86-NEXT: movl $-1, %eax
; X86-NEXT: cmovbel %esi, %eax
; X86-NEXT: vucomisd %xmm0, %xmm0
; X86-NEXT: cmovpl %ecx, %eax
; X86-NEXT: cmovpl %ecx, %edx
; X86-NEXT: popl %esi
; X86-NEXT: popl %edi
; X86-NEXT: retl
;
; X64-LABEL: test_signed_i64_f64:
; X64: # %bb.0:
; X64-NEXT: vcvttsd2sis %xmm0, %rax
; X64-NEXT: retq
%x = call i64 @llvm.fptosi.sat.i64.f64(double %f)
ret i64 %x
}
; VCVTTPD2DQS
define <2 x i24> @test_signed_v2i24_v2f64(<2 x double> %d) nounwind {
; X86-LABEL: test_signed_v2i24_v2f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2qqs %xmm0, %xmm0
; X86-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0
; X86-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v2i24_v2f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2qqs %xmm0, %xmm0
; X64-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
; X64-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
; X64-NEXT: retq
%x = call <2 x i24> @llvm.fptosi.sat.v2i24.v2f64(<2 x double> %d)
ret <2 x i24> %x
}
define <4 x i24> @test_signed_v4i24_v4f64(<4 x double> %f) nounwind {
; X86-LABEL: test_signed_v4i24_v4f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2dqs %ymm0, %xmm0
; X86-NEXT: vpmaxsd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm0
; X86-NEXT: vpminsd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm0
; X86-NEXT: vzeroupper
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v4i24_v4f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2dqs %ymm0, %xmm0
; X64-NEXT: vpmaxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
; X64-NEXT: vpminsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
; X64-NEXT: vzeroupper
; X64-NEXT: retq
%x = call <4 x i24> @llvm.fptosi.sat.v4i24.v4f64(<4 x double> %f)
ret <4 x i24> %x
}
define <2 x i32> @test_signed_v2i32_v2f64(<2 x double> %d) nounwind {
; CHECK-LABEL: test_signed_v2i32_v2f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2dqs %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <2 x i32> @llvm.fptosi.sat.v2i32.v2f64(<2 x double> %d)
ret <2 x i32> %x
}
define <4 x i32> @test_signed_v4i32_v4f64(<4 x double> %f) nounwind {
; CHECK-LABEL: test_signed_v4i32_v4f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2dqs %ymm0, %xmm0
; CHECK-NEXT: vzeroupper
; CHECK-NEXT: ret{{[l|q]}}
%x = call <4 x i32> @llvm.fptosi.sat.v4i32.v4f64(<4 x double> %f)
ret <4 x i32> %x
}
; VCVTTPD2QQS
define <2 x i48> @test_signed_v2i48_v2f64(<2 x double> %f) nounwind {
; X86-LABEL: test_signed_v2i48_v2f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2qqs %xmm0, %xmm0
; X86-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0
; X86-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v2i48_v2f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2qqs %xmm0, %xmm0
; X64-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
; X64-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
; X64-NEXT: retq
%x = call <2 x i48> @llvm.fptosi.sat.v2i48.v2f64(<2 x double> %f)
ret <2 x i48> %x
}
define <4 x i48> @test_signed_v4i48_v4f64(<4 x double> %f) nounwind {
; X86-LABEL: test_signed_v4i48_v4f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2qqs %ymm0, %ymm0
; X86-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0
; X86-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v4i48_v4f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2qqs %ymm0, %ymm0
; X64-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0
; X64-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0
; X64-NEXT: retq
%x = call <4 x i48> @llvm.fptosi.sat.v4i48.v4f64(<4 x double> %f)
ret <4 x i48> %x
}
define <2 x i64> @test_signed_v2i64_v2f64(<2 x double> %f) nounwind {
; CHECK-LABEL: test_signed_v2i64_v2f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2qqs %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <2 x i64> @llvm.fptosi.sat.v2i64.v2f64(<2 x double> %f)
ret <2 x i64> %x
}
define <4 x i64> @test_signed_v4i64_v4f64(<4 x double> %f) nounwind {
; CHECK-LABEL: test_signed_v4i64_v4f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2qqs %ymm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <4 x i64> @llvm.fptosi.sat.v4i64.v4f64(<4 x double> %f)
ret <4 x i64> %x
}
; VCVTTPD2UDQS
define <2 x i24> @test_unsigned_v2i24_v2f64(<2 x double> %d) nounwind {
; X86-LABEL: test_unsigned_v2i24_v2f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2uqqs %xmm0, %xmm0
; X86-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v2i24_v2f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2uqqs %xmm0, %xmm0
; X64-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
; X64-NEXT: retq
%x = call <2 x i24> @llvm.fptoui.sat.v2i24.v2f64(<2 x double> %d)
ret <2 x i24> %x
}
define <4 x i24> @test_unsigned_v4i24_v4f64(<4 x double> %f) nounwind {
; X86-LABEL: test_unsigned_v4i24_v4f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2udqs %ymm0, %xmm0
; X86-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm0
; X86-NEXT: vzeroupper
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v4i24_v4f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2udqs %ymm0, %xmm0
; X64-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
; X64-NEXT: vzeroupper
; X64-NEXT: retq
%x = call <4 x i24> @llvm.fptoui.sat.v4i24.v4f64(<4 x double> %f)
ret <4 x i24> %x
}
define <2 x i32> @test_unsigned_v2i32_v2f64(<2 x double> %d) nounwind {
; CHECK-LABEL: test_unsigned_v2i32_v2f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2udqs %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <2 x i32> @llvm.fptoui.sat.v2i32.v2f64(<2 x double> %d)
ret <2 x i32> %x
}
define <4 x i32> @test_unsigned_v4i32_v4f64(<4 x double> %f) nounwind {
; CHECK-LABEL: test_unsigned_v4i32_v4f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2udqs %ymm0, %xmm0
; CHECK-NEXT: vzeroupper
; CHECK-NEXT: ret{{[l|q]}}
%x = call <4 x i32> @llvm.fptoui.sat.v4i32.v4f64(<4 x double> %f)
ret <4 x i32> %x
}
; VCVTTPD2UQQS
define <2 x i48> @test_unsigned_v2i48_v2f64(<2 x double> %f) nounwind {
; X86-LABEL: test_unsigned_v2i48_v2f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2uqqs %xmm0, %xmm0
; X86-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v2i48_v2f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2uqqs %xmm0, %xmm0
; X64-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
; X64-NEXT: retq
%x = call <2 x i48> @llvm.fptoui.sat.v2i48.v2f64(<2 x double> %f)
ret <2 x i48> %x
}
define <4 x i48> @test_unsigned_v4i48_v4f64(<4 x double> %f) nounwind {
; X86-LABEL: test_unsigned_v4i48_v4f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2uqqs %ymm0, %ymm0
; X86-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v4i48_v4f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2uqqs %ymm0, %ymm0
; X64-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0
; X64-NEXT: retq
%x = call <4 x i48> @llvm.fptoui.sat.v4i48.v4f64(<4 x double> %f)
ret <4 x i48> %x
}
define <2 x i64> @test_unsigned_v2i64_v2f64(<2 x double> %f) nounwind {
; CHECK-LABEL: test_unsigned_v2i64_v2f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2uqqs %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <2 x i64> @llvm.fptoui.sat.v2i64.v2f64(<2 x double> %f)
ret <2 x i64> %x
}
define <4 x i64> @test_unsigned_v4i64_v4f64(<4 x double> %f) nounwind {
; CHECK-LABEL: test_unsigned_v4i64_v4f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2uqqs %ymm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <4 x i64> @llvm.fptoui.sat.v4i64.v4f64(<4 x double> %f)
ret <4 x i64> %x
}
; VCVTTPS2DQS
define <4 x i24> @test_signed_v4i24_v4f32(<4 x float> %f) nounwind {
; X86-LABEL: test_signed_v4i24_v4f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2dqs %xmm0, %xmm0
; X86-NEXT: vpmaxsd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm0
; X86-NEXT: vpminsd {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm0
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v4i24_v4f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2dqs %xmm0, %xmm0
; X64-NEXT: vpmaxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
; X64-NEXT: vpminsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
; X64-NEXT: retq
%x = call <4 x i24> @llvm.fptosi.sat.v4i24.v4f32(<4 x float> %f)
ret <4 x i24> %x
}
define <8 x i24> @test_signed_v8i24_v8f32(<8 x float> %f) nounwind {
; X86-LABEL: test_signed_v8i24_v8f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2dqs %ymm0, %ymm0
; X86-NEXT: vpmaxsd {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0
; X86-NEXT: vpminsd {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v8i24_v8f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2dqs %ymm0, %ymm0
; X64-NEXT: vpmaxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0
; X64-NEXT: vpminsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0
; X64-NEXT: retq
%x = call <8 x i24> @llvm.fptosi.sat.v8i24.v8f32(<8 x float> %f)
ret <8 x i24> %x
}
define <4 x i32> @test_signed_v4i32_v4f32(<4 x float> %f) nounwind {
; CHECK-LABEL: test_signed_v4i32_v4f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2dqs %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <4 x i32> @llvm.fptosi.sat.v4i32.v4f32(<4 x float> %f)
ret <4 x i32> %x
}
define <8 x i32> @test_signed_v8i32_v8f32(<8 x float> %f) nounwind {
; CHECK-LABEL: test_signed_v8i32_v8f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2dqs %ymm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i32> @llvm.fptosi.sat.v8i32.v8f32(<8 x float> %f)
ret <8 x i32> %x
}
; VCVTTPS2UDQS
define <4 x i24> @test_unsigned_v4i24_v4f32(<4 x float> %f) nounwind {
; X86-LABEL: test_unsigned_v4i24_v4f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2udqs %xmm0, %xmm0
; X86-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %xmm0, %xmm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v4i24_v4f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2udqs %xmm0, %xmm0
; X64-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
; X64-NEXT: retq
%x = call <4 x i24> @llvm.fptoui.sat.v4i24.v4f32(<4 x float> %f)
ret <4 x i24> %x
}
define <8 x i24> @test_unsigned_v8i24_v8f32(<8 x float> %f) nounwind {
; X86-LABEL: test_unsigned_v8i24_v8f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2udqs %ymm0, %ymm0
; X86-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v8i24_v8f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2udqs %ymm0, %ymm0
; X64-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0
; X64-NEXT: retq
%x = call <8 x i24> @llvm.fptoui.sat.v8i24.v8f32(<8 x float> %f)
ret <8 x i24> %x
}
define <4 x i32> @test_unsigned_v4i32_v4f32(<4 x float> %f) nounwind {
; CHECK-LABEL: test_unsigned_v4i32_v4f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2udqs %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <4 x i32> @llvm.fptoui.sat.v4i32.v4f32(<4 x float> %f)
ret <4 x i32> %x
}
define <8 x i32> @test_unsigned_v8i32_v8f32(<8 x float> %f) nounwind {
; CHECK-LABEL: test_unsigned_v8i32_v8f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2udqs %ymm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i32> @llvm.fptoui.sat.v8i32.v8f32(<8 x float> %f)
ret <8 x i32> %x
}
; VCVTTPS2QQS
define <2 x i48> @test_signed_v2i48_v2f32(<2 x float> %f) nounwind {
; X86-LABEL: test_signed_v2i48_v2f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2qqs %xmm0, %ymm0
; X86-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0
; X86-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0
; X86-NEXT: vzeroupper
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v2i48_v2f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2qqs %xmm0, %ymm0
; X64-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
; X64-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
; X64-NEXT: vzeroupper
; X64-NEXT: retq
%x = call <2 x i48> @llvm.fptosi.sat.v2i48.v2f32(<2 x float> %f)
ret <2 x i48> %x
}
define <4 x i48> @test_signed_v4i48_v4f32(<4 x float> %f) nounwind {
; X86-LABEL: test_signed_v4i48_v4f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2qqs %xmm0, %ymm0
; X86-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0
; X86-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v4i48_v4f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2qqs %xmm0, %ymm0
; X64-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0
; X64-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0
; X64-NEXT: retq
%x = call <4 x i48> @llvm.fptosi.sat.v4i48.v4f32(<4 x float> %f)
ret <4 x i48> %x
}
define <2 x i64> @test_signed_v2i64_v2f32(<2 x float> %f) nounwind {
; CHECK-LABEL: test_signed_v2i64_v2f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2qqs %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <2 x i64> @llvm.fptosi.sat.v2i64.v2f32(<2 x float> %f)
ret <2 x i64> %x
}
define <4 x i64> @test_signed_v4i64_v4f32(<4 x float> %f) nounwind {
; CHECK-LABEL: test_signed_v4i64_v4f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2qqs %xmm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <4 x i64> @llvm.fptosi.sat.v4i64.v4f32(<4 x float> %f)
ret <4 x i64> %x
}
; VCVTTPS2UQQS
define <2 x i48> @test_unsigned_v2i48_v2f32(<2 x float> %f) nounwind {
; X86-LABEL: test_unsigned_v2i48_v2f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2uqqs %xmm0, %ymm0
; X86-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}{1to2}, %xmm0, %xmm0
; X86-NEXT: vzeroupper
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v2i48_v2f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2uqqs %xmm0, %ymm0
; X64-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %xmm0
; X64-NEXT: vzeroupper
; X64-NEXT: retq
%x = call <2 x i48> @llvm.fptoui.sat.v2i48.v2f32(<2 x float> %f)
ret <2 x i48> %x
}
define <4 x i48> @test_unsigned_v4i48_v4f32(<4 x float> %f) nounwind {
; X86-LABEL: test_unsigned_v4i48_v4f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2uqqs %xmm0, %ymm0
; X86-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}{1to4}, %ymm0, %ymm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v4i48_v4f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2uqqs %xmm0, %ymm0
; X64-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %ymm0, %ymm0
; X64-NEXT: retq
%x = call <4 x i48> @llvm.fptoui.sat.v4i48.v4f32(<4 x float> %f)
ret <4 x i48> %x
}
define <2 x i64> @test_unsigned_v2i64_v2f32(<2 x float> %f) nounwind {
; CHECK-LABEL: test_unsigned_v2i64_v2f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2uqqs %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <2 x i64> @llvm.fptoui.sat.v2i64.v2f32(<2 x float> %f)
ret <2 x i64> %x
}
define <4 x i64> @test_unsigned_v4i64_v4f32(<4 x float> %f) nounwind {
; CHECK-LABEL: test_unsigned_v4i64_v4f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2uqqs %xmm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <4 x i64> @llvm.fptoui.sat.v4i64.v4f32(<4 x float> %f)
ret <4 x i64> %x
}
; VCVTTBF162IUBS
define <8 x i8> @test_unsigned_v8i8_v8bf16(<8 x bfloat> %f) nounwind {
; CHECK-LABEL: test_unsigned_v8i8_v8bf16:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttbf162iubs %xmm0, %xmm0
; CHECK-NEXT: vpmovwb %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i8> @llvm.fptoui.sat.v8i8.v8bf16(<8 x bfloat> %f)
ret <8 x i8> %x
}
define <16 x i8> @test_unsigned_v16i8_v16bf16(<16 x bfloat> %f) nounwind {
; CHECK-LABEL: test_unsigned_v16i8_v16bf16:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttbf162iubs %ymm0, %ymm0
; CHECK-NEXT: vpmovwb %ymm0, %xmm0
; CHECK-NEXT: vzeroupper
; CHECK-NEXT: ret{{[l|q]}}
%x = call <16 x i8> @llvm.fptoui.sat.v16i8.v16bf16(<16 x bfloat> %f)
ret <16 x i8> %x
}
; VCVTTBF162IBS
define <8 x i8> @test_signed_v8i8_v8bf16(<8 x bfloat> %f) nounwind {
; CHECK-LABEL: test_signed_v8i8_v8bf16:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttbf162ibs %xmm0, %xmm0
; CHECK-NEXT: vpmovwb %xmm0, %xmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i8> @llvm.fptosi.sat.v8i8.v8bf16(<8 x bfloat> %f)
ret <8 x i8> %x
}
define <16 x i8> @test_signed_v16i8_v16bf16(<16 x bfloat> %f) nounwind {
; CHECK-LABEL: test_signed_v16i8_v16bf16:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttbf162ibs %ymm0, %ymm0
; CHECK-NEXT: vpmovwb %ymm0, %xmm0
; CHECK-NEXT: vzeroupper
; CHECK-NEXT: ret{{[l|q]}}
%x = call <16 x i8> @llvm.fptosi.sat.v16i8.v16bf16(<16 x bfloat> %f)
ret <16 x i8> %x
}