<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 23, 2020 at 12:33 AM Eli Friedman <<a href="mailto:efriedma@quicinc.com">efriedma@quicinc.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_9086541031929790010WordSection1">
<p class="MsoNormal">In target-independent legalization, whether an unaligned load is considered “legal” is controlled by the target’s implementation of “allowsMisalignedMemoryAccesses()”.  If it returns false, the load is not legal, and is therefore split
 into smaller, legal loads.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Hopefully that’s enough to point you on the right track.</p></div></div></blockquote><div><br></div><div>Thank you for the pointer. I don't know why is there a difference between FreeBSD and Windows, but overriding this function in my backend makes the behavior identical in both cases.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div class="gmail-m_9086541031929790010WordSection1"><p class="MsoNormal"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-Eli<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border-color:currentcolor currentcolor currentcolor blue;border-style:none none none solid;border-width:medium medium medium 1.5pt;padding:0in 0in 0in 4pt">
<div>
<div style="border-color:rgb(225,225,225) currentcolor currentcolor;border-style:solid none none;border-width:1pt medium medium;padding:3pt 0in 0in">
<p class="MsoNormal"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> <b>On Behalf Of
</b>Gleb Popov via llvm-dev<br>
<b>Sent:</b> Sunday, March 22, 2020 10:51 AM<br>
<b>To:</b> LLVM Dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> [EXT] [llvm-dev] Legalized selection DAG differs for the same code and flags<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Hello, LLVM Devs.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I'm compiling following code using my own backend:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">int foo() {<br>
    char arr[4];<br>
    arr[0] = 0xAA;<br>
    arr[1] = 0xBB;<br>
    arr[2] = 0xCC;<br>
    arr[3] = 0xDD;<br>
    return *(int*)&arr[0];<br>
}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">The memory operation in "return" statement ends up transformed into 4-byte load in the initial DAG:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">load<(dereferenceable load 4 from %ir.7, align 1, addrspace 1)> t31, FrameIndex:i32<0>, ...<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">However, at the "Legalized selection DAG" stage things go differently, depending on the OS I'm running. On Windows this load stay in its previous form, but on FreeBSD this load gets turned into 1-byte loads for some reason:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">load<(dereferenceable load 1 from %ir.7, addrspace 1)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">load<(dereferenceable load 1 from %ir.7 + 1, addrspace 1)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">...<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Can anyone give me a hint why this happens? Optimization level is the same and FastISel is used in both cases.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks in advance.<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>

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