Skip to content

Commit 5d099c2

Browse files
committed
[AArch64][GlobalISel] Add 128bit insert and extract vector test coverage. NFC
1 parent 0f346a4 commit 5d099c2

File tree

1 file changed

+235
-2
lines changed

1 file changed

+235
-2
lines changed

llvm/test/CodeGen/AArch64/insertextract.ll

Lines changed: 235 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
1-
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
22
; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3-
; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
3+
; RUN: llc -mtriple=aarch64 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
4+
5+
; CHECK-GI: warning: Instruction selection used fallback path for insert_v2i128_0
6+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for insert_v2i128_1
7+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for insert_v2i128_c
8+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for insert_v2fp128_0
9+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for insert_v2fp128_1
10+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for insert_v2fp128_c
11+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for extract_v2i128_0
12+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for extract_v2i128_1
13+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for extract_v2i128_c
14+
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for extract_v2fp128_c
415

516
define <2 x double> @insert_v2f64_0(<2 x double> %a, double %b, i32 %c) {
617
; CHECK-LABEL: insert_v2f64_0:
@@ -1312,6 +1323,137 @@ entry:
13121323
ret <4 x i64> %d
13131324
}
13141325

1326+
define <2 x i128> @insert_v2i128_0(<2 x i128> %a, i128 %b, i32 %c) {
1327+
; CHECK-LABEL: insert_v2i128_0:
1328+
; CHECK: // %bb.0: // %entry
1329+
; CHECK-NEXT: adds x2, x2, x2
1330+
; CHECK-NEXT: mov x1, x5
1331+
; CHECK-NEXT: mov x0, x4
1332+
; CHECK-NEXT: adc x3, x3, x3
1333+
; CHECK-NEXT: ret
1334+
entry:
1335+
%aa = add <2 x i128> %a, %a
1336+
%d = insertelement <2 x i128> %aa, i128 %b, i32 0
1337+
ret <2 x i128> %d
1338+
}
1339+
1340+
define <2 x i128> @insert_v2i128_1(<2 x i128> %a, i128 %b, i32 %c) {
1341+
; CHECK-LABEL: insert_v2i128_1:
1342+
; CHECK: // %bb.0: // %entry
1343+
; CHECK-NEXT: adds x0, x0, x0
1344+
; CHECK-NEXT: mov x3, x5
1345+
; CHECK-NEXT: mov x2, x4
1346+
; CHECK-NEXT: adc x1, x1, x1
1347+
; CHECK-NEXT: ret
1348+
entry:
1349+
%aa = add <2 x i128> %a, %a
1350+
%d = insertelement <2 x i128> %aa, i128 %b, i32 1
1351+
ret <2 x i128> %d
1352+
}
1353+
1354+
define <2 x i128> @insert_v2i128_c(<2 x i128> %a, i128 %b, i32 %c) {
1355+
; CHECK-LABEL: insert_v2i128_c:
1356+
; CHECK: // %bb.0: // %entry
1357+
; CHECK-NEXT: sub sp, sp, #32
1358+
; CHECK-NEXT: .cfi_def_cfa_offset 32
1359+
; CHECK-NEXT: // kill: def $w6 killed $w6 def $x6
1360+
; CHECK-NEXT: adds x8, x0, x0
1361+
; CHECK-NEXT: and x11, x6, #0x1
1362+
; CHECK-NEXT: mov x12, sp
1363+
; CHECK-NEXT: adc x9, x1, x1
1364+
; CHECK-NEXT: adds x10, x2, x2
1365+
; CHECK-NEXT: add x11, x12, x11, lsl #4
1366+
; CHECK-NEXT: str x8, [sp]
1367+
; CHECK-NEXT: adc x8, x3, x3
1368+
; CHECK-NEXT: str x10, [sp, #16]
1369+
; CHECK-NEXT: str x4, [x11]
1370+
; CHECK-NEXT: str x8, [sp, #24]
1371+
; CHECK-NEXT: str x9, [sp, #8]
1372+
; CHECK-NEXT: str x5, [x11, #8]
1373+
; CHECK-NEXT: ldp x0, x1, [sp]
1374+
; CHECK-NEXT: ldp x2, x3, [sp, #16]
1375+
; CHECK-NEXT: add sp, sp, #32
1376+
; CHECK-NEXT: ret
1377+
entry:
1378+
%aa = add <2 x i128> %a, %a
1379+
%d = insertelement <2 x i128> %aa, i128 %b, i32 %c
1380+
ret <2 x i128> %d
1381+
}
1382+
1383+
define <2 x fp128> @insert_v2fp128_0(<2 x fp128> %a, fp128 %b, i32 %c) {
1384+
; CHECK-LABEL: insert_v2fp128_0:
1385+
; CHECK: // %bb.0: // %entry
1386+
; CHECK-NEXT: sub sp, sp, #32
1387+
; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
1388+
; CHECK-NEXT: .cfi_def_cfa_offset 32
1389+
; CHECK-NEXT: .cfi_offset w30, -16
1390+
; CHECK-NEXT: mov v0.16b, v1.16b
1391+
; CHECK-NEXT: str q2, [sp] // 16-byte Folded Spill
1392+
; CHECK-NEXT: bl __addtf3
1393+
; CHECK-NEXT: mov v1.16b, v0.16b
1394+
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1395+
; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
1396+
; CHECK-NEXT: add sp, sp, #32
1397+
; CHECK-NEXT: ret
1398+
entry:
1399+
%aa = fadd <2 x fp128> %a, %a
1400+
%d = insertelement <2 x fp128> %aa, fp128 %b, i32 0
1401+
ret <2 x fp128> %d
1402+
}
1403+
1404+
define <2 x fp128> @insert_v2fp128_1(<2 x fp128> %a, fp128 %b, i32 %c) {
1405+
; CHECK-LABEL: insert_v2fp128_1:
1406+
; CHECK: // %bb.0: // %entry
1407+
; CHECK-NEXT: sub sp, sp, #32
1408+
; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
1409+
; CHECK-NEXT: .cfi_def_cfa_offset 32
1410+
; CHECK-NEXT: .cfi_offset w30, -16
1411+
; CHECK-NEXT: mov v1.16b, v0.16b
1412+
; CHECK-NEXT: str q2, [sp] // 16-byte Folded Spill
1413+
; CHECK-NEXT: bl __addtf3
1414+
; CHECK-NEXT: ldr q1, [sp] // 16-byte Folded Reload
1415+
; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
1416+
; CHECK-NEXT: add sp, sp, #32
1417+
; CHECK-NEXT: ret
1418+
entry:
1419+
%aa = fadd <2 x fp128> %a, %a
1420+
%d = insertelement <2 x fp128> %aa, fp128 %b, i32 1
1421+
ret <2 x fp128> %d
1422+
}
1423+
1424+
define <2 x fp128> @insert_v2fp128_c(<2 x fp128> %a, fp128 %b, i32 %c) {
1425+
; CHECK-LABEL: insert_v2fp128_c:
1426+
; CHECK: // %bb.0: // %entry
1427+
; CHECK-NEXT: sub sp, sp, #96
1428+
; CHECK-NEXT: stp x30, x19, [sp, #80] // 16-byte Folded Spill
1429+
; CHECK-NEXT: .cfi_def_cfa_offset 96
1430+
; CHECK-NEXT: .cfi_offset w19, -8
1431+
; CHECK-NEXT: .cfi_offset w30, -16
1432+
; CHECK-NEXT: str q1, [sp] // 16-byte Folded Spill
1433+
; CHECK-NEXT: mov v1.16b, v0.16b
1434+
; CHECK-NEXT: mov w19, w0
1435+
; CHECK-NEXT: str q2, [sp, #32] // 16-byte Folded Spill
1436+
; CHECK-NEXT: bl __addtf3
1437+
; CHECK-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
1438+
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
1439+
; CHECK-NEXT: mov v1.16b, v0.16b
1440+
; CHECK-NEXT: bl __addtf3
1441+
; CHECK-NEXT: str q0, [sp, #64]
1442+
; CHECK-NEXT: ldp q3, q0, [sp, #16] // 32-byte Folded Reload
1443+
; CHECK-NEXT: and x8, x19, #0x1
1444+
; CHECK-NEXT: add x9, sp, #48
1445+
; CHECK-NEXT: str q3, [sp, #48]
1446+
; CHECK-NEXT: str q0, [x9, x8, lsl #4]
1447+
; CHECK-NEXT: ldp q0, q1, [sp, #48]
1448+
; CHECK-NEXT: ldp x30, x19, [sp, #80] // 16-byte Folded Reload
1449+
; CHECK-NEXT: add sp, sp, #96
1450+
; CHECK-NEXT: ret
1451+
entry:
1452+
%aa = fadd <2 x fp128> %a, %a
1453+
%d = insertelement <2 x fp128> %aa, fp128 %b, i32 %c
1454+
ret <2 x fp128> %d
1455+
}
1456+
13151457
define double @extract_v2f64_0(<2 x double> %a, i32 %c) {
13161458
; CHECK-LABEL: extract_v2f64_0:
13171459
; CHECK: // %bb.0: // %entry
@@ -2573,3 +2715,94 @@ entry:
25732715
%d = extractelement <4 x i64> %a, i32 %c
25742716
ret i64 %d
25752717
}
2718+
2719+
define i128 @extract_v2i128_0(<2 x i128> %a, i32 %c) {
2720+
; CHECK-LABEL: extract_v2i128_0:
2721+
; CHECK: // %bb.0: // %entry
2722+
; CHECK-NEXT: adds x0, x0, x0
2723+
; CHECK-NEXT: adc x1, x1, x1
2724+
; CHECK-NEXT: ret
2725+
entry:
2726+
%b = add <2 x i128> %a, %a
2727+
%d = extractelement <2 x i128> %b, i32 0
2728+
ret i128 %d
2729+
}
2730+
2731+
define i128 @extract_v2i128_1(<2 x i128> %a, i32 %c) {
2732+
; CHECK-LABEL: extract_v2i128_1:
2733+
; CHECK: // %bb.0: // %entry
2734+
; CHECK-NEXT: adds x0, x2, x2
2735+
; CHECK-NEXT: adc x1, x3, x3
2736+
; CHECK-NEXT: ret
2737+
entry:
2738+
%b = add <2 x i128> %a, %a
2739+
%d = extractelement <2 x i128> %b, i32 1
2740+
ret i128 %d
2741+
}
2742+
2743+
define i128 @extract_v2i128_c(<2 x i128> %a, i32 %c) {
2744+
; CHECK-LABEL: extract_v2i128_c:
2745+
; CHECK: // %bb.0: // %entry
2746+
; CHECK-NEXT: sub sp, sp, #64
2747+
; CHECK-NEXT: .cfi_def_cfa_offset 64
2748+
; CHECK-NEXT: adds x9, x0, x0
2749+
; CHECK-NEXT: mov w8, w4
2750+
; CHECK-NEXT: adc x10, x1, x1
2751+
; CHECK-NEXT: adds x11, x2, x2
2752+
; CHECK-NEXT: fmov d1, x9
2753+
; CHECK-NEXT: fmov d0, x11
2754+
; CHECK-NEXT: adc x12, x3, x3
2755+
; CHECK-NEXT: add x8, x8, x8
2756+
; CHECK-NEXT: and x9, x8, #0x3
2757+
; CHECK-NEXT: add w8, w8, #1
2758+
; CHECK-NEXT: mov x11, sp
2759+
; CHECK-NEXT: mov v1.d[1], x10
2760+
; CHECK-NEXT: add x10, sp, #32
2761+
; CHECK-NEXT: and x8, x8, #0x3
2762+
; CHECK-NEXT: mov v0.d[1], x12
2763+
; CHECK-NEXT: stp q1, q0, [sp]
2764+
; CHECK-NEXT: stp q1, q0, [sp, #32]
2765+
; CHECK-NEXT: ldr x0, [x10, x9, lsl #3]
2766+
; CHECK-NEXT: ldr x1, [x11, x8, lsl #3]
2767+
; CHECK-NEXT: add sp, sp, #64
2768+
; CHECK-NEXT: ret
2769+
entry:
2770+
%b = add <2 x i128> %a, %a
2771+
%d = extractelement <2 x i128> %b, i32 %c
2772+
ret i128 %d
2773+
}
2774+
2775+
define fp128 @extract_v2fp128_0(<2 x fp128> %a, i32 %c) {
2776+
; CHECK-LABEL: extract_v2fp128_0:
2777+
; CHECK: // %bb.0: // %entry
2778+
; CHECK-NEXT: ret
2779+
entry:
2780+
%d = extractelement <2 x fp128> %a, i32 0
2781+
ret fp128 %d
2782+
}
2783+
2784+
define fp128 @extract_v2fp128_1(<2 x fp128> %a, i32 %c) {
2785+
; CHECK-LABEL: extract_v2fp128_1:
2786+
; CHECK: // %bb.0: // %entry
2787+
; CHECK-NEXT: mov v0.16b, v1.16b
2788+
; CHECK-NEXT: ret
2789+
entry:
2790+
%d = extractelement <2 x fp128> %a, i32 1
2791+
ret fp128 %d
2792+
}
2793+
2794+
define fp128 @extract_v2fp128_c(<2 x fp128> %a, i32 %c) {
2795+
; CHECK-LABEL: extract_v2fp128_c:
2796+
; CHECK: // %bb.0: // %entry
2797+
; CHECK-NEXT: stp q0, q1, [sp, #-32]!
2798+
; CHECK-NEXT: .cfi_def_cfa_offset 32
2799+
; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0
2800+
; CHECK-NEXT: and x8, x0, #0x1
2801+
; CHECK-NEXT: mov x9, sp
2802+
; CHECK-NEXT: ldr q0, [x9, x8, lsl #4]
2803+
; CHECK-NEXT: add sp, sp, #32
2804+
; CHECK-NEXT: ret
2805+
entry:
2806+
%d = extractelement <2 x fp128> %a, i32 %c
2807+
ret fp128 %d
2808+
}

0 commit comments

Comments
 (0)