Okay for trunk. For backports maybe wait a bit longer than usual? So ask again in two weeks, maybe? I know it's important for the darwin port, but the generic part is a little scary.
On Sat, Oct 12, 2019 at 10:13:16PM +0100, Iain Sandoe wrote: > 2) To resolve this we need to extend the handling of the mem_operand_gpr to > allow looking through Mach-O PIC UNSPECs in the lo_sum cases. > > - note, that rs6000_offsettable_memref_p () will not handle these so that > would return early, producing the issue with unsatisfiable constraints. > > - I do wonder if that's also the case for some non-Darwin lo_sum cases. > > (some things might be hard to detect, since the code will generally fall > back to doing " la Rx xxx@l ; ld Ry 0(Rx)" so it won't fail - just be > less efficient than it could be). I'm putting this on the Big List of things I may some day have time to look at ;-) > * config/rs6000/darwin.md (movdi_low, movsi_low_st): Delete Full stop. > + /* We only care if the access(es) would cause a change to the high part. > */ > + offset = ((offset & 0xffff) ^ 0x8000) - 0x8000; > + return SIGNED_16BIT_OFFSET_EXTRA_P (offset, extra); So this works because the "extra" part only is relevant for positive offsets. Okay. Tricky. > --- a/gcc/config/rs6000/rs6000.md > +++ b/gcc/config/rs6000/rs6000.md > @@ -6894,13 +6894,6 @@ > ;; do the load 16-bits at a time. We could do this by loading from memory, > ;; and this is even supposed to be faster, but it is simpler not to get > ;; integers in the TOC. > -(define_insn "movsi_low" Should the preceding comment be moved elsewhere / changed / deleted? Segher