[llvm-dev] empty list assertion

Krzysztof Parzyszek via llvm-dev llvm-dev at lists.llvm.org
Fri Jan 11 09:48:07 PST 2019

On 1/10/2019 10:38 PM, m m wrote:
> Sorry I'm new to LLVM and not sure what a 'value type' is.
> I have 2 register classes and they are defined like this:
> def CPURegs : RegisterClass<"ABC", [i32], 32, (add R0, R1, R3, R4)>;
> def CFRegs : RegisterClass<"ABC", [i1], 8, (add CF)>
> {
>          let isAllocatable = 0;
>          let Size = 8;
> }

By "value type" I meant "MachineValueType", which is a low-level 
representation of a type. It's easier to understand what it is by simply 
looking in MachineValueType.h: these are things like i8 or i32 
(representing 8- and 32-bit integers), or f32 (for 32-bit floating 
point), etc.

Each definition of a register class will have a set of value types that 
registers from that class can hold. This set will be used in the 
instruction selection to pick an appropriate register to hold a value of 
a given type. It seems like in your case the value type lists are there, 
so the assertion is likely coming from somewhere else. On that note, you 
seem to be using a very old version of LLVM. Do you have a reason for 
that? If not, try updating the LLVM sources---many things have changed 
since then, including parts of LLVM that are related to the problem 
you're seeing. I don't know if the problem would go away, but it would 
be easier for you to get help with it, if it's still present.


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

More information about the llvm-dev mailing list