[llvm] [MCA] Adding missing instructions in AArch64 Neoverse V1 tests (PR #128892)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 6 06:10:41 PST 2025
davemgreen wrote:
> I moved bl in unconditionnal branch (immediate section. For crc32, other crc32 instructions were not in basic test, so I've just added in forwarding test... I did not found any dependence graph built in llvm-mca, so not easy to check forwarding between instructions:
>
> * `instr1 a, b, c`
> * `instr2 d, a, e`
>
> Where `a` should be forwarded to source operand 1 of `instr2`. Do you confirm?
It is shown in the pipeline diagram, which shows forwarding from crc32cb->crc32cb in the first operand, but not from mul->crc32cb and not from crc32cb->crc32cb with the second operand (or from crc32cb->mul, they all take 2 cycles as opposed to 1):
```
# CHECK: [0,0] DeeER. . .. mul w0, w0, w0
# CHECK-NEXT: [0,1] D==eeER . .. crc32cb w0, w0, w1
# CHECK-NEXT: [0,2] D===eeER . .. crc32cb w0, w0, w1
# CHECK-NEXT: [0,3] D=====eeER. .. crc32cb w0, w0, w0
# CHECK-NEXT: [1,0] D=======eeER .. mul w0, w0, w0
# CHECK-NEXT: [1,1] D=========eeER .. crc32cb w0, w0, w1
# CHECK-NEXT: [1,2] D==========eeER.. crc32cb w0, w0, w1
# CHECK-NEXT: [1,3] D============eeER crc32cb w0, w0, w0
```
It sounds like it is worth adding the instructions to V1-basic-instructions.s to make sure we have complete coverage of them all separate from where we forward.
https://github.com/llvm/llvm-project/pull/128892
More information about the llvm-commits
mailing list