[RS6000] cost SLOW_UNALIGNED_ACCESS
authorAlan Modra <amodra@gmail.com>
Wed, 3 Aug 2016 00:35:14 +0000 (10:05 +0930)
committerAlan Modra <amodra@gcc.gnu.org>
Wed, 3 Aug 2016 00:35:14 +0000 (10:05 +0930)
* config/rs6000/rs6000.c (rs6000_rtx_costs): Make unaligned mem
cost more.

From-SVN: r239012

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index a75f39fdbbbdae42392148fe5462e0aa11c833fc..e8de5b9f605e06a21cb457be1d494991c5a6a2ef 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-03  Alan Modra  <amodra@gmail.com>
+
+       * config/rs6000/rs6000.c (rs6000_rtx_costs): Make unaligned mem
+       cost more.
+
 2016-08-03  Alan Modra  <amodra@gmail.com>
 
        * config/rs6000/rs6000.md (fix_trunc<mode>si2): Force source operand
index 5b9aae2768112246390412a07ac065ae780870da..2ae3e7e6796e372119e5c93af96a9c79bea4d299 100644 (file)
@@ -34336,11 +34336,16 @@ rs6000_rtx_costs (rtx x, machine_mode mode, int outer_code,
     case CONST:
     case HIGH:
     case SYMBOL_REF:
+      *total = !speed ? COSTS_N_INSNS (1) + 1 : COSTS_N_INSNS (2);
+      return true;
+
     case MEM:
       /* When optimizing for size, MEM should be slightly more expensive
         than generating address, e.g., (plus (reg) (const)).
         L1 cache latency is about two instructions.  */
       *total = !speed ? COSTS_N_INSNS (1) + 1 : COSTS_N_INSNS (2);
+      if (SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (x)))
+       *total += COSTS_N_INSNS (100);
       return true;
 
     case LABEL_REF: