[LLVMdev] ptrtoint

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


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