[PATCH] D49393: [NFC][MCA] ZnVer1: Update RegisterFile to identify false dependencies on partially written registers.
Roman Lebedev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 16 11:48:58 PDT 2018
lebedev.ri created this revision.
lebedev.ri added reviewers: andreadb, courbet, RKSimon, craig.topper, GGanesh.
Herald added a subscriber: gbedwell.
Pretty mechanical follow-up for https://reviews.llvm.org/D49196.
As microarchitecture.pdf notes, "20 AMD Ryzen pipeline",
"20.8 Register renaming and out-of-order schedulers":
The integer register file has 168 physical registers of 64 bits each.
The floating point register file has 160 registers of 128 bits each.
"20.14 Partial register access":
The processor always keeps the different parts of an integer register together.
...
An instruction that writes to part of a register will therefore have a false dependence
on any previous write to the same register or any part of it.
There is one caveat, however:
An instruction that writes to a 32-bit register will not have any false dependence on the
corresponding 64-bit register because the upper part of the 64-bit register is set to zero.
I have added a test (`partial-reg-update-7.s`), but something seems to be missing,
if i keep `GR32` in `RegisterFile<>`, the test doesn't change.
Repository:
rL LLVM
https://reviews.llvm.org/D49393
Files:
lib/Target/X86/X86ScheduleZnver1.td
test/tools/llvm-mca/X86/Znver1/partial-reg-update-2.s
test/tools/llvm-mca/X86/Znver1/partial-reg-update-3.s
test/tools/llvm-mca/X86/Znver1/partial-reg-update-4.s
test/tools/llvm-mca/X86/Znver1/partial-reg-update-5.s
test/tools/llvm-mca/X86/Znver1/partial-reg-update-6.s
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49393.155729.patch
Type: text/x-patch
Size: 17806 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180716/6cc041a4/attachment.bin>
More information about the llvm-commits
mailing list