<div dir="ltr">I'm hacking on this now. I'm not 100% sure that ByteOff isn't used for negative values though, see for example<div><br></div><div><div>mkTaggedObjectLoad</div><div>  :: DynFlags -> LocalReg -> LocalReg -> ByteOff -> DynTag -> CmmAGraph</div>

<div>-- (loadTaggedObjectField reg base off tag) generates assignment</div><div>--      reg = bitsK[ base + off - tag ]</div><div>-- where K is fixed by 'reg'</div><div>mkTaggedObjectLoad dflags reg base offset tag</div>

<div>  = mkAssign (CmmLocal reg)</div><div>             (CmmLoad (cmmOffsetB dflags</div><div>                                  (CmmReg (CmmLocal base))</div><div>                                  (offset - tag))</div><div>

                      (localRegType reg))</div></div><div><br></div><div>from StgCmmUtils.</div><div><br></div><div>Wouldn't it be possible that the offset in cmmOffsetB (which is of type ByteOff) could be negative?</div>

<div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Aug 7, 2014 at 1:49 PM, Simon Peyton Jones <span dir="ltr"><<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-GB" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:#1f497d">I’m all for it!<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:#1f497d">I believe that ByteOff/WordOff are always 0 or positive.   At least, they were when I introduced them!<u></u><u></u></span></p>


<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:#1f497d">SImon<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif""> ghc-devs [mailto:<a href="mailto:ghc-devs-bounces@haskell.org" target="_blank">ghc-devs-bounces@haskell.org</a>]
<b>On Behalf Of </b>Johan Tibell<br>
<b>Sent:</b> 07 August 2014 12:21<br>
<b>To:</b> Simon Marlow<br>
<b>Cc:</b> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<b>Subject:</b> Re: Improving the Int/Word story inside GHC<u></u><u></u></span></p>
</div>
</div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
Simon M, is the intention of ByteOff and WordOff that they should be able to represent negative quantities as well? If so we might need to split it into ByteOff (still an Int) and ByteIndex (a Word) to have a type for indexing into arrays.<u></u><u></u></p>


</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm">
<u></u> <u></u></p>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
On Thu, Aug 7, 2014 at 1:16 PM, Edward Z. Yang <<a href="mailto:ezyang@mit.edu" target="_blank">ezyang@mit.edu</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
If it's strictly just in the codegen (and not affecting user code),<br>
seems fine to me.<br>
<br>
Edward<br>
<br>
Excerpts from Johan Tibell's message of 2014-08-07 12:10:37 +0100:<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
> Inside GHC we mostly use Int instead of Word, even when we want to<br>
> represent non-negative values, such as sizes of things or indices into<br>
> things. This is now causing some grief in<br>
> <a href="https://ghc.haskell.org/trac/ghc/ticket/9416" target="_blank">https://ghc.haskell.org/trac/ghc/ticket/9416</a>, where an allocation boundary<br>
> case test fails with a segfault because a n < m Int comparison overflows.<br>
><br>
> I tried to fix the issue by changing the type of maxInlineAllocSize, which<br>
> is used on one side of the above comparison, to Word. However, that<br>
> unravels a bunch of other issues, such as wordsToBytes, ByteOff, etc are<br>
> all Int-valued quantities.<br>
><br>
> I could perhaps work around these problems by judicious use of fromIntegral<br>
> in StgCmmPrim, but I'm a bit unhappy about it because it 1) makes the code<br>
> uglier and 2) needs to be done in quite a few places.<br>
><br>
> How much work would it be to try to switch the codegen to use Word for most<br>
> of these quantities instead?<br>
><br>
> -- Johan<u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
</div></div></div>
</div>
</div>

</blockquote></div><br></div>