https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84842
Alexander Monakov <amonakov at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2018-04-17 Ever confirmed|0 |1 --- Comment #11 from Alexander Monakov <amonakov at gcc dot gnu.org> --- Thanks, I managed to reproduce it. The unusual thing here is hardreg 63 being considered call-clobbered in its reg_raw_mode=TImode but not narrower modes. We have (insn 97 29 98 4 (set (reg:DI 63 31 [160]) (unspec:DI [ (reg:SI 29 29) ] UNSPEC_LFIWAX)) "pr84842.i":5 344 {lfiwax} (expr_list:REG_DEAD (reg:SI 29 29) (nil))) and sched-deps noting a REG_DEP_OUTPUT dependence on regno 63 against a preceding call insn according to rs6000_hard_regno_call_part_clobbered (regno=63, mode=E_TImode). I assume what the backend in conveying there is that only the low part of the register will be preserved by callees. However, when we move up the instruction we don't have a dependence. The LHS is DImode, so that seems correct as well: sched-deps had a more conservative answer because its dependence lists are not separated per mode. Andrey, does the above make sense? Can the assert be relaxed?