This patch fixes an issue in aarch64_classify_address.
authorWilco Dijkstra <wdijkstr@arm.com>
Thu, 8 Dec 2016 19:18:33 +0000 (19:18 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Thu, 8 Dec 2016 19:18:33 +0000 (19:18 +0000)
This patch fixes an issue in aarch64_classify_address.  TImode and TFmode
can either use a 64-bit LDP/STP or 128-bit LDR/STR.  The addressing mode
must be carefully modelled as the intersection of both.  This is done for
the immediate offsets, however load_store_pair_p must be set as well to
avoid LDP with a PC-relative address if aarch64_pcrelative_literal_loads
is true.

    gcc/
PR target/78733
* config/aarch64/aarch64.c (aarch64_classify_address):
Set load_store_pair_p for TImode and TFmode.

    testsuite/
* gcc.target/aarch64/pr78733.c: New test.

From-SVN: r243456

gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog

index 1becd5fddb59a4f0945a6c8f1adf22ed5aba0b44..ccb8281167698a6bbdde23bb702612e7a1317881 100644 (file)
@@ -3,6 +3,12 @@
        * gcc.target/i386/i386.h (HARD_REGNO_NREGS): Use GENERAL_REGNO_P.
        (HARD_REGNO_NREGS_HAS_PADDING): Ditto.  Simplify macro.
 
+2015-12-08  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       PR target/78733
+       * config/aarch64/aarch64.c (aarch64_classify_address):
+       Set load_store_pair_p for TImode and TFmode.
+
 2016-12-08  David Malcolm  <dmalcolm@redhat.com>
 
        * emit-rtl.c (gen_reg_rtx): Move regno_pointer_align and
index 1a06432655e155f9ef347b174e389600bd84b5a9..e87831f56e94c44e6db06f346cb4176fc90df982 100644 (file)
@@ -4273,8 +4273,11 @@ aarch64_classify_address (struct aarch64_address_info *info,
   enum rtx_code code = GET_CODE (x);
   rtx op0, op1;
 
-  /* On BE, we use load/store pair for all large int mode load/stores.  */
+  /* On BE, we use load/store pair for all large int mode load/stores.
+     TI/TFmode may also use a load/store pair.  */
   bool load_store_pair_p = (outer_code == PARALLEL
+                           || mode == TImode
+                           || mode == TFmode
                            || (BYTES_BIG_ENDIAN
                                && aarch64_vect_struct_mode_p (mode)));
 
index 6342b9d91de2fe52a0ce9cae7cedd53f2d8640f6..ba30327cb1f747365702b800332a9920ab208996 100644 (file)
@@ -1,3 +1,8 @@
+2015-12-08  Wilco Dijkstra  <wdijkstr@arm.com>
+
+       PR target/78733
+       * gcc.target/aarch64/pr78733.c: New test.
+
 2016-12-08  Nathan Sidwell  <nathan@acm.org>
 
        PR c++/78551