[Mips] R3000A: shared select diamonds and branchless i64 orderings #23
Loading…
Reference in a new issue
No description provided.
Delete branch "r3000a-delay-slots"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stacked on r3000a-load-delay (#22). Both changes are gated on isR3000A().
Lit tests: r3000a-select-pair.ll, r3000a-i64-compare.ll. Full CodeGen/Mips and MC/Mips lit pass.
Measured on the console rig (minimum over 3 boots), checksums identical across builds. Ticks, #22 vs this branch: crc 79375/79375, sort 153696/153696, decode 84630/84630, div 38650/38650, state 69029/69029, str 135796/135796, lba (new i64 select and compare kernel) 121845/96122. Nothing is slower than #22. The IRX total over the 89 sdk-core IRXs is 1,216 bytes smaller.
Not fixed, because only a generic pass or a new delay-slot filler feature would close them: sort loop strength reduction, remaining load-delay and branch-slot nops, and the
lw $ra; nop; jrepilogue (a real load-use dependency). i64==via xor/xor/or is the same size as GCC's per-word branches.🤖 Generated with Claude Code