<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:-webkit-standard;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Jie,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Do you actually want a fat-pointer specifically, or do you just want an efficient way to associate metadata with C pointers?  Because (as I‘m sure you know) fat pointers have serious compatibility problems with external libraries, and also
 may break C programs in other ways due to lack of sound type information.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">John Criswell (copied) had created an improved version of Baggy Bounds which gives a efficient and compatible solution at low memory overhead.  I suggest contacting him if you’re interested.<o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:black">—Vikram Adve<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:black">+ Donald B. Gillies Professor of Computer Science, University of Illinois at Urbana-Champaign<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black">+ Admin: Kimberly Baker – </span><u><span style="color:#0563C1"><a href="mailto:kabaker@illinois.edu"><span style="color:#0563C1">kabaker@illinois.edu</span></a></span></u><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">+ Skype: vikramadve || Zoom: <a href="https://zoom.us/j/2173900467">
<span style="color:#0563C1">https://zoom.us/j/2173900467</span></a><br>
+ Home page: <a href="http://vikram.cs.illinois.edu"><span style="color:#0563C1">http://vikram.cs.illinois.edu</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black">+ Center for Digital Agriculture: <a href="https://digitalag.illinois.edu/"><span style="color:#0563C1">https://digitalag.illinois.edu</span></a></span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-left:.5in"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">llvm-dev <llvm-dev-bounces@lists.llvm.org> on behalf of via llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Reply-To: </b>"llvm-dev@lists.llvm.org" <llvm-dev@lists.llvm.org>, "llvm-dev-request@lists.llvm.org" <llvm-dev-request@lists.llvm.org><br>
<b>Date: </b>Tuesday, January 7, 2020 at 8:06 AM<br>
<b>To: </b>"llvm-dev@lists.llvm.org" <llvm-dev@lists.llvm.org><br>
<b>Subject: </b>llvm-dev Digest, Vol 187, Issue 17<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">Date: Tue, 7 Jan 2020 02:45:01 +0000<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">From: Jie Zhou via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">To: Eli Friedman via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">Subject: [llvm-dev] Best way of implement a fat pointer for C<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">Message-ID: <<a href="mailto:B6510CF7-CC75-4171-AF50-D6730EB068E8@cs.rochester.edu">B6510CF7-CC75-4171-AF50-D6730EB068E8@cs.rochester.edu</a>><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">Content-Type: text/plain; charset="utf-8"<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">Dear All,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">I’m working on a project that extends C. I’m adding a new type of pointer<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">that is a fat pointer. It has some metadata about the pointed object besides<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">the starting address of the object. Currently I implemented this pointer as<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">an llvm:StructType. In llvm::Type generation function<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">llvm::Type *CodeGenTypes::ConvertType(QualType T)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">in the case for clang::Type::Pointer, instead of creating an llvm::PointerType<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">I create an llvm::StructType type for this new type of pointer. And I added some<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">helper code in llvm::StructType and in multiple places I added code to trick<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">the compiler to believe sometimes a struct is actually a pointer. Until now<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">it compile test programs fine with -O0 but I got lots of assertion failures when<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">compiling with -O1 or -O2 majorly because of the confusion of type mismatch.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">LLVM assumes that a PointerType is essentially an Integer (32 or 64 bit depending<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">on the architecture), and since this is quite a fundamental assumption, I started<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">to question whether my way of implementing the fat pointer is feasible.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">I thought about adding a new llvm type that inherits both llvm:PointerType<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">and llvm:StructType; but I’m not sure if this is the correct path. It looks like<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">this demands substantial changes to the compiler including adding code<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">for bitcode generation. Can you give me some advice on how to implement<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">a fat pointer in llvm?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">Thanks,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">- Jie<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">-------------- next part --------------<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">An HTML attachment was scrubbed...<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-family:"-webkit-standard",serif;color:black">URL: <<a href="http://lists.llvm.org/pipermail/llvm-dev/attachments/20200107/3fe60169/attachment-0001.html">http://lists.llvm.org/pipermail/llvm-dev/attachments/20200107/3fe60169/attachment-0001.html</a>><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="margin-left:.5in"><br>
<br>
<o:p></o:p></p>
</div>
</body>
</html>