blob: 6a3acf36bb1f2f751380d86ed7705516bb90e8f1 [file]
; 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
; VCVTTPD2DQS
define <8 x i24> @test_signed_v8i24_v8f64(<8 x double> %f) nounwind {
; X86-LABEL: test_signed_v8i24_v8f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2dqs %zmm0, %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_v8f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2dqs %zmm0, %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.v8f64(<8 x double> %f)
ret <8 x i24> %x
}
define <8 x i32> @test_signed_v8i32_v8f64(<8 x double> %f) nounwind {
; CHECK-LABEL: test_signed_v8i32_v8f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2dqs %zmm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i32> @llvm.fptosi.sat.v8i32.v8f64(<8 x double> %f)
ret <8 x i32> %x
}
; VCVTTPD2QQS
define <8 x i48> @test_signed_v8i48_v8f64(<8 x double> %f) nounwind {
; X86-LABEL: test_signed_v8i48_v8f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2qqs %zmm0, %zmm0
; X86-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0
; X86-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v8i48_v8f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2qqs %zmm0, %zmm0
; X64-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0
; X64-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0
; X64-NEXT: retq
%x = call <8 x i48> @llvm.fptosi.sat.v8i48.v8f64(<8 x double> %f)
ret <8 x i48> %x
}
define <8 x i64> @test_signed_v8i64_v8f64(<8 x double> %f) nounwind {
; CHECK-LABEL: test_signed_v8i64_v8f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2qqs %zmm0, %zmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i64> @llvm.fptosi.sat.v8i64.v8f64(<8 x double> %f)
ret <8 x i64> %x
}
; VCVTTPD2UDQS
define <8 x i24> @test_unsigned_v8i24_v8f64(<8 x double> %f) nounwind {
; X86-LABEL: test_unsigned_v8i24_v8f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2udqs %zmm0, %ymm0
; X86-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %ymm0, %ymm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v8i24_v8f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2udqs %zmm0, %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.v8f64(<8 x double> %f)
ret <8 x i24> %x
}
define <8 x i32> @test_unsigned_v8i32_v8f64(<8 x double> %f) nounwind {
; CHECK-LABEL: test_unsigned_v8i32_v8f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2udqs %zmm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i32> @llvm.fptoui.sat.v8i32.v8f64(<8 x double> %f)
ret <8 x i32> %x
}
; VCVTTPD2UQQS
define <8 x i48> @test_unsigned_v8i48_v8f64(<8 x double> %f) nounwind {
; X86-LABEL: test_unsigned_v8i48_v8f64:
; X86: # %bb.0:
; X86-NEXT: vcvttpd2uqqs %zmm0, %zmm0
; X86-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v8i48_v8f64:
; X64: # %bb.0:
; X64-NEXT: vcvttpd2uqqs %zmm0, %zmm0
; X64-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0
; X64-NEXT: retq
%x = call <8 x i48> @llvm.fptoui.sat.v8i48.v8f64(<8 x double> %f)
ret <8 x i48> %x
}
define <8 x i64> @test_unsigned_v8i64_v8f64(<8 x double> %f) nounwind {
; CHECK-LABEL: test_unsigned_v8i64_v8f64:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttpd2uqqs %zmm0, %zmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i64> @llvm.fptoui.sat.v8i64.v8f64(<8 x double> %f)
ret <8 x i64> %x
}
; VCVTTPS2DQS
define <16 x i24> @test_signed_v16i24_v16f32(<16 x float> %f) nounwind {
; X86-LABEL: test_signed_v16i24_v16f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2dqs %zmm0, %zmm0
; X86-NEXT: vpmaxsd {{\.?LCPI[0-9]+_[0-9]+}}{1to16}, %zmm0, %zmm0
; X86-NEXT: vpminsd {{\.?LCPI[0-9]+_[0-9]+}}{1to16}, %zmm0, %zmm0
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v16i24_v16f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2dqs %zmm0, %zmm0
; X64-NEXT: vpmaxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0
; X64-NEXT: vpminsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0
; X64-NEXT: retq
%x = call <16 x i24> @llvm.fptosi.sat.v16i24.v16f32(<16 x float> %f)
ret <16 x i24> %x
}
define <16 x i32> @test_signed_v16i32_v16f32(<16 x float> %f) nounwind {
; CHECK-LABEL: test_signed_v16i32_v16f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2dqs %zmm0, %zmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <16 x i32> @llvm.fptosi.sat.v16i32.v16f32(<16 x float> %f)
ret <16 x i32> %x
}
; VCVTTPS2UDQS
define <16 x i24> @test_unsigned_v16i24_v16f32(<16 x float> %f) nounwind {
; X86-LABEL: test_unsigned_v16i24_v16f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2udqs %zmm0, %zmm0
; X86-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}{1to16}, %zmm0, %zmm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v16i24_v16f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2udqs %zmm0, %zmm0
; X64-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm0
; X64-NEXT: retq
%x = call <16 x i24> @llvm.fptoui.sat.v16i24.v16f32(<16 x float> %f)
ret <16 x i24> %x
}
define <16 x i32> @test_unsigned_v16i32_v16f32(<16 x float> %f) nounwind {
; CHECK-LABEL: test_unsigned_v16i32_v16f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2udqs %zmm0, %zmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <16 x i32> @llvm.fptoui.sat.v16i32.v16f32(<16 x float> %f)
ret <16 x i32> %x
}
; VCVTTPS2QQS
define <8 x i48> @test_signed_v8i48_v8f32(<8 x float> %f) nounwind {
; X86-LABEL: test_signed_v8i48_v8f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2qqs %ymm0, %zmm0
; X86-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0
; X86-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0
; X86-NEXT: retl
;
; X64-LABEL: test_signed_v8i48_v8f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2qqs %ymm0, %zmm0
; X64-NEXT: vpmaxsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0
; X64-NEXT: vpminsq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0
; X64-NEXT: retq
%x = call <8 x i48> @llvm.fptosi.sat.v8i48.v8f32(<8 x float> %f)
ret <8 x i48> %x
}
define <8 x i64> @test_signed_v8i64_v8f32(<8 x float> %f) nounwind {
; CHECK-LABEL: test_signed_v8i64_v8f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2qqs %ymm0, %zmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i64> @llvm.fptosi.sat.v8i64.v8f32(<8 x float> %f)
ret <8 x i64> %x
}
; VCVTTPS2UQQS
define <8 x i48> @test_unsigned_v8i48_v8f32(<8 x float> %f) nounwind {
; X86-LABEL: test_unsigned_v8i48_v8f32:
; X86: # %bb.0:
; X86-NEXT: vcvttps2uqqs %ymm0, %zmm0
; X86-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}{1to8}, %zmm0, %zmm0
; X86-NEXT: retl
;
; X64-LABEL: test_unsigned_v8i48_v8f32:
; X64: # %bb.0:
; X64-NEXT: vcvttps2uqqs %ymm0, %zmm0
; X64-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %zmm0, %zmm0
; X64-NEXT: retq
%x = call <8 x i48> @llvm.fptoui.sat.v8i48.v8f32(<8 x float> %f)
ret <8 x i48> %x
}
define <8 x i64> @test_unsigned_v8i64_v8f32(<8 x float> %f) nounwind {
; CHECK-LABEL: test_unsigned_v8i64_v8f32:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttps2uqqs %ymm0, %zmm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <8 x i64> @llvm.fptoui.sat.v8i64.v8f32(<8 x float> %f)
ret <8 x i64> %x
}
; VCVTTBF162IUBS
define <32 x i8> @test_unsigned_v32i8_v32bf16(<32 x bfloat> %f) nounwind {
; CHECK-LABEL: test_unsigned_v32i8_v32bf16:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttbf162iubs %zmm0, %zmm0
; CHECK-NEXT: vpmovwb %zmm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <32 x i8> @llvm.fptoui.sat.v32i8.v32bf16(<32 x bfloat> %f)
ret <32 x i8> %x
}
; VCVTTBF162IBS
define <32 x i8> @test_signed_v32i8_v32bf16(<32 x bfloat> %f) nounwind {
; CHECK-LABEL: test_signed_v32i8_v32bf16:
; CHECK: # %bb.0:
; CHECK-NEXT: vcvttbf162ibs %zmm0, %zmm0
; CHECK-NEXT: vpmovwb %zmm0, %ymm0
; CHECK-NEXT: ret{{[l|q]}}
%x = call <32 x i8> @llvm.fptosi.sat.v32i8.v32bf16(<32 x bfloat> %f)
ret <32 x i8> %x
}