Skip to content

Commit 0199486

Browse files
committed
[LoongArch][NFC] Pre-commit tests for sign-extension removal with vectors
1 parent 1cc7119 commit 0199486

File tree

1 file changed

+198
-0
lines changed

1 file changed

+198
-0
lines changed

llvm/test/CodeGen/LoongArch/sextw-removal.ll

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,3 +1334,201 @@ entry:
13341334
%a = call i32 @llvm.loongarch.lsx.vpickve2gr.w(<4 x i32> %v, i32 3)
13351335
ret i32 %a
13361336
}
1337+
1338+
define fastcc ptr @test21(ptr %B, ptr %Op0, ptr %Op1, ptr %P, ptr %M, i1 zeroext %I, i64 %0, ptr %a.1, i64 %1, i1 %c, i32 %2) {
1339+
; CHECK-LABEL: test21:
1340+
; CHECK: # %bb.0: # %entry
1341+
; CHECK-NEXT: addi.d $sp, $sp, -80
1342+
; CHECK-NEXT: .cfi_def_cfa_offset 80
1343+
; CHECK-NEXT: st.d $ra, $sp, 72 # 8-byte Folded Spill
1344+
; CHECK-NEXT: st.d $fp, $sp, 64 # 8-byte Folded Spill
1345+
; CHECK-NEXT: st.d $s0, $sp, 56 # 8-byte Folded Spill
1346+
; CHECK-NEXT: st.d $s1, $sp, 48 # 8-byte Folded Spill
1347+
; CHECK-NEXT: st.d $s2, $sp, 40 # 8-byte Folded Spill
1348+
; CHECK-NEXT: st.d $s3, $sp, 32 # 8-byte Folded Spill
1349+
; CHECK-NEXT: st.d $s4, $sp, 24 # 8-byte Folded Spill
1350+
; CHECK-NEXT: st.d $s5, $sp, 16 # 8-byte Folded Spill
1351+
; CHECK-NEXT: st.d $s6, $sp, 8 # 8-byte Folded Spill
1352+
; CHECK-NEXT: .cfi_offset 1, -8
1353+
; CHECK-NEXT: .cfi_offset 22, -16
1354+
; CHECK-NEXT: .cfi_offset 23, -24
1355+
; CHECK-NEXT: .cfi_offset 24, -32
1356+
; CHECK-NEXT: .cfi_offset 25, -40
1357+
; CHECK-NEXT: .cfi_offset 26, -48
1358+
; CHECK-NEXT: .cfi_offset 27, -56
1359+
; CHECK-NEXT: .cfi_offset 28, -64
1360+
; CHECK-NEXT: .cfi_offset 29, -72
1361+
; CHECK-NEXT: ld.d $s6, $sp, 80
1362+
; CHECK-NEXT: move $s2, $a7
1363+
; CHECK-NEXT: move $s4, $a5
1364+
; CHECK-NEXT: move $s0, $a4
1365+
; CHECK-NEXT: move $fp, $a3
1366+
; CHECK-NEXT: move $s5, $a2
1367+
; CHECK-NEXT: move $s3, $a1
1368+
; CHECK-NEXT: move $s1, $a0
1369+
; CHECK-NEXT: move $a0, $zero
1370+
; CHECK-NEXT: jirl $ra, $zero, 0
1371+
; CHECK-NEXT: beqz $s4, .LBB24_2
1372+
; CHECK-NEXT: # %bb.1: # %if.then26
1373+
; CHECK-NEXT: addi.w $s6, $s6, 1
1374+
; CHECK-NEXT: beqz $s4, .LBB24_3
1375+
; CHECK-NEXT: b .LBB24_6
1376+
; CHECK-NEXT: .LBB24_2:
1377+
; CHECK-NEXT: move $s3, $s5
1378+
; CHECK-NEXT: bnez $s4, .LBB24_6
1379+
; CHECK-NEXT: .LBB24_3: # %for.cond32.preheader.preheader
1380+
; CHECK-NEXT: ld.d $a0, $sp, 96
1381+
; CHECK-NEXT: ld.d $a1, $sp, 88
1382+
; CHECK-NEXT: addi.w $a2, $s6, 0
1383+
; CHECK-NEXT: sltui $a2, $a2, 1
1384+
; CHECK-NEXT: masknez $a0, $a0, $a2
1385+
; CHECK-NEXT: vreplgr2vr.w $vr0, $s6
1386+
; CHECK-NEXT: andi $a1, $a1, 1
1387+
; CHECK-NEXT: .p2align 4, , 16
1388+
; CHECK-NEXT: .LBB24_4: # %for.cond32.preheader
1389+
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1390+
; CHECK-NEXT: st.w $a0, $zero, 0
1391+
; CHECK-NEXT: vst $vr0, $s2, 0
1392+
; CHECK-NEXT: bnez $a1, .LBB24_4
1393+
; CHECK-NEXT: # %bb.5: # %for.cond.cleanup
1394+
; CHECK-NEXT: move $a0, $zero
1395+
; CHECK-NEXT: move $a1, $s3
1396+
; CHECK-NEXT: move $a2, $zero
1397+
; CHECK-NEXT: move $a3, $zero
1398+
; CHECK-NEXT: move $a4, $zero
1399+
; CHECK-NEXT: move $a5, $zero
1400+
; CHECK-NEXT: jirl $ra, $zero, 0
1401+
; CHECK-NEXT: move $a0, $s1
1402+
; CHECK-NEXT: move $a1, $s0
1403+
; CHECK-NEXT: move $a2, $zero
1404+
; CHECK-NEXT: move $a3, $fp
1405+
; CHECK-NEXT: jirl $ra, $zero, 0
1406+
; CHECK-NEXT: .LBB24_6: # %for.cond32.preheader.us.preheader
1407+
; CHECK-NEXT: move $a0, $zero
1408+
; CHECK-NEXT: ld.d $s6, $sp, 8 # 8-byte Folded Reload
1409+
; CHECK-NEXT: ld.d $s5, $sp, 16 # 8-byte Folded Reload
1410+
; CHECK-NEXT: ld.d $s4, $sp, 24 # 8-byte Folded Reload
1411+
; CHECK-NEXT: ld.d $s3, $sp, 32 # 8-byte Folded Reload
1412+
; CHECK-NEXT: ld.d $s2, $sp, 40 # 8-byte Folded Reload
1413+
; CHECK-NEXT: ld.d $s1, $sp, 48 # 8-byte Folded Reload
1414+
; CHECK-NEXT: ld.d $s0, $sp, 56 # 8-byte Folded Reload
1415+
; CHECK-NEXT: ld.d $fp, $sp, 64 # 8-byte Folded Reload
1416+
; CHECK-NEXT: ld.d $ra, $sp, 72 # 8-byte Folded Reload
1417+
; CHECK-NEXT: addi.d $sp, $sp, 80
1418+
; CHECK-NEXT: ret
1419+
;
1420+
; NORMV-LABEL: test21:
1421+
; NORMV: # %bb.0: # %entry
1422+
; NORMV-NEXT: addi.d $sp, $sp, -80
1423+
; NORMV-NEXT: .cfi_def_cfa_offset 80
1424+
; NORMV-NEXT: st.d $ra, $sp, 72 # 8-byte Folded Spill
1425+
; NORMV-NEXT: st.d $fp, $sp, 64 # 8-byte Folded Spill
1426+
; NORMV-NEXT: st.d $s0, $sp, 56 # 8-byte Folded Spill
1427+
; NORMV-NEXT: st.d $s1, $sp, 48 # 8-byte Folded Spill
1428+
; NORMV-NEXT: st.d $s2, $sp, 40 # 8-byte Folded Spill
1429+
; NORMV-NEXT: st.d $s3, $sp, 32 # 8-byte Folded Spill
1430+
; NORMV-NEXT: st.d $s4, $sp, 24 # 8-byte Folded Spill
1431+
; NORMV-NEXT: st.d $s5, $sp, 16 # 8-byte Folded Spill
1432+
; NORMV-NEXT: st.d $s6, $sp, 8 # 8-byte Folded Spill
1433+
; NORMV-NEXT: .cfi_offset 1, -8
1434+
; NORMV-NEXT: .cfi_offset 22, -16
1435+
; NORMV-NEXT: .cfi_offset 23, -24
1436+
; NORMV-NEXT: .cfi_offset 24, -32
1437+
; NORMV-NEXT: .cfi_offset 25, -40
1438+
; NORMV-NEXT: .cfi_offset 26, -48
1439+
; NORMV-NEXT: .cfi_offset 27, -56
1440+
; NORMV-NEXT: .cfi_offset 28, -64
1441+
; NORMV-NEXT: .cfi_offset 29, -72
1442+
; NORMV-NEXT: ld.d $s6, $sp, 80
1443+
; NORMV-NEXT: move $s2, $a7
1444+
; NORMV-NEXT: move $s4, $a5
1445+
; NORMV-NEXT: move $s0, $a4
1446+
; NORMV-NEXT: move $fp, $a3
1447+
; NORMV-NEXT: move $s5, $a2
1448+
; NORMV-NEXT: move $s3, $a1
1449+
; NORMV-NEXT: move $s1, $a0
1450+
; NORMV-NEXT: move $a0, $zero
1451+
; NORMV-NEXT: jirl $ra, $zero, 0
1452+
; NORMV-NEXT: beqz $s4, .LBB24_2
1453+
; NORMV-NEXT: # %bb.1: # %if.then26
1454+
; NORMV-NEXT: addi.d $a0, $s6, 1
1455+
; NORMV-NEXT: addi.w $s6, $a0, 0
1456+
; NORMV-NEXT: beqz $s4, .LBB24_3
1457+
; NORMV-NEXT: b .LBB24_6
1458+
; NORMV-NEXT: .LBB24_2:
1459+
; NORMV-NEXT: move $s3, $s5
1460+
; NORMV-NEXT: bnez $s4, .LBB24_6
1461+
; NORMV-NEXT: .LBB24_3: # %for.cond32.preheader.preheader
1462+
; NORMV-NEXT: ld.d $a0, $sp, 96
1463+
; NORMV-NEXT: ld.d $a1, $sp, 88
1464+
; NORMV-NEXT: addi.w $a2, $s6, 0
1465+
; NORMV-NEXT: sltui $a2, $a2, 1
1466+
; NORMV-NEXT: masknez $a0, $a0, $a2
1467+
; NORMV-NEXT: vreplgr2vr.w $vr0, $s6
1468+
; NORMV-NEXT: andi $a1, $a1, 1
1469+
; NORMV-NEXT: .p2align 4, , 16
1470+
; NORMV-NEXT: .LBB24_4: # %for.cond32.preheader
1471+
; NORMV-NEXT: # =>This Inner Loop Header: Depth=1
1472+
; NORMV-NEXT: st.w $a0, $zero, 0
1473+
; NORMV-NEXT: vst $vr0, $s2, 0
1474+
; NORMV-NEXT: bnez $a1, .LBB24_4
1475+
; NORMV-NEXT: # %bb.5: # %for.cond.cleanup
1476+
; NORMV-NEXT: move $a0, $zero
1477+
; NORMV-NEXT: move $a1, $s3
1478+
; NORMV-NEXT: move $a2, $zero
1479+
; NORMV-NEXT: move $a3, $zero
1480+
; NORMV-NEXT: move $a4, $zero
1481+
; NORMV-NEXT: move $a5, $zero
1482+
; NORMV-NEXT: jirl $ra, $zero, 0
1483+
; NORMV-NEXT: move $a0, $s1
1484+
; NORMV-NEXT: move $a1, $s0
1485+
; NORMV-NEXT: move $a2, $zero
1486+
; NORMV-NEXT: move $a3, $fp
1487+
; NORMV-NEXT: jirl $ra, $zero, 0
1488+
; NORMV-NEXT: .LBB24_6: # %for.cond32.preheader.us.preheader
1489+
; NORMV-NEXT: move $a0, $zero
1490+
; NORMV-NEXT: ld.d $s6, $sp, 8 # 8-byte Folded Reload
1491+
; NORMV-NEXT: ld.d $s5, $sp, 16 # 8-byte Folded Reload
1492+
; NORMV-NEXT: ld.d $s4, $sp, 24 # 8-byte Folded Reload
1493+
; NORMV-NEXT: ld.d $s3, $sp, 32 # 8-byte Folded Reload
1494+
; NORMV-NEXT: ld.d $s2, $sp, 40 # 8-byte Folded Reload
1495+
; NORMV-NEXT: ld.d $s1, $sp, 48 # 8-byte Folded Reload
1496+
; NORMV-NEXT: ld.d $s0, $sp, 56 # 8-byte Folded Reload
1497+
; NORMV-NEXT: ld.d $fp, $sp, 64 # 8-byte Folded Reload
1498+
; NORMV-NEXT: ld.d $ra, $sp, 72 # 8-byte Folded Reload
1499+
; NORMV-NEXT: addi.d $sp, $sp, 80
1500+
; NORMV-NEXT: ret
1501+
entry:
1502+
%call4.i.i.i.i = tail call i32 null(ptr null)
1503+
%conv = trunc i64 %1 to i32
1504+
br i1 %I, label %if.then26, label %if.end30
1505+
1506+
if.then26: ; preds = %entry
1507+
%sub27 = add i32 %conv, 1
1508+
br label %if.end30
1509+
1510+
if.end30: ; preds = %if.then26, %entry
1511+
%Op1.addr.0 = phi ptr [ %Op0, %if.then26 ], [ %Op1, %entry ]
1512+
%ShiftVal.1 = phi i32 [ %sub27, %if.then26 ], [ %conv, %entry ]
1513+
br i1 %I, label %for.cond32.preheader.us.preheader, label %for.cond32.preheader.preheader
1514+
1515+
for.cond32.preheader.preheader: ; preds = %if.end30
1516+
%cmp37 = icmp ult i32 %ShiftVal.1, 1
1517+
%spec.select = select i1 %cmp37, i32 0, i32 %2
1518+
br label %for.cond32.preheader
1519+
1520+
for.cond32.preheader.us.preheader: ; preds = %if.end30
1521+
ret ptr null
1522+
1523+
for.cond32.preheader: ; preds = %for.cond32.preheader, %for.cond32.preheader.preheader
1524+
store i32 %spec.select, ptr null, align 4
1525+
%3 = insertelement <4 x i32> zeroinitializer, i32 %ShiftVal.1, i64 0
1526+
%4 = shufflevector <4 x i32> %3, <4 x i32> zeroinitializer, <4 x i32> zeroinitializer
1527+
store <4 x i32> %4, ptr %a.1, align 4
1528+
br i1 %c, label %for.cond32.preheader, label %for.cond.cleanup
1529+
1530+
for.cond.cleanup: ; preds = %for.cond32.preheader
1531+
%call48 = call ptr null(ptr null, ptr %Op1.addr.0, ptr null, [2 x i64] zeroinitializer, ptr null)
1532+
%call49 = call fastcc ptr null(ptr %B, ptr %M, ptr null, ptr %P)
1533+
ret ptr null
1534+
}

0 commit comments

Comments
 (0)