@@ -340,18 +340,15 @@ define i64 @fneg_select_i64_1(i64 %cond, i64 %a, i64 %b) {
340
340
; GCN: ; %bb.0:
341
341
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
342
342
; GCN-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[0:1]
343
- ; GCN-NEXT: v_xor_b32_e32 v3, 0x80000000, v3
344
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v4, v2, vcc
345
- ; GCN-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc
343
+ ; GCN-NEXT: v_cndmask_b32_e32 v0, v5, v3, vcc
344
+ ; GCN-NEXT: v_cndmask_b32_e32 v1, v4, v2, vcc
346
345
; GCN-NEXT: s_setpc_b64 s[30:31]
347
346
;
348
347
; GFX11-LABEL: fneg_select_i64_1:
349
348
; GFX11: ; %bb.0:
350
349
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
351
350
; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, 0, v[0:1]
352
- ; GFX11-NEXT: v_xor_b32_e32 v1, 0x80000000, v3
353
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
354
- ; GFX11-NEXT: v_dual_cndmask_b32 v0, v4, v2 :: v_dual_cndmask_b32 v1, v5, v1
351
+ ; GFX11-NEXT: v_dual_cndmask_b32 v0, v5, v3 :: v_dual_cndmask_b32 v1, v4, v2
355
352
; GFX11-NEXT: s_setpc_b64 s[30:31]
356
353
%neg.a = xor i64 %a , u0x8000000000000000
357
354
%cmp = icmp eq i64 %cond , zeroinitializer
@@ -364,18 +361,15 @@ define i64 @fneg_select_i64_2(i64 %cond, i64 %a, i64 %b) {
364
361
; GCN: ; %bb.0:
365
362
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
366
363
; GCN-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[0:1]
367
- ; GCN-NEXT: v_xor_b32_e32 v3, 0x80000000, v3
368
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v2, v4, vcc
369
- ; GCN-NEXT: v_cndmask_b32_e32 v1, v3, v5, vcc
364
+ ; GCN-NEXT: v_cndmask_b32_e32 v0, v3, v5, vcc
365
+ ; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v4, vcc
370
366
; GCN-NEXT: s_setpc_b64 s[30:31]
371
367
;
372
368
; GFX11-LABEL: fneg_select_i64_2:
373
369
; GFX11: ; %bb.0:
374
370
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
375
371
; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, 0, v[0:1]
376
- ; GFX11-NEXT: v_xor_b32_e32 v1, 0x80000000, v3
377
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
378
- ; GFX11-NEXT: v_dual_cndmask_b32 v0, v2, v4 :: v_dual_cndmask_b32 v1, v1, v5
372
+ ; GFX11-NEXT: v_dual_cndmask_b32 v0, v3, v5 :: v_dual_cndmask_b32 v1, v2, v4
379
373
; GFX11-NEXT: s_setpc_b64 s[30:31]
380
374
%neg.a = xor i64 %a , u0x8000000000000000
381
375
%cmp = icmp eq i64 %cond , zeroinitializer
@@ -388,20 +382,16 @@ define i64 @fneg_1_fabs_2_select_i64(i64 %cond, i64 %a, i64 %b) {
388
382
; GCN: ; %bb.0:
389
383
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
390
384
; GCN-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[0:1]
391
- ; GCN-NEXT: v_xor_b32_e32 v3, 0x80000000, v3
392
- ; GCN-NEXT: v_and_b32_e32 v5, 0x7fffffff, v5
393
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v4, v2, vcc
394
- ; GCN-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc
385
+ ; GCN-NEXT: v_cndmask_b32_e64 v0, |v5|, v3, vcc
386
+ ; GCN-NEXT: v_cndmask_b32_e32 v1, v4, v2, vcc
395
387
; GCN-NEXT: s_setpc_b64 s[30:31]
396
388
;
397
389
; GFX11-LABEL: fneg_1_fabs_2_select_i64:
398
390
; GFX11: ; %bb.0:
399
391
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
400
392
; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, 0, v[0:1]
401
- ; GFX11-NEXT: v_xor_b32_e32 v3, 0x80000000, v3
402
- ; GFX11-NEXT: v_dual_cndmask_b32 v0, v4, v2 :: v_dual_and_b32 v1, 0x7fffffff, v5
403
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
404
- ; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc_lo
393
+ ; GFX11-NEXT: v_cndmask_b32_e64 v0, |v5|, v3, vcc_lo
394
+ ; GFX11-NEXT: v_cndmask_b32_e32 v1, v4, v2, vcc_lo
405
395
; GFX11-NEXT: s_setpc_b64 s[30:31]
406
396
%neg.a = xor i64 %a , u0x8000000000000000
407
397
%abs.b = and i64 %b , u0x7fffffffffffffff
@@ -415,18 +405,16 @@ define i64 @fabs_select_i64_1(i64 %cond, i64 %a, i64 %b) {
415
405
; GCN: ; %bb.0:
416
406
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
417
407
; GCN-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[0:1]
418
- ; GCN-NEXT: v_and_b32_e32 v3, 0x7fffffff, v3
419
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v4, v2, vcc
420
- ; GCN-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc
408
+ ; GCN-NEXT: v_cndmask_b32_e64 v0, v5, |v3|, vcc
409
+ ; GCN-NEXT: v_cndmask_b32_e32 v1, v4, v2, vcc
421
410
; GCN-NEXT: s_setpc_b64 s[30:31]
422
411
;
423
412
; GFX11-LABEL: fabs_select_i64_1:
424
413
; GFX11: ; %bb.0:
425
414
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
426
415
; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, 0, v[0:1]
427
- ; GFX11-NEXT: v_dual_cndmask_b32 v0, v4, v2 :: v_dual_and_b32 v1, 0x7fffffff, v3
428
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
429
- ; GFX11-NEXT: v_cndmask_b32_e32 v1, v5, v1, vcc_lo
416
+ ; GFX11-NEXT: v_cndmask_b32_e64 v0, v5, |v3|, vcc_lo
417
+ ; GFX11-NEXT: v_cndmask_b32_e32 v1, v4, v2, vcc_lo
430
418
; GFX11-NEXT: s_setpc_b64 s[30:31]
431
419
%neg.a = and i64 %a , u0x7fffffffffffffff
432
420
%cmp = icmp eq i64 %cond , zeroinitializer
@@ -439,18 +427,16 @@ define i64 @fabs_select_i64_2(i64 %cond, i64 %a, i64 %b) {
439
427
; GCN: ; %bb.0:
440
428
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
441
429
; GCN-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[0:1]
442
- ; GCN-NEXT: v_and_b32_e32 v3, 0x7fffffff, v3
443
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v2, v4, vcc
444
- ; GCN-NEXT: v_cndmask_b32_e32 v1, v3, v5, vcc
430
+ ; GCN-NEXT: v_cndmask_b32_e64 v0, |v3|, v5, vcc
431
+ ; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v4, vcc
445
432
; GCN-NEXT: s_setpc_b64 s[30:31]
446
433
;
447
434
; GFX11-LABEL: fabs_select_i64_2:
448
435
; GFX11: ; %bb.0:
449
436
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
450
437
; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, 0, v[0:1]
451
- ; GFX11-NEXT: v_dual_cndmask_b32 v0, v2, v4 :: v_dual_and_b32 v1, 0x7fffffff, v3
452
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
453
- ; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc_lo
438
+ ; GFX11-NEXT: v_cndmask_b32_e64 v0, |v3|, v5, vcc_lo
439
+ ; GFX11-NEXT: v_cndmask_b32_e32 v1, v2, v4, vcc_lo
454
440
; GFX11-NEXT: s_setpc_b64 s[30:31]
455
441
%neg.a = and i64 %a , u0x7fffffffffffffff
456
442
%cmp = icmp eq i64 %cond , zeroinitializer
@@ -463,18 +449,16 @@ define i64 @fneg_fabs_select_i64_1(i64 %cond, i64 %a, i64 %b) {
463
449
; GCN: ; %bb.0:
464
450
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
465
451
; GCN-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[0:1]
466
- ; GCN-NEXT: v_or_b32_e32 v3, 0x80000000, v3
467
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v4, v2, vcc
468
- ; GCN-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc
452
+ ; GCN-NEXT: v_cndmask_b32_e64 v0, v5, -|v3|, vcc
453
+ ; GCN-NEXT: v_cndmask_b32_e32 v1, v4, v2, vcc
469
454
; GCN-NEXT: s_setpc_b64 s[30:31]
470
455
;
471
456
; GFX11-LABEL: fneg_fabs_select_i64_1:
472
457
; GFX11: ; %bb.0:
473
458
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
474
459
; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, 0, v[0:1]
475
- ; GFX11-NEXT: v_or_b32_e32 v1, 0x80000000, v3
476
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
477
- ; GFX11-NEXT: v_dual_cndmask_b32 v0, v4, v2 :: v_dual_cndmask_b32 v1, v5, v1
460
+ ; GFX11-NEXT: v_cndmask_b32_e64 v0, v5, -|v3|, vcc_lo
461
+ ; GFX11-NEXT: v_cndmask_b32_e32 v1, v4, v2, vcc_lo
478
462
; GFX11-NEXT: s_setpc_b64 s[30:31]
479
463
%neg.a = or i64 %a , u0x8000000000000000
480
464
%cmp = icmp eq i64 %cond , zeroinitializer
@@ -487,18 +471,16 @@ define i64 @fneg_fabs_select_i64_2(i64 %cond, i64 %a, i64 %b) {
487
471
; GCN: ; %bb.0:
488
472
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
489
473
; GCN-NEXT: v_cmp_eq_u64_e32 vcc, 0, v[0:1]
490
- ; GCN-NEXT: v_or_b32_e32 v3, 0x80000000, v3
491
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v2, v4, vcc
492
- ; GCN-NEXT: v_cndmask_b32_e32 v1, v3, v5, vcc
474
+ ; GCN-NEXT: v_cndmask_b32_e64 v0, -|v3|, v5, vcc
475
+ ; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v4, vcc
493
476
; GCN-NEXT: s_setpc_b64 s[30:31]
494
477
;
495
478
; GFX11-LABEL: fneg_fabs_select_i64_2:
496
479
; GFX11: ; %bb.0:
497
480
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
498
481
; GFX11-NEXT: v_cmp_eq_u64_e32 vcc_lo, 0, v[0:1]
499
- ; GFX11-NEXT: v_or_b32_e32 v1, 0x80000000, v3
500
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
501
- ; GFX11-NEXT: v_dual_cndmask_b32 v0, v2, v4 :: v_dual_cndmask_b32 v1, v1, v5
482
+ ; GFX11-NEXT: v_cndmask_b32_e64 v0, -|v3|, v5, vcc_lo
483
+ ; GFX11-NEXT: v_cndmask_b32_e32 v1, v2, v4, vcc_lo
502
484
; GFX11-NEXT: s_setpc_b64 s[30:31]
503
485
%neg.a = or i64 %a , u0x8000000000000000
504
486
%cmp = icmp eq i64 %cond , zeroinitializer
0 commit comments