11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2- ; RUN: llc -force-streaming-compatible < %s | FileCheck %s
3- ; RUN: llc -force-streaming-compatible -mattr=+sme2p2 < %s | FileCheck %s --check-prefix=USE-NEON-NO-GPRS
4- ; RUN: llc < %s | FileCheck %s --check-prefix=USE-NEON-NO-GPRS
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
56
67target triple = "aarch64-unknown-linux-gnu"
78
89define double @t1 (double %x ) {
910; CHECK-LABEL: t1:
1011; CHECK: // %bb.0: // %entry
11- ; CHECK-NEXT: fcvtzs x8, d0
12- ; CHECK-NEXT: scvtf d0, x8
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
1317; CHECK-NEXT: ret
1418;
1519; USE-NEON-NO-GPRS-LABEL: t1:
1620; USE-NEON-NO-GPRS: // %bb.0: // %entry
1721; USE-NEON-NO-GPRS-NEXT: fcvtzs d0, d0
1822; USE-NEON-NO-GPRS-NEXT: scvtf d0, d0
1923; USE-NEON-NO-GPRS-NEXT: ret
24+ ;
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
2030entry:
2131 %conv = fptosi double %x to i64
2232 %conv1 = sitofp i64 %conv to double
@@ -26,15 +36,24 @@ entry:
2636define float @t2 (float %x ) {
2737; CHECK-LABEL: t2:
2838; CHECK: // %bb.0: // %entry
29- ; CHECK-NEXT: fcvtzs w8, s0
30- ; CHECK-NEXT: scvtf s0, w8
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
3144; CHECK-NEXT: ret
3245;
3346; USE-NEON-NO-GPRS-LABEL: t2:
3447; USE-NEON-NO-GPRS: // %bb.0: // %entry
3548; USE-NEON-NO-GPRS-NEXT: fcvtzs s0, s0
3649; USE-NEON-NO-GPRS-NEXT: scvtf s0, s0
3750; USE-NEON-NO-GPRS-NEXT: ret
51+ ;
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
3857entry:
3958 %conv = fptosi float %x to i32
4059 %conv1 = sitofp i32 %conv to float
@@ -44,11 +63,20 @@ entry:
4463define half @t3 (half %x ) {
4564; CHECK-LABEL: t3:
4665; CHECK: // %bb.0: // %entry
47- ; CHECK-NEXT: fcvt s0, h0
48- ; CHECK-NEXT: fcvtzs w8, s0
49- ; CHECK-NEXT: scvtf s0, w8
50- ; CHECK-NEXT: fcvt h0, s0
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
5171; CHECK-NEXT: ret
72+ ;
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
5280entry:
5381 %conv = fptosi half %x to i32
5482 %conv1 = sitofp i32 %conv to half
@@ -58,15 +86,24 @@ entry:
5886define double @t4 (double %x ) {
5987; CHECK-LABEL: t4:
6088; CHECK: // %bb.0: // %entry
61- ; CHECK-NEXT: fcvtzu x8, d0
62- ; CHECK-NEXT: ucvtf d0, x8
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
6394; CHECK-NEXT: ret
6495;
6596; USE-NEON-NO-GPRS-LABEL: t4:
6697; USE-NEON-NO-GPRS: // %bb.0: // %entry
6798; USE-NEON-NO-GPRS-NEXT: fcvtzu d0, d0
6899; USE-NEON-NO-GPRS-NEXT: ucvtf d0, d0
69100; USE-NEON-NO-GPRS-NEXT: ret
101+ ;
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
70107entry:
71108 %conv = fptoui double %x to i64
72109 %conv1 = uitofp i64 %conv to double
@@ -76,15 +113,24 @@ entry:
76113define float @t5 (float %x ) {
77114; CHECK-LABEL: t5:
78115; CHECK: // %bb.0: // %entry
79- ; CHECK-NEXT: fcvtzu w8, s0
80- ; CHECK-NEXT: ucvtf s0, w8
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
81121; CHECK-NEXT: ret
82122;
83123; USE-NEON-NO-GPRS-LABEL: t5:
84124; USE-NEON-NO-GPRS: // %bb.0: // %entry
85125; USE-NEON-NO-GPRS-NEXT: fcvtzu s0, s0
86126; USE-NEON-NO-GPRS-NEXT: ucvtf s0, s0
87127; USE-NEON-NO-GPRS-NEXT: ret
128+ ;
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
88134entry:
89135 %conv = fptoui float %x to i32
90136 %conv1 = uitofp i32 %conv to float
@@ -94,11 +140,20 @@ entry:
94140define half @t6 (half %x ) {
95141; CHECK-LABEL: t6:
96142; CHECK: // %bb.0: // %entry
97- ; CHECK-NEXT: fcvt s0, h0
98- ; CHECK-NEXT: fcvtzu w8, s0
99- ; CHECK-NEXT: ucvtf s0, w8
100- ; CHECK-NEXT: fcvt h0, s0
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
101148; CHECK-NEXT: ret
149+ ;
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
102157entry:
103158 %conv = fptoui half %x to i32
104159 %conv1 = uitofp i32 %conv to half
0 commit comments