@@ -32,3 +32,133 @@ body: |
3232 RET_ReallyLR
3333
3434 ...
35+
36+ ---
37+ name : fpext_f16_f64
38+ body : |
39+ bb.0:
40+ liveins: $h0
41+ ; CHECK-LABEL: name: fpext_f16_f64
42+ ; CHECK: liveins: $h0
43+ ; CHECK-NEXT: {{ $}}
44+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0
45+ ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s64) = G_FPEXT [[COPY]](s16)
46+ ; CHECK-NEXT: $d0 = COPY [[FPEXT]](s64)
47+ ; CHECK-NEXT: RET_ReallyLR implicit $d0
48+ %0:_(s16) = COPY $h0
49+ %1:_(s64) = G_FPEXT %0(s16)
50+ $d0 = COPY %1(s64)
51+ RET_ReallyLR implicit $d0
52+ ...
53+
54+ ---
55+ name : fpext_v2f16_v2f64
56+ body : |
57+ bb.0:
58+ liveins: $d0
59+
60+ ; CHECK-LABEL: name: fpext_v2f16_v2f64
61+ ; CHECK: liveins: $d0
62+ ; CHECK-NEXT: {{ $}}
63+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
64+ ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[COPY]](<4 x s16>)
65+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT]](<4 x s32>)
66+ ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV]](<2 x s32>)
67+ ; CHECK-NEXT: $q0 = COPY [[FPEXT1]](<2 x s64>)
68+ ; CHECK-NEXT: RET_ReallyLR implicit $q0
69+ %1:_(<4 x s16>) = COPY $d0
70+ %0:_(<2 x s16>), %2:_(<2 x s16>) = G_UNMERGE_VALUES %1(<4 x s16>)
71+ %3:_(<2 x s64>) = G_FPEXT %0(<2 x s16>)
72+ $q0 = COPY %3(<2 x s64>)
73+ RET_ReallyLR implicit $q0
74+ ...
75+
76+ ---
77+ name : fpext_v3f16_v3f64
78+ body : |
79+ bb.0:
80+ liveins: $d0
81+
82+ ; CHECK-LABEL: name: fpext_v3f16_v3f64
83+ ; CHECK: liveins: $d0
84+ ; CHECK-NEXT: {{ $}}
85+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
86+ ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[COPY]](<4 x s16>)
87+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT]](<4 x s32>)
88+ ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV]](<2 x s32>)
89+ ; CHECK-NEXT: [[FPEXT2:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV1]](<2 x s32>)
90+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[FPEXT1]](<2 x s64>)
91+ ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[FPEXT2]](<2 x s64>)
92+ ; CHECK-NEXT: $d0 = COPY [[UV2]](s64)
93+ ; CHECK-NEXT: $d1 = COPY [[UV3]](s64)
94+ ; CHECK-NEXT: $d2 = COPY [[UV4]](s64)
95+ ; CHECK-NEXT: RET_ReallyLR implicit $d0, implicit $d1, implicit $d2
96+ %1:_(<4 x s16>) = COPY $d0
97+ %2:_(s16), %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1(<4 x s16>)
98+ %0:_(<3 x s16>) = G_BUILD_VECTOR %2(s16), %3(s16), %4(s16)
99+ %6:_(<3 x s64>) = G_FPEXT %0(<3 x s16>)
100+ %7:_(s64), %8:_(s64), %9:_(s64) = G_UNMERGE_VALUES %6(<3 x s64>)
101+ $d0 = COPY %7(s64)
102+ $d1 = COPY %8(s64)
103+ $d2 = COPY %9(s64)
104+ RET_ReallyLR implicit $d0, implicit $d1, implicit $d2
105+ ...
106+
107+ ---
108+ name : fpext_v4f16_v4f64
109+ body : |
110+ bb.0:
111+ liveins: $d0
112+
113+ ; CHECK-LABEL: name: fpext_v4f16_v4f64
114+ ; CHECK: liveins: $d0
115+ ; CHECK-NEXT: {{ $}}
116+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
117+ ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[COPY]](<4 x s16>)
118+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT]](<4 x s32>)
119+ ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV]](<2 x s32>)
120+ ; CHECK-NEXT: [[FPEXT2:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV1]](<2 x s32>)
121+ ; CHECK-NEXT: $q0 = COPY [[FPEXT1]](<2 x s64>)
122+ ; CHECK-NEXT: $q1 = COPY [[FPEXT2]](<2 x s64>)
123+ ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1
124+ %0:_(<4 x s16>) = COPY $d0
125+ %1:_(<4 x s64>) = G_FPEXT %0(<4 x s16>)
126+ %2:_(<2 x s64>), %3:_(<2 x s64>) = G_UNMERGE_VALUES %1(<4 x s64>)
127+ $q0 = COPY %2(<2 x s64>)
128+ $q1 = COPY %3(<2 x s64>)
129+ RET_ReallyLR implicit $q0, implicit $q1
130+ ...
131+
132+ ---
133+ name : fpext_v8f16_v8f64
134+ body : |
135+ bb.0:
136+ liveins: $q0
137+
138+ ; CHECK-LABEL: name: fpext_v8f16_v8f64
139+ ; CHECK: liveins: $q0
140+ ; CHECK-NEXT: {{ $}}
141+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
142+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<4 x s16>), [[UV1:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[COPY]](<8 x s16>)
143+ ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[UV]](<4 x s16>)
144+ ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(<4 x s32>) = G_FPEXT [[UV1]](<4 x s16>)
145+ ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<2 x s32>), [[UV3:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT]](<4 x s32>)
146+ ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<2 x s32>), [[UV5:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[FPEXT1]](<4 x s32>)
147+ ; CHECK-NEXT: [[FPEXT2:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV2]](<2 x s32>)
148+ ; CHECK-NEXT: [[FPEXT3:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV3]](<2 x s32>)
149+ ; CHECK-NEXT: [[FPEXT4:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV4]](<2 x s32>)
150+ ; CHECK-NEXT: [[FPEXT5:%[0-9]+]]:_(<2 x s64>) = G_FPEXT [[UV5]](<2 x s32>)
151+ ; CHECK-NEXT: $q0 = COPY [[FPEXT2]](<2 x s64>)
152+ ; CHECK-NEXT: $q1 = COPY [[FPEXT3]](<2 x s64>)
153+ ; CHECK-NEXT: $q2 = COPY [[FPEXT4]](<2 x s64>)
154+ ; CHECK-NEXT: $q3 = COPY [[FPEXT5]](<2 x s64>)
155+ ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
156+ %0:_(<8 x s16>) = COPY $q0
157+ %1:_(<8 x s64>) = G_FPEXT %0(<8 x s16>)
158+ %2:_(<2 x s64>), %3:_(<2 x s64>), %4:_(<2 x s64>), %5:_(<2 x s64>) = G_UNMERGE_VALUES %1(<8 x s64>)
159+ $q0 = COPY %2(<2 x s64>)
160+ $q1 = COPY %3(<2 x s64>)
161+ $q2 = COPY %4(<2 x s64>)
162+ $q3 = COPY %5(<2 x s64>)
163+ RET_ReallyLR implicit $q0, implicit $q1, implicit $q2, implicit $q3
164+ ...
0 commit comments