diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e7e3ec31443..67348c209b4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-10-30 Richard Sandiford + + * defaults.h (SLOW_UNALIGNED_ACCESS): Provide default definition. + * expmed.c (SLOW_UNALIGNED_ACCESS): Remove default definition. + * expr.c (SLOW_UNALIGNED_ACCESS): Likewise. + * lra-constraints.c (SLOW_UNALIGNED_ACCESS): Likewise. + (simplify_operand_subreg): Don't check STRICT_ALIGNMENT here. + 2012-10-30 Jan Hubicka * ipa-inline-analysis.c (eliminated_by_inlining_prob): Cleanup. diff --git a/gcc/defaults.h b/gcc/defaults.h index 6eead33ba6c..76909ab2d7e 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -1218,6 +1218,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define ATTRIBUTE_ALIGNED_VALUE BIGGEST_ALIGNMENT #endif +#ifndef SLOW_UNALIGNED_ACCESS +#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) STRICT_ALIGNMENT +#endif + /* For most ports anything that evaluates to a constant symbolic or integer value is acceptable as a constant address. */ #ifndef CONSTANT_ADDRESS_P diff --git a/gcc/expmed.c b/gcc/expmed.c index 6d9b13354cb..eb4b0d09152 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -69,11 +69,6 @@ static rtx expand_sdiv_pow2 (enum machine_mode, rtx, HOST_WIDE_INT); /* Test whether a value is zero of a power of two. */ #define EXACT_POWER_OF_2_OR_ZERO_P(x) (((x) & ((x) - 1)) == 0) -#ifndef SLOW_UNALIGNED_ACCESS -#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) STRICT_ALIGNMENT -#endif - - /* Reduce conditional compilation elsewhere. */ #ifndef HAVE_insv #define HAVE_insv 0 diff --git a/gcc/expr.c b/gcc/expr.c index 0de2f97b4a9..699dae93d3d 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -189,12 +189,6 @@ static void write_complex_part (rtx, rtx, bool); (move_by_pieces_ninsns (SIZE, ALIGN, STORE_MAX_PIECES + 1) \ < (unsigned int) MOVE_RATIO (optimize_insn_for_speed_p ())) #endif - -/* SLOW_UNALIGNED_ACCESS is nonzero if unaligned accesses are very slow. */ - -#ifndef SLOW_UNALIGNED_ACCESS -#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) STRICT_ALIGNMENT -#endif /* This is run to set up which modes can be used directly in memory and to initialize the block move optab. It is run diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 3eabab88019..1c2058f2ad7 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -1107,10 +1107,6 @@ process_addr_reg (rtx *loc, rtx *before, rtx *after, enum reg_class cl) return true; } -#ifndef SLOW_UNALIGNED_ACCESS -#define SLOW_UNALIGNED_ACCESS(mode, align) 0 -#endif - /* Make reloads for subreg in operand NOP with internal subreg mode REG_MODE, add new reloads for further processing. Return true if any reload was generated. */ @@ -1134,8 +1130,7 @@ simplify_operand_subreg (int nop, enum machine_mode reg_mode) address might violate the necessary alignment or the access might be slow. So take this into consideration. */ if ((MEM_P (reg) - && ((! STRICT_ALIGNMENT - && ! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (reg))) + && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (reg)) || MEM_ALIGN (reg) >= GET_MODE_ALIGNMENT (mode))) || (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER)) {