1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00
llvm-mirror/test/CodeGen/Thumb2/mve-vcvt-fixed-to-float.ll
Sam Tebbs 5e767994e1 [ARM] Transform a floating-point to fixed-point conversion to a VCVT_fix
Much like fixed-point to floating-point conversion, the converse can
also be transformed into a fixed-point VCVT. This patch transforms
multiplications of floating point numbers by 2^n into a VCVT_fix. The
exception is that a float to fixed conversion with 1 fractional bit
ends up being an FADD (FADD(x, x) emulates FMUL(x, 2)) rather than an FMUL so there is a special case for that. This patch also moves the code from https://reviews.llvm.org/D103903 into a separate function as fixed to float and float to fixed are very similar.

Differential Revision: https://reviews.llvm.org/D104793
2021-07-01 15:10:40 +01:00

1032 lines
38 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi %s -o - -mattr=+mve.fp | FileCheck %s
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_1(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_1:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #1
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_2(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_2:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #2
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 2.500000e-01, float 2.500000e-01, float 2.500000e-01, float 2.500000e-01>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_3(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_3:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #3
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 1.250000e-01, float 1.250000e-01, float 1.250000e-01, float 1.250000e-01>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_4(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_4:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #4
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 6.250000e-02, float 6.250000e-02, float 6.250000e-02, float 6.250000e-02>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_5(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_5:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #5
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 3.125000e-02, float 3.125000e-02, float 3.125000e-02, float 3.125000e-02>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_6(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_6:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #6
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_7(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_7:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #7
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 7.812500e-03, float 7.812500e-03, float 7.812500e-03, float 7.812500e-03>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_8(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_8:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #8
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 3.906250e-03, float 3.906250e-03, float 3.906250e-03, float 3.906250e-03>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_9(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_9:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #9
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F60000000000000, float 0x3F60000000000000, float 0x3F60000000000000, float 0x3F60000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_10(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_10:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #10
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F50000000000000, float 0x3F50000000000000, float 0x3F50000000000000, float 0x3F50000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_11(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_11:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #11
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F40000000000000, float 0x3F40000000000000, float 0x3F40000000000000, float 0x3F40000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_12(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_12:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #12
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F30000000000000, float 0x3F30000000000000, float 0x3F30000000000000, float 0x3F30000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_13(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_13:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #13
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F20000000000000, float 0x3F20000000000000, float 0x3F20000000000000, float 0x3F20000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_14(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_14:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #14
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_15(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_15:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #15
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F00000000000000, float 0x3F00000000000000, float 0x3F00000000000000, float 0x3F00000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_16(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_16:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #16
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_17(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_17:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #17
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EE0000000000000, float 0x3EE0000000000000, float 0x3EE0000000000000, float 0x3EE0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_18(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_18:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #18
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3ED0000000000000, float 0x3ED0000000000000, float 0x3ED0000000000000, float 0x3ED0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_19(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_19:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #19
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EC0000000000000, float 0x3EC0000000000000, float 0x3EC0000000000000, float 0x3EC0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_20(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_20:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #20
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EB0000000000000, float 0x3EB0000000000000, float 0x3EB0000000000000, float 0x3EB0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_21(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_21:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #21
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EA0000000000000, float 0x3EA0000000000000, float 0x3EA0000000000000, float 0x3EA0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_22(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_22:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #22
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E90000000000000, float 0x3E90000000000000, float 0x3E90000000000000, float 0x3E90000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_23(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_23:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #23
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E80000000000000, float 0x3E80000000000000, float 0x3E80000000000000, float 0x3E80000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_24(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_24:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #24
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E70000000000000, float 0x3E70000000000000, float 0x3E70000000000000, float 0x3E70000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_25(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_25:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #25
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E60000000000000, float 0x3E60000000000000, float 0x3E60000000000000, float 0x3E60000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_26(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_26:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #26
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E50000000000000, float 0x3E50000000000000, float 0x3E50000000000000, float 0x3E50000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_27(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_27:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #27
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E40000000000000, float 0x3E40000000000000, float 0x3E40000000000000, float 0x3E40000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_28(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_28:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #28
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E30000000000000, float 0x3E30000000000000, float 0x3E30000000000000, float 0x3E30000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_29(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_29:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #29
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E20000000000000, float 0x3E20000000000000, float 0x3E20000000000000, float 0x3E20000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_30(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_30:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #30
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E10000000000000, float 0x3E10000000000000, float 0x3E10000000000000, float 0x3E10000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_31(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_31:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #31
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E00000000000000, float 0x3E00000000000000, float 0x3E00000000000000, float 0x3E00000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_32(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_32:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.s32 q0, q0, #32
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3DF0000000000000, float 0x3DF0000000000000, float 0x3DF0000000000000, float 0x3DF0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_i32_33(<4 x i32> %0) {
; CHECK-LABEL: vcvt_i32_33:
; CHECK: @ %bb.0:
; CHECK-NEXT: vmov.i32 q1, #0x2f000000
; CHECK-NEXT: vcvt.f32.s32 q0, q0
; CHECK-NEXT: vmul.f32 q0, q0, q1
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3DE0000000000000, float 0x3DE0000000000000, float 0x3DE0000000000000, float 0x3DE0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_1(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_1:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #1
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_2(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_2:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #2
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_3(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_3:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #3
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_4(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_4:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #4
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_5(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_5:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #5
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_6(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_6:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #6
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_7(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_7:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #7
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_8(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_8:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #8
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_9(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_9:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #9
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_10(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_10:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #10
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_11(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_11:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #11
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_12(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_12:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #12
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_13(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_13:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #13
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_14(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_14:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #14
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_i16_15(<8 x i16> %0) {
; CHECK-LABEL: vcvt_i16_15:
; CHECK: @ %bb.0:
; CHECK-NEXT: vmov.i16 q1, #0x200
; CHECK-NEXT: vcvt.f16.s16 q0, q0
; CHECK-NEXT: vmul.f16 q0, q0, q1
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_1(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_1:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #1
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_2(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_2:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #2
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 2.500000e-01, float 2.500000e-01, float 2.500000e-01, float 2.500000e-01>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_3(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_3:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #3
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 1.250000e-01, float 1.250000e-01, float 1.250000e-01, float 1.250000e-01>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_4(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_4:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #4
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 6.250000e-02, float 6.250000e-02, float 6.250000e-02, float 6.250000e-02>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_5(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_5:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #5
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 3.125000e-02, float 3.125000e-02, float 3.125000e-02, float 3.125000e-02>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_6(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_6:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #6
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 1.562500e-02, float 1.562500e-02, float 1.562500e-02, float 1.562500e-02>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_7(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_7:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #7
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 7.812500e-03, float 7.812500e-03, float 7.812500e-03, float 7.812500e-03>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_8(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_8:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #8
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 3.906250e-03, float 3.906250e-03, float 3.906250e-03, float 3.906250e-03>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_9(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_9:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #9
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F60000000000000, float 0x3F60000000000000, float 0x3F60000000000000, float 0x3F60000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_10(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_10:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #10
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F50000000000000, float 0x3F50000000000000, float 0x3F50000000000000, float 0x3F50000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_11(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_11:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #11
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F40000000000000, float 0x3F40000000000000, float 0x3F40000000000000, float 0x3F40000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_12(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_12:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #12
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F30000000000000, float 0x3F30000000000000, float 0x3F30000000000000, float 0x3F30000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_13(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_13:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #13
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F20000000000000, float 0x3F20000000000000, float 0x3F20000000000000, float 0x3F20000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_14(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_14:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #14
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000, float 0x3F10000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_15(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_15:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #15
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F00000000000000, float 0x3F00000000000000, float 0x3F00000000000000, float 0x3F00000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_16(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_16:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #16
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000, float 0x3EF0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_17(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_17:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #17
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EE0000000000000, float 0x3EE0000000000000, float 0x3EE0000000000000, float 0x3EE0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_18(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_18:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #18
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3ED0000000000000, float 0x3ED0000000000000, float 0x3ED0000000000000, float 0x3ED0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_19(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_19:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #19
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EC0000000000000, float 0x3EC0000000000000, float 0x3EC0000000000000, float 0x3EC0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_20(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_20:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #20
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EB0000000000000, float 0x3EB0000000000000, float 0x3EB0000000000000, float 0x3EB0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_21(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_21:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #21
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3EA0000000000000, float 0x3EA0000000000000, float 0x3EA0000000000000, float 0x3EA0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_22(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_22:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #22
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E90000000000000, float 0x3E90000000000000, float 0x3E90000000000000, float 0x3E90000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_23(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_23:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #23
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E80000000000000, float 0x3E80000000000000, float 0x3E80000000000000, float 0x3E80000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_24(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_24:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #24
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E70000000000000, float 0x3E70000000000000, float 0x3E70000000000000, float 0x3E70000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_25(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_25:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #25
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E60000000000000, float 0x3E60000000000000, float 0x3E60000000000000, float 0x3E60000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_26(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_26:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #26
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E50000000000000, float 0x3E50000000000000, float 0x3E50000000000000, float 0x3E50000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_27(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_27:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #27
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E40000000000000, float 0x3E40000000000000, float 0x3E40000000000000, float 0x3E40000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_28(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_28:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #28
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E30000000000000, float 0x3E30000000000000, float 0x3E30000000000000, float 0x3E30000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_29(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_29:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #29
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E20000000000000, float 0x3E20000000000000, float 0x3E20000000000000, float 0x3E20000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_30(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_30:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #30
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3E10000000000000, float 0x3E10000000000000, float 0x3E10000000000000, float 0x3E10000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_31(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_31:
; CHECK: @ %bb.0:
; CHECK-NEXT: vmov.i32 q1, #0xb0000000
; CHECK-NEXT: vcvt.f32.u32 q0, q0
; CHECK-NEXT: vmul.f32 q0, q0, q1
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_32(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_32:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f32.u32 q0, q0, #32
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3DF0000000000000, float 0x3DF0000000000000, float 0x3DF0000000000000, float 0x3DF0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_u32_33(<4 x i32> %0) {
; CHECK-LABEL: vcvt_u32_33:
; CHECK: @ %bb.0:
; CHECK-NEXT: vmov.i32 q1, #0x2f000000
; CHECK-NEXT: vcvt.f32.u32 q0, q0
; CHECK-NEXT: vmul.f32 q0, q0, q1
; CHECK-NEXT: bx lr
%2 = uitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3DE0000000000000, float 0x3DE0000000000000, float 0x3DE0000000000000, float 0x3DE0000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_1(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_1:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #1
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_2(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_2:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #2
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400, half 0xH3400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_3(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_3:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #3
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000, half 0xH3000>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_4(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_4:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #4
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00, half 0xH2C00>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_5(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_5:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #5
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800, half 0xH2800>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_6(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_6:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #6
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400, half 0xH2400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_7(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_7:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #7
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000, half 0xH2000>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_8(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_8:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #8
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00, half 0xH1C00>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_9(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_9:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #9
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800, half 0xH1800>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_10(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_10:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #10
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400, half 0xH1400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_11(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_11:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #11
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000, half 0xH1000>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_12(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_12:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #12
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00, half 0xH0C00>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_13(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_13:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #13
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800, half 0xH0800>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_14(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_14:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.u16 q0, q0, #14
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_15(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_15:
; CHECK: @ %bb.0:
; CHECK-NEXT: vmov.i16 q1, #0x200
; CHECK-NEXT: vcvt.f16.u16 q0, q0
; CHECK-NEXT: vmul.f16 q0, q0, q1
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul ninf <8 x half> %2, <half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200, half 0xH0200>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_u16_inf(<8 x i16> %0) {
; CHECK-LABEL: vcvt_u16_inf:
; CHECK: @ %bb.0:
; CHECK-NEXT: vmov.i16 q1, #0x400
; CHECK-NEXT: vcvt.f16.u16 q0, q0
; CHECK-NEXT: vmul.f16 q0, q0, q1
; CHECK-NEXT: bx lr
%2 = uitofp <8 x i16> %0 to <8 x half>
%3 = fmul <8 x half> %2, <half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <8 x half> @vcvt_s16_inf(<8 x i16> %0) {
; CHECK-LABEL: vcvt_s16_inf:
; CHECK: @ %bb.0:
; CHECK-NEXT: vcvt.f16.s16 q0, q0, #14
; CHECK-NEXT: bx lr
%2 = sitofp <8 x i16> %0 to <8 x half>
%3 = fmul <8 x half> %2, <half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400, half 0xH0400>
ret <8 x half> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_bad_imm(<4 x i32> %0) {
; CHECK-LABEL: vcvt_bad_imm:
; CHECK: @ %bb.0:
; CHECK-NEXT: movw r0, #2048
; CHECK-NEXT: vcvt.f32.s32 q0, q0
; CHECK-NEXT: movt r0, #15104
; CHECK-NEXT: vmul.f32 q0, q0, r0
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0x3F60010000000000, float 0x3F60010000000000, float 0x3F60010000000000, float 0x3F60010000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_negative(<4 x i32> %0) {
; CHECK-LABEL: vcvt_negative:
; CHECK: @ %bb.0:
; CHECK-NEXT: vmov.i32 q1, #0xb8000000
; CHECK-NEXT: vcvt.f32.s32 q0, q0
; CHECK-NEXT: vmul.f32 q0, q0, q1
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0xBF00000000000000, float 0xBF00000000000000, float 0xBF00000000000000, float 0xBF00000000000000>
ret <4 x float> %3
}
define arm_aapcs_vfpcc <4 x float> @vcvt_negative2(<4 x i32> %0) {
; CHECK-LABEL: vcvt_negative2:
; CHECK: @ %bb.0:
; CHECK-NEXT: vmov.i32 q1, #0xb0000000
; CHECK-NEXT: vcvt.f32.s32 q0, q0
; CHECK-NEXT: vmul.f32 q0, q0, q1
; CHECK-NEXT: bx lr
%2 = sitofp <4 x i32> %0 to <4 x float>
%3 = fmul <4 x float> %2, <float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000, float 0xBE00000000000000>
ret <4 x float> %3
}