> On Feb 3, 2015, at 10:20 AM, Chris Sears <chris.sears at gmail.com> wrote: > > 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: > > http://gcc.godbolt.org/# <http://gcc.godbolt.org/#> > > No, I do not have 3.4.1 but 3.5 is the current XCode release. It's pretty much already narrowed. > > 3.4.1 generates correct assembly (except bug #2 is here as well, see below) > 3.5 (XCode) generates correct IR and bad assembly > > 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. > > 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.I may have missed on email, did you send a patch? Thanks, Mehdi> > I have no theory for bug #2 and I've already spent a day on it. > <newtst.ll>-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150203/82c935a5/attachment.html>
This was an RFC and so I included the suggested patch in the text but here it is as a patch diff. Just ignore (or remove) the Imm.isSignedIntN(8) for now. That was mentioned in the first post as well but it was just a suggestion. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150203/0a169025/attachment.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: const_patch Type: application/octet-stream Size: 584 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150203/0a169025/attachment.obj>
BTW, Matt showed me that I can select 3.4.1 and set the compile line to http://gcc.godbolt.org/ -O3 -emit-llvm to get the old IR. See attached. It's clean (except for bug #2). So 3.4.1 generates good IR and assembly and 3.5 generates good IR and bad assembly. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150203/5eeb13c7/attachment.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: newtst.s Type: application/octet-stream Size: 9671 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150203/5eeb13c7/attachment.obj>