* RFA: patch to fix PR48971
@ 2011-05-13 16:42 Vladimir Makarov
2011-05-23 16:14 ` Jeff Law
2011-05-25 7:06 ` Hans-Peter Nilsson
0 siblings, 2 replies; 6+ messages in thread
From: Vladimir Makarov @ 2011-05-13 16:42 UTC (permalink / raw)
To: gcc-patches; +Cc: Jeff Law
[-- Attachment #1: Type: text/plain, Size: 757 bytes --]
The following patch solves the problem described on
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48971
The patch was successfully bootstrapped on x86-64 and checked for ppc64,
ia64, i686-linux, i686-apple-darwin, mips, arm, s390x, and sparc with
and without -msoft-float.
Is it ok to submit to the trunk?
2011-05-13 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/48971
* ira.c (setup_pressure_classes): Don't check register move cost
for classes with one registers. Don't add pressure class if there
is a pressure class with the same available hard registers.
Check contains_reg_of_mode. Fix a typo in collecting
temp_hard_regset. Ignore hard registers not belonging to a class.
[-- Attachment #2: pr48971.patch --]
[-- Type: text/plain, Size: 5071 bytes --]
Index: ira.c
===================================================================
--- ira.c (revision 173706)
+++ ira.c (working copy)
@@ -799,27 +799,30 @@ setup_pressure_classes (void)
{
if (ira_available_class_regs[cl] == 0)
continue;
- /* Check that the moves between any hard registers of the
- current class are not more expensive for a legal mode than
- load/store of the hard registers of the current class. Such
- class is a potential candidate to be a register pressure
- class. */
- for (m = 0; m < NUM_MACHINE_MODES; m++)
+ if (ira_available_class_regs[cl] != 1)
{
- COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
- AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
- AND_COMPL_HARD_REG_SET (temp_hard_regset,
- ira_prohibited_class_mode_regs[cl][m]);
- if (hard_reg_set_empty_p (temp_hard_regset))
+ /* Check that the moves between any hard registers of the
+ current class are not more expensive for a legal mode
+ than load/store of the hard registers of the current
+ class. Such class is a potential candidate to be a
+ register pressure class. */
+ for (m = 0; m < NUM_MACHINE_MODES; m++)
+ {
+ COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
+ AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
+ AND_COMPL_HARD_REG_SET (temp_hard_regset,
+ ira_prohibited_class_mode_regs[cl][m]);
+ if (hard_reg_set_empty_p (temp_hard_regset))
+ continue;
+ ira_init_register_move_cost_if_necessary ((enum machine_mode) m);
+ cost = ira_register_move_cost[m][cl][cl];
+ if (cost <= ira_max_memory_move_cost[m][cl][1]
+ || cost <= ira_max_memory_move_cost[m][cl][0])
+ break;
+ }
+ if (m >= NUM_MACHINE_MODES)
continue;
- ira_init_register_move_cost_if_necessary ((enum machine_mode) m);
- cost = ira_register_move_cost[m][cl][cl];
- if (cost <= ira_max_memory_move_cost[m][cl][1]
- || cost <= ira_max_memory_move_cost[m][cl][0])
- break;
}
- if (m >= NUM_MACHINE_MODES)
- continue;
curr = 0;
insert_p = true;
COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
@@ -848,6 +851,8 @@ setup_pressure_classes (void)
&& (! hard_reg_set_equal_p (temp_hard_regset2, temp_hard_regset)
|| cl == (int) GENERAL_REGS))
continue;
+ if (hard_reg_set_equal_p (temp_hard_regset2, temp_hard_regset))
+ insert_p = false;
pressure_classes[curr++] = (enum reg_class) cl2;
}
/* If the current candidate is a subset of a so far added
@@ -858,23 +863,44 @@ setup_pressure_classes (void)
n = curr;
}
#ifdef ENABLE_IRA_CHECKING
- /* Check pressure classes correctness: here we check that hard
- registers from all register pressure classes contains all hard
- registers available for the allocation. */
- CLEAR_HARD_REG_SET (temp_hard_regset);
- CLEAR_HARD_REG_SET (temp_hard_regset2);
- for (cl = 0; cl < LIM_REG_CLASSES; cl++)
- {
- for (i = 0; i < n; i++)
- if ((int) pressure_classes[i] == cl)
- break;
- IOR_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl]);
- if (i >= n)
- IOR_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
- }
- AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
- AND_COMPL_HARD_REG_SET (temp_hard_regset2, no_unit_alloc_regs);
- ira_assert (hard_reg_set_subset_p (temp_hard_regset2, temp_hard_regset));
+ {
+ HARD_REG_SET ignore_hard_regs;
+
+ /* Check pressure classes correctness: here we check that hard
+ registers from all register pressure classes contains all hard
+ registers available for the allocation. */
+ CLEAR_HARD_REG_SET (temp_hard_regset);
+ CLEAR_HARD_REG_SET (temp_hard_regset2);
+ COPY_HARD_REG_SET (ignore_hard_regs, no_unit_alloc_regs);
+ for (cl = 0; cl < LIM_REG_CLASSES; cl++)
+ {
+ /* For some targets (like MIPS with MD_REGS), there are some
+ classes with hard registers available for allocation but
+ not able to hold value of any mode. */
+ for (m = 0; m < NUM_MACHINE_MODES; m++)
+ if (contains_reg_of_mode[cl][m])
+ break;
+ if (m >= NUM_MACHINE_MODES)
+ {
+ IOR_HARD_REG_SET (ignore_hard_regs, reg_class_contents[cl]);
+ continue;
+ }
+ for (i = 0; i < n; i++)
+ if ((int) pressure_classes[i] == cl)
+ break;
+ IOR_HARD_REG_SET (temp_hard_regset2, reg_class_contents[cl]);
+ if (i < n)
+ IOR_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl]);
+ }
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ /* Some targets (like SPARC with ICC reg) have alocatable regs
+ for which no reg class is defined. */
+ if (REGNO_REG_CLASS (i) == NO_REGS)
+ SET_HARD_REG_BIT (ignore_hard_regs, i);
+ AND_COMPL_HARD_REG_SET (temp_hard_regset, ignore_hard_regs);
+ AND_COMPL_HARD_REG_SET (temp_hard_regset2, ignore_hard_regs);
+ ira_assert (hard_reg_set_subset_p (temp_hard_regset2, temp_hard_regset));
+ }
#endif
ira_pressure_classes_num = 0;
for (i = 0; i < n; i++)
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: RFA: patch to fix PR48971
2011-05-13 16:42 RFA: patch to fix PR48971 Vladimir Makarov
@ 2011-05-23 16:14 ` Jeff Law
2011-05-25 7:06 ` Hans-Peter Nilsson
1 sibling, 0 replies; 6+ messages in thread
From: Jeff Law @ 2011-05-23 16:14 UTC (permalink / raw)
To: Vladimir Makarov; +Cc: gcc-patches
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 05/13/11 10:58, Vladimir Makarov wrote:
> The following patch solves the problem described on
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48971
>
> The patch was successfully bootstrapped on x86-64 and checked for ppc64,
> ia64, i686-linux, i686-apple-darwin, mips, arm, s390x, and sparc with
> and without -msoft-float.
>
> Is it ok to submit to the trunk?
>
> 2011-05-13 Vladimir Makarov <vmakarov@redhat.com>
>
> PR rtl-optimization/48971
> * ira.c (setup_pressure_classes): Don't check register move cost
> for classes with one registers. Don't add pressure class if there
> is a pressure class with the same available hard registers.
> Check contains_reg_of_mode. Fix a typo in collecting
> temp_hard_regset. Ignore hard registers not belonging to a class.
OK.
Jeff
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJN2n2/AAoJEBRtltQi2kC7OqcIAIs/NO3p6UclzUe7LLuP+8SK
oAI+0Kjy1/nkbXdpk594p8P3A2z3H0fhPwy2VjTfckE8oL1wPd7nsvdjzZiLdkvC
/nt75FZSY7kDledH3pvgbh7UNFLr0DczDsySwaalDuHn6R6IiQeqZO+BcvL5futg
LHtbr6HXNoSONulCiStLNjGn1w24LrRXS/SY0PEUrQnG2D1JCGcFVbmwQexlj7dl
HjkNkMrHgi1vWrK5GGUH6ywSk0aKCjGERdLBQCLFMTSO14VcCE+0Pq5mKyf7oKBF
eSfq9kNNB3HPvloktHd0R5X8cBA+u4Df8H6fqiBZQwxCdoOG79XV4zlrd54944M=
=gDkn
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: RFA: patch to fix PR48971
2011-05-13 16:42 RFA: patch to fix PR48971 Vladimir Makarov
2011-05-23 16:14 ` Jeff Law
@ 2011-05-25 7:06 ` Hans-Peter Nilsson
2011-05-25 8:23 ` Vladimir Makarov
1 sibling, 1 reply; 6+ messages in thread
From: Hans-Peter Nilsson @ 2011-05-25 7:06 UTC (permalink / raw)
To: Vladimir Makarov; +Cc: gcc-patches, Jeff Law
On Fri, 13 May 2011, Vladimir Makarov wrote:
> The following patch solves the problem described on
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48971
>
> The patch was successfully bootstrapped on x86-64 and checked for ppc64, ia64,
> i686-linux, i686-apple-darwin, mips, arm, s390x, and sparc with and without
> -msoft-float.
>
> Is it ok to submit to the trunk?
>
> 2011-05-13 Vladimir Makarov <vmakarov@redhat.com>
>
> PR rtl-optimization/48971
> * ira.c (setup_pressure_classes): Don't check register move cost
> for classes with one registers. Don't add pressure class if there
> is a pressure class with the same available hard registers.
> Check contains_reg_of_mode. Fix a typo in collecting
> temp_hard_regset. Ignore hard registers not belonging to a class.
>
It seems this broke cris-elf: PR49154.
brgds, H-P
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: RFA: patch to fix PR48971
2011-05-25 7:06 ` Hans-Peter Nilsson
@ 2011-05-25 8:23 ` Vladimir Makarov
2011-05-25 21:47 ` Eric Botcazou
0 siblings, 1 reply; 6+ messages in thread
From: Vladimir Makarov @ 2011-05-25 8:23 UTC (permalink / raw)
To: Hans-Peter Nilsson; +Cc: gcc-patches, Jeff Law
On 11-05-24 8:24 PM, Hans-Peter Nilsson wrote:
> On Fri, 13 May 2011, Vladimir Makarov wrote:
>> The following patch solves the problem described on
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48971
>>
>> The patch was successfully bootstrapped on x86-64 and checked for ppc64, ia64,
>> i686-linux, i686-apple-darwin, mips, arm, s390x, and sparc with and without
>> -msoft-float.
>>
>> Is it ok to submit to the trunk?
>>
>> 2011-05-13 Vladimir Makarov<vmakarov@redhat.com>
>>
>> PR rtl-optimization/48971
>> * ira.c (setup_pressure_classes): Don't check register move cost
>> for classes with one registers. Don't add pressure class if there
>> is a pressure class with the same available hard registers.
>> Check contains_reg_of_mode. Fix a typo in collecting
>> temp_hard_regset. Ignore hard registers not belonging to a class.
>>
> It seems this broke cris-elf: PR49154.
Thanks for reporting this. It was a very sensitive change therefore I
checked so many targets (about 10) but apparently not all of them. I'll
look at the CRIS problem tomorrow.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: RFA: patch to fix PR48971
2011-05-25 8:23 ` Vladimir Makarov
@ 2011-05-25 21:47 ` Eric Botcazou
2011-05-25 21:58 ` Vladimir Makarov
0 siblings, 1 reply; 6+ messages in thread
From: Eric Botcazou @ 2011-05-25 21:47 UTC (permalink / raw)
To: Vladimir Makarov; +Cc: gcc-patches, Hans-Peter Nilsson, Jeff Law
> Thanks for reporting this. It was a very sensitive change therefore I
> checked so many targets (about 10) but apparently not all of them. I'll
> look at the CRIS problem tomorrow.
This broke SPARC (in default mode) as well:
eric@atlantis:~/build/gcc/sparc-sun-solaris2.9> cat t.c
int main (void) { return 0; }
eric@atlantis:~/build/gcc/sparc-sun-solaris2.9> gcc/xgcc -Bgcc -S t.c
t.c:1:0: internal compiler error: in setup_pressure_classes, at ira.c:902
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
--
Eric Botcazou
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: RFA: patch to fix PR48971
2011-05-25 21:47 ` Eric Botcazou
@ 2011-05-25 21:58 ` Vladimir Makarov
0 siblings, 0 replies; 6+ messages in thread
From: Vladimir Makarov @ 2011-05-25 21:58 UTC (permalink / raw)
To: Eric Botcazou; +Cc: gcc-patches, Hans-Peter Nilsson, Jeff Law
On 05/25/2011 04:26 PM, Eric Botcazou wrote:
>> Thanks for reporting this. It was a very sensitive change therefore I
>> checked so many targets (about 10) but apparently not all of them. I'll
>> look at the CRIS problem tomorrow.
> This broke SPARC (in default mode) as well:
>
> eric@atlantis:~/build/gcc/sparc-sun-solaris2.9> cat t.c
> int main (void) { return 0; }
> eric@atlantis:~/build/gcc/sparc-sun-solaris2.9> gcc/xgcc -Bgcc -S t.c
> t.c:1:0: internal compiler error: in setup_pressure_classes, at ira.c:902
> Please submit a full bug report,
> with preprocessed source if appropriate.
> See<http://gcc.gnu.org/bugs.html> for instructions.
>
I am working on it. I'll send a patch at the end of the day.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-05-25 20:33 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-13 16:42 RFA: patch to fix PR48971 Vladimir Makarov
2011-05-23 16:14 ` Jeff Law
2011-05-25 7:06 ` Hans-Peter Nilsson
2011-05-25 8:23 ` Vladimir Makarov
2011-05-25 21:47 ` Eric Botcazou
2011-05-25 21:58 ` Vladimir Makarov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).