[PATCH] D49196: [llvm-mca][BtVer2] teach how to identify false dependencies on partially written registers.

Andrea Di Biagio via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 16 08:10:01 PDT 2018


andreadb added inline comments.


================
Comment at: llvm/trunk/lib/Target/X86/X86ScheduleBtVer2.td:56
 // Reference: www.realworldtech.com/jaguar/4/
 def JFpuPRF: RegisterFile<72, [VR64, VR128, VR256], [1, 1, 2]>;
 
----------------
lebedev.ri wrote:
> A bit late, but i'm not sure about the FP registers.
> ```
> But the high and low 64 bits of a 128 bit register are treated as independent on
> Bobcat, and the high and low 128 bits of a 256 bit register are treated as independent on
> Jaguar.
> ```
> Does that mean that it should be `def JFpuPRF: RegisterFile<72, [VR128, VR256], [1, 1, 2]>;` ?
> Or does that mean `on Bobcat <and later>`?
Register class VR64 is the class used by x87/mmx registers.
Those eight registers don't alias with XMM/YMM registers, and they are subject to register renaming.

Bobcat provides native support for 64-bit data types, but not 128-bit data types. So, operations on 128-bit data types are split into 2x64-bit pairs. Internally, the PRF consumes two physical registers to map a single XMM write. 

Agner describes this in Section 21.1: `The Bobcat has 64-bit physical registers and uses two such registers to save a 128-bit vector.`

I hope it helps.
-Andrea


Repository:
  rL LLVM

https://reviews.llvm.org/D49196





More information about the llvm-commits mailing list