[PATCH] D140649: [AArch64][SelectionDAG] Eliminates redundant zero-extension for 32-bit popcount

Allen zhong via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 5 19:12:28 PST 2023


Allen added inline comments.


================
Comment at: llvm/test/CodeGen/AArch64/arm64-popcnt.ll:43
 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
-; CHECK-NEXT:    fmov w8, s0
-; CHECK-NEXT:    fmov d0, x8
 ; CHECK-NEXT:    cnt.8b v0, v0
 ; CHECK-NEXT:    uaddlv.8b h0, v0
----------------
efriedma wrote:
> This doesn't appear to be equivalent.
Thanks, I find the **%4:fpr32 = COPY %1.ssub:fpr128** will be eliminated in pass SIMPLE REGISTER COALESCING with this change. but I don't sure the elimination is fine?

```
# *** IR Dump After Live Interval Analysis (liveintervals) ***:
# Machine code for function cnt32_advsimd_1: NoPHIs, TracksLiveness
Function Live Ins: $d0 in %0

0B	bb.0 (%ir-block.0):
	  liveins: $d0
16B	  %0:fpr64 = COPY $d0
32B	  undef %1.dsub:fpr128 = COPY %0:fpr64
48B	  %4:fpr32 = COPY %1.ssub:fpr128
64B	  %5:fpr64 = SUBREG_TO_REG 0, %4:fpr32, %subreg.ssub
80B	  %6:fpr64 = CNTv8i8 %5:fpr64
96B	  %7:fpr16 = UADDLVv8i8v %6:fpr64
112B	  undef %8.hsub:fpr128 = COPY %7:fpr16
128B	  %10:gpr32all = COPY %8.ssub:fpr128
144B	  $w0 = COPY %10:gpr32all
160B	  RET_ReallyLR implicit killed $w0
```

* After the **SIMPLE REGISTER COALESCING**.
```
Function Live Ins: $d0 in %0

0B	bb.0 (%ir-block.0):
	  liveins: $d0
16B	  undef %1.dsub:fpr128 = COPY $d0
80B	  %6:fpr64 = CNTv8i8 %1.dsub:fpr128
96B	  undef %8.hsub:fpr128 = UADDLVv8i8v %6:fpr64
128B	  %10:gpr32all = COPY %8.ssub:fpr128
144B	  $w0 = COPY %10:gpr32all
160B	  RET_ReallyLR implicit killed $w0
```


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D140649/new/

https://reviews.llvm.org/D140649



More information about the llvm-commits mailing list