rs6000-string.c (expand_block_move): Allow the use of unaligned VSX load/store on...
authorAaron Sawdey <acsawdey@linux.vnet.ibm.com>
Tue, 2 Jan 2018 23:01:43 +0000 (23:01 +0000)
committerAaron Sawdey <acsawdey@gcc.gnu.org>
Tue, 2 Jan 2018 23:01:43 +0000 (17:01 -0600)
2018-01-02  Aaron Sawdey  <acsawdey@linux.vnet.ibm.com>

        * config/rs6000/rs6000-string.c (expand_block_move): Allow the use of
        unaligned VSX load/store on P8/P9.
        (expand_block_clear): Allow the use of unaligned VSX
load/store on P8/P9.

From-SVN: r256112

gcc/ChangeLog
gcc/config/rs6000/rs6000-string.c

index bdf32da0aebd03608aad7137b79a92d2ba2e4a35..b9775434b700706a7d8b288b467bbcea36291165 100644 (file)
@@ -1,3 +1,10 @@
+2018-01-02  Aaron Sawdey  <acsawdey@linux.vnet.ibm.com>
+
+        * config/rs6000/rs6000-string.c (expand_block_move): Allow the use of
+        unaligned VSX load/store on P8/P9.
+        (expand_block_clear): Allow the use of unaligned VSX
+       load/store on P8/P9.
+
 2018-01-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        * config/rs6000/rs6000-p8swap.c (swap_feeds_both_load_and_store):
index 7e1976bbe085d6ee64f6e162a2d8c1000147caa9..23de92572b777f4b7c348e4e8584341c16208814 100644 (file)
@@ -73,7 +73,7 @@ expand_block_clear (rtx operands[])
      When optimize_size, avoid any significant code bloat; calling
      memset is about 4 instructions, so allow for one instruction to
      load zero and three to do clearing.  */
-  if (TARGET_ALTIVEC && align >= 128)
+  if (TARGET_ALTIVEC && (align >= 128 || TARGET_EFFICIENT_UNALIGNED_VSX))
     clear_step = 16;
   else if (TARGET_POWERPC64 && (align >= 64 || !STRICT_ALIGNMENT))
     clear_step = 8;
@@ -90,7 +90,7 @@ expand_block_clear (rtx operands[])
       machine_mode mode = BLKmode;
       rtx dest;
 
-      if (bytes >= 16 && TARGET_ALTIVEC && align >= 128)
+      if (bytes >= 16 && TARGET_ALTIVEC && (align >= 128 || TARGET_EFFICIENT_UNALIGNED_VSX))
        {
          clear_bytes = 16;
          mode = V4SImode;
@@ -1260,7 +1260,7 @@ expand_block_move (rtx operands[])
 
       /* Altivec first, since it will be faster than a string move
         when it applies, and usually not significantly larger.  */
-      if (TARGET_ALTIVEC && bytes >= 16 && align >= 128)
+      if (TARGET_ALTIVEC && bytes >= 16 && (TARGET_EFFICIENT_UNALIGNED_VSX || align >= 128))
        {
          move_bytes = 16;
          mode = V4SImode;