@@ -1411,3 +1411,111 @@ define float @test_different_call_conv_target(float %x) {
1411
1411
%res = call ghccc float @different_call_conv_target (float %x )
1412
1412
ret float %res
1413
1413
}
1414
+
1415
+ define <2 x i32 > @test_shufflevector_s32_v2s32 (i32 %arg ) {
1416
+ ; CHECK-LABEL: name: test_shufflevector_s32_v2s32
1417
+ ; CHECK: [[ARG:%[0-9]+]](s32) = COPY %w0
1418
+ ; CHECK: [[UNDEF:%[0-9]+]](s32) = IMPLICIT_DEF
1419
+ ; CHECK: [[C0:%[0-9]+]](s32) = G_CONSTANT i32 0
1420
+ ; CHECK: [[MASK:%[0-9]+]](<2 x s32>) = G_MERGE_VALUES [[C0]](s32), [[C0]](s32)
1421
+ ; CHECK: [[VEC:%[0-9]+]](<2 x s32>) = G_SHUFFLE_VECTOR [[ARG]](s32), [[UNDEF]], [[MASK]](<2 x s32>)
1422
+ ; CHECK: %d0 = COPY [[VEC]](<2 x s32>)
1423
+ %vec = insertelement <1 x i32 > undef , i32 %arg , i32 0
1424
+ %res = shufflevector <1 x i32 > %vec , <1 x i32 > undef , <2 x i32 > zeroinitializer
1425
+ ret <2 x i32 > %res
1426
+ }
1427
+
1428
+ define i32 @test_shufflevector_v2s32_s32 (<2 x i32 > %arg ) {
1429
+ ; CHECK-LABEL: name: test_shufflevector_v2s32_s32
1430
+ ; CHECK: [[ARG:%[0-9]+]](<2 x s32>) = COPY %d0
1431
+ ; CHECK: [[UNDEF:%[0-9]+]](<2 x s32>) = IMPLICIT_DEF
1432
+ ; CHECK: [[C1:%[0-9]+]](s32) = G_CONSTANT i32 1
1433
+ ; CHECK: [[RES:%[0-9]+]](s32) = G_SHUFFLE_VECTOR [[ARG]](<2 x s32>), [[UNDEF]], [[C1]](s32)
1434
+ ; CHECK: %w0 = COPY [[RES]](s32)
1435
+ %vec = shufflevector <2 x i32 > %arg , <2 x i32 > undef , <1 x i32 > <i32 1 >
1436
+ %res = extractelement <1 x i32 > %vec , i32 0
1437
+ ret i32 %res
1438
+ }
1439
+
1440
+ define <2 x i32 > @test_shufflevector_v2s32_v2s32 (<2 x i32 > %arg ) {
1441
+ ; CHECK-LABEL: name: test_shufflevector_v2s32_v2s32
1442
+ ; CHECK: [[ARG:%[0-9]+]](<2 x s32>) = COPY %d0
1443
+ ; CHECK: [[UNDEF:%[0-9]+]](<2 x s32>) = IMPLICIT_DEF
1444
+ ; CHECK: [[C1:%[0-9]+]](s32) = G_CONSTANT i32 1
1445
+ ; CHECK: [[C0:%[0-9]+]](s32) = G_CONSTANT i32 0
1446
+ ; CHECK: [[MASK:%[0-9]+]](<2 x s32>) = G_MERGE_VALUES [[C1]](s32), [[C0]](s32)
1447
+ ; CHECK: [[VEC:%[0-9]+]](<2 x s32>) = G_SHUFFLE_VECTOR [[ARG]](<2 x s32>), [[UNDEF]], [[MASK]](<2 x s32>)
1448
+ ; CHECK: %d0 = COPY [[VEC]](<2 x s32>)
1449
+ %res = shufflevector <2 x i32 > %arg , <2 x i32 > undef , <2 x i32 > <i32 1 , i32 0 >
1450
+ ret <2 x i32 > %res
1451
+ }
1452
+
1453
+ define i32 @test_shufflevector_v2s32_v3s32 (<2 x i32 > %arg ) {
1454
+ ; CHECK-LABEL: name: test_shufflevector_v2s32_v3s32
1455
+ ; CHECK: [[ARG:%[0-9]+]](<2 x s32>) = COPY %d0
1456
+ ; CHECK: [[UNDEF:%[0-9]+]](<2 x s32>) = IMPLICIT_DEF
1457
+ ; CHECK: [[C1:%[0-9]+]](s32) = G_CONSTANT i32 1
1458
+ ; CHECK: [[C0:%[0-9]+]](s32) = G_CONSTANT i32 0
1459
+ ; CHECK: [[MASK:%[0-9]+]](<3 x s32>) = G_MERGE_VALUES [[C1]](s32), [[C0]](s32), [[C1]](s32)
1460
+ ; CHECK: [[VEC:%[0-9]+]](<3 x s32>) = G_SHUFFLE_VECTOR [[ARG]](<2 x s32>), [[UNDEF]], [[MASK]](<3 x s32>)
1461
+ ; CHECK: G_EXTRACT_VECTOR_ELT [[VEC]](<3 x s32>)
1462
+ %vec = shufflevector <2 x i32 > %arg , <2 x i32 > undef , <3 x i32 > <i32 1 , i32 0 , i32 1 >
1463
+ %res = extractelement <3 x i32 > %vec , i32 0
1464
+ ret i32 %res
1465
+ }
1466
+
1467
+ define <4 x i32 > @test_shufflevector_v2s32_v4s32 (<2 x i32 > %arg1 , <2 x i32 > %arg2 ) {
1468
+ ; CHECK-LABEL: name: test_shufflevector_v2s32_v4s32
1469
+ ; CHECK: [[ARG1:%[0-9]+]](<2 x s32>) = COPY %d0
1470
+ ; CHECK: [[ARG2:%[0-9]+]](<2 x s32>) = COPY %d1
1471
+ ; CHECK: [[C0:%[0-9]+]](s32) = G_CONSTANT i32 0
1472
+ ; CHECK: [[C1:%[0-9]+]](s32) = G_CONSTANT i32 1
1473
+ ; CHECK: [[C2:%[0-9]+]](s32) = G_CONSTANT i32 2
1474
+ ; CHECK: [[C3:%[0-9]+]](s32) = G_CONSTANT i32 3
1475
+ ; CHECK: [[MASK:%[0-9]+]](<4 x s32>) = G_MERGE_VALUES [[C0]](s32), [[C1]](s32), [[C2]](s32), [[C3]](s32)
1476
+ ; CHECK: [[VEC:%[0-9]+]](<4 x s32>) = G_SHUFFLE_VECTOR [[ARG1]](<2 x s32>), [[ARG2]], [[MASK]](<4 x s32>)
1477
+ ; CHECK: %q0 = COPY [[VEC]](<4 x s32>)
1478
+ %res = shufflevector <2 x i32 > %arg1 , <2 x i32 > %arg2 , <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >
1479
+ ret <4 x i32 > %res
1480
+ }
1481
+
1482
+ define <2 x i32 > @test_shufflevector_v4s32_v2s32 (<4 x i32 > %arg ) {
1483
+ ; CHECK-LABEL: name: test_shufflevector_v4s32_v2s32
1484
+ ; CHECK: [[ARG:%[0-9]+]](<4 x s32>) = COPY %q0
1485
+ ; CHECK: [[UNDEF:%[0-9]+]](<4 x s32>) = IMPLICIT_DEF
1486
+ ; CHECK: [[C1:%[0-9]+]](s32) = G_CONSTANT i32 1
1487
+ ; CHECK: [[C3:%[0-9]+]](s32) = G_CONSTANT i32 3
1488
+ ; CHECK: [[MASK:%[0-9]+]](<2 x s32>) = G_MERGE_VALUES [[C1]](s32), [[C3]](s32)
1489
+ ; CHECK: [[VEC:%[0-9]+]](<2 x s32>) = G_SHUFFLE_VECTOR [[ARG]](<4 x s32>), [[UNDEF]], [[MASK]](<2 x s32>)
1490
+ ; CHECK: %d0 = COPY [[VEC]](<2 x s32>)
1491
+ %res = shufflevector <4 x i32 > %arg , <4 x i32 > undef , <2 x i32 > <i32 1 , i32 3 >
1492
+ ret <2 x i32 > %res
1493
+ }
1494
+
1495
+
1496
+ define <16 x i8 > @test_shufflevector_v8s8_v16s8 (<8 x i8 > %arg1 , <8 x i8 > %arg2 ) {
1497
+ ; CHECK-LABEL: name: test_shufflevector_v8s8_v16s8
1498
+ ; CHECK: [[ARG1:%[0-9]+]](<8 x s8>) = COPY %d0
1499
+ ; CHECK: [[ARG2:%[0-9]+]](<8 x s8>) = COPY %d1
1500
+ ; CHECK: [[C0:%[0-9]+]](s32) = G_CONSTANT i32 0
1501
+ ; CHECK: [[C8:%[0-9]+]](s32) = G_CONSTANT i32 8
1502
+ ; CHECK: [[C1:%[0-9]+]](s32) = G_CONSTANT i32 1
1503
+ ; CHECK: [[C9:%[0-9]+]](s32) = G_CONSTANT i32 9
1504
+ ; CHECK: [[C2:%[0-9]+]](s32) = G_CONSTANT i32 2
1505
+ ; CHECK: [[C10:%[0-9]+]](s32) = G_CONSTANT i32 10
1506
+ ; CHECK: [[C3:%[0-9]+]](s32) = G_CONSTANT i32 3
1507
+ ; CHECK: [[C11:%[0-9]+]](s32) = G_CONSTANT i32 11
1508
+ ; CHECK: [[C4:%[0-9]+]](s32) = G_CONSTANT i32 4
1509
+ ; CHECK: [[C12:%[0-9]+]](s32) = G_CONSTANT i32 12
1510
+ ; CHECK: [[C5:%[0-9]+]](s32) = G_CONSTANT i32 5
1511
+ ; CHECK: [[C13:%[0-9]+]](s32) = G_CONSTANT i32 13
1512
+ ; CHECK: [[C6:%[0-9]+]](s32) = G_CONSTANT i32 6
1513
+ ; CHECK: [[C14:%[0-9]+]](s32) = G_CONSTANT i32 14
1514
+ ; CHECK: [[C7:%[0-9]+]](s32) = G_CONSTANT i32 7
1515
+ ; CHECK: [[C15:%[0-9]+]](s32) = G_CONSTANT i32 15
1516
+ ; CHECK: [[MASK:%[0-9]+]](<16 x s32>) = G_MERGE_VALUES [[C0]](s32), [[C8]](s32), [[C1]](s32), [[C9]](s32), [[C2]](s32), [[C10]](s32), [[C3]](s32), [[C11]](s32), [[C4]](s32), [[C12]](s32), [[C5]](s32), [[C13]](s32), [[C6]](s32), [[C14]](s32), [[C7]](s32), [[C15]](s32)
1517
+ ; CHECK: [[VEC:%[0-9]+]](<16 x s8>) = G_SHUFFLE_VECTOR [[ARG1]](<8 x s8>), [[ARG2]], [[MASK]](<16 x s32>)
1518
+ ; CHECK: %q0 = COPY [[VEC]](<16 x s8>)
1519
+ %res = shufflevector <8 x i8 > %arg1 , <8 x i8 > %arg2 , <16 x i32 > <i32 0 , i32 8 , i32 1 , i32 9 , i32 2 , i32 10 , i32 3 , i32 11 , i32 4 , i32 12 , i32 5 , i32 13 , i32 6 , i32 14 , i32 7 , i32 15 >
1520
+ ret <16 x i8 > %res
1521
+ }
0 commit comments