[llvm-dev] misheduler and register pressure tracking
Jonas Paulsson via llvm-dev
llvm-dev at lists.llvm.org
Thu Jan 7 06:19:09 PST 2016
Hi,
SystemZ (z13) has a register file of 16 fp registers and 32 vector
registers, where the fp registers are subregs of the first 16 vector
registers.
The mischeduler updates current register pressure as it schedules an
instruction. If register pressure in the fp reg class increases, so
should the vector reg class' regressure value. However, virtual fp
registers - no matter how many - could never use the upper 16 vector
registers. So I am then thinking that the vector registers should not
feel they are under pressure just because there might be many fp registers.
Checking the debug dump of mischeduler:
Bottom Pressure:
FP32Bit=18
GR32Bit=1
GRX32Bit=21
VR32Bit=18 <<<<<<<<<<<<
...
Scheduling SU(28) %vreg505<def,tied1> = SEBR %vreg505<tied0>, %vreg498,
%CC<imp-def,dead>; FP32Bit:%vreg505,%vreg498
Bottom Pressure:
FP32Bit=19
GR32Bit=1
GRX32Bit=21
VR32Bit=19 <<<<<<<<<<<<<
The VR32Bit value keeps going up, and from what I will see it might very
well affect scheduling of vector instructions poorly, when the VR32Bit
regpressure set goes over its limit. It seems to me there should be some
mechanism for how a subregclass influences a superregclass in this
scenario.
The PressureSets for a FP32Bit virtual register are
FP32Bit, Limit: 16
VR32Bit, Limit: 32
A vector register should update both these pressure sets normally, but
an fp register should somehow never make the VR32Bit pset go over the
limit of 32.
Or am I missing something that will make this work anyway?
thank you
/Jonas Paulsson
More information about the llvm-dev
mailing list