<div dir="ltr">Hey everyone,<br><div style><br></div><div style>I'm looking at the following two C functions:</div><div style><br></div><div style>    <a href="http://pastebin.com/mYWCj6d8">http://pastebin.com/mYWCj6d8</a></div>
<div style><br></div><div style>Second one is about 50% slower than the first one because in the second case d->data[i * 3 + {X, Y, Z}] loads are not moved out of the second loop and are computed every time j increments, even though they don't depend on it. If I move those out manually, the performance of the two is equal.</div>
<div style><br></div><div style>What could be the reason for this behaviour? I looked at LICM logs; the compiler hoists GEPs but stops short of loading the actual values. Does it have something to do with possible aliasing?</div>
<div style><br></div><div style>Thanks,</div><div style><br></div><div style><br></div><div style>Dimitri.</div></div>