[llvm-dev] Assertion in MachineScheduler.cpp

Krzysztof Parzyszek via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 28 11:54:00 PDT 2016

On 4/28/2016 1:17 PM, Rail Shafigulin wrote:
> On Thu, Apr 28, 2016 at 6:13 AM, Krzysztof Parzyszek
> <kparzysz at codeaurora.org <mailto:kparzysz at codeaurora.org>> wrote:
>     There are uses of R0 all over the place, even though R0 is not
>     marked as live-in to any of the blocks that use it.  For example:
> For my architecture R0 is a physical register. It always has a value of 0.

Ah, ok.  I'm guessing it's already marked as "reserved", right?

>     IIRC, at some point the register pressure tracker assumed that a use
>     of a physical register is always a kill, thus it would always
>     decrease register pressure on the class that the register belonged to.
> Am I correct assuming that kill means get rid of the register?

Kill is the last use of the register after its most recent definition. 
After this point the register is "dead", i.e. no longer used.

> Does it mean that I have to make changes to the core code (register
> pressure tracker) or I can get away with changes to my target? Obviously
> the latter is preferred.

If R0 is reserved, you should be fine without any changes.  In such 
case, I don't really know what the problem is.  I still suspect that the 
R0 is not handled right somewhere, but I have no idea where exactly.

>     Since you are using llvm 3.5, that may still be the case for you.
>     I'm not sure whether this is still necessary in ToT.
> Am I correct assuming that by the "case" you mean kill of the physical
> register? I'm not familiar with ToT abbreviation? What does it mean?

ToT = tip of the tree, the latest source tree of LLVM/clang.


Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation

More information about the llvm-dev mailing list