<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, Oct 25, 2016 at 6:52 PM Peter Collingbourne <<a href="mailto:peter@pcc.me.uk">peter@pcc.me.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg">On Tue, Oct 25, 2016 at 2:55 PM, Rafael Espíndola <span dir="ltr" class="gmail_msg"><<a href="mailto:rafael.espindola@gmail.com" class="gmail_msg" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="gmail_msg">> You get the code you want with<br class="gmail_msg">
><br class="gmail_msg">
> @foo = external hidden global i8<br class="gmail_msg">
><br class="gmail_msg">
> or<br class="gmail_msg">
><br class="gmail_msg">
> @foo = external protected global i8<br class="gmail_msg">
<br class="gmail_msg">
</span>Sorry, not quiet. What you get is<br class="gmail_msg">
<br class="gmail_msg">
leaq    foo(%rip), %rax<br class="gmail_msg">
<br class="gmail_msg">
Since it is still assuming foo is a position in the file.<br class="gmail_msg">
<br class="gmail_msg">
So yes, we need a way to declare an absolute value. If we can declare<br class="gmail_msg">
it, we may as well use the same construct to define it.<br class="gmail_msg">
<br class="gmail_msg">
I guess the only issue then is that the current implementation of<br class="gmail_msg">
alias becomes even more needlessly generic :-(<br class="gmail_msg">
<br class="gmail_msg">
Cheers,<br class="gmail_msg">
Rafael<br class="gmail_msg">
</blockquote></div><br class="gmail_msg"></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg">So, to summarise the overall consensus on this thread:</div><div class="gmail_extra gmail_msg">- We should introduce a GlobalConstant class which supports definitions and declarations</div><div class="gmail_extra gmail_msg">- It should derive from GlobalValue</div><div class="gmail_extra gmail_msg">- No type changes for GlobalValue (i.e. still required to be pointer type)</div><div class="gmail_extra gmail_msg">- To communicate the range we should use !range metadata and support it on GlobalConstant as well as GlobalVariable</div><div class="gmail_extra gmail_msg"><br class="gmail_msg"></div><div class="gmail_extra gmail_msg">Although I am not convinced that this is the right representation I appear to be in the minority here, so if this seems reasonable to folks I will go ahead and implement it.<br class="gmail_msg"></div></div></blockquote><div><br></div><div>FWIW, I really dislike this plan.</div><div><br></div><div>We are essentially saying we have a GlobalConstant class which is a pointer, but doesn't point to anything. Instead, it is a pointer that will have a fixed "constant" address that can be manipulated and/or exploited to have a very particular integer value via ptrtoint.</div><div><br></div><div>I feel like we are going to tremendous lengths to avoid having a non-pointer global value despite ... having a non-pointer global value. I would like to understand why it is so problematic to just model this directly and explicitly in the IR...</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"></div><div class="gmail_extra gmail_msg"><br class="gmail_msg"></div><div class="gmail_extra gmail_msg">Thanks,</div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg">-- <br class="gmail_msg"><div class="m_4793838375879474458m_-4349866687272885465m_-1567299394228916725m_-1926489945282801627gmail_signature gmail_msg" data-smartmail="gmail_signature"><div dir="ltr" class="gmail_msg">-- <div class="gmail_msg">Peter</div></div></div>
</div></div></blockquote></div></div>