Skip to content

Commit 44e8bea

Browse files
authored
[GISel][AArch64] Notify the Observer when CTTZ lowering changes the opcode to CTPOP. (#72008)
1 parent ec4a03c commit 44e8bea

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5942,8 +5942,10 @@ LegalizerHelper::lowerBitCount(MachineInstr &MI) {
59425942
MI.eraseFromParent();
59435943
return Legalized;
59445944
}
5945+
Observer.changingInstr(MI);
59455946
MI.setDesc(TII.get(TargetOpcode::G_CTPOP));
59465947
MI.getOperand(1).setReg(MIBTmp.getReg(0));
5948+
Observer.changedInstr(MI);
59475949
return Legalized;
59485950
}
59495951
case TargetOpcode::G_CTPOP: {

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,11 @@ body: |
145145
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s32>) = G_XOR %val, [[BUILD_VECTOR]]
146146
; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s32>) = G_ADD %val, [[BUILD_VECTOR]]
147147
; CHECK-NEXT: [[AND:%[0-9]+]]:_(<4 x s32>) = G_AND [[XOR]], [[ADD]]
148-
; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(<4 x s32>) = G_CTPOP [[AND]](<4 x s32>)
149-
; CHECK-NEXT: $q0 = COPY [[CTPOP]](<4 x s32>)
148+
; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<16 x s8>) = G_BITCAST [[AND]](<4 x s32>)
149+
; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(<16 x s8>) = G_CTPOP [[BITCAST]](<16 x s8>)
150+
; CHECK-NEXT: [[INT:%[0-9]+]]:_(<8 x s16>) = G_INTRINSIC intrinsic(@llvm.aarch64.neon.uaddlp), [[CTPOP]](<16 x s8>)
151+
; CHECK-NEXT: [[INT1:%[0-9]+]]:_(<4 x s32>) = G_INTRINSIC intrinsic(@llvm.aarch64.neon.uaddlp), [[INT]](<8 x s16>)
152+
; CHECK-NEXT: $q0 = COPY [[INT1]](<4 x s32>)
150153
; CHECK-NEXT: RET_ReallyLR implicit $q0
151154
;
152155
; CHECK-CSSC-LABEL: name: v4s32
@@ -158,8 +161,11 @@ body: |
158161
; CHECK-CSSC-NEXT: [[XOR:%[0-9]+]]:_(<4 x s32>) = G_XOR %val, [[BUILD_VECTOR]]
159162
; CHECK-CSSC-NEXT: [[ADD:%[0-9]+]]:_(<4 x s32>) = G_ADD %val, [[BUILD_VECTOR]]
160163
; CHECK-CSSC-NEXT: [[AND:%[0-9]+]]:_(<4 x s32>) = G_AND [[XOR]], [[ADD]]
161-
; CHECK-CSSC-NEXT: [[CTPOP:%[0-9]+]]:_(<4 x s32>) = G_CTPOP [[AND]](<4 x s32>)
162-
; CHECK-CSSC-NEXT: $q0 = COPY [[CTPOP]](<4 x s32>)
164+
; CHECK-CSSC-NEXT: [[BITCAST:%[0-9]+]]:_(<16 x s8>) = G_BITCAST [[AND]](<4 x s32>)
165+
; CHECK-CSSC-NEXT: [[CTPOP:%[0-9]+]]:_(<16 x s8>) = G_CTPOP [[BITCAST]](<16 x s8>)
166+
; CHECK-CSSC-NEXT: [[INT:%[0-9]+]]:_(<8 x s16>) = G_INTRINSIC intrinsic(@llvm.aarch64.neon.uaddlp), [[CTPOP]](<16 x s8>)
167+
; CHECK-CSSC-NEXT: [[INT1:%[0-9]+]]:_(<4 x s32>) = G_INTRINSIC intrinsic(@llvm.aarch64.neon.uaddlp), [[INT]](<8 x s16>)
168+
; CHECK-CSSC-NEXT: $q0 = COPY [[INT1]](<4 x s32>)
163169
; CHECK-CSSC-NEXT: RET_ReallyLR implicit $q0
164170
%val:_(<4 x s32>) = COPY $q0
165171
%1:_(<4 x s32>) = G_CTTZ %val(<4 x s32>)

0 commit comments

Comments
 (0)