On Tue, Feb 17, 2015 at 3:51 AM, Thomas Preud'homme wrote: >> > - else if (REG_P (src) >> > - && REGNO (src) >= FIRST_PSEUDO_REGISTER >> > - && REGNO (src) != regno) >> > - { >> > - if (try_replace_reg (reg_used, src, insn)) >> > + else if (src_reg && REG_P (src_reg) >> > + && REGNO (src_reg) >= FIRST_PSEUDO_REGISTER >> > + && REGNO (src_reg) != regno >> > + && try_replace_reg (reg_used, src_reg, insn)) >> >> Likewise for the REG_P and ">= FIRST_PSEUDO_REGISTER" tests here >> (with >> the equivalent and IMHO preferable HARD_REGISTER_P test in >> find_avail_set()). > > I'm not sure I follow you here. First, it seems to me that the equivalent > test is rather REG_P && !HARD_REGISTER_P since here it checks if it's > a pseudo register. > > Then, do you mean the test can be simply removed because of the > REG_P && !HARD_REGISTER_P in hash_scan_set () called indirectly by > compute_hash_table () when called in one_cprop_pass () before any > cprop_insn ()? Or do you mean I should move the check in > find_avail_set ()? What I meant, is that I believe the tests are already done in hash_scan_set and should be redundant in cprop_insn (i.e. the test can be replaced with gcc_[checking_]assert). I've attached a patch with some changes to it: introduce cprop_reg_p() to get rid of all the "REG_P && regno > FIRST_PSEUDO_REGISTER" tests. I still have the cprop_constant_p and cprop_reg_p tests in cprop_insn but this weekend I'll try with gcc_checking_asserts instead. Please have a look at the patch and let me know if you like it (given it's mostly yours I hope you do like it ;-) Bootstrapped & tested on powerpc64-unknown-linux-gnu. In building all of cc1, 35 extra copies are propagated with the patch. Ciao! Steven