https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81763
--- Comment #29 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Jakub Jelinek from comment #25) > I believe for double-word pseudos the RA will not do that, CCing Vlad about > it. I start to worry about it due to allocated: 0x080a96c3 <+1347>: andn (%eax,%ebx,8),%edx,%eax => 0x080a96c9 <+1353>: andn 0x4(%eax,%ebx,8),%ecx,%edx In addition to memory input operand, (dx,cx) regpair is used and (ax,dx) is the output operand. These regpairs do in fact interleave! > Anyway, by having all of r <- (r, r), r <- (0, rm) and &r <- (r, m) > alternatives I'd think the RA has more choices than when it just has the > first 2. > If it sees it as beneficial to have the middle operand in the destination, > it can due to the second alternative even if third one is a memory, if it > wants some other, it can, just needs to make sure the destination doesn't > overlap with mem's address. Taking all those facts into account, I think we can allow two alternatives: r <- (0, rm) and additionally &r <- (r, m) for BMI