From aac375ddfb69c8c4c62f9b8a19a2971bcd7d1b7b Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Thu, 16 Oct 2008 00:52:59 +0000 Subject: [PATCH] re PR target/37633 (wrong register use on sh64) 2008-10-14 Vladimir Makarov PR target/37633 * ira-costs.c (ira_tune_allocno_costs_and_cover_classes): Check HARD_REGNO_CALL_PART_CLOBBERED. From-SVN: r141161 --- gcc/ChangeLog | 6 ++++++ gcc/ira-costs.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 68ae6eca9d6..ccdc92ed986 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-10-14 Vladimir Makarov + + PR target/37633 + * ira-costs.c (ira_tune_allocno_costs_and_cover_classes): Check + HARD_REGNO_CALL_PART_CLOBBERED. + 2008-10-15 Vladimir Makarov PR middle-end/37535 diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c index 774902035e1..64b2e7995d6 100644 --- a/gcc/ira-costs.c +++ b/gcc/ira-costs.c @@ -1572,8 +1572,8 @@ ira_tune_allocno_costs_and_cover_classes (void) regno = ira_class_hard_regs[cover_class][j]; rclass = REGNO_REG_CLASS (regno); cost = 0; - /* ??? If only part is call clobbered. */ - if (! ira_hard_reg_not_in_set_p (regno, mode, call_used_reg_set)) + if (! ira_hard_reg_not_in_set_p (regno, mode, call_used_reg_set) + || HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)) cost += (ALLOCNO_CALL_FREQ (a) * (ira_memory_move_cost[mode][rclass][0] + ira_memory_move_cost[mode][rclass][1]));