@@ -275,6 +275,85 @@ define half @fneg_fabs_copysign_multi_use_fabs(half %x, half %y, ptr %ptr) {
275
275
ret half %fabs.copysign
276
276
}
277
277
278
+ define half @copysign_pos (half %a ) {
279
+ ; CHECK-LABEL: @copysign_pos(
280
+ ; CHECK-NEXT: entry:
281
+ ; CHECK-NEXT: [[RET:%.*]] = call half @llvm.copysign.f16(half 0xH3C00, half [[A:%.*]])
282
+ ; CHECK-NEXT: ret half [[RET]]
283
+ ;
284
+ entry:
285
+ %ret = call half @llvm.copysign.f16 (half 0xH3C00, half %a )
286
+ ret half %ret
287
+ }
288
+
289
+ define half @copysign_neg (half %a ) {
290
+ ; CHECK-LABEL: @copysign_neg(
291
+ ; CHECK-NEXT: entry:
292
+ ; CHECK-NEXT: [[RET:%.*]] = call half @llvm.copysign.f16(half 0xH3C00, half [[A:%.*]])
293
+ ; CHECK-NEXT: ret half [[RET]]
294
+ ;
295
+ entry:
296
+ %ret = call half @llvm.copysign.f16 (half 0xHBC00, half %a )
297
+ ret half %ret
298
+ }
299
+
300
+ define half @copysign_negzero (half %a ) {
301
+ ; CHECK-LABEL: @copysign_negzero(
302
+ ; CHECK-NEXT: entry:
303
+ ; CHECK-NEXT: [[RET:%.*]] = call half @llvm.copysign.f16(half 0xH0000, half [[A:%.*]])
304
+ ; CHECK-NEXT: ret half [[RET]]
305
+ ;
306
+ entry:
307
+ %ret = call half @llvm.copysign.f16 (half 0xH8000, half %a )
308
+ ret half %ret
309
+ }
310
+
311
+ define half @copysign_negnan (half %a ) {
312
+ ; CHECK-LABEL: @copysign_negnan(
313
+ ; CHECK-NEXT: entry:
314
+ ; CHECK-NEXT: [[RET:%.*]] = call half @llvm.copysign.f16(half 0xH7E00, half [[A:%.*]])
315
+ ; CHECK-NEXT: ret half [[RET]]
316
+ ;
317
+ entry:
318
+ %ret = call half @llvm.copysign.f16 (half 0xHFE00, half %a )
319
+ ret half %ret
320
+ }
321
+
322
+ define half @copysign_neginf (half %a ) {
323
+ ; CHECK-LABEL: @copysign_neginf(
324
+ ; CHECK-NEXT: entry:
325
+ ; CHECK-NEXT: [[RET:%.*]] = call half @llvm.copysign.f16(half 0xH7C00, half [[A:%.*]])
326
+ ; CHECK-NEXT: ret half [[RET]]
327
+ ;
328
+ entry:
329
+ %ret = call half @llvm.copysign.f16 (half 0xHFC00, half %a )
330
+ ret half %ret
331
+ }
332
+
333
+ define <4 x half > @copysign_splat (<4 x half > %a ) {
334
+ ; CHECK-LABEL: @copysign_splat(
335
+ ; CHECK-NEXT: entry:
336
+ ; CHECK-NEXT: [[RET:%.*]] = call <4 x half> @llvm.copysign.v4f16(<4 x half> <half 0xH3C00, half 0xH3C00, half 0xH3C00, half 0xH3C00>, <4 x half> [[A:%.*]])
337
+ ; CHECK-NEXT: ret <4 x half> [[RET]]
338
+ ;
339
+ entry:
340
+ %ret = call <4 x half > @llvm.copysign.v4f16 (<4 x half > splat(half 0xHBC00), <4 x half > %a )
341
+ ret <4 x half > %ret
342
+ }
343
+
344
+ ; TODO: Support constant folding of fabs
345
+
346
+ define <4 x half > @copysign_vec4 (<4 x half > %a ) {
347
+ ; CHECK-LABEL: @copysign_vec4(
348
+ ; CHECK-NEXT: entry:
349
+ ; CHECK-NEXT: [[RET:%.*]] = call <4 x half> @llvm.copysign.v4f16(<4 x half> <half 0xH3C00, half 0xHBC00, half undef, half poison>, <4 x half> [[A:%.*]])
350
+ ; CHECK-NEXT: ret <4 x half> [[RET]]
351
+ ;
352
+ entry:
353
+ %ret = call <4 x half > @llvm.copysign.v4f16 (<4 x half > <half 0xH3C00, half 0xHBC00, half undef , half poison>, <4 x half > %a )
354
+ ret <4 x half > %ret
355
+ }
356
+
278
357
declare half @llvm.fabs.f16 (half )
279
358
declare <2 x half > @llvm.fabs.v2f16 (<2 x half >)
280
359
declare half @llvm.copysign.f16 (half , half )
0 commit comments