8b8e745d | 21-Aug-2021 |
YikeZhou <[email protected]> |
backend, rename: support move elimination (#920)
* Bundle, Rename: Add some comments
FreeList, RenameTable: Comment out unused variables
* refcnt: Implement AdderTree for reference counter
*
backend, rename: support move elimination (#920)
* Bundle, Rename: Add some comments
FreeList, RenameTable: Comment out unused variables
* refcnt: Implement AdderTree for reference counter
* build.sc: add testOne method for unit test
* AdderTest: add testbench for Adder (passed)
* AdderTree: Add testbench for AdderTree (passed)
* ReferenceCounter: implement a 2-bit counter
* Rename: remove redundant code
* Rename: prepared for move elimination [WIP]
* Roq: add eliminated move bit in roq entry;
label elim move inst as writebacked
AlternativeFreeList: new impl for int free list
Rename: change io of free list
Dispatch1: (todo) not send move to intDq
Bundle: add eliminatedMove bit in roqCommitInfo, uop and debugio
ReferenceCounter: add debug print msg
* Dispatch1: [BUG FIX] not send move inst to IntDq
* DecodeUnit: [BUG FIX] differentiate li from mv
* Bug fix:
1. Dispatch1: should not label pdest of move as busy in busy table
2. Rename: use psrc0 to index bit vec isMax
3. AlternativeFreeList: fix maxVec calculation logic and ref counter
increment logic
Besides, more debug info and assertions were added.
* AlternativeFreeList Bug Fix:
1. add redirect input - shouldn't allocate reg when redirect is
valid
2. handle duplicate preg in roqCommits in int free list
* AlternativeFreeList: Fix value assignment race condition
* Rename: Fix value assignment race condition too
* RenameTable: refactor spec/arch table write process
* Roq: Fix debug_exuData of move(addi) instruction
(it was trash data before because move needn't enter exu)
* Rename: change intFreeList's redirect process
(by setting headPtr back) and flush process
* ME: microbench & coremark & linux-hello passed
1. DecodeUnit: treat `mv x,x` inst as non-move
2. AlternativeFreeList: handle duplicate walk req correctly
3. Roq: fix debug_exuData bug (make sure writeback that updates
debug_exuData happens before ME instruction in program order)
* AlternativeFreeList: License added
build.sc: remove unused config
Others: comments added
* package rename: remove unused modules
* Roq: Replace debug_prf with a cleaner fix method
* Disp1/AltFL/Rename: del unnecessary white spaces
* build.sc: change stack size
AlternativeFreeList: turn off assertions
* build.sc: change stack size for test
show more ...
|
de169c67 | 11-May-2021 |
William Wang <[email protected]> |
backend,mem: add Store Sets memory dependence predictor (#796)
* LoadQueue: send stFtqIdx via rollback request
* It will make it possible for setore set to update its SSIT
* StoreSet: setup st
backend,mem: add Store Sets memory dependence predictor (#796)
* LoadQueue: send stFtqIdx via rollback request
* It will make it possible for setore set to update its SSIT
* StoreSet: setup store set update req
* StoreSet: add store set identifier table (SSIT)
* StoreSet: add last fetched store table (LFST)
* StoreSet: put SSIT into decode stage
* StoreSet: put LFST into dispatch1
* Future work: optimize timing
* RS: store rs now supports delayed issue
* StoreSet: add perf counter
* StoreSet: fix SSIT update logic
* StoreSet: delay LFST update input for 1 cycle
* StoreSet: fix LFST update logic
* StoreSet: fix LFST raddr width
* StoreSet: do not force store in ss issue in order
Classic store set requires store in the same store set issue in seq.
However, in current micro-architecture, such restrict will lead to
severe perf lost. We choose to disable it until we find another way
to fix it.
* StoreSet: support ooo store in the same store set
* StoreSet: fix store set merge logic
* StoreSet: check earlier store when read LFST
* If store-load pair is in the same dispatch bundle, loadWaitBit should
also be set for load
* StoreSet: increase default SSIT flush period
* StoreSet: fix LFST read logic
* Fix commit c0e541d14
* StoreSet: add StoreSetEnable parameter
* RSFeedback: add source type
* StoreQueue: split store addr and store data
* StoreQueue: update ls forward logic
* Now it supports splited addr and data
* Chore: force assign name for load/store unit
* RS: add rs'support for store a-d split
* StoreQueue: fix stlf logic
* StoreQueue: fix addr wb sq update logic
* AtomicsUnit: support splited a/d
* Parameters: disable store set by default
* WaitTable: wait table will not cause store delay
* WaitTable: recover default reset period to 2^17
* Fix dev-stad merge conflict
* StoreSet: enable storeset
* RS: disable store rs delay logic
CI perf shows that current delay logic will cause perf loss. Disable
unnecessary delay logic will help.
To be more specific, `io.readyVec` caused the problem. It will be
updated in future commits.
* RS: opt select logic with load delay (ldWait)
* StoreSet: disable 2-bit lwt
Co-authored-by: ZhangZifei <[email protected]>
show more ...
|
695364a3 | 04-May-2021 |
Yinan Xu <[email protected]> |
DispatchQueue: wrap around tailPtr index when redirect (#800)
This commit fixes the bug when redirect.valid and the last valid instruction is in the last slot.
Previously the tailPtr becomes size.U
DispatchQueue: wrap around tailPtr index when redirect (#800)
This commit fixes the bug when redirect.valid and the last valid instruction is in the last slot.
Previously the tailPtr becomes size.U when there're no instructions before headPtr. It works fine
when DispatchQueueSize is power2.
show more ...
|