<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Yep, with tiny model there are quite some restrictions, but if it fits then it could be helpful.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
If you spot obvious missed cases for this test case, it may be worth raising a bug report on this. I think we would be interested to look at them.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Cheers,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Sjoerd.<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Rob <rrmills@gmail.com><br>
<b>Sent:</b> 15 May 2019 20:45<br>
<b>To:</b> Sjoerd Meijer<br>
<b>Cc:</b> Florian Hahn; llvm-dev<br>
<b>Subject:</b> Re: [llvm-dev] AARCH64 Code Size regression between 6/7</font>
<div> </div>
</div>
<div>
<div dir="ltr">An good thought.  While the tiny model (which I think originates in llvm8?) does compile for this trivial test case, I am unable to use it in my actual case because some of my addresses are too far way for ADRs.  Additionally, just trying it
 on this test case still seems to generate more ADRPs than I would normally think necessary.</div>
<br>
<div class="x_gmail_quote">
<div dir="ltr" class="x_gmail_attr">On Wed, May 15, 2019 at 3:29 PM Sjoerd Meijer <<a href="mailto:Sjoerd.Meijer@arm.com">Sjoerd.Meijer@arm.com</a>> wrote:<br>
</div>
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Bit of a drive-by comment as I haven't looked at the test case,</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
but could the tiny code model be helpful here (or is it perhaps related to that)?</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>Option -mcmodel=tiny was added not that long ago, possibly around that time.</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span><br>
</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>Cheers,</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>Sjoerd.</span><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div id="x_gmail-m_-4428145193726775130appendonsend"></div>
<hr style="display:inline-block; width:98%">
<div id="x_gmail-m_-4428145193726775130divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>>
 on behalf of Rob via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Sent:</b> 15 May 2019 18:57<br>
<b>To:</b> Florian Hahn<br>
<b>Cc:</b> llvm-dev<br>
<b>Subject:</b> Re: [llvm-dev] AARCH64 Code Size regression between 6/7</font>
<div> </div>
</div>
<div>
<div dir="ltr">I did a bit more poking, using llvm/clang versions 6-8.  The IR in all cases appears fundamentally identical.  I ran the IR generated by version 6 through llc on all three versions.  llc-7/8 produced the extra ADRPs, llc-6 did not.  So (to my
 untrained eyes), the IR is generated the same, it is in the IR->AARCH64 asm pass that the extra instructions are being generated.</div>
<br>
<div class="x_gmail-m_-4428145193726775130x_gmail_quote">
<div dir="ltr" class="x_gmail-m_-4428145193726775130x_gmail_attr">On Wed, May 15, 2019 at 11:39 AM Florian Hahn <<a href="mailto:florian_hahn@apple.com" target="_blank">florian_hahn@apple.com</a>> wrote:<br>
</div>
<blockquote class="x_gmail-m_-4428145193726775130x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex">
Hi,<br>
<br>
> On May 15, 2019, at 16:27, Rob via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
> <br>
> I am developing in C for an extremely memory constrained AARCH64 embedded environment.  Sometime between llvm 6 and 7, I'm seeing a code size regression when I make multiple accesses into a global struct.  Specifically, I have functions that perform several
 reads/writes into this global struct.<br>
> <br>
> In older versions (5/6)<br>
> - a single ADRP/ADD combo is issued at the beginning of a function to get my structure address into a register<br>
> - that register is preserved throughout the function<br>
> - subsequent accesses into this structure are done as LDR/STR with offset from the preserved register<br>
> <br>
> In later versions (7/8)<br>
> - the ADRP/ADD combo is performed every time I try to access something inside the struct.<br>
> <br>
> The net result is slightly larger code that has the potential to cause me issues. There are plenty of unused registers that could be used for the purpose of not constantly re-loading the address of my struct.  My current suspicion is that later versions are
 presuming fewer registers are not being preserved by other function calls, and therefore can't be relied upon to hold the address of my struct.  Assuming this is right, is there some way to encourage the behavior of the older versions?<br>
<br>
<br>
Is the IR that gets fed into the backend equivalent between 5/6 and 7/8? This sounds like something could go wrong earlier, e.g. failing to eliminate congruent address computations in GVN.<br>
<br>
In any case, to get to the bottom of this, a reproducer would be helpful.<br>
<br>
Cheers,<br>
Florian<br>
</blockquote>
</div>
</div>
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose,
 or store or copy the information in any medium. Thank you. </div>
</blockquote>
</div>
</div>
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose,
 or store or copy the information in any medium. Thank you.
</body>
</html>