Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
llvm/test/tools/llvm-mca/ARM/cortex-a57-memory-instructions.s | ||
---|---|---|
255 | Cortex-A57 ldm* scheduling seems to be broken in terms of number of uops for instructions having base reg in register list. Patch doesn't address this. |
llvm/lib/Target/ARM/ARMScheduleA57.td | ||
---|---|---|
511 | Can you explain the operands this uses? Two from the predicate, And then N*2 for the variable number of regs split into groups of 2? I think the _UPD forms will have an extra operand, and LDMIA looks like it has 3 + 2*N. t2LDMIA killed $lr, 14 /* CC::al */, $noreg, def $r2, def $r3 vs $sp = t2LDMIA_UPD $sp, 14 /* CC::al */, $noreg, def $r7, def $lr | |
llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h | ||
52 | I think it's common to use I and E for the variables. |
llvm/lib/Target/ARM/ARMScheduleA57.td | ||
---|---|---|
511 |
Normal (no update) forms of LDM have N + 3 operands, where N is number of memory accesses. Cortex-a57 model defines same write lists for N and N+1 memory accesses, where N is odd. So A57LMAddrPred1 will trigger for N = 1 and N = 2 (with total number of operands being 4 and 5 respectively), A57LMAddrPred2 for N = 3 and N = 4 and so on
Right, that's a bug. I'll update the diff. |
Can you explain the operands this uses? Two from the predicate, And then N*2 for the variable number of regs split into groups of 2?
I think the _UPD forms will have an extra operand, and LDMIA looks like it has 3 + 2*N.
vs