<div>Ok - this patch adds a ISD::Constant case to GetDemandedBits. I went for this over SimplifyDemandedBits, since the latter expects single-use operands, and the aim here is to re-use the constant.</div><div><br></div><div>
The effect on the test case from the first email is the same.</div><div><br></div><div>Please let me know what you think.</div><div><br></div><div>Cheers,</div><div>Lang.</div><div><br><br><div class="gmail_quote">On Fri, Nov 4, 2011 at 4:58 PM, Lang Hames <span dir="ltr"><<a href="mailto:lhames@gmail.com">lhames@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">Thanks Eli! Looking into SimplifyDemandedBits now...<div><br></div><div>Cheers,</div></div><div><span class="HOEnZb"><font color="#888888">Lang.<br>
<br></font></span><div class="gmail_quote"><div class="im">On Fri, Nov 4, 2011 at 4:41 PM, Eli Friedman <span dir="ltr"><<a href="mailto:eli.friedman@gmail.com" target="_blank">eli.friedman@gmail.com</a>></span> wrote:<br>

</div><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On Fri, Nov 4, 2011 at 4:30 PM, Lang Hames <<a href="mailto:lhames@gmail.com" target="_blank">lhames@gmail.com</a>> wrote:<br>


</div><div><div>> Encountered the following when I tried outputting an unaligned store of -1<br>
> on ARM:<br>
> _foo:                                   @ @foo<br>
> @ BB#0:                                 @ %entry<br>
>         mov     r1, #255<br>
>         mov     r2, #255<br>
>         strb    r1, [r0, #3]<br>
>         orr     r1, r2, #65280<br>
>         strb    r1, [r0, #2]<br>
>         mvn     r1, #-16777216<br>
>         strb    r1, [r0, #1]<br>
>         mvn     r1, #0<br>
>         strb    r1, [r0]<br>
>         mov     pc, lr<br>
> The strange constants are coming out of the legalizer, which tries to<br>
> legalize the unaligned store by repeatedly splitting it into two half-sized<br>
> stores, and shifting the constant around. This results in several new and<br>
> confusing constants being introduced.<br>
> This patch checks for constant value stores, and if the two halves of the<br>
> constant have the same bit-pattern it avoids creating new constants.<br>
> Could someone who's more familiar with the legalizer take a look and let me<br>
> know if this is Ok to commit?  (I'm also planning to enable unaligned stores<br>
> on supported subtargets, but that's a different issue)<br>
<br>
</div></div>TargetLowering::SimplifyDemandedBits should be able to take care of<br>
this; if it can't, it should be fixed.<br>
<span><font color="#888888"><br>
-Eli<br>
</font></span></blockquote></div></div></div><br></div>
</blockquote></div><br></div>