1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc -march= amdgcn -mcpu=gfx950 < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX950,GFX950-SDAG %s
3
- ; RUN: llc -global-isel -march =amdgcn -mcpu=gfx950 < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX950,GFX950-GISEL %s
2
+ ; RUN: llc -global-isel=0 -mtriple= amdgcn-- -mcpu=gfx950 < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX950,GFX950-SDAG %s
3
+ ; RUN: llc -global-isel -mtriple =amdgcn-- -mcpu=gfx950 < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX950,GFX950-GISEL %s
4
4
5
5
; ========= Single bit functions =========
6
6
@@ -45,10 +45,17 @@ define amdgpu_ps float @not_and_and_not_and(i32 %a, i32 %b, i32 %c) {
45
45
}
46
46
47
47
define amdgpu_ps float @not_and_and_and (i32 %a , i32 %b , i32 %c ) {
48
- ; GCN-LABEL: not_and_and_and:
49
- ; GCN: ; %bb.0:
50
- ; GCN-NEXT: v_bitop3_b32 v0, v0, v1, v2 bitop3:8
51
- ; GCN-NEXT: ; return to shader part epilog
48
+ ; GFX950-SDAG-LABEL: not_and_and_and:
49
+ ; GFX950-SDAG: ; %bb.0:
50
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v0, v0, v1, v2 bitop3:8
51
+ ; GFX950-SDAG-NEXT: ; return to shader part epilog
52
+ ;
53
+ ; GFX950-GISEL-LABEL: not_and_and_and:
54
+ ; GFX950-GISEL: ; %bb.0:
55
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v0, v0
56
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v2
57
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v1
58
+ ; GFX950-GISEL-NEXT: ; return to shader part epilog
52
59
%nota = xor i32 %a , -1
53
60
%and1 = and i32 %nota , %c
54
61
%and2 = and i32 %and1 , %b
@@ -70,10 +77,17 @@ define amdgpu_ps float @and_not_and_not_and(i32 %a, i32 %b, i32 %c) {
70
77
}
71
78
72
79
define amdgpu_ps float @and_not_and_and (i32 %a , i32 %b , i32 %c ) {
73
- ; GCN-LABEL: and_not_and_and:
74
- ; GCN: ; %bb.0:
75
- ; GCN-NEXT: v_bitop3_b32 v0, v0, v1, v2 bitop3:0x20
76
- ; GCN-NEXT: ; return to shader part epilog
80
+ ; GFX950-SDAG-LABEL: and_not_and_and:
81
+ ; GFX950-SDAG: ; %bb.0:
82
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v0, v0, v1, v2 bitop3:0x20
83
+ ; GFX950-SDAG-NEXT: ; return to shader part epilog
84
+ ;
85
+ ; GFX950-GISEL-LABEL: and_not_and_and:
86
+ ; GFX950-GISEL: ; %bb.0:
87
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v1, v1
88
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v2
89
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v1
90
+ ; GFX950-GISEL-NEXT: ; return to shader part epilog
77
91
%notb = xor i32 %b , -1
78
92
%and1 = and i32 %a , %c
79
93
%and2 = and i32 %and1 , %notb
@@ -82,10 +96,17 @@ define amdgpu_ps float @and_not_and_and(i32 %a, i32 %b, i32 %c) {
82
96
}
83
97
84
98
define amdgpu_ps float @and_and_not_and (i32 %a , i32 %b , i32 %c ) {
85
- ; GCN-LABEL: and_and_not_and:
86
- ; GCN: ; %bb.0:
87
- ; GCN-NEXT: v_bitop3_b32 v0, v0, v1, v2 bitop3:0x40
88
- ; GCN-NEXT: ; return to shader part epilog
99
+ ; GFX950-SDAG-LABEL: and_and_not_and:
100
+ ; GFX950-SDAG: ; %bb.0:
101
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v0, v0, v1, v2 bitop3:0x40
102
+ ; GFX950-SDAG-NEXT: ; return to shader part epilog
103
+ ;
104
+ ; GFX950-GISEL-LABEL: and_and_not_and:
105
+ ; GFX950-GISEL: ; %bb.0:
106
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v2, v2
107
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v2
108
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v1
109
+ ; GFX950-GISEL-NEXT: ; return to shader part epilog
89
110
%notc = xor i32 %c , -1
90
111
%and1 = and i32 %a , %notc
91
112
%and2 = and i32 %and1 , %b
@@ -94,10 +115,16 @@ define amdgpu_ps float @and_and_not_and(i32 %a, i32 %b, i32 %c) {
94
115
}
95
116
96
117
define amdgpu_ps float @and_and_and (i32 %a , i32 %b , i32 %c ) {
97
- ; GCN-LABEL: and_and_and:
98
- ; GCN: ; %bb.0:
99
- ; GCN-NEXT: v_bitop3_b32 v0, v0, v1, v2 bitop3:0x80
100
- ; GCN-NEXT: ; return to shader part epilog
118
+ ; GFX950-SDAG-LABEL: and_and_and:
119
+ ; GFX950-SDAG: ; %bb.0:
120
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v0, v0, v1, v2 bitop3:0x80
121
+ ; GFX950-SDAG-NEXT: ; return to shader part epilog
122
+ ;
123
+ ; GFX950-GISEL-LABEL: and_and_and:
124
+ ; GFX950-GISEL: ; %bb.0:
125
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v2
126
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v1
127
+ ; GFX950-GISEL-NEXT: ; return to shader part epilog
101
128
%and1 = and i32 %a , %c
102
129
%and2 = and i32 %and1 , %b
103
130
%ret_cast = bitcast i32 %and2 to float
@@ -107,21 +134,34 @@ define amdgpu_ps float @and_and_and(i32 %a, i32 %b, i32 %c) {
107
134
; ========= Multi bit functions =========
108
135
109
136
define amdgpu_ps float @test_12 (i32 %a , i32 %b ) {
110
- ; GCN-LABEL: test_12:
111
- ; GCN: ; %bb.0:
112
- ; GCN-NEXT: v_bitop3_b32 v0, v0, v1, v0 bitop3:0xc
113
- ; GCN-NEXT: ; return to shader part epilog
137
+ ; GFX950-SDAG-LABEL: test_12:
138
+ ; GFX950-SDAG: ; %bb.0:
139
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v0, v0, v1, v0 bitop3:0xc
140
+ ; GFX950-SDAG-NEXT: ; return to shader part epilog
141
+ ;
142
+ ; GFX950-GISEL-LABEL: test_12:
143
+ ; GFX950-GISEL: ; %bb.0:
144
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v0, v0
145
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v1
146
+ ; GFX950-GISEL-NEXT: ; return to shader part epilog
114
147
%nota = xor i32 %a , -1
115
148
%and1 = and i32 %nota , %b
116
149
%ret_cast = bitcast i32 %and1 to float
117
150
ret float %ret_cast
118
151
}
119
152
120
153
define amdgpu_ps float @test_63 (i32 %a , i32 %b ) {
121
- ; GCN-LABEL: test_63:
122
- ; GCN: ; %bb.0:
123
- ; GCN-NEXT: v_bitop3_b32 v0, v0, v1, v0 bitop3:0x3f
124
- ; GCN-NEXT: ; return to shader part epilog
154
+ ; GFX950-SDAG-LABEL: test_63:
155
+ ; GFX950-SDAG: ; %bb.0:
156
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v0, v0, v1, v0 bitop3:0x3f
157
+ ; GFX950-SDAG-NEXT: ; return to shader part epilog
158
+ ;
159
+ ; GFX950-GISEL-LABEL: test_63:
160
+ ; GFX950-GISEL: ; %bb.0:
161
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v0, v0
162
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v1, v1
163
+ ; GFX950-GISEL-NEXT: v_or_b32_e32 v0, v0, v1
164
+ ; GFX950-GISEL-NEXT: ; return to shader part epilog
125
165
%nota = xor i32 %a , -1
126
166
%notb = xor i32 %b , -1
127
167
%or = or i32 %nota , %notb
@@ -143,10 +183,17 @@ define amdgpu_ps float @test_59(i32 %a, i32 %b, i32 %c) {
143
183
}
144
184
145
185
define amdgpu_ps float @test_126 (i32 %a , i32 %b , i32 %c ) {
146
- ; GCN-LABEL: test_126:
147
- ; GCN: ; %bb.0:
148
- ; GCN-NEXT: v_bitop3_b32 v0, v0, v2, v1 bitop3:0x7e
149
- ; GCN-NEXT: ; return to shader part epilog
186
+ ; GFX950-SDAG-LABEL: test_126:
187
+ ; GFX950-SDAG: ; %bb.0:
188
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v0, v0, v2, v1 bitop3:0x7e
189
+ ; GFX950-SDAG-NEXT: ; return to shader part epilog
190
+ ;
191
+ ; GFX950-GISEL-LABEL: test_126:
192
+ ; GFX950-GISEL: ; %bb.0:
193
+ ; GFX950-GISEL-NEXT: v_xor_b32_e32 v1, v0, v1
194
+ ; GFX950-GISEL-NEXT: v_xor_b32_e32 v0, v0, v2
195
+ ; GFX950-GISEL-NEXT: v_or_b32_e32 v0, v1, v0
196
+ ; GFX950-GISEL-NEXT: ; return to shader part epilog
150
197
%xor1 = xor i32 %a , %b
151
198
%xor2 = xor i32 %a , %c
152
199
%or = or i32 %xor1 , %xor2
@@ -167,9 +214,9 @@ define amdgpu_ps float @test_12_src_overflow(i32 %a, i32 %b, i32 %c) {
167
214
;
168
215
; GFX950-GISEL-LABEL: test_12_src_overflow:
169
216
; GFX950-GISEL: ; %bb.0:
170
- ; GFX950-GISEL-NEXT: v_bitop3_b32 v3, v0, v2, v0 bitop3:0xc
171
- ; GFX950-GISEL-NEXT: v_bitop3_b32 v0, v0, v2, v0 bitop3:3
172
- ; GFX950-GISEL-NEXT: v_bitop3_b32 v0, v3 , v1, v0 bitop3:0xc8
217
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v0, v0
218
+ ; GFX950-GISEL-NEXT: v_bfi_b32 v0, v2, v0, v0
219
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0 , v1
173
220
; GFX950-GISEL-NEXT: ; return to shader part epilog
174
221
%nota = xor i32 %a , -1
175
222
%notc = xor i32 %c , -1
@@ -185,13 +232,27 @@ define amdgpu_ps float @test_12_src_overflow(i32 %a, i32 %b, i32 %c) {
185
232
; This could be a single LOP3 operation with tbl = 100, but Src vector exhausted during search.
186
233
187
234
define amdgpu_ps float @test_100_src_overflow (i32 %a , i32 %b , i32 %c ) {
188
- ; GCN-LABEL: test_100_src_overflow:
189
- ; GCN: ; %bb.0:
190
- ; GCN-NEXT: v_bitop3_b32 v3, v1, v2, v0 bitop3:0x10
191
- ; GCN-NEXT: v_bitop3_b32 v4, v0, v2, v1 bitop3:0x40
192
- ; GCN-NEXT: v_bitop3_b32 v0, v1, v2, v0 bitop3:0x20
193
- ; GCN-NEXT: v_or3_b32 v0, v3, v4, v0
194
- ; GCN-NEXT: ; return to shader part epilog
235
+ ; GFX950-SDAG-LABEL: test_100_src_overflow:
236
+ ; GFX950-SDAG: ; %bb.0:
237
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v3, v1, v2, v0 bitop3:0x10
238
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v4, v0, v2, v1 bitop3:0x40
239
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v0, v1, v2, v0 bitop3:0x20
240
+ ; GFX950-SDAG-NEXT: v_or3_b32 v0, v3, v4, v0
241
+ ; GFX950-SDAG-NEXT: ; return to shader part epilog
242
+ ;
243
+ ; GFX950-GISEL-LABEL: test_100_src_overflow:
244
+ ; GFX950-GISEL: ; %bb.0:
245
+ ; GFX950-GISEL-NEXT: v_or_b32_e32 v3, v2, v0
246
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v3, v3
247
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v4, v1
248
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v3, v1, v3
249
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v4, v0, v4
250
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v1, v0
251
+ ; GFX950-GISEL-NEXT: v_not_b32_e32 v1, v2
252
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v4, v4, v2
253
+ ; GFX950-GISEL-NEXT: v_and_b32_e32 v0, v0, v1
254
+ ; GFX950-GISEL-NEXT: v_or3_b32 v0, v3, v4, v0
255
+ ; GFX950-GISEL-NEXT: ; return to shader part epilog
195
256
%or1 = or i32 %c , %a
196
257
%not1 = xor i32 %or1 , -1
197
258
%and1 = and i32 %b , %not1
@@ -260,12 +321,19 @@ define amdgpu_ps float @uniform_3_op(i32 inreg %a, i32 inreg %b, i32 inreg %c) {
260
321
}
261
322
262
323
define amdgpu_ps float @uniform_4_op (i32 inreg %a , i32 inreg %b , i32 inreg %c ) {
263
- ; GCN-LABEL: uniform_4_op:
264
- ; GCN: ; %bb.0:
265
- ; GCN-NEXT: v_mov_b32_e32 v0, s1
266
- ; GCN-NEXT: v_mov_b32_e32 v1, s2
267
- ; GCN-NEXT: v_bitop3_b32 v0, s0, v0, v1 bitop3:2
268
- ; GCN-NEXT: ; return to shader part epilog
324
+ ; GFX950-SDAG-LABEL: uniform_4_op:
325
+ ; GFX950-SDAG: ; %bb.0:
326
+ ; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s1
327
+ ; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s2
328
+ ; GFX950-SDAG-NEXT: v_bitop3_b32 v0, s0, v0, v1 bitop3:2
329
+ ; GFX950-SDAG-NEXT: ; return to shader part epilog
330
+ ;
331
+ ; GFX950-GISEL-LABEL: uniform_4_op:
332
+ ; GFX950-GISEL: ; %bb.0:
333
+ ; GFX950-GISEL-NEXT: s_andn2_b32 s0, s2, s0
334
+ ; GFX950-GISEL-NEXT: s_andn2_b32 s0, s0, s1
335
+ ; GFX950-GISEL-NEXT: v_mov_b32_e32 v0, s0
336
+ ; GFX950-GISEL-NEXT: ; return to shader part epilog
269
337
%nota = xor i32 %a , -1
270
338
%notb = xor i32 %b , -1
271
339
%and1 = and i32 %nota , %c
0 commit comments