aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAnatoly Sokolov <aesok@post.ru>2011-01-20 20:37:13 +0300
committerAnatoly Sokolov <aesok@gcc.gnu.org>2011-01-20 20:37:13 +0300
commita1a797686428f8fab7aa88035683f2d58e00493e (patch)
tree9a884cc8f66b70d97eb44b3d4d619730594218e9 /gcc
parent427f6cec9c82ea688d821fd2e8d05197d8a1792f (diff)
downloadgcc-a1a797686428f8fab7aa88035683f2d58e00493e.zip
gcc-a1a797686428f8fab7aa88035683f2d58e00493e.tar.gz
gcc-a1a797686428f8fab7aa88035683f2d58e00493e.tar.bz2
xtensa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Remove.
* config/xtensa/xtensa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Remove. * config/xtensa/xtensa-protos.h (constantpool_address_p): Remove. * config/xtensa/xtensa.c (TARGET_MODE_DEPENDENT_ADDRESS_P): Define. (xtensa_mode_dependent_address_p): New function. (constantpool_address_p): Make static. Change return type to bool. Change argument type to const_rtx. Use CONST_INT_P predicate. From-SVN: r169060
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/xtensa/xtensa-protos.h1
-rw-r--r--gcc/config/xtensa/xtensa.c36
-rw-r--r--gcc/config/xtensa/xtensa.h14
4 files changed, 37 insertions, 23 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dcc3530..ccb76d2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2011-01-20 Anatoly Sokolov <aesok@post.ru>
+
+ * config/xtensa/xtensa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Remove.
+ * config/xtensa/xtensa-protos.h (constantpool_address_p): Remove.
+ * config/xtensa/xtensa.c (TARGET_MODE_DEPENDENT_ADDRESS_P): Define.
+ (xtensa_mode_dependent_address_p): New function.
+ (constantpool_address_p): Make static. Change return type to bool.
+ Change argument type to const_rtx. Use CONST_INT_P predicate.
+
2011-01-20 Alexandre Oliva <aoliva@redhat.com>
PR debug/46583
diff --git a/gcc/config/xtensa/xtensa-protos.h b/gcc/config/xtensa/xtensa-protos.h
index 356e0f1..5db4e4e 100644
--- a/gcc/config/xtensa/xtensa-protos.h
+++ b/gcc/config/xtensa/xtensa-protos.h
@@ -36,7 +36,6 @@ extern bool xtensa_mem_offset (unsigned, enum machine_mode);
extern int xt_true_regnum (rtx);
extern int xtensa_valid_move (enum machine_mode, rtx *);
extern int smalloffset_mem_p (rtx);
-extern int constantpool_address_p (rtx);
extern int constantpool_mem_p (rtx);
extern void xtensa_extend_reg (rtx, rtx);
extern void xtensa_expand_conditional_branch (rtx *, enum machine_mode);
diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
index 7e244e2..85dac15 100644
--- a/gcc/config/xtensa/xtensa.c
+++ b/gcc/config/xtensa/xtensa.c
@@ -126,6 +126,7 @@ static rtx fixup_subreg_mem (rtx);
static struct machine_function * xtensa_init_machine_status (void);
static rtx xtensa_legitimize_tls_address (rtx);
static rtx xtensa_legitimize_address (rtx, rtx, enum machine_mode);
+static bool xtensa_mode_dependent_address_p (const_rtx);
static bool xtensa_return_in_msb (const_tree);
static void printx (FILE *, signed int);
static void xtensa_function_epilogue (FILE *, HOST_WIDE_INT);
@@ -161,6 +162,8 @@ static void xtensa_asm_trampoline_template (FILE *);
static void xtensa_trampoline_init (rtx, tree, rtx);
static bool xtensa_output_addr_const_extra (FILE *, rtx);
+static bool constantpool_address_p (const_rtx addr);
+
static const int reg_nonleaf_alloc_order[FIRST_PSEUDO_REGISTER] =
REG_ALLOC_ORDER;
@@ -201,6 +204,8 @@ static const struct default_options xtensa_option_optimization_table[] =
#undef TARGET_LEGITIMIZE_ADDRESS
#define TARGET_LEGITIMIZE_ADDRESS xtensa_legitimize_address
+#undef TARGET_MODE_DEPENDENT_ADDRESS_P
+#define TARGET_MODE_DEPENDENT_ADDRESS_P xtensa_mode_dependent_address_p
#undef TARGET_RTX_COSTS
#define TARGET_RTX_COSTS xtensa_rtx_costs
@@ -494,10 +499,10 @@ smalloffset_mem_p (rtx op)
}
-int
-constantpool_address_p (rtx addr)
+static bool
+constantpool_address_p (const_rtx addr)
{
- rtx sym = addr;
+ const_rtx sym = addr;
if (GET_CODE (addr) == CONST)
{
@@ -506,21 +511,21 @@ constantpool_address_p (rtx addr)
/* Only handle (PLUS (SYM, OFFSET)) form. */
addr = XEXP (addr, 0);
if (GET_CODE (addr) != PLUS)
- return FALSE;
+ return false;
/* Make sure the address is word aligned. */
offset = XEXP (addr, 1);
- if ((GET_CODE (offset) != CONST_INT)
+ if ((!CONST_INT_P (offset))
|| ((INTVAL (offset) & 3) != 0))
- return FALSE;
+ return false;
sym = XEXP (addr, 0);
}
if ((GET_CODE (sym) == SYMBOL_REF)
&& CONSTANT_POOL_ADDRESS_P (sym))
- return TRUE;
- return FALSE;
+ return true;
+ return false;
}
@@ -1937,6 +1942,21 @@ xtensa_legitimize_address (rtx x,
return x;
}
+/* Worker function for TARGET_MODE_DEPENDENT_ADDRESS_P.
+
+ Treat constant-pool references as "mode dependent" since they can
+ only be accessed with SImode loads. This works around a bug in the
+ combiner where a constant pool reference is temporarily converted
+ to an HImode load, which is then assumed to zero-extend based on
+ our definition of LOAD_EXTEND_OP. This is wrong because the high
+ bits of a 16-bit value in the constant pool are now sign-extended
+ by default. */
+
+static bool
+xtensa_mode_dependent_address_p (const_rtx addr)
+{
+ return constantpool_address_p (addr);
+}
/* Helper for xtensa_tls_referenced_p. */
diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h
index e465e8f..3d498e1 100644
--- a/gcc/config/xtensa/xtensa.h
+++ b/gcc/config/xtensa/xtensa.h
@@ -695,20 +695,6 @@ typedef struct xtensa_args
&& GET_CODE (X) != LABEL_REF \
&& GET_CODE (X) != CONST)
-/* Treat constant-pool references as "mode dependent" since they can
- only be accessed with SImode loads. This works around a bug in the
- combiner where a constant pool reference is temporarily converted
- to an HImode load, which is then assumed to zero-extend based on
- our definition of LOAD_EXTEND_OP. This is wrong because the high
- bits of a 16-bit value in the constant pool are now sign-extended
- by default. */
-
-#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
- do { \
- if (constantpool_address_p (ADDR)) \
- goto LABEL; \
- } while (0)
-
/* Specify the machine mode that this machine uses
for the index in the tablejump instruction. */
#define CASE_VECTOR_MODE (SImode)