aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2017-06-23 12:44:07 +0000
committerBernd Edlinger <edlinger@gcc.gnu.org>2017-06-23 12:44:07 +0000
commit08f424143c105ec8e610e01a4ee09d96d1eaa823 (patch)
tree892f77d0c25f7c9466a953d82453e67a199eb7b2 /gcc/rtlanal.c
parent2db9b7cd422b63fe0a87218128cc0939b439859e (diff)
downloadgcc-08f424143c105ec8e610e01a4ee09d96d1eaa823.zip
gcc-08f424143c105ec8e610e01a4ee09d96d1eaa823.tar.gz
gcc-08f424143c105ec8e610e01a4ee09d96d1eaa823.tar.bz2
ira.c (update_equiv_regs): Revert to using may_trap_or_fault_p again.
2017-06-23 Bernd Edlinger <bernd.edlinger@hotmail.de> rtl-optimizatoin/79286 * ira.c (update_equiv_regs): Revert to using may_trap_or_fault_p again. * rtlanal.c (rtx_addr_can_trap_p_1): SYMBOL_REF_FUNCTION_P can never trap. PIC register plus a const unspec without offset can never trap. From-SVN: r249588
Diffstat (limited to 'gcc/rtlanal.c')
-rw-r--r--gcc/rtlanal.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index d9f57c3..bf4183e 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -485,7 +485,7 @@ rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size,
case SYMBOL_REF:
if (SYMBOL_REF_WEAK (x))
return 1;
- if (!CONSTANT_POOL_ADDRESS_P (x))
+ if (!CONSTANT_POOL_ADDRESS_P (x) && !SYMBOL_REF_FUNCTION_P (x))
{
tree decl;
HOST_WIDE_INT decl_size;
@@ -644,8 +644,11 @@ rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size,
case PLUS:
/* An address is assumed not to trap if:
- - it is the pic register plus a constant. */
- if (XEXP (x, 0) == pic_offset_table_rtx && CONSTANT_P (XEXP (x, 1)))
+ - it is the pic register plus a const unspec without offset. */
+ if (XEXP (x, 0) == pic_offset_table_rtx
+ && GET_CODE (XEXP (x, 1)) == CONST
+ && GET_CODE (XEXP (XEXP (x, 1), 0)) == UNSPEC
+ && offset == 0)
return 0;
/* - or it is an address that can't trap plus a constant integer. */