| Submitter | Vladimir Makarov |
|---|---|
| Date | March 30, 2011, 1:28 a.m. |
| Message ID | <4D92873D.6020203@redhat.com> |
| Download | mbox | patch |
| Permalink | /patch/88872/ |
| State | New |
| Headers | show |
Comments
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 03/29/11 19:28, Vladimir Makarov wrote: > The following patch is to solve PR48336, PR48342, PR48345. The > profitable hard regs exclude hard regs which are prohibited for the > corresponding allocno mode. It is true for primary allocation and it is > important for better colorability criteria. Function assign_hard_reg is > also based on this assumption. Unfortunately, it is not true for > secondary allocation (after IRA IR flattening or during reload). The > following patch solves this problem. > > The patch should be very safe but I am still testing it on x86/x86-64 > bootstrap. > > Is it ok to commit the patch after successful bootsrapping? > > 2011-03-29 Vladimir Makarov <vmakarov@redhat.com> > > PR target/48336 > PR middle-end/4834 > PR rtl-optimization/48345 > * ira-color.c (setup_conflict_profitable_regs): Exclude prohibited > hard regs for given mode from profitable regs when doing secondary > allocation. This is OK. Note the PR# in the ChangeLog (4834) should be (48342). jeff -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ iQEcBAEBAgAGBQJNkomDAAoJEBRtltQi2kC7njQH/1GxaAuxFEZkYx8YdcYj//+c XyfW2qV0wC91w2GIlpX45zzZnINo5dySAIRerWxkv1dI4ycaxTcYyoWyZRWWUWHQ mKMYUZM8hmEdnNG/fur481cYo3lP45NmGzGFS5/lxyBJZXBaPk2gUJvYzLPFz/as 4ZJg3c5d05rw/1MdPOFwnKdzxk1TPciF7RP8uhFrEe1Uu8QyRf8ebtnpNyk93uF7 Z4/GafUBaSvYt/usRH4mijICE2cdMNrLq2S4A/RtQBhlOPvwSppIl3rT0kQnjAmw EUAXXGuKuHLEblzk1dVWpWvwMBXnw93qxSD+vkEbDFtcwzJqh5rqFJbVw4S/TQk= =Mkxi -----END PGP SIGNATURE-----
On Tue, 29 Mar 2011, Vladimir Makarov wrote: > 2011-03-29 Vladimir Makarov <vmakarov@redhat.com> > > PR target/48336 > PR middle-end/4834 (A typo here, 48342. Or maybe also needed for 48334?) > PR rtl-optimization/48345 > * ira-color.c (setup_conflict_profitable_regs): Exclude prohibited > hard regs for given mode from profitable regs when doing secondary > allocation. FWIW, I have a five regressions for cris-elf too appearing at that RA change, but as they're wrong-code and noticed only at execution, I'm going to wait analyzing further until this is committed and caught by my autotester. Just a heads-up. brgds, H-P PS. thanks for sticking to such a high-bug-profile task. ;)
On Tue, 29 Mar 2011, Hans-Peter Nilsson wrote: > FWIW, I have a five regressions for cris-elf too appearing at > that RA change, but as they're wrong-code and noticed only at > execution, I'm going to wait analyzing further until this is > committed and caught by my autotester. Just a heads-up. Lest you lose sleep over this, it was fixed at r171716. ;) brgds, H-P
Patch
Index: ira-color.c =================================================================== --- ira-color.c (revision 171699) +++ ira-color.c (working copy) @@ -1447,7 +1447,9 @@ update_conflict_hard_regno_costs (int *c } /* Set up conflicting and profitable regs (through CONFLICT_REGS and - PROFITABLE_REGS) for each object of allocno A. */ + PROFITABLE_REGS) for each object of allocno A. Remember that the + profitable regs exclude hard regs which can not hold value of mode + of allocno A. */ static inline void setup_conflict_profitable_regs (ira_allocno_t a, bool retry_p, HARD_REG_SET *conflict_regs, @@ -1463,8 +1465,13 @@ setup_conflict_profitable_regs (ira_allo COPY_HARD_REG_SET (conflict_regs[i], OBJECT_TOTAL_CONFLICT_HARD_REGS (obj)); if (retry_p) - COPY_HARD_REG_SET (profitable_regs[i], - reg_class_contents[ALLOCNO_CLASS (a)]); + { + COPY_HARD_REG_SET (profitable_regs[i], + reg_class_contents[ALLOCNO_CLASS (a)]); + AND_COMPL_HARD_REG_SET (profitable_regs[i], + ira_prohibited_class_mode_regs + [ALLOCNO_CLASS (a)][ALLOCNO_MODE (a)]); + } else COPY_HARD_REG_SET (profitable_regs[i], OBJECT_COLOR_DATA (obj)->profitable_hard_regs);
The following patch is to solve PR48336, PR48342, PR48345. The profitable hard regs exclude hard regs which are prohibited for the corresponding allocno mode. It is true for primary allocation and it is important for better colorability criteria. Function assign_hard_reg is also based on this assumption. Unfortunately, it is not true for secondary allocation (after IRA IR flattening or during reload). The following patch solves this problem. The patch should be very safe but I am still testing it on x86/x86-64 bootstrap. Is it ok to commit the patch after successful bootsrapping? 2011-03-29 Vladimir Makarov <vmakarov@redhat.com> PR target/48336 PR middle-end/4834 PR rtl-optimization/48345 * ira-color.c (setup_conflict_profitable_regs): Exclude prohibited hard regs for given mode from profitable regs when doing secondary allocation.