[llvm-dev] Register pressure calculation in the machine scheduler and live-through registers (original) (raw)

Jonas Paulsson via llvm-dev llvm-dev at lists.llvm.org
Tue Sep 12 06:44:44 PDT 2017


Hi Ghassan,

As for live-through information, we found that the machine scheduler does call initLiveThru() and here is a pointer to the code:

https://gitlab.com/CSUSLLVM/LLVMDRAGONEGG/blob/master/Generic/llvmTip/llvm-master/lib/CodeGen/MachineScheduler.cpp#L921 The first part of the comment above initLiveThru() says "The register tracker is unaware of global liveness so ignores normallive-thru ranges...". It is then of course confusing to see these methods like initLiveThru()...

My understanding is that (please correct me if I'm wrong)

  1. All instructions are traversed bottom-up during DAG building. While doing this reg pressure is tracked based on just looking at those instructions. So if a def has no use in an mbb it is a "live-out" reg, and if there is a use with no def, it would become "live-in". This is then a kind of local live-through concept, in contrast to a true live-through analysiswhich would be aware of registers not used/defed in the region as well.
  2. We should ideally have an analysis of global liveness so that the regpressure trackers could be properly initialized, but this is currently missing. Of course, one might hope thatit wouldn't be too hard to extend LiveIntervals to also provide this information... It would be interesting to merely try this and see how valuable it would be...

/Jonas

-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170912/7200ca67/attachment.html>



More information about the llvm-dev mailing list