Skip to content

Commit 11c3f52

Browse files
committed
[AArch64] Add test for subhn xor pattern. NFC
1 parent bddc815 commit 11c3f52

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

llvm/test/CodeGen/AArch64/arm64-vadd.ll

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,3 +1517,66 @@ define <4 x i32> @subhn2_4s_natural(<2 x i32> %low, ptr %A, ptr %B) nounwind {
15171517
%res = shufflevector <2 x i32> %low, <2 x i32> %narrowed, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
15181518
ret <4 x i32> %res
15191519
}
1520+
1521+
define <16 x i8> @neg_narrow_i8(<16 x i16> %a) {
1522+
; CHECK-SD-LABEL: neg_narrow_i8:
1523+
; CHECK-SD: // %bb.0:
1524+
; CHECK-SD-NEXT: mvn v1.16b, v1.16b
1525+
; CHECK-SD-NEXT: mvn v0.16b, v0.16b
1526+
; CHECK-SD-NEXT: uzp2 v0.16b, v0.16b, v1.16b
1527+
; CHECK-SD-NEXT: ret
1528+
;
1529+
; CHECK-GI-LABEL: neg_narrow_i8:
1530+
; CHECK-GI: // %bb.0:
1531+
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1532+
; CHECK-GI-NEXT: mvn v1.16b, v1.16b
1533+
; CHECK-GI-NEXT: shrn v0.8b, v0.8h, #8
1534+
; CHECK-GI-NEXT: shrn2 v0.16b, v1.8h, #8
1535+
; CHECK-GI-NEXT: ret
1536+
%not.i = xor <16 x i16> %a, splat (i16 -1)
1537+
%s = lshr <16 x i16> %not.i, splat (i16 8)
1538+
%vshrn_n = trunc nuw <16 x i16> %s to <16 x i8>
1539+
ret <16 x i8> %vshrn_n
1540+
}
1541+
1542+
define <8 x i16> @neg_narrow_i16(<8 x i32> %a) {
1543+
; CHECK-SD-LABEL: neg_narrow_i16:
1544+
; CHECK-SD: // %bb.0:
1545+
; CHECK-SD-NEXT: mvn v1.16b, v1.16b
1546+
; CHECK-SD-NEXT: mvn v0.16b, v0.16b
1547+
; CHECK-SD-NEXT: uzp2 v0.8h, v0.8h, v1.8h
1548+
; CHECK-SD-NEXT: ret
1549+
;
1550+
; CHECK-GI-LABEL: neg_narrow_i16:
1551+
; CHECK-GI: // %bb.0:
1552+
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1553+
; CHECK-GI-NEXT: mvn v1.16b, v1.16b
1554+
; CHECK-GI-NEXT: shrn v0.4h, v0.4s, #16
1555+
; CHECK-GI-NEXT: shrn2 v0.8h, v1.4s, #16
1556+
; CHECK-GI-NEXT: ret
1557+
%not.i = xor <8 x i32> %a, splat (i32 -1)
1558+
%s = lshr <8 x i32> %not.i, splat (i32 16)
1559+
%vshrn_n = trunc nuw <8 x i32> %s to <8 x i16>
1560+
ret <8 x i16> %vshrn_n
1561+
}
1562+
1563+
define <4 x i32> @neg_narrow_i32(<4 x i64> %a) {
1564+
; CHECK-SD-LABEL: neg_narrow_i32:
1565+
; CHECK-SD: // %bb.0:
1566+
; CHECK-SD-NEXT: mvn v1.16b, v1.16b
1567+
; CHECK-SD-NEXT: mvn v0.16b, v0.16b
1568+
; CHECK-SD-NEXT: uzp2 v0.4s, v0.4s, v1.4s
1569+
; CHECK-SD-NEXT: ret
1570+
;
1571+
; CHECK-GI-LABEL: neg_narrow_i32:
1572+
; CHECK-GI: // %bb.0:
1573+
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
1574+
; CHECK-GI-NEXT: mvn v1.16b, v1.16b
1575+
; CHECK-GI-NEXT: shrn v0.2s, v0.2d, #32
1576+
; CHECK-GI-NEXT: shrn2 v0.4s, v1.2d, #32
1577+
; CHECK-GI-NEXT: ret
1578+
%not.i = xor <4 x i64> %a, splat (i64 -1)
1579+
%s = lshr <4 x i64> %not.i, splat (i64 32)
1580+
%vshrn_n = trunc nuw <4 x i64> %s to <4 x i32>
1581+
ret <4 x i32> %vshrn_n
1582+
}

0 commit comments

Comments
 (0)