@@ -8,18 +8,15 @@ define i32 @fneg_select_i32(i32 %cond, i32 %a, i32 %b) {
8
8
; GCN-LABEL: fneg_select_i32:
9
9
; GCN: ; %bb.0:
10
10
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11
- ; GCN-NEXT: v_xor_b32_e32 v1, 0x80000000, v1
12
11
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0
13
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc
12
+ ; GCN-NEXT: v_cndmask_b32_e64 v0, v2, - v1, vcc
14
13
; GCN-NEXT: s_setpc_b64 s[30:31]
15
14
;
16
15
; GFX11-LABEL: fneg_select_i32:
17
16
; GFX11: ; %bb.0:
18
17
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19
- ; GFX11-NEXT: v_xor_b32_e32 v1, 0x80000000, v1
20
18
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0
21
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)
22
- ; GFX11-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo
19
+ ; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, -v1, vcc_lo
23
20
; GFX11-NEXT: s_setpc_b64 s[30:31]
24
21
%neg.a = xor i32 %a , u0x80000000
25
22
%cmp = icmp eq i32 %cond , zeroinitializer
@@ -31,24 +28,19 @@ define <2 x i32> @fneg_select_v2i32(<2 x i32> %cond, <2 x i32> %a, <2 x i32> %b)
31
28
; GCN-LABEL: fneg_select_v2i32:
32
29
; GCN: ; %bb.0:
33
30
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34
- ; GCN-NEXT: v_xor_b32_e32 v2, 0x80000000, v2
35
31
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0
36
- ; GCN-NEXT: v_xor_b32_e32 v3, 0x80000000, v3
37
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v4, v2, vcc
32
+ ; GCN-NEXT: v_cndmask_b32_e64 v0, v4, -v2, vcc
38
33
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 0, v1
39
- ; GCN-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc
34
+ ; GCN-NEXT: v_cndmask_b32_e64 v1, v5, - v3, vcc
40
35
; GCN-NEXT: s_setpc_b64 s[30:31]
41
36
;
42
37
; GFX11-LABEL: fneg_select_v2i32:
43
38
; GFX11: ; %bb.0:
44
39
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
45
- ; GFX11-NEXT: v_xor_b32_e32 v2, 0x80000000, v2
46
40
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0
47
- ; GFX11-NEXT: v_xor_b32_e32 v3, 0x80000000, v3
48
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
49
- ; GFX11-NEXT: v_cndmask_b32_e32 v0, v4, v2, vcc_lo
41
+ ; GFX11-NEXT: v_cndmask_b32_e64 v0, v4, -v2, vcc_lo
50
42
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v1
51
- ; GFX11-NEXT: v_cndmask_b32_e32 v1, v5, v3, vcc_lo
43
+ ; GFX11-NEXT: v_cndmask_b32_e64 v1, v5, - v3, vcc_lo
52
44
; GFX11-NEXT: s_setpc_b64 s[30:31]
53
45
%neg.a = xor <2 x i32 > %a , splat (i32 u0x80000000)
54
46
%cmp = icmp eq <2 x i32 > %cond , zeroinitializer
@@ -60,18 +52,15 @@ define i32 @fabs_select_i32(i32 %cond, i32 %a, i32 %b) {
60
52
; GCN-LABEL: fabs_select_i32:
61
53
; GCN: ; %bb.0:
62
54
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
63
- ; GCN-NEXT: v_and_b32_e32 v1, 0x7fffffff, v1
64
55
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0
65
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v2, v1 , vcc
56
+ ; GCN-NEXT: v_cndmask_b32_e64 v0, v2, |v1| , vcc
66
57
; GCN-NEXT: s_setpc_b64 s[30:31]
67
58
;
68
59
; GFX11-LABEL: fabs_select_i32:
69
60
; GFX11: ; %bb.0:
70
61
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
71
- ; GFX11-NEXT: v_and_b32_e32 v1, 0x7fffffff, v1
72
62
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0
73
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)
74
- ; GFX11-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo
63
+ ; GFX11-NEXT: v_cndmask_b32_e64 v0, v2, |v1|, vcc_lo
75
64
; GFX11-NEXT: s_setpc_b64 s[30:31]
76
65
%neg.a = and i32 %a , u0x7fffffff
77
66
%cmp = icmp eq i32 %cond , zeroinitializer
@@ -83,24 +72,19 @@ define <2 x i32> @fabs_select_v2i32(<2 x i32> %cond, <2 x i32> %a, <2 x i32> %b)
83
72
; GCN-LABEL: fabs_select_v2i32:
84
73
; GCN: ; %bb.0:
85
74
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
86
- ; GCN-NEXT: v_and_b32_e32 v2, 0x7fffffff, v2
87
75
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0
88
- ; GCN-NEXT: v_and_b32_e32 v3, 0x7fffffff, v3
89
- ; GCN-NEXT: v_cndmask_b32_e32 v0, v4, v2, vcc
76
+ ; GCN-NEXT: v_cndmask_b32_e64 v0, v4, |v2|, vcc
90
77
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 0, v1
91
- ; GCN-NEXT: v_cndmask_b32_e32 v1, v5, v3 , vcc
78
+ ; GCN-NEXT: v_cndmask_b32_e64 v1, v5, |v3| , vcc
92
79
; GCN-NEXT: s_setpc_b64 s[30:31]
93
80
;
94
81
; GFX11-LABEL: fabs_select_v2i32:
95
82
; GFX11: ; %bb.0:
96
83
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
97
84
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0
98
- ; GFX11-NEXT: v_and_b32_e32 v3, 0x7fffffff, v3
99
- ; GFX11-NEXT: v_and_b32_e32 v2, 0x7fffffff, v2
100
- ; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_4)
101
- ; GFX11-NEXT: v_cndmask_b32_e32 v0, v4, v2, vcc_lo
85
+ ; GFX11-NEXT: v_cndmask_b32_e64 v0, v4, |v2|, vcc_lo
102
86
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v1
103
- ; GFX11-NEXT: v_cndmask_b32_e32 v1, v5, v3 , vcc_lo
87
+ ; GFX11-NEXT: v_cndmask_b32_e64 v1, v5, |v3| , vcc_lo
104
88
; GFX11-NEXT: s_setpc_b64 s[30:31]
105
89
%neg.a = and <2 x i32 > %a , splat (i32 u0x7fffffff)
106
90
%cmp = icmp eq <2 x i32 > %cond , zeroinitializer
0 commit comments