Skip to content

Commit 9411b00

Browse files
authored
[GISel][AArch64] Scalarize i128 bitreverse instructions. Added tests for i128 and v2i128 bitreverse (#142621)
v2i128 bitreverse previously wasn't being scalarized as it should be. Also added tests for i128 and v2i128 bitreverse
1 parent 3e5fd77 commit 9411b00

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
370370
.clampNumElements(0, v4s16, v8s16)
371371
.clampNumElements(0, v2s32, v4s32)
372372
.clampNumElements(0, v2s64, v2s64)
373+
.scalarizeIf(scalarOrEltWiderThan(0, 64), 0)
373374
.moreElementsToNextPow2(0)
374375
.lower();
375376

llvm/test/CodeGen/AArch64/bitreverse.ll

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,19 @@ define i64 @g_64(i64 %a) {
7272
ret i64 %b
7373
}
7474

75+
declare i128 @llvm.bitreverse.i128(i128) readnone
76+
77+
define i128 @g_128(i128 %a) {
78+
; CHECK-LABEL: g_128:
79+
; CHECK: // %bb.0:
80+
; CHECK-NEXT: rbit x8, x1
81+
; CHECK-NEXT: rbit x1, x0
82+
; CHECK-NEXT: mov x0, x8
83+
; CHECK-NEXT: ret
84+
%b = call i128 @llvm.bitreverse.i128(i128 %a)
85+
ret i128 %b
86+
}
87+
7588
declare <16 x i3> @llvm.bitreverse.v16i3(<16 x i3>) readnone
7689

7790
define <16 x i3> @g_vec_16x3(<16 x i3> %a) {
@@ -282,3 +295,19 @@ define <4 x i64> @g_vec_4x64(<4 x i64> %a) {
282295
%b = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a)
283296
ret <4 x i64> %b
284297
}
298+
299+
declare <2 x i128> @llvm.bitreverse.v2i128(<2 x i128>) readnone
300+
301+
define <2 x i128> @g_vec_2x128(<2 x i128> %a) {
302+
; CHECK-LABEL: g_vec_2x128:
303+
; CHECK: // %bb.0:
304+
; CHECK-NEXT: rbit x8, x1
305+
; CHECK-NEXT: rbit x9, x3
306+
; CHECK-NEXT: rbit x1, x0
307+
; CHECK-NEXT: rbit x3, x2
308+
; CHECK-NEXT: mov x0, x8
309+
; CHECK-NEXT: mov x2, x9
310+
; CHECK-NEXT: ret
311+
%b = call <2 x i128> @llvm.bitreverse.v2i128(<2 x i128> %a)
312+
ret <2 x i128> %b
313+
}

0 commit comments

Comments
 (0)