Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / float-conv-elim.ll
blob5442125f87653e923577ea76d25950fefc7fc01f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-- < %s | FileCheck %s
4 define i32 @s32_f32_s24_s32(i32 %a) {
5 ; CHECK-LABEL: s32_f32_s24_s32:
6 ; CHECK:       // %bb.0:
7 ; CHECK-NEXT:    sbfx w0, w0, #0, #24
8 ; CHECK-NEXT:    ret
9   %f = sitofp i32 %a to float
10   %i = fptosi float %f to i24
11   %r = sext i24 %i to i32
12   ret i32 %r
15 define i32 @s32_f32_u24_u32(i32 %a) {
16 ; CHECK-LABEL: s32_f32_u24_u32:
17 ; CHECK:       // %bb.0:
18 ; CHECK-NEXT:    and w0, w0, #0xffffff
19 ; CHECK-NEXT:    ret
20   %f = sitofp i32 %a to float
21   %i = fptoui float %f to i24
22   %r = zext i24 %i to i32
23   ret i32 %r
26 define i32 @u32_f32_s24_s32(i32 %a) {
27 ; CHECK-LABEL: u32_f32_s24_s32:
28 ; CHECK:       // %bb.0:
29 ; CHECK-NEXT:    sbfx w0, w0, #0, #24
30 ; CHECK-NEXT:    ret
31   %f = uitofp i32 %a to float
32   %i = fptosi float %f to i24
33   %r = sext i24 %i to i32
34   ret i32 %r
37 define i32 @u32_f32_u24_u32(i32 %a) {
38 ; CHECK-LABEL: u32_f32_u24_u32:
39 ; CHECK:       // %bb.0:
40 ; CHECK-NEXT:    and w0, w0, #0xffffff
41 ; CHECK-NEXT:    ret
42   %f = uitofp i32 %a to float
43   %i = fptoui float %f to i24
44   %r = zext i24 %i to i32
45   ret i32 %r
48 ; This requires converting to FP and back.
50 define i32 @s32_f32_s25_s32(i32 %a) {
51 ; CHECK-LABEL: s32_f32_s25_s32:
52 ; CHECK:       // %bb.0:
53 ; CHECK-NEXT:    scvtf s0, w0
54 ; CHECK-NEXT:    fcvtzs w0, s0
55 ; CHECK-NEXT:    ret
56   %f = sitofp i32 %a to float
57   %i = fptosi float %f to i25
58   %r = sext i25 %i to i32
59   ret i32 %r
62 define i32 @s32_f32_u25_u32(i32 %a) {
63 ; CHECK-LABEL: s32_f32_u25_u32:
64 ; CHECK:       // %bb.0:
65 ; CHECK-NEXT:    scvtf s0, w0
66 ; CHECK-NEXT:    fcvtzs w0, s0
67 ; CHECK-NEXT:    ret
68   %f = sitofp i32 %a to float
69   %i = fptoui float %f to i25
70   %r = zext i25 %i to i32
71   ret i32 %r
74 ; TODO: This could avoid converting to FP.
76 define i32 @u32_f32_s25_s32(i32 %a) {
77 ; CHECK-LABEL: u32_f32_s25_s32:
78 ; CHECK:       // %bb.0:
79 ; CHECK-NEXT:    ucvtf s0, w0
80 ; CHECK-NEXT:    fcvtzs w0, s0
81 ; CHECK-NEXT:    ret
82   %f = uitofp i32 %a to float
83   %i = fptosi float %f to i25
84   %r = sext i25 %i to i32
85   ret i32 %r
88 define i32 @u32_f32_u25_u32(i32 %a) {
89 ; CHECK-LABEL: u32_f32_u25_u32:
90 ; CHECK:       // %bb.0:
91 ; CHECK-NEXT:    ucvtf s0, w0
92 ; CHECK-NEXT:    fcvtzs w0, s0
93 ; CHECK-NEXT:    ret
94   %f = uitofp i32 %a to float
95   %i = fptoui float %f to i25
96   %r = zext i25 %i to i32
97   ret i32 %r