https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118892
--- Comment #11 from Tamar Christina <tnfchris at gcc dot gnu.org> --- (In reply to Richard Sandiford from comment #10) > (In reply to Tamar Christina from comment #9) > > I swear that was something that was fixed. But in any case, the simplest > > fix is to force it into a reg again indeed. > > > > I'm slightly worried that this then relies on the intermediate copy being > > removed but such is life. > This sounds like you're planning to use force_reg, but I agree with Andrew No I wasn't. > that the patch in comment 6 is the right fix. That will only create a new > register if one is needed to satisfy subreg semantics. The normal case will > still avoid a temporary. Yeah, but see, the thing is when this copysign patch was made you made me change the subreg semantics to relax it. My concern was simply that by forcing a new register here we're again back to, at for this case, relying on reload to remove the mov. This wasn't a reliable approach before because combine inserts those annoying moves that it doesn't clean up.