From 0644953e64a91b24e2504900aa70e394c28ffc51 Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Tue, 9 Nov 2010 15:52:24 +0000 Subject: re PR rtl-optimization/46237 (SPECint2006 403.gcc fails with -mzarch -m31) 2010-11-09 Andreas Krebbel PR rtl-optimization/46237 * ira-conflicts.c (ira_build_conflicts): Record conflicts for call saved hard regs if they might get partially clobbered. From-SVN: r166495 --- gcc/ira-conflicts.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'gcc/ira-conflicts.c') diff --git a/gcc/ira-conflicts.c b/gcc/ira-conflicts.c index be79523..2891ab7 100644 --- a/gcc/ira-conflicts.c +++ b/gcc/ira-conflicts.c @@ -908,6 +908,23 @@ ira_build_conflicts (void) IOR_HARD_REG_SET (OBJECT_CONFLICT_HARD_REGS (obj), temp_hard_reg_set); } + + if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0) + { + int regno; + + /* Allocnos bigger than the saved part of call saved + regs must conflict with them. */ + for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) + if (!TEST_HARD_REG_BIT (call_used_reg_set, regno) + && HARD_REGNO_CALL_PART_CLOBBERED (regno, + obj->allocno->mode)) + { + SET_HARD_REG_BIT (OBJECT_CONFLICT_HARD_REGS (obj), regno); + SET_HARD_REG_BIT (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj), + regno); + } + } } } if (optimize && ira_conflicts_p -- cgit v1.1