[C++20][Modules][Serialization] Add an additional test case for #120277. (#126349)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-streaming-mode-cvt-fp-int-fp.ll
blobf4ae66a3b2259bddbb60e68e23f4ccca6480ab86
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s
3 ; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s
4 ; RUN: llc -mattr=+sme2p2 -force-streaming-compatible < %s | FileCheck %s --check-prefix=USE-NEON-NO-GPRS
5 ; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
7 target triple = "aarch64-unknown-linux-gnu"
9 define double @t1(double %x) {
10 ; CHECK-LABEL: t1:
11 ; CHECK:       // %bb.0: // %entry
12 ; CHECK-NEXT:    ptrue p0.d
13 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
14 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z0.d
15 ; CHECK-NEXT:    scvtf z0.d, p0/m, z0.d
16 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
17 ; CHECK-NEXT:    ret
19 ; USE-NEON-NO-GPRS-LABEL: t1:
20 ; USE-NEON-NO-GPRS:       // %bb.0: // %entry
21 ; USE-NEON-NO-GPRS-NEXT:    fcvtzs d0, d0
22 ; USE-NEON-NO-GPRS-NEXT:    scvtf d0, d0
23 ; USE-NEON-NO-GPRS-NEXT:    ret
25 ; NONEON-NOSVE-LABEL: t1:
26 ; NONEON-NOSVE:       // %bb.0: // %entry
27 ; NONEON-NOSVE-NEXT:    fcvtzs x8, d0
28 ; NONEON-NOSVE-NEXT:    scvtf d0, x8
29 ; NONEON-NOSVE-NEXT:    ret
30 entry:
31   %conv = fptosi double %x to i64
32   %conv1 = sitofp i64 %conv to double
33   ret double %conv1
36 define float @t2(float %x) {
37 ; CHECK-LABEL: t2:
38 ; CHECK:       // %bb.0: // %entry
39 ; CHECK-NEXT:    ptrue p0.s
40 ; CHECK-NEXT:    // kill: def $s0 killed $s0 def $z0
41 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z0.s
42 ; CHECK-NEXT:    scvtf z0.s, p0/m, z0.s
43 ; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $z0
44 ; CHECK-NEXT:    ret
46 ; USE-NEON-NO-GPRS-LABEL: t2:
47 ; USE-NEON-NO-GPRS:       // %bb.0: // %entry
48 ; USE-NEON-NO-GPRS-NEXT:    fcvtzs s0, s0
49 ; USE-NEON-NO-GPRS-NEXT:    scvtf s0, s0
50 ; USE-NEON-NO-GPRS-NEXT:    ret
52 ; NONEON-NOSVE-LABEL: t2:
53 ; NONEON-NOSVE:       // %bb.0: // %entry
54 ; NONEON-NOSVE-NEXT:    fcvtzs w8, s0
55 ; NONEON-NOSVE-NEXT:    scvtf s0, w8
56 ; NONEON-NOSVE-NEXT:    ret
57 entry:
58   %conv = fptosi float %x to i32
59   %conv1 = sitofp i32 %conv to float
60   ret float %conv1
63 define half @t3(half %x)  {
64 ; CHECK-LABEL: t3:
65 ; CHECK:       // %bb.0: // %entry
66 ; CHECK-NEXT:    ptrue p0.s
67 ; CHECK-NEXT:    // kill: def $h0 killed $h0 def $z0
68 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z0.h
69 ; CHECK-NEXT:    scvtf z0.h, p0/m, z0.s
70 ; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z0
71 ; CHECK-NEXT:    ret
73 ; NONEON-NOSVE-LABEL: t3:
74 ; NONEON-NOSVE:       // %bb.0: // %entry
75 ; NONEON-NOSVE-NEXT:    fcvt s0, h0
76 ; NONEON-NOSVE-NEXT:    fcvtzs w8, s0
77 ; NONEON-NOSVE-NEXT:    scvtf s0, w8
78 ; NONEON-NOSVE-NEXT:    fcvt h0, s0
79 ; NONEON-NOSVE-NEXT:    ret
80 entry:
81   %conv = fptosi half %x to i32
82   %conv1 = sitofp i32 %conv to half
83   ret half %conv1
86 define double @t4(double %x) {
87 ; CHECK-LABEL: t4:
88 ; CHECK:       // %bb.0: // %entry
89 ; CHECK-NEXT:    ptrue p0.d
90 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
91 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z0.d
92 ; CHECK-NEXT:    ucvtf z0.d, p0/m, z0.d
93 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
94 ; CHECK-NEXT:    ret
96 ; USE-NEON-NO-GPRS-LABEL: t4:
97 ; USE-NEON-NO-GPRS:       // %bb.0: // %entry
98 ; USE-NEON-NO-GPRS-NEXT:    fcvtzu d0, d0
99 ; USE-NEON-NO-GPRS-NEXT:    ucvtf d0, d0
100 ; USE-NEON-NO-GPRS-NEXT:    ret
102 ; NONEON-NOSVE-LABEL: t4:
103 ; NONEON-NOSVE:       // %bb.0: // %entry
104 ; NONEON-NOSVE-NEXT:    fcvtzu x8, d0
105 ; NONEON-NOSVE-NEXT:    ucvtf d0, x8
106 ; NONEON-NOSVE-NEXT:    ret
107 entry:
108   %conv = fptoui double %x to i64
109   %conv1 = uitofp i64 %conv to double
110   ret double %conv1
113 define float @t5(float %x) {
114 ; CHECK-LABEL: t5:
115 ; CHECK:       // %bb.0: // %entry
116 ; CHECK-NEXT:    ptrue p0.s
117 ; CHECK-NEXT:    // kill: def $s0 killed $s0 def $z0
118 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z0.s
119 ; CHECK-NEXT:    ucvtf z0.s, p0/m, z0.s
120 ; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $z0
121 ; CHECK-NEXT:    ret
123 ; USE-NEON-NO-GPRS-LABEL: t5:
124 ; USE-NEON-NO-GPRS:       // %bb.0: // %entry
125 ; USE-NEON-NO-GPRS-NEXT:    fcvtzu s0, s0
126 ; USE-NEON-NO-GPRS-NEXT:    ucvtf s0, s0
127 ; USE-NEON-NO-GPRS-NEXT:    ret
129 ; NONEON-NOSVE-LABEL: t5:
130 ; NONEON-NOSVE:       // %bb.0: // %entry
131 ; NONEON-NOSVE-NEXT:    fcvtzu w8, s0
132 ; NONEON-NOSVE-NEXT:    ucvtf s0, w8
133 ; NONEON-NOSVE-NEXT:    ret
134 entry:
135   %conv = fptoui float %x to i32
136   %conv1 = uitofp i32 %conv to float
137   ret float %conv1
140 define half @t6(half %x)  {
141 ; CHECK-LABEL: t6:
142 ; CHECK:       // %bb.0: // %entry
143 ; CHECK-NEXT:    ptrue p0.s
144 ; CHECK-NEXT:    // kill: def $h0 killed $h0 def $z0
145 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z0.h
146 ; CHECK-NEXT:    ucvtf z0.h, p0/m, z0.s
147 ; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z0
148 ; CHECK-NEXT:    ret
150 ; NONEON-NOSVE-LABEL: t6:
151 ; NONEON-NOSVE:       // %bb.0: // %entry
152 ; NONEON-NOSVE-NEXT:    fcvt s0, h0
153 ; NONEON-NOSVE-NEXT:    fcvtzu w8, s0
154 ; NONEON-NOSVE-NEXT:    ucvtf s0, w8
155 ; NONEON-NOSVE-NEXT:    fcvt h0, s0
156 ; NONEON-NOSVE-NEXT:    ret
157 entry:
158   %conv = fptoui half %x to i32
159   %conv1 = uitofp i32 %conv to half
160   ret half %conv1