Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AArch64 / arm64-fast-isel-conversion-fallback.ll
blobb3c073f5354204ca189e636e5946aebc9437f3a4
1 ; RUN: llc -O0 -fast-isel -verify-machineinstrs -mtriple=arm64-eabi < %s | FileCheck --enable-var-scope %s
3 ; Test fptosi
4 define i32 @fptosi_wh(half %a) nounwind ssp {
5 entry:
6 ; CHECK-LABEL: fptosi_wh
7 ; CHECK: fcvt [[REG:s[0-9]+]], h0
8 ; CHECK: fcvtzs w0, [[REG]]
9   %conv = fptosi half %a to i32
10   ret i32 %conv
13 ; Test fptoui
14 define i32 @fptoui_swh(half %a) nounwind ssp {
15 entry:
16 ; CHECK-LABEL: fptoui_swh
17 ; CHECK: fcvt [[REG:s[0-9]+]], h0
18 ; CHECK: fcvtzu w0, [[REG]]
19   %conv = fptoui half %a to i32
20   ret i32 %conv
23 ; Test sitofp
24 define half @sitofp_hw_i1(i1 %a) nounwind ssp {
25 entry:
26 ; CHECK-LABEL: sitofp_hw_i1
27 ; CHECK: sbfx [[REG:w[0-9]+]], w0, #0, #1
28 ; CHECK: scvtf s0, [[REG]]
29 ; CHECK: fcvt  h0, s0
30   %conv = sitofp i1 %a to half
31   ret half %conv
34 ; Test sitofp
35 define half @sitofp_hw_i8(i8 %a) nounwind ssp {
36 entry:
37 ; CHECK-LABEL: sitofp_hw_i8
38 ; CHECK: sxtb [[REG:w[0-9]+]], w0
39 ; CHECK: scvtf s0, [[REG]]
40 ; CHECK: fcvt  h0, s0
41   %conv = sitofp i8 %a to half
42   ret half %conv
45 ; Test sitofp
46 define half @sitofp_hw_i16(i16 %a) nounwind ssp {
47 entry:
48 ; CHECK-LABEL: sitofp_hw_i16
49 ; CHECK: sxth [[REG:w[0-9]+]], w0
50 ; CHECK: scvtf s0, [[REG]]
51 ; CHECK: fcvt  h0, s0
52   %conv = sitofp i16 %a to half
53   ret half %conv
56 ; Test sitofp
57 define half @sitofp_hw_i32(i32 %a) nounwind ssp {
58 entry:
59 ; CHECK-LABEL: sitofp_hw_i32
60 ; CHECK: scvtf s0, w0
61 ; CHECK: fcvt  h0, s0
62   %conv = sitofp i32 %a to half
63   ret half %conv
66 ; Test sitofp
67 define half @sitofp_hx(i64 %a) nounwind ssp {
68 entry:
69 ; CHECK-LABEL: sitofp_hx
70 ; CHECK: scvtf s0, x0
71 ; CHECK: fcvt  h0, s0
72   %conv = sitofp i64 %a to half
73   ret half %conv
76 ; Test uitofp
77 define half @uitofp_hw_i1(i1 %a) nounwind ssp {
78 entry:
79 ; CHECK-LABEL: uitofp_hw_i1
80 ; CHECK: and [[REG:w[0-9]+]], w0, #0x1
81 ; CHECK: ucvtf s0, [[REG]]
82 ; CHECK: fcvt  h0, s0
83   %conv = uitofp i1 %a to half
84   ret half %conv
87 ; Test uitofp
88 define half @uitofp_hw_i8(i8 %a) nounwind ssp {
89 entry:
90 ; CHECK-LABEL: uitofp_hw_i8
91 ; CHECK: and [[REG:w[0-9]+]], w0, #0xff
92 ; CHECK: ucvtf s0, [[REG]]
93 ; CHECK: fcvt  h0, s0
94   %conv = uitofp i8 %a to half
95   ret half %conv
98 ; Test uitofp
99 define half @uitofp_hw_i16(i16 %a) nounwind ssp {
100 entry:
101 ; CHECK-LABEL: uitofp_hw_i16
102 ; CHECK: and [[REG:w[0-9]+]], w0, #0xffff
103 ; CHECK: ucvtf s0, [[REG]]
104 ; CHECK: fcvt  h0, s0
105   %conv = uitofp i16 %a to half
106   ret half %conv
109 ; Test uitofp
110 define half @uitofp_hw_i32(i32 %a) nounwind ssp {
111 entry:
112 ; CHECK-LABEL: uitofp_hw_i32
113 ; CHECK: ucvtf s0, w0
114 ; CHECK: fcvt  h0, s0
115   %conv = uitofp i32 %a to half
116   ret half %conv
119 ; Test uitofp
120 define half @uitofp_hx(i64 %a) nounwind ssp {
121 entry:
122 ; CHECK-LABEL: uitofp_hx
123 ; CHECK: ucvtf s0, x0
124 ; CHECK: fcvt  h0, s0
125   %conv = uitofp i64 %a to half
126   ret half %conv