[llvm-dev] arbitrary bit number

Michael Zolotukhin via llvm-dev llvm-dev at lists.llvm.org
Fri Jul 28 05:58:36 PDT 2017


Hi,

LLVM allows to work with arbitrary bit sizes (see https://llvm.org/docs/LangRef.html#integer-type <https://llvm.org/docs/LangRef.html#integer-type>), but please bear in mind that working with unusual sizes might expose bugs, as the corresponding code paths are less tested.

Answering your specific question: yes, it’s definitely possible, however you need to define how to add 3-bit operand to 5-bit operand in terms of operations supported by LLVM. One way is to, for instance, zero-extend both operands to 6-bits and then add:

define i6 @foo(i5 %a, i3 %b) {
entry:
  %a_zext = zext i5 %a to i6
  %b_zext = zext i3 %b to i6
  %c = add i6 %a_zext, %b_zext
  ret i6 %c
}

Thanks,
Michael

> On Jul 28, 2017, at 1:32 PM, Anastasiya Ruzhanskaya via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hello,
> I wanted to ask one general question ( for now it is hard to check it manually, maybe there is a fast answer):
> can I construct an operation, say, addition, from operand_0 - 5 bits size and operand_1 - 3 bit size -> receive result as 6 bit size . I am basically reducing these sizes in the whole IR, so I want that all operands can have arbitrary sizes ( llvm pass is not really good because it converts sizes only to some predefined sizes). However , I am not sure if there will be internal checks on these sizes after I will transform the tree. Or is it better to create some my own attributes, that can describe the sizes? 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

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


More information about the llvm-dev mailing list