From fb98f8869b20ecc3ee1f6cb473ab6d7b3c34ece7 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 2 Dec 2014 13:35:10 +0000 Subject: [PATCH] re PR rtl-optimization/63718 (ARM Thumb1 bootstrap fail after fuse-caller-save info in cprop-hardreg) 2014-12-02 Tom de Vries PR rtl-optimization/63718 * config/arm/arm.c (arm_option_override): Disable fuse-caller-save for Thumb1. From-SVN: r218271 --- gcc/ChangeLog | 6 ++++++ gcc/config/arm/arm.c | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2bf3bce9b7b..3eacc5a2588 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-12-02 Tom de Vries + + PR rtl-optimization/63718 + * config/arm/arm.c (arm_option_override): Disable fuse-caller-save for + Thumb1. + 2014-12-02 Richard Biener * match.pd: When combining divisions exclude the degenerate diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index c40c3bd709a..f3be6cfc7f4 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -3105,6 +3105,18 @@ arm_option_override (void) && (!arm_arch7 || !current_tune->prefer_ldrd_strd)) flag_schedule_fusion = 0; + /* In Thumb1 mode, we emit the epilogue in RTL, but the last insn + - epilogue_insns - does not accurately model the corresponding insns + emitted in the asm file. In particular, see the comment in thumb_exit + 'Find out how many of the (return) argument registers we can corrupt'. + As a consequence, the epilogue may clobber registers without + fuse-caller-save finding out about it. Therefore, disable fuse-caller-save + in Thumb1 mode. + TODO: Accurately model clobbers for epilogue_insns and reenable + fuse-caller-save. */ + if (TARGET_THUMB1) + flag_use_caller_save = 0; + /* Register global variables with the garbage collector. */ arm_add_gc_roots (); } -- 2.30.2