Skip to content

Commit 9cc1dd2

Browse files
committed
[AArch64][GlobalISel] Lower vector G_CTTZ.
Fixes issue 56398
1 parent afc4958 commit 9cc1dd2

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -662,8 +662,8 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
662662

663663
getActionDefinitionsBuilder(G_CTTZ_ZERO_UNDEF).lower();
664664

665-
// TODO: Handle vector types.
666665
getActionDefinitionsBuilder(G_CTTZ)
666+
.lowerIf(isVector(0))
667667
.clampScalar(0, s32, s64)
668668
.scalarSameSizeAs(1, 0)
669669
.customFor({s32, s64});

llvm/test/CodeGen/AArch64/GlobalISel/legalize-cttz.mir

+26
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,29 @@ body: |
9292
%1:_(s64) = G_CTTZ %val(s64)
9393
$x0 = COPY %1(s64)
9494
RET_ReallyLR implicit $x0
95+
...
96+
---
97+
name: v4s32
98+
alignment: 4
99+
tracksRegLiveness: true
100+
body: |
101+
bb.0:
102+
liveins: $q0
103+
104+
; CHECK-LABEL: name: v4s32
105+
; CHECK: liveins: $q0
106+
; CHECK-NEXT: {{ $}}
107+
; CHECK-NEXT: %val:_(<4 x s32>) = COPY $q0
108+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
109+
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
110+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s32>) = G_XOR %val, [[BUILD_VECTOR]]
111+
; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s32>) = G_ADD %val, [[BUILD_VECTOR]]
112+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(<4 x s32>) = G_AND [[XOR]], [[ADD]]
113+
; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(<4 x s32>) = G_CTPOP [[AND]](<4 x s32>)
114+
; CHECK-NEXT: $q0 = COPY [[CTPOP]](<4 x s32>)
115+
; CHECK-NEXT: RET_ReallyLR implicit $q0
116+
%val:_(<4 x s32>) = COPY $q0
117+
%1:_(<4 x s32>) = G_CTTZ %val(<4 x s32>)
118+
$q0 = COPY %1(<4 x s32>)
119+
RET_ReallyLR implicit $q0
120+
...

0 commit comments

Comments
 (0)