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>