[LLVMdev] Tablegen binary literals

Pete Cooper peter_cooper at apple.com
Thu Jul 31 08:51:22 PDT 2014


On Jul 30, 2014, at 11:28 PM, Adam Nemet <anemet at apple.com> wrote:

> 
> On Jul 30, 2014, at 10:56 PM, Pete Cooper <peter_cooper at apple.com> wrote:
> 
>> Hi Adam
>>> On Jul 30, 2014, at 10:28 PM, Adam Nemet <anemet at apple.com> wrote:
>>> 
>>> Hi Pete,
>>> 
>>> Just to clarify, are you proposing two things here?  First, 0b… literals to have type bits<n> and second to allow bits<n> initializer to  contain other bits<m> elements which would initialize the next m elements.
>>> 
>> Yeah, exactly those 2 things.  I have them in separate patches, but I think we only get the benefit from sized binary literals if we also allow them to initialize multiple bits in another bits<n> type.
> 
> Looks like bits<n> is already valid in a bits initializer context; it yields the bottom bit.
> 
> def a {
>   bits<2> opc = { 0, 1 };
>   bits<2> opc2 = { 1, 0 };
>   bits<2> oo = { opc, opc2 };
> }
> 
> is valid and produces:
> 
> ..
>   bits<2> oo = { 1, 0 };
> ..
> 
> Are you aware of this?  This may lead to some ambiguity with your proposed extension.  (I have no idea whether this behavior is relied on anywhere though.)
I wasn’t.  This is horrendous.  I traced through the code and it turns out we’ll happily just drop all but the lowest bit in these cases.

I’m going to see what happens if I disallow this, unless of course the variable is a single bit in length.

Thanks for the great example!
Pete
> 
> Adam
> 
>> 
>> Thanks,
>> Pete
>>> I.e. I don’t think we currently accept:
>>> 
>>> bits<4> x = { opc, opc }
>>> 
>>> Thanks,
>>> Adam
>> 
> 

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


More information about the llvm-dev mailing list