[LLVMdev] ptrtoint

Reed Kotler rkotler at mips.com
Tue Sep 30 15:32:40 PDT 2014


If you can't make an executable test from C or C++ code then how do you
know something works.

Just by examination of the .s?


On 09/30/2014 03:18 PM, Reed Kotler wrote:
> If I wanted to call this function that they generated by hand, from C or
> C+ code, how would that be done?
>
> if have seen cases where a real boolean gets generated but it was
> something fairly involved.
>
> is a boolean and a char supposed to occupy the same amount of storage?
>
> is this prototype going to work in general:
>
> void ptrtoint_i1(char *p, bool *q)
>
> TIA.
>
> Reed
>
> On 09/29/2014 03:15 PM, reed kotler wrote:
>> 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




More information about the llvm-dev mailing list