<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">I understand what you are suggesting
and thought of this myself but it really<br>
does not help unless we say that<br>
<br>
size(i1) == size(i8)<br>
<br>
which is certainly logical<br>
<br>
i have seen i1 get generated with C/c++ code but am not sure<br>
how to construct this case myself.<br>
<br>
so some of the test cases, like fast-isel.ll for X86 are probably<br>
only eyeballed to see of ptrtoint and inttoptr work <br>
<br>
On 09/30/2014 03:47 PM, Jingyue Wu wrote:<br>
</div>
<blockquote
cite="mid:CAMROOrErh+TP9YAZH0nR7X0EikZmKbmLcU71aDH9Kb4A4nh_vA@mail.gmail.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Hi Reed,
<div><br>
</div>
<div>I think you can try this:</div>
<div>1. write C/C++ code that use ptrtoint_i1 (declare ptrtoint_i1
as an external function)</div>
<div>2. compile it using clang to LLVM IR,</div>
<div>3. link the compiled IR with the IR for ptrtoint_i1 to
executable using llvm-ld or the clang driver. <br>
</div>
<div><br>
</div>
<div>However, one complication in your case is I doubt there's a
mapping from any C/C++ type to i1 (bool is translated to i8). If
that's the case, you may need to put a wrapper around
ptrtoint_i1, e.g., </div>
<div>define void @ptrtoint_i8(i8* a, i8* b) {</div>
<div> %slot = alloca i1</div>
<div> call void @ptrtoint_i1(i8* a, i1* %slot)</div>
<div> %value = load i1* %slot</div>
<div> %ext_value = zext i1 %value to i8</div>
<div> store i8 %ext_value, i8* b</div>
<div>}</div>
<div>// not tested :) be careful when you copy and paste</div>
<div>Then, you can use ptrtoint_i8(char *, char *) in your C/C++
code, and when linked ptrtoint_i1 will show up too. </div>
<div><br>
</div>
<div>Jingyue</div>
<br>
<div class="gmail_quote">On Tue Sep 30 2014 at 3:35:14 PM Reed
Kotler <<a moz-do-not-send="true"
href="mailto:rkotler@mips.com">rkotler@mips.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">If you can't
make an executable test from C or C++ code then how do you<br>
know something works.<br>
<br>
Just by examination of the .s?<br>
<br>
<br>
On 09/30/2014 03:18 PM, Reed Kotler wrote:<br>
> If I wanted to call this function that they generated by
hand, from C or<br>
> C+ code, how would that be done?<br>
><br>
> if have seen cases where a real boolean gets generated
but it was<br>
> something fairly involved.<br>
><br>
> is a boolean and a char supposed to occupy the same
amount of storage?<br>
><br>
> is this prototype going to work in general:<br>
><br>
> void ptrtoint_i1(char *p, bool *q)<br>
><br>
> TIA.<br>
><br>
> Reed<br>
><br>
> On 09/29/2014 03:15 PM, reed kotler wrote:<br>
>> Technically I don't need C/C++ code for it.<br>
>><br>
>> I'm not really very good at writing LLVM assembly
code by hand<br>
>> (but I should be - lol ).<br>
>><br>
>> I'm working on fast-isel and I want to have
executable tests for all of<br>
>> this<br>
>> and not just make check tests.<br>
>><br>
>> It's easier for me to do that in C/C++ and then save
the .ll and morph<br>
>> it into<br>
>> a make check test.<br>
>><br>
>> I'm going through the fast-isel tests for x86 now and
adapting them for<br>
>> Mips.<br>
>> (will do the same for AArch64 and other ports).<br>
>><br>
>> I want an executable variant for all of them.<br>
>><br>
>> On 09/29/2014 03:11 PM, Duncan P. N. Exon Smith
wrote:<br>
>>>> On Sep 29, 2014, at 2:29 PM, reed kotler <<a
moz-do-not-send="true" href="mailto:rkotler@mips.com"
target="_blank">rkotler@mips.com</a>> wrote:<br>
>>>><br>
>>>> Thanks.<br>
>>>><br>
>>>> So what about a fragment like this: (taken
from fast-isel.ll in X86 )<br>
>>>><br>
>>>> define void @ptrtoint_i1(i8* %p, i1* %q)
nounwind {<br>
>>>> %t = ptrtoint i8* %p to i1<br>
>>>> store i1 %t, i1* %q<br>
>>>> ret void<br>
>>>> }<br>
>>> Intuitively, this looks like:<br>
>>><br>
>>> void ptrtoint_i1(char *p, bool *q) { *q =
(bool)p; }<br>
>>><br>
>>> However, `q` needs to be addressable in C/C++, so
it's left as an `i8`.<br>
>>><br>
>>> `git log` suggests this particular testcase
evolved incrementally out<br>
>>> of hand-written IR.<br>
>>><br>
>>> Why do you need C/C++ code for it? Just
interested?<br>
>>><br>
>>>> TIA.<br>
>>>><br>
>>>> On 09/29/2014 02:16 PM, Duncan P. N. Exon
Smith wrote:<br>
>>>>>> On Sep 29, 2014, at 1:51 PM, reed
kotler <<a moz-do-not-send="true"
href="mailto:rkotler@mips.com" target="_blank">rkotler@mips.com</a>>
wrote:<br>
>>>>>><br>
>>>>>> What kind of C or C++ code will emit
a "ptrtoint" op?<br>
>>>>> This C code:<br>
>>>>><br>
>>>>> long ptrtoint(void *p) { return
(long)p; }<br>
>>>>><br>
>>>>> gives:<br>
>>>>><br>
>>>>> define i64 @ptrtoint(i8* %p) {<br>
>>>>> %1 = ptrtoint i8* %p to i64<br>
>>>>> ret i64 %1<br>
>>>>> }<br>
>>>>><br>
>>>>><br>
>>>>>> Also, what causes i1 to be emitted?<br>
>>>>> This C++ code:<br>
>>>>><br>
>>>>> bool i1() { return false; }<br>
>>>>><br>
>>>>> gives:<br>
>>>>><br>
>>>>> define zeroext i1 @_Z2i1v() {<br>
>>>>> ret i1 false<br>
>>>>> }<br>
>>>>><br>
>>>>><br>
>>>>>> Tia.<br>
>>>>>><br>
>>>>>> Reed<br>
>>>>>> _______________________________________________<br>
>>>>>> LLVM Developers mailing list<br>
>>>>>> <a moz-do-not-send="true"
href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>
<a moz-do-not-send="true"
href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
>>>>>> <a moz-do-not-send="true"
href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev"
target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a moz-do-not-send="true" href="mailto:LLVMdev@cs.uiuc.edu"
target="_blank">LLVMdev@cs.uiuc.edu</a> <a
moz-do-not-send="true" href="http://llvm.cs.uiuc.edu"
target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a moz-do-not-send="true"
href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev"
target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</blockquote>
</div>
</blockquote>
<br>
</body>
</html>