byval in a world without pointee types

David Blaikie dblaikie at gmail.com
Sun Feb 15 10:59:41 PST 2015


This was brought up on IRC the other day & I've been tossing it around a
bit.

Roughly, I think it makes sense to move the pointee type to the byval
attribute:

  %struct.foo* byval %x
to
  ptr byval(%struct.foo) %x

but looking at the code I'm not quite sure how to go about it. There
currently appear to be enum attributes (anything well typed in the IR,
essentially?), integer attributes (well typed enum attributes with an
integer parameter (align 4, dereferenceable 8, etc)) and string attributes
(untyped in the IR - for target specific features).

The quirk of interest is that it seems integer attributes can all be
multiply specified (align 4 align 8 and dereferenceable 8 dereferenceable
3) - I'm not sure what this actually means (do we take the max? I assume we
do), but when I reached the Attribute sorting code it looks like it treats
these as distinct attributes at least and I wasn't sure if/how to cope with
this for a type attribute - should they be ordered (are Types orderable?)?
or should we be doing some kind of deduplication earlier on and say that
there's only one byval attribute (if I'm adding that machinery, should we
apply it to align, dereferencable, etc - I guess they get coalesced
/somewhere/ at least).
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150215/b6b9e930/attachment.html>


More information about the llvm-commits mailing list