<div dir="ltr"><div class="gmail_extra">I was using this GCC compiler comparison site. It's well done but unfortunately it's not up to date. The author Matt Godbolt said he was updating it:</div><div class="gmail_extra"><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_extra"><a href="http://gcc.godbolt.org/#" target="_blank">http://gcc.godbolt.org/#</a></div></blockquote><div class="gmail_extra"><br></div><div class="gmail_extra">No, I do not have 3.4.1 but 3.5 is the current XCode release. It's pretty much already narrowed.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_extra">3.4.1 generates correct assembly (except bug #2 is here as well, see below)</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_extra">3.5 (XCode) generates correct IR and bad assembly</div></blockquote><div class="gmail_extra"><br></div>So the problem seems to show up with 3.5. The attached IR is from 3.5 XCode clang -S -O3 -emit-llvm newtst.c.<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">There are TWO bugs here. There's the Constant Hoisting bug (#1) and the failure to match a AND/CMP (#2). My current theory for #1 is that Constant Hoisting for the X86 is relatively recent or that Costing changed and that what we're seeing is that it worked correctly before. I think my proposed patch is correct and I'd recommend the ARM folks look at it.</div><div class="gmail_extra"><br></div><div class="gmail_extra">I have no theory for bug #2 and I've already spent a day on it.</div></div>