<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 style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I'm adding optional support for a backend for a processor which might not have 8- or 16-bit loads and stores. In my architecture there are only aligned memory accesses.<br>
<br>
I've managed to make lowering routines which converts the loads into 32-bit load and masks, and lowering of  stores into first performing a 32-bit load, and then shifting and masking in the data which is being stored and finally performing a 32-bit store.<br>
<br>
However, I'm having problem that after the lowering, the optimizations break the code;<br>
<br>
I have multiple 16-bit memory accesses to adjacent 16-bit shorts. Originally the accesses to the different shorts do not alias, so they are not linked to same chains in the selectiondag.<br>
<br>
But after I convert those to 32-bit loads and stores, there is aliasing.<br>
LLVM seems to perform an optimization where (after my lowering) it omits a later 32-bit load and uses the result of earlier 32-bit load for the data even there is a 32-bit store to the same address between those. This causes a wrong value being used.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
So, when I'm widening the memory accesses from 16 to 32 bits, I should somehow update the chains so that my new 32-bit accesses alias with earlier and later accesses to 16-bit accesses to either of the 16-bit subwords. <br>
<br>
Is there an easy way to do it?  </div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
<br>
</div>
</body>
</html>