Thanks. I will change > + if (a != operand_a > + && (LRA_SPLIT_FREQ_RATIO * freq >= a->freq))
to > + if (a != operand_a > + && (!ira_use_lra_p || LRA_SPLIT_FREQ_RATIO * freq >= a->freq)) Regards, Wei. On Mon, Apr 28, 2014 at 12:57 AM, Steven Bosscher <stevenb....@gmail.com> wrote: > On Sat, Apr 26, 2014 at 5:35 AM, Wei Mi wrote: >> Index: ira-lives.c >> =================================================================== >> --- ira-lives.c (revision 209253) >> +++ ira-lives.c (working copy) >> @@ -1025,7 +1025,11 @@ process_single_reg_class_operands (bool >> { >> ira_object_t obj = ira_object_id_map[px]; >> a = OBJECT_ALLOCNO (obj); >> - if (a != operand_a) >> + /* If a is much hotter in some other region, don't add reg class >> + cl into its conflict hardreg set. Let lra_split to do splitting >> + here for operand_a. */ >> + if (a != operand_a >> + && (LRA_SPLIT_FREQ_RATIO * freq >= a->freq)) >> { >> /* We could increase costs of A instead of making it >> conflicting with the hard register. But it works worse > > AFAICT this path is not LRA specific, so your patch may break ports > still relying on reload. > > Ciao! > Steven