On 11/28/2017 04:55 AM, Richard Biener wrote: >>> Or consider a stream of code containing two tls_desc calls (ok, the >>> compiler might >>> optimise one of the tls calls away, but this approach should be reusable >>> for other exprs). >>> Between the two set(x,x)’s x is considered live so the register allocator >>> can’t use that >>> register. >>> Given that we are applying this to all the neon registers, the register >>> allocator now throws >>> an ICE because it can’t find any free hard neon registers to use. >> Given your statements it sounds like the liveness infrastructure is >> making those neon regs globally live when it sees the low part subreg >> self-set. Let's confirm that one way or the other and see where it >> takes us. > > Indeed in (set (subreg:neon reg1) (subreg:neon reg1)) it appears that > the lowpart of reg1 > is used and thus it is live but liveness analysis can (and should) > simply ignore such sets. My suggestion was going to be to peek a bit at the life analysis code if indeed my suspicion was true.
Jeff