<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p style="margin-top:0;margin-bottom:0"></p>
<div>We recently noticed some deficiencies in BasicAA that result in poor scheduling for our downstream VLIW target. It boils down to BasicAA not being able to tell that accesses to %G1 and %G2 below would not alias.</div>
<div><br>
</div>
<div>%1 = mul i16 %X, 6</div>
<div>%2 = shl i16 %X, 3</div>
<div>%G1 = getelementptr i16, i16* %base, i16 %1</div>
<div>%G2 = getelementptr i16, i16* %base, i16 %2</div>
<div><br>
</div>
<div>In general that would be correct but in the special case where it is known that %X != 0 it seems reasonable to conclude that they cannot alias. </div>
<div><br>
</div>
<div>In https://reviews.llvm.org/D55107 (not at all ready, just for discussion) there is an attempt to teach BasicAA about this in the presence of a @llvm.assume on %X.</div>
<div><br>
</div>
<div>Now I am curious if adding such additional analysis to BasicAA would be considered a good idea and if so what would be the proper way to integrate it as right now my implementation feels mostly bolted on top of the existing one.</div>
<div><br>
</div>
<div>-Markus </div>
<br>
<p></p>
</div>
</body>
</html>