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? -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170728/6c5741a8/attachment.html>
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>
Hi, thank you for the answer, great that this is possible, I will try to come up with some solution. 2017-07-28 14:58 GMT+02:00 Michael Zolotukhin <mzolotukhin at apple.com>:> Hi, > > LLVM allows to work with arbitrary bit sizes (see > 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/72b0d8ff/attachment.html>