On Fri, Jun 28, 2013 at 6:10 PM, Eric Botcazou <ebotca...@adacore.com> wrote: >> Hi, I have a question about register renaming in rtl loop unroll. >> For an example loop: >> .L1: >> [r162] <- x >> r162 <- r162 + 4 >> ... >> b .L1 >> >> After unrolling: >> .L1: >> [r162] <- x >> r197 <- r162 + 4 >> r162 <- r197 >> ... >> [r162] <- y >> r162 <- r197 + 4 >> ... >> b .L1 >> Why not: >> .L1: >> [r162] <- x >> r162 <- r162 + 4 >> ... >> [r162] <- y >> r162 <- r162 + 4 >> ... >> b .L1 >> >> Thus less copy instructions and can take advantage of auto-increment. >> Any ideas? > > The general principle is to avoid pseudo-registers with long live ranges > because this unnecessarily contraints the RTL optimizers. > Understood. Thanks. The problem is auto-inc-dec is weak and can only capture post-increment in first part of code, generating even worse code for RA: .L1: r197 <- r162 [r197++] <- x ... [r162+4] <- y r162 <- r197+0x4 ... b .L1 Now we have two live registers and it seems hard to eliminate.
So could the unrolled codes be like below? >> .L1: >> [r162] <- x >> r162 <- r162 + 4 >> r197 <- r162 >> ... >> [r197] <- y >> r197 <- r197 + 4 >> r162 <- r197 >> ... >> b .L1 Thanks. bin