@@ -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, -32
130
- ; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill
131
- ; LA32-NEXT: fst.d $fs0, $sp, 16 # 8-byte Folded Spill
132
- ; LA32-NEXT: fst.d $fs1, $sp, 8 # 8-byte Folded Spill
129
+ ; LA32-NEXT: addi.w $sp, $sp, -16
130
+ ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
131
+ ; LA32-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill
132
+ ; LA32-NEXT: fst.d $fs0, $sp, 0 # 8-byte Folded Spill
133
+ ; LA32-NEXT: move $fp, $a0
134
+ ; LA32-NEXT: move $a0, $a1
135
+ ; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
133
136
; LA32-NEXT: fmov.s $fs0, $fa0
134
- ; LA32-NEXT: fmov.s $fa0, $fa1
135
- ; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
137
+ ; LA32-NEXT: move $a0, $fp
136
138
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
137
- ; LA32-NEXT: fmov.s $fs1, $fa0
138
- ; LA32-NEXT: fmov.s $fa0, $fs0
139
+ ; LA32-NEXT: fadd.s $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, $fs1
142
- ; LA32-NEXT: fld.d $fs1, $sp, 8 # 8-byte Folded Reload
143
- ; LA32-NEXT: fld.d $fs0, $sp, 16 # 8-byte Folded Reload
144
- ; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload
145
- ; LA32-NEXT: addi.w $sp, $sp, 32
141
+ ; LA32-NEXT: fld.d $fs0, $sp, 0 # 8-byte Folded Reload
142
+ ; LA32-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload
143
+ ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
144
+ ; LA32-NEXT: addi.w $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, -32
151
150
; LA64-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill
152
- ; LA64-NEXT: fst.d $fs0, $sp, 16 # 8-byte Folded Spill
153
- ; LA64-NEXT: fst.d $fs1, $sp, 8 # 8-byte Folded Spill
151
+ ; LA64-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill
152
+ ; LA64-NEXT: fst.d $fs0, $sp, 8 # 8-byte Folded Spill
153
+ ; LA64-NEXT: move $fp, $a0
154
+ ; LA64-NEXT: move $a0, $a1
155
+ ; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
154
156
; LA64-NEXT: fmov.s $fs0, $fa0
155
- ; LA64-NEXT: fmov.s $fa0, $fa1
156
- ; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
157
+ ; LA64-NEXT: move $a0, $fp
157
158
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
158
- ; LA64-NEXT: fmov.s $fs1, $fa0
159
- ; LA64-NEXT: fmov.s $fa0, $fs0
159
+ ; LA64-NEXT: fadd.s $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, $fs1
163
- ; LA64-NEXT: fld.d $fs1, $sp, 8 # 8-byte Folded Reload
164
- ; LA64-NEXT: fld.d $fs0, $sp, 16 # 8-byte Folded Reload
161
+ ; LA64-NEXT: fld.d $fs0, $sp, 8 # 8-byte Folded Reload
162
+ ; LA64-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload
165
163
; LA64-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload
166
164
; LA64-NEXT: addi.d $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, $sp, 24 # 4-byte Folded Spill
178
176
; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill
179
177
; LA32-NEXT: fst.d $fs0, $sp, 8 # 8-byte Folded Spill
180
- ; LA32-NEXT: move $fp, $a1
181
- ; LA32-NEXT: move $s0, $a0
182
- ; LA32-NEXT: ld.hu $a0, $a0 , 0
178
+ ; LA32-NEXT: move $fp, $a0
179
+ ; LA32-NEXT: ld.hu $s0, $a0, 0
180
+ ; LA32-NEXT: ld.hu $a0, $a1 , 0
183
181
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
184
182
; LA32-NEXT: fmov.s $fs0, $fa0
185
- ; LA32-NEXT: ld.hu $a0, $fp, 0
183
+ ; LA32-NEXT: move $a0, $s0
186
184
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
187
- ; LA32-NEXT: fadd.s $fa0, $fs0 , $fa0
185
+ ; LA32-NEXT: fadd.s $fa0, $fa0 , $fs0
188
186
; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
189
- ; LA32-NEXT: st.h $a0, $s0 , 0
187
+ ; LA32-NEXT: st.h $a0, $fp , 0
190
188
; LA32-NEXT: fld.d $fs0, $sp, 8 # 8-byte Folded Reload
191
189
; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload
192
190
; LA32-NEXT: ld.w $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, $sp, 16 # 8-byte Folded Spill
202
200
; LA64-NEXT: st.d $s0, $sp, 8 # 8-byte Folded Spill
203
201
; LA64-NEXT: fst.d $fs0, $sp, 0 # 8-byte Folded Spill
204
- ; LA64-NEXT: move $fp, $a1
205
- ; LA64-NEXT: move $s0, $a0
206
- ; LA64-NEXT: ld.hu $a0, $a0 , 0
202
+ ; LA64-NEXT: move $fp, $a0
203
+ ; LA64-NEXT: ld.hu $s0, $a0, 0
204
+ ; LA64-NEXT: ld.hu $a0, $a1 , 0
207
205
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
208
206
; LA64-NEXT: fmov.s $fs0, $fa0
209
- ; LA64-NEXT: ld.hu $a0, $fp, 0
207
+ ; LA64-NEXT: move $a0, $s0
210
208
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
211
- ; LA64-NEXT: fadd.s $fa0, $fs0 , $fa0
209
+ ; LA64-NEXT: fadd.s $fa0, $fa0 , $fs0
212
210
; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
213
- ; LA64-NEXT: st.h $a0, $s0 , 0
211
+ ; LA64-NEXT: st.h $a0, $fp , 0
214
212
; LA64-NEXT: fld.d $fs0, $sp, 0 # 8-byte Folded Reload
215
213
; LA64-NEXT: ld.d $s0, $sp, 8 # 8-byte Folded Reload
216
214
; LA64-NEXT: ld.d $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, -32
231
- ; LA32-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill
232
- ; LA32-NEXT: fst.d $fs0, $sp, 16 # 8-byte Folded Spill
233
- ; LA32-NEXT: fst.d $fs1, $sp, 8 # 8-byte Folded Spill
228
+ ; LA32-NEXT: addi.w $sp, $sp, -16
229
+ ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
230
+ ; LA32-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill
231
+ ; LA32-NEXT: fst.d $fs0, $sp, 0 # 8-byte Folded Spill
232
+ ; LA32-NEXT: move $fp, $a0
233
+ ; LA32-NEXT: move $a0, $a1
234
+ ; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
234
235
; LA32-NEXT: fmov.s $fs0, $fa0
235
- ; LA32-NEXT: fmov.s $fa0, $fa1
236
- ; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
236
+ ; LA32-NEXT: move $a0, $fp
237
237
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
238
- ; LA32-NEXT: fmov.s $fs1, $fa0
239
- ; LA32-NEXT: fmov.s $fa0, $fs0
238
+ ; LA32-NEXT: fmul.s $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, $fs1
243
- ; LA32-NEXT: fld.d $fs1, $sp, 8 # 8-byte Folded Reload
244
- ; LA32-NEXT: fld.d $fs0, $sp, 16 # 8-byte Folded Reload
245
- ; LA32-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload
246
- ; LA32-NEXT: addi.w $sp, $sp, 32
240
+ ; LA32-NEXT: fld.d $fs0, $sp, 0 # 8-byte Folded Reload
241
+ ; LA32-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload
242
+ ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
243
+ ; LA32-NEXT: addi.w $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, -32
252
249
; LA64-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill
253
- ; LA64-NEXT: fst.d $fs0, $sp, 16 # 8-byte Folded Spill
254
- ; LA64-NEXT: fst.d $fs1, $sp, 8 # 8-byte Folded Spill
250
+ ; LA64-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill
251
+ ; LA64-NEXT: fst.d $fs0, $sp, 8 # 8-byte Folded Spill
252
+ ; LA64-NEXT: move $fp, $a0
253
+ ; LA64-NEXT: move $a0, $a1
254
+ ; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
255
255
; LA64-NEXT: fmov.s $fs0, $fa0
256
- ; LA64-NEXT: fmov.s $fa0, $fa1
257
- ; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
256
+ ; LA64-NEXT: move $a0, $fp
258
257
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
259
- ; LA64-NEXT: fmov.s $fs1, $fa0
260
- ; LA64-NEXT: fmov.s $fa0, $fs0
258
+ ; LA64-NEXT: fmul.s $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, $fs1
264
- ; LA64-NEXT: fld.d $fs1, $sp, 8 # 8-byte Folded Reload
265
- ; LA64-NEXT: fld.d $fs0, $sp, 16 # 8-byte Folded Reload
260
+ ; LA64-NEXT: fld.d $fs0, $sp, 8 # 8-byte Folded Reload
261
+ ; LA64-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload
266
262
; LA64-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload
267
263
; LA64-NEXT: addi.d $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, $sp, 24 # 4-byte Folded Spill
279
275
; LA32-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill
280
276
; LA32-NEXT: fst.d $fs0, $sp, 8 # 8-byte Folded Spill
281
- ; LA32-NEXT: move $fp, $a1
282
- ; LA32-NEXT: move $s0, $a0
283
- ; LA32-NEXT: ld.hu $a0, $a0 , 0
277
+ ; LA32-NEXT: move $fp, $a0
278
+ ; LA32-NEXT: ld.hu $s0, $a0, 0
279
+ ; LA32-NEXT: ld.hu $a0, $a1 , 0
284
280
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
285
281
; LA32-NEXT: fmov.s $fs0, $fa0
286
- ; LA32-NEXT: ld.hu $a0, $fp, 0
282
+ ; LA32-NEXT: move $a0, $s0
287
283
; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
288
- ; LA32-NEXT: fmul.s $fa0, $fs0 , $fa0
284
+ ; LA32-NEXT: fmul.s $fa0, $fa0 , $fs0
289
285
; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
290
- ; LA32-NEXT: st.h $a0, $s0 , 0
286
+ ; LA32-NEXT: st.h $a0, $fp , 0
291
287
; LA32-NEXT: fld.d $fs0, $sp, 8 # 8-byte Folded Reload
292
288
; LA32-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload
293
289
; LA32-NEXT: ld.w $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, $sp, 16 # 8-byte Folded Spill
303
299
; LA64-NEXT: st.d $s0, $sp, 8 # 8-byte Folded Spill
304
300
; LA64-NEXT: fst.d $fs0, $sp, 0 # 8-byte Folded Spill
305
- ; LA64-NEXT: move $fp, $a1
306
- ; LA64-NEXT: move $s0, $a0
307
- ; LA64-NEXT: ld.hu $a0, $a0 , 0
301
+ ; LA64-NEXT: move $fp, $a0
302
+ ; LA64-NEXT: ld.hu $s0, $a0, 0
303
+ ; LA64-NEXT: ld.hu $a0, $a1 , 0
308
304
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
309
305
; LA64-NEXT: fmov.s $fs0, $fa0
310
- ; LA64-NEXT: ld.hu $a0, $fp, 0
306
+ ; LA64-NEXT: move $a0, $s0
311
307
; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
312
- ; LA64-NEXT: fmul.s $fa0, $fs0 , $fa0
308
+ ; LA64-NEXT: fmul.s $fa0, $fa0 , $fs0
313
309
; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
314
- ; LA64-NEXT: st.h $a0, $s0 , 0
310
+ ; LA64-NEXT: st.h $a0, $fp , 0
315
311
; LA64-NEXT: fld.d $fs0, $sp, 0 # 8-byte Folded Reload
316
312
; LA64-NEXT: ld.d $s0, $sp, 8 # 8-byte Folded Reload
317
313
; LA64-NEXT: ld.d $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, -16
328
+ ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
329
+ ; LA32-NEXT: movgr2fr.w $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
333
+ ; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
334
+ ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
335
+ ; LA32-NEXT: addi.w $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, -16
341
+ ; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
342
+ ; LA64-NEXT: movgr2fr.w $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
346
+ ; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
347
+ ; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
348
+ ; LA64-NEXT: addi.d $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, -16
359
+ ; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill
360
+ ; LA32-NEXT: bl %plt(__gnu_h2f_ieee)
361
+ ; LA32-NEXT: fadd.s $fa0, $fa0, $fa0
362
+ ; LA32-NEXT: bl %plt(__gnu_f2h_ieee)
363
+ ; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload
364
+ ; LA32-NEXT: addi.w $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, -16
370
+ ; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
371
+ ; LA64-NEXT: bl %plt(__gnu_h2f_ieee)
372
+ ; LA64-NEXT: fadd.s $fa0, $fa0, $fa0
373
+ ; LA64-NEXT: bl %plt(__gnu_f2h_ieee)
374
+ ; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
375
+ ; LA64-NEXT: addi.d $sp, $sp, 16
376
+ ; LA64-NEXT: ret
377
+ %y1 = freeze half %maybe.poison
378
+ %t1 = fadd half %y1 , %y1
379
+ ret half %t1
380
+ }
0 commit comments