In the code gaffe I had with the V4 patches, where I mistakenly did:

        PADDI rt,ra,label@pcrel

(which the machine does not support), it was suggested that perhaps I should
add an explicit (0),1 to each @pcrel relocation, so that the assembler will
flag any usage where you try to combine an index register and a PC-relative
offset.

With this patch applied, I bootstrapped the compiler on a power8 little endian
machine running Linux, and there were no regressions in the test suite.  I also
built both Spec 2017 rate and Spec 2006 cpu benchmarks with the compiler, and
there were no regressions in the benchmarks that built previously (Spec 2017
parest_r fails in gimple, both with the original compiler and the patched
version of the compiler).

2019-10-09  Michael Meissner  <meiss...@linux.ibm.com>

        * config/rs6000/rs6000.c (print_operand_address): Add (0),1 to
        @pcrel to catch errant usage.

Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 276758)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -13271,7 +13271,10 @@ print_operand_address (FILE *file, rtx x
       if (SYMBOL_REF_P (x) && !SYMBOL_REF_LOCAL_P (x))
        fprintf (file, "@got");
 
-      fprintf (file, "@pcrel");
+      /* Specifically add (0),1 to catch uses where a @pcrel was added to a an
+        address with a base register, since the hardware does not support
+        adding a base register to a PC-relative address.  */
+      fprintf (file, "@pcrel(0),1");
     }
   else if (SYMBOL_REF_P (x) || GET_CODE (x) == CONST
           || GET_CODE (x) == LABEL_REF)

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797

Reply via email to