[PATCH] D113967: [RISCV] Reverse the order of loading/storing callee-saved registers.
Kito Cheng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 17 19:37:30 PST 2021
kito-cheng added a comment.
An ASCII pipeline diagram to demonstrate why reorder that could help:
Consider a typical RISC 5 stage pipeline CPU:
IF: Instruction Fetch
ID: Instruction Decode
EXE: Instruction Execute
MEM: Memory Access
WB: Write Back
Assume we need 2 cycle to read memory and NO forwording.
lw s1, 4(sp) # 4-byte Folded Reload
lw s0, 8(sp) # 4-byte Folded Reload
lw ra, 12(sp) # 4-byte Folded Reload
addi sp, sp, 16
ret
| Cycle | IF | ID | EXE | MEM | WB | Comment |
| N | lw s1 | | | | |
| N + 1 | lw s0 | lw s1 | | | |
| N + 2 | lw ra | lw s0 | lw s1 | | |
| N + 3 | addi | lw ra | lw s0 | lw s1 | | Reading sp + 4 (1st cycle) |
| N + 4 | addi | lw ra | lw s0 | lw s1 | | Reading sp + 4 (stall for 2nd cycle) |
| N + 5 | ret | addi | lw ra | lw s0 | lw s1 | Reading sp + 8 (1st cycle) |
| N + 6 | ret | addi | lw ra | lw s0 | | Reading sp + 8 (stall for 2st cycle) |
| N + 7 | | ret | addi | lw ra | lw s0 | Reading sp + 12 (1st cycle) |
| N + 8 | | ret | addi | lw ra | | Reading sp + 12 (stall for 2st cycle) |
| N + 9 | | ret | | addi | lw ra | ret stall due to ra isn't ready to read. |
| N + 10 | | | ret | | addi | |
|
...
lw ra, 12(sp) # 4-byte Folded Reload
lw s0, 8(sp) # 4-byte Folded Reload
lw s1, 4(sp) # 4-byte Folded Reload
addi sp, sp, 16
ret
| Cycle | IF | ID | EXE | MEM | WB | Comment |
| N | lw ra | | | | |
| N + 1 | lw s0 | lw ra | | | |
| N + 2 | lw s1 | lw s0 | lw ra | | |
| N + 3 | addi | lw s1 | lw s0 | lw ra | | Reading sp + 12 (1st cycle) |
| N + 4 | addi | lw s1 | lw s0 | lw ra | | Reading sp + 12 (stall for 2nd cycle) |
| N + 5 | ret | addi | lw s1 | lw s0 | lw ra | Reading sp + 8 (1st cycle) |
| N + 6 | ret | addi | lw s1 | lw s0 | | Reading sp + 8 (stall for 2st cycle) |
| N + 7 | | ret | addi | lw s1 | lw s0 | Reading sp + 12 (1st cycle) |
| N + 8 | | ret | addi | lw s1 | | Reading sp + 12 (stall for 1st cycle) |
| N + 9 | | | ret | addi | lw s1 | NO stall for ret! |
|
...
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D113967/new/
https://reviews.llvm.org/D113967
More information about the llvm-commits
mailing list