Thanks. So what about a fragment like this: (taken from fast-isel.ll in X86 ) define void @ptrtoint_i1(i8* %p, i1* %q) nounwind { %t = ptrtoint i8* %p to i1 store i1 %t, i1* %q ret void } TIA. On 09/29/2014 02:16 PM, Duncan P. N. Exon Smith wrote:>> On Sep 29, 2014, at 1:51 PM, reed kotler <rkotler at mips.com> wrote: >> >> What kind of C or C++ code will emit a "ptrtoint" op? > This C code: > > long ptrtoint(void *p) { return (long)p; } > > gives: > > define i64 @ptrtoint(i8* %p) { > %1 = ptrtoint i8* %p to i64 > ret i64 %1 > } > > >> Also, what causes i1 to be emitted? > This C++ code: > > bool i1() { return false; } > > gives: > > define zeroext i1 @_Z2i1v() { > ret i1 false > } > > >> Tia. >> >> Reed >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> On Sep 29, 2014, at 2:29 PM, reed kotler <rkotler at mips.com> wrote: > > Thanks. > > So what about a fragment like this: (taken from fast-isel.ll in X86 ) > > define void @ptrtoint_i1(i8* %p, i1* %q) nounwind { > %t = ptrtoint i8* %p to i1 > store i1 %t, i1* %q > ret void > }Intuitively, this looks like: void ptrtoint_i1(char *p, bool *q) { *q = (bool)p; } However, `q` needs to be addressable in C/C++, so it's left as an `i8`. `git log` suggests this particular testcase evolved incrementally out of hand-written IR. Why do you need C/C++ code for it? Just interested?> TIA. > > On 09/29/2014 02:16 PM, Duncan P. N. Exon Smith wrote: >>> On Sep 29, 2014, at 1:51 PM, reed kotler <rkotler at mips.com> wrote: >>> >>> What kind of C or C++ code will emit a "ptrtoint" op? >> This C code: >> >> long ptrtoint(void *p) { return (long)p; } >> >> gives: >> >> define i64 @ptrtoint(i8* %p) { >> %1 = ptrtoint i8* %p to i64 >> ret i64 %1 >> } >> >> >>> Also, what causes i1 to be emitted? >> This C++ code: >> >> bool i1() { return false; } >> >> gives: >> >> define zeroext i1 @_Z2i1v() { >> ret i1 false >> } >> >> >>> Tia. >>> >>> Reed >>> _______________________________________________ >>> LLVM Developers mailing list >>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >
Technically I don't need C/C++ code for it. I'm not really very good at writing LLVM assembly code by hand (but I should be - lol ). I'm working on fast-isel and I want to have executable tests for all of this and not just make check tests. It's easier for me to do that in C/C++ and then save the .ll and morph it into a make check test. I'm going through the fast-isel tests for x86 now and adapting them for Mips. (will do the same for AArch64 and other ports). I want an executable variant for all of them. On 09/29/2014 03:11 PM, Duncan P. N. Exon Smith wrote:>> On Sep 29, 2014, at 2:29 PM, reed kotler <rkotler at mips.com> wrote: >> >> Thanks. >> >> So what about a fragment like this: (taken from fast-isel.ll in X86 ) >> >> define void @ptrtoint_i1(i8* %p, i1* %q) nounwind { >> %t = ptrtoint i8* %p to i1 >> store i1 %t, i1* %q >> ret void >> } > Intuitively, this looks like: > > void ptrtoint_i1(char *p, bool *q) { *q = (bool)p; } > > However, `q` needs to be addressable in C/C++, so it's left as an `i8`. > > `git log` suggests this particular testcase evolved incrementally out > of hand-written IR. > > Why do you need C/C++ code for it? Just interested? > >> TIA. >> >> On 09/29/2014 02:16 PM, Duncan P. N. Exon Smith wrote: >>>> On Sep 29, 2014, at 1:51 PM, reed kotler <rkotler at mips.com> wrote: >>>> >>>> What kind of C or C++ code will emit a "ptrtoint" op? >>> This C code: >>> >>> long ptrtoint(void *p) { return (long)p; } >>> >>> gives: >>> >>> define i64 @ptrtoint(i8* %p) { >>> %1 = ptrtoint i8* %p to i64 >>> ret i64 %1 >>> } >>> >>> >>>> Also, what causes i1 to be emitted? >>> This C++ code: >>> >>> bool i1() { return false; } >>> >>> gives: >>> >>> define zeroext i1 @_Z2i1v() { >>> ret i1 false >>> } >>> >>> >>>> Tia. >>>> >>>> Reed >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev