@@ -235,6 +235,70 @@ define <2 x i16> @test_mul(<2 x i16> %a, <2 x i16> %b) #0 {
235
235
ret <2 x i16 > %r
236
236
}
237
237
238
+ ;; Logical ops are available on all GPUs as regular 32-bit logical ops
239
+ ; COMMON-LABEL: test_or(
240
+ ; COMMON-DAG: ld.param.u32 [[A:%r[0-9]+]], [test_or_param_0];
241
+ ; COMMON-DAG: ld.param.u32 [[B:%r[0-9]+]], [test_or_param_1];
242
+ ; COMMON-NEXT: or.b32 [[R:%r[0-9]+]], [[A]], [[B]];
243
+ ; COMMON-NEXT: st.param.b32 [func_retval0+0], [[R]];
244
+ ; COMMON-NEXT: ret;
245
+ define <2 x i16 > @test_or (<2 x i16 > %a , <2 x i16 > %b ) #0 {
246
+ %r = or <2 x i16 > %a , %b
247
+ ret <2 x i16 > %r
248
+ }
249
+
250
+ ; Check that we can lower or with immediate arguments.
251
+ ; COMMON-LABEL: test_or_imm_0(
252
+ ; COMMON-DAG: ld.param.u32 [[A:%r[0-9]+]], [test_or_imm_0_param_0];
253
+ ; COMMON-NEXT: or.b32 [[R:%r[0-9]+]], [[A]], 131073;
254
+ ; COMMON-NEXT: st.param.b32 [func_retval0+0], [[R]];
255
+ ; COMMON-NEXT: ret;
256
+ define <2 x i16 > @test_or_imm_0 (<2 x i16 > %a ) #0 {
257
+ %r = or <2 x i16 > <i16 1 , i16 2 >, %a
258
+ ret <2 x i16 > %r
259
+ }
260
+
261
+ ; COMMON-LABEL: test_or_imm_1(
262
+ ; COMMON-DAG: ld.param.u32 [[B:%r[0-9]+]], [test_or_imm_1_param_0];
263
+ ; COMMON-NEXT: or.b32 [[R:%r[0-9]+]], [[A]], 131073;
264
+ ; COMMON-NEXT: st.param.b32 [func_retval0+0], [[R]];
265
+ ; COMMON-NEXT: ret;
266
+ define <2 x i16 > @test_or_imm_1 (<2 x i16 > %a ) #0 {
267
+ %r = or <2 x i16 > %a , <i16 1 , i16 2 >
268
+ ret <2 x i16 > %r
269
+ }
270
+
271
+ ; COMMON-LABEL: test_xor(
272
+ ; COMMON-DAG: ld.param.u32 [[A:%r[0-9]+]], [test_xor_param_0];
273
+ ; COMMON-DAG: ld.param.u32 [[B:%r[0-9]+]], [test_xor_param_1];
274
+ ; COMMON-NEXT: xor.b32 [[R:%r[0-9]+]], [[A]], [[B]];
275
+ ; COMMON-NEXT: st.param.b32 [func_retval0+0], [[R]];
276
+ ; COMMON-NEXT: ret;
277
+ define <2 x i16 > @test_xor (<2 x i16 > %a , <2 x i16 > %b ) #0 {
278
+ %r = xor <2 x i16 > %a , %b
279
+ ret <2 x i16 > %r
280
+ }
281
+
282
+ ; Check that we can lower xor with immediate arguments.
283
+ ; COMMON-LABEL: test_xor_imm_0(
284
+ ; COMMON-DAG: ld.param.u32 [[A:%r[0-9]+]], [test_xor_imm_0_param_0];
285
+ ; COMMON-NEXT: xor.b32 [[R:%r[0-9]+]], [[A]], 131073;
286
+ ; COMMON-NEXT: st.param.b32 [func_retval0+0], [[R]];
287
+ ; COMMON-NEXT: ret;
288
+ define <2 x i16 > @test_xor_imm_0 (<2 x i16 > %a ) #0 {
289
+ %r = xor <2 x i16 > <i16 1 , i16 2 >, %a
290
+ ret <2 x i16 > %r
291
+ }
292
+
293
+ ; COMMON-LABEL: test_xor_imm_1(
294
+ ; COMMON-DAG: ld.param.u32 [[B:%r[0-9]+]], [test_xor_imm_1_param_0];
295
+ ; COMMON-NEXT: xor.b32 [[R:%r[0-9]+]], [[A]], 131073;
296
+ ; COMMON-NEXT: st.param.b32 [func_retval0+0], [[R]];
297
+ ; COMMON-NEXT: ret;
298
+ define <2 x i16 > @test_xor_imm_1 (<2 x i16 > %a ) #0 {
299
+ %r = xor <2 x i16 > %a , <i16 1 , i16 2 >
300
+ ret <2 x i16 > %r
301
+ }
238
302
239
303
; COMMON-LABEL: .func test_ldst_v2i16(
240
304
; COMMON-DAG: ld.param.u64 [[A:%rd[0-9]+]], [test_ldst_v2i16_param_0];
0 commit comments