[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