[loongarch][DAG][FREEZE] Fix crash when FREEZE a half(f16) type on lo… · llvm/llvm-project@13280d9 (original) (raw)
`@@ -126,42 +126,40 @@ define void @test_fptrunc_double(double %d, ptr %p) nounwind {
`
126
126
`define half @test_fadd_reg(half %a, half %b) nounwind {
`
127
127
`; LA32-LABEL: test_fadd_reg:
`
128
128
`; LA32: # %bb.0:
`
129
``
`-
; LA32-NEXT: addi.w sp,sp, sp,sp, -32
`
130
``
`-
; LA32-NEXT: st.w ra,ra, ra,sp, 28 # 4-byte Folded Spill
`
131
``
`-
; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Spill
`
132
``
`-
; LA32-NEXT: fst.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Spill
`
``
129
`+
; LA32-NEXT: addi.w sp,sp, sp,sp, -16
`
``
130
`+
; LA32-NEXT: st.w ra,ra, ra,sp, 12 # 4-byte Folded Spill
`
``
131
`+
; LA32-NEXT: st.w fp,fp, fp,sp, 8 # 4-byte Folded Spill
`
``
132
`+
; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Spill
`
``
133
`+
; LA32-NEXT: move fp,fp, fp,a0
`
``
134
`+
; LA32-NEXT: move a0,a0, a0,a1
`
``
135
`+
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
133
136
`; LA32-NEXT: fmov.s fs0,fs0, fs0,fa0
`
134
``
`-
; LA32-NEXT: fmov.s fa0,fa0, fa0,fa1
`
135
``
`-
; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
137
`+
; LA32-NEXT: move a0,a0, a0,fp
`
136
138
`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
137
``
`-
; LA32-NEXT: fmov.s fs1,fs1, fs1,fa0
`
138
``
`-
; LA32-NEXT: fmov.s fa0,fa0, fa0,fs0
`
``
139
`+
; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs0
`
139
140
`; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
`
140
``
`-
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
141
``
`-
; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs1
`
142
``
`-
; LA32-NEXT: fld.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Reload
`
143
``
`-
; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Reload
`
144
``
`-
; LA32-NEXT: ld.w ra,ra, ra,sp, 28 # 4-byte Folded Reload
`
145
``
`-
; LA32-NEXT: addi.w sp,sp, sp,sp, 32
`
``
141
`+
; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Reload
`
``
142
`+
; LA32-NEXT: ld.w fp,fp, fp,sp, 8 # 4-byte Folded Reload
`
``
143
`+
; LA32-NEXT: ld.w ra,ra, ra,sp, 12 # 4-byte Folded Reload
`
``
144
`+
; LA32-NEXT: addi.w sp,sp, sp,sp, 16
`
146
145
`; LA32-NEXT: ret
`
147
146
`;
`
148
147
`; LA64-LABEL: test_fadd_reg:
`
149
148
`; LA64: # %bb.0:
`
150
149
`; LA64-NEXT: addi.d sp,sp, sp,sp, -32
`
151
150
`; LA64-NEXT: st.d ra,ra, ra,sp, 24 # 8-byte Folded Spill
`
152
``
`-
; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Spill
`
153
``
`-
; LA64-NEXT: fst.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Spill
`
``
151
`+
; LA64-NEXT: st.d fp,fp, fp,sp, 16 # 8-byte Folded Spill
`
``
152
`+
; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Spill
`
``
153
`+
; LA64-NEXT: move fp,fp, fp,a0
`
``
154
`+
; LA64-NEXT: move a0,a0, a0,a1
`
``
155
`+
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
154
156
`; LA64-NEXT: fmov.s fs0,fs0, fs0,fa0
`
155
``
`-
; LA64-NEXT: fmov.s fa0,fa0, fa0,fa1
`
156
``
`-
; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
157
`+
; LA64-NEXT: move a0,a0, a0,fp
`
157
158
`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
158
``
`-
; LA64-NEXT: fmov.s fs1,fs1, fs1,fa0
`
159
``
`-
; LA64-NEXT: fmov.s fa0,fa0, fa0,fs0
`
``
159
`+
; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs0
`
160
160
`; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
`
161
``
`-
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
162
``
`-
; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs1
`
163
``
`-
; LA64-NEXT: fld.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Reload
`
164
``
`-
; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Reload
`
``
161
`+
; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Reload
`
``
162
`+
; LA64-NEXT: ld.d fp,fp, fp,sp, 16 # 8-byte Folded Reload
`
165
163
`; LA64-NEXT: ld.d ra,ra, ra,sp, 24 # 8-byte Folded Reload
`
166
164
`; LA64-NEXT: addi.d sp,sp, sp,sp, 32
`
167
165
`; LA64-NEXT: ret
`
`@@ -177,16 +175,16 @@ define void @test_fadd_mem(ptr %p, ptr %q) nounwind {
`
177
175
`; LA32-NEXT: st.w fp,fp, fp,sp, 24 # 4-byte Folded Spill
`
178
176
`; LA32-NEXT: st.w s0,s0, s0,sp, 20 # 4-byte Folded Spill
`
179
177
`; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Spill
`
180
``
`-
; LA32-NEXT: move fp,fp, fp,a1
`
181
``
`-
; LA32-NEXT: move s0,s0, s0,a0
`
182
``
`-
; LA32-NEXT: ld.hu a0,a0, a0,a0, 0
`
``
178
`+
; LA32-NEXT: move fp,fp, fp,a0
`
``
179
`+
; LA32-NEXT: ld.hu s0,s0, s0,a0, 0
`
``
180
`+
; LA32-NEXT: ld.hu a0,a0, a0,a1, 0
`
183
181
`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
184
182
`; LA32-NEXT: fmov.s fs0,fs0, fs0,fa0
`
185
``
`-
; LA32-NEXT: ld.hu a0,a0, a0,fp, 0
`
``
183
`+
; LA32-NEXT: move a0,a0, a0,s0
`
186
184
`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
187
``
`-
; LA32-NEXT: fadd.s fa0,fa0, fa0,fs0, $fa0
`
``
185
`+
; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs0
`
188
186
`; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
`
189
``
`-
; LA32-NEXT: st.h a0,a0, a0,s0, 0
`
``
187
`+
; LA32-NEXT: st.h a0,a0, a0,fp, 0
`
190
188
`; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Reload
`
191
189
`; LA32-NEXT: ld.w s0,s0, s0,sp, 20 # 4-byte Folded Reload
`
192
190
`; LA32-NEXT: ld.w fp,fp, fp,sp, 24 # 4-byte Folded Reload
`
`@@ -201,16 +199,16 @@ define void @test_fadd_mem(ptr %p, ptr %q) nounwind {
`
201
199
`; LA64-NEXT: st.d fp,fp, fp,sp, 16 # 8-byte Folded Spill
`
202
200
`; LA64-NEXT: st.d s0,s0, s0,sp, 8 # 8-byte Folded Spill
`
203
201
`; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Spill
`
204
``
`-
; LA64-NEXT: move fp,fp, fp,a1
`
205
``
`-
; LA64-NEXT: move s0,s0, s0,a0
`
206
``
`-
; LA64-NEXT: ld.hu a0,a0, a0,a0, 0
`
``
202
`+
; LA64-NEXT: move fp,fp, fp,a0
`
``
203
`+
; LA64-NEXT: ld.hu s0,s0, s0,a0, 0
`
``
204
`+
; LA64-NEXT: ld.hu a0,a0, a0,a1, 0
`
207
205
`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
208
206
`; LA64-NEXT: fmov.s fs0,fs0, fs0,fa0
`
209
``
`-
; LA64-NEXT: ld.hu a0,a0, a0,fp, 0
`
``
207
`+
; LA64-NEXT: move a0,a0, a0,s0
`
210
208
`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
211
``
`-
; LA64-NEXT: fadd.s fa0,fa0, fa0,fs0, $fa0
`
``
209
`+
; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs0
`
212
210
`; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
`
213
``
`-
; LA64-NEXT: st.h a0,a0, a0,s0, 0
`
``
211
`+
; LA64-NEXT: st.h a0,a0, a0,fp, 0
`
214
212
`; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Reload
`
215
213
`; LA64-NEXT: ld.d s0,s0, s0,sp, 8 # 8-byte Folded Reload
`
216
214
`; LA64-NEXT: ld.d fp,fp, fp,sp, 16 # 8-byte Folded Reload
`
`@@ -227,42 +225,40 @@ define void @test_fadd_mem(ptr %p, ptr %q) nounwind {
`
227
225
`define half @test_fmul_reg(half %a, half %b) nounwind {
`
228
226
`; LA32-LABEL: test_fmul_reg:
`
229
227
`; LA32: # %bb.0:
`
230
``
`-
; LA32-NEXT: addi.w sp,sp, sp,sp, -32
`
231
``
`-
; LA32-NEXT: st.w ra,ra, ra,sp, 28 # 4-byte Folded Spill
`
232
``
`-
; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Spill
`
233
``
`-
; LA32-NEXT: fst.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Spill
`
``
228
`+
; LA32-NEXT: addi.w sp,sp, sp,sp, -16
`
``
229
`+
; LA32-NEXT: st.w ra,ra, ra,sp, 12 # 4-byte Folded Spill
`
``
230
`+
; LA32-NEXT: st.w fp,fp, fp,sp, 8 # 4-byte Folded Spill
`
``
231
`+
; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Spill
`
``
232
`+
; LA32-NEXT: move fp,fp, fp,a0
`
``
233
`+
; LA32-NEXT: move a0,a0, a0,a1
`
``
234
`+
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
234
235
`; LA32-NEXT: fmov.s fs0,fs0, fs0,fa0
`
235
``
`-
; LA32-NEXT: fmov.s fa0,fa0, fa0,fa1
`
236
``
`-
; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
236
`+
; LA32-NEXT: move a0,a0, a0,fp
`
237
237
`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
238
``
`-
; LA32-NEXT: fmov.s fs1,fs1, fs1,fa0
`
239
``
`-
; LA32-NEXT: fmov.s fa0,fa0, fa0,fs0
`
``
238
`+
; LA32-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs0
`
240
239
`; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
`
241
``
`-
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
242
``
`-
; LA32-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs1
`
243
``
`-
; LA32-NEXT: fld.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Reload
`
244
``
`-
; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Reload
`
245
``
`-
; LA32-NEXT: ld.w ra,ra, ra,sp, 28 # 4-byte Folded Reload
`
246
``
`-
; LA32-NEXT: addi.w sp,sp, sp,sp, 32
`
``
240
`+
; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Reload
`
``
241
`+
; LA32-NEXT: ld.w fp,fp, fp,sp, 8 # 4-byte Folded Reload
`
``
242
`+
; LA32-NEXT: ld.w ra,ra, ra,sp, 12 # 4-byte Folded Reload
`
``
243
`+
; LA32-NEXT: addi.w sp,sp, sp,sp, 16
`
247
244
`; LA32-NEXT: ret
`
248
245
`;
`
249
246
`; LA64-LABEL: test_fmul_reg:
`
250
247
`; LA64: # %bb.0:
`
251
248
`; LA64-NEXT: addi.d sp,sp, sp,sp, -32
`
252
249
`; LA64-NEXT: st.d ra,ra, ra,sp, 24 # 8-byte Folded Spill
`
253
``
`-
; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Spill
`
254
``
`-
; LA64-NEXT: fst.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Spill
`
``
250
`+
; LA64-NEXT: st.d fp,fp, fp,sp, 16 # 8-byte Folded Spill
`
``
251
`+
; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Spill
`
``
252
`+
; LA64-NEXT: move fp,fp, fp,a0
`
``
253
`+
; LA64-NEXT: move a0,a0, a0,a1
`
``
254
`+
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
255
255
`; LA64-NEXT: fmov.s fs0,fs0, fs0,fa0
`
256
``
`-
; LA64-NEXT: fmov.s fa0,fa0, fa0,fa1
`
257
``
`-
; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
256
`+
; LA64-NEXT: move a0,a0, a0,fp
`
258
257
`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
259
``
`-
; LA64-NEXT: fmov.s fs1,fs1, fs1,fa0
`
260
``
`-
; LA64-NEXT: fmov.s fa0,fa0, fa0,fs0
`
``
258
`+
; LA64-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs0
`
261
259
`; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
`
262
``
`-
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
263
``
`-
; LA64-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs1
`
264
``
`-
; LA64-NEXT: fld.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Reload
`
265
``
`-
; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Reload
`
``
260
`+
; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Reload
`
``
261
`+
; LA64-NEXT: ld.d fp,fp, fp,sp, 16 # 8-byte Folded Reload
`
266
262
`; LA64-NEXT: ld.d ra,ra, ra,sp, 24 # 8-byte Folded Reload
`
267
263
`; LA64-NEXT: addi.d sp,sp, sp,sp, 32
`
268
264
`; LA64-NEXT: ret
`
`@@ -278,16 +274,16 @@ define void @test_fmul_mem(ptr %p, ptr %q) nounwind {
`
278
274
`; LA32-NEXT: st.w fp,fp, fp,sp, 24 # 4-byte Folded Spill
`
279
275
`; LA32-NEXT: st.w s0,s0, s0,sp, 20 # 4-byte Folded Spill
`
280
276
`; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Spill
`
281
``
`-
; LA32-NEXT: move fp,fp, fp,a1
`
282
``
`-
; LA32-NEXT: move s0,s0, s0,a0
`
283
``
`-
; LA32-NEXT: ld.hu a0,a0, a0,a0, 0
`
``
277
`+
; LA32-NEXT: move fp,fp, fp,a0
`
``
278
`+
; LA32-NEXT: ld.hu s0,s0, s0,a0, 0
`
``
279
`+
; LA32-NEXT: ld.hu a0,a0, a0,a1, 0
`
284
280
`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
285
281
`; LA32-NEXT: fmov.s fs0,fs0, fs0,fa0
`
286
``
`-
; LA32-NEXT: ld.hu a0,a0, a0,fp, 0
`
``
282
`+
; LA32-NEXT: move a0,a0, a0,s0
`
287
283
`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
288
``
`-
; LA32-NEXT: fmul.s fa0,fa0, fa0,fs0, $fa0
`
``
284
`+
; LA32-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs0
`
289
285
`; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
`
290
``
`-
; LA32-NEXT: st.h a0,a0, a0,s0, 0
`
``
286
`+
; LA32-NEXT: st.h a0,a0, a0,fp, 0
`
291
287
`; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Reload
`
292
288
`; LA32-NEXT: ld.w s0,s0, s0,sp, 20 # 4-byte Folded Reload
`
293
289
`; LA32-NEXT: ld.w fp,fp, fp,sp, 24 # 4-byte Folded Reload
`
`@@ -302,16 +298,16 @@ define void @test_fmul_mem(ptr %p, ptr %q) nounwind {
`
302
298
`; LA64-NEXT: st.d fp,fp, fp,sp, 16 # 8-byte Folded Spill
`
303
299
`; LA64-NEXT: st.d s0,s0, s0,sp, 8 # 8-byte Folded Spill
`
304
300
`; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Spill
`
305
``
`-
; LA64-NEXT: move fp,fp, fp,a1
`
306
``
`-
; LA64-NEXT: move s0,s0, s0,a0
`
307
``
`-
; LA64-NEXT: ld.hu a0,a0, a0,a0, 0
`
``
301
`+
; LA64-NEXT: move fp,fp, fp,a0
`
``
302
`+
; LA64-NEXT: ld.hu s0,s0, s0,a0, 0
`
``
303
`+
; LA64-NEXT: ld.hu a0,a0, a0,a1, 0
`
308
304
`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
309
305
`; LA64-NEXT: fmov.s fs0,fs0, fs0,fa0
`
310
``
`-
; LA64-NEXT: ld.hu a0,a0, a0,fp, 0
`
``
306
`+
; LA64-NEXT: move a0,a0, a0,s0
`
311
307
`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
312
``
`-
; LA64-NEXT: fmul.s fa0,fa0, fa0,fs0, $fa0
`
``
308
`+
; LA64-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs0
`
313
309
`; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
`
314
``
`-
; LA64-NEXT: st.h a0,a0, a0,s0, 0
`
``
310
`+
; LA64-NEXT: st.h a0,a0, a0,fp, 0
`
315
311
`; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Reload
`
316
312
`; LA64-NEXT: ld.d s0,s0, s0,sp, 8 # 8-byte Folded Reload
`
317
313
`; LA64-NEXT: ld.d fp,fp, fp,sp, 16 # 8-byte Folded Reload
`
`@@ -324,3 +320,61 @@ define void @test_fmul_mem(ptr %p, ptr %q) nounwind {
`
324
320
`store half %r, ptr %p
`
325
321
`ret void
`
326
322
`}
`
``
323
+
``
324
`+
define half @freeze_half_undef() nounwind {
`
``
325
`+
; LA32-LABEL: freeze_half_undef:
`
``
326
`+
; LA32: # %bb.0:
`
``
327
`+
; LA32-NEXT: addi.w sp,sp, sp,sp, -16
`
``
328
`+
; LA32-NEXT: st.w ra,ra, ra,sp, 12 # 4-byte Folded Spill
`
``
329
`+
; LA32-NEXT: movgr2fr.w fa0,fa0, fa0,zero
`
``
330
`+
; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
331
`+
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
``
332
`+
; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fa0
`
``
333
`+
; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
334
`+
; LA32-NEXT: ld.w ra,ra, ra,sp, 12 # 4-byte Folded Reload
`
``
335
`+
; LA32-NEXT: addi.w sp,sp, sp,sp, 16
`
``
336
`+
; LA32-NEXT: ret
`
``
337
`+
;
`
``
338
`+
; LA64-LABEL: freeze_half_undef:
`
``
339
`+
; LA64: # %bb.0:
`
``
340
`+
; LA64-NEXT: addi.d sp,sp, sp,sp, -16
`
``
341
`+
; LA64-NEXT: st.d ra,ra, ra,sp, 8 # 8-byte Folded Spill
`
``
342
`+
; LA64-NEXT: movgr2fr.w fa0,fa0, fa0,zero
`
``
343
`+
; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
344
`+
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
``
345
`+
; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fa0
`
``
346
`+
; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
347
`+
; LA64-NEXT: ld.d ra,ra, ra,sp, 8 # 8-byte Folded Reload
`
``
348
`+
; LA64-NEXT: addi.d sp,sp, sp,sp, 16
`
``
349
`+
; LA64-NEXT: ret
`
``
350
`+
%y1 = freeze half undef
`
``
351
`+
%t1 = fadd half %y1, %y1
`
``
352
`+
ret half %t1
`
``
353
`+
}
`
``
354
+
``
355
`+
define half @freeze_half_poison(half %maybe.poison) nounwind {
`
``
356
`+
; LA32-LABEL: freeze_half_poison:
`
``
357
`+
; LA32: # %bb.0:
`
``
358
`+
; LA32-NEXT: addi.w sp,sp, sp,sp, -16
`
``
359
`+
; LA32-NEXT: st.w ra,ra, ra,sp, 12 # 4-byte Folded Spill
`
``
360
`+
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
`
``
361
`+
; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fa0
`
``
362
`+
; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
363
`+
; LA32-NEXT: ld.w ra,ra, ra,sp, 12 # 4-byte Folded Reload
`
``
364
`+
; LA32-NEXT: addi.w sp,sp, sp,sp, 16
`
``
365
`+
; LA32-NEXT: ret
`
``
366
`+
;
`
``
367
`+
; LA64-LABEL: freeze_half_poison:
`
``
368
`+
; LA64: # %bb.0:
`
``
369
`+
; LA64-NEXT: addi.d sp,sp, sp,sp, -16
`
``
370
`+
; LA64-NEXT: st.d ra,ra, ra,sp, 8 # 8-byte Folded Spill
`
``
371
`+
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
`
``
372
`+
; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fa0
`
``
373
`+
; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
`
``
374
`+
; LA64-NEXT: ld.d ra,ra, ra,sp, 8 # 8-byte Folded Reload
`
``
375
`+
; LA64-NEXT: addi.d sp,sp, sp,sp, 16
`
``
376
`+
; LA64-NEXT: ret
`
``
377
`+
%y1 = freeze half %maybe.poison
`
``
378
`+
%t1 = fadd half %y1, %y1
`
``
379
`+
ret half %t1
`
``
380
`+
}
`