On Tue, 2015-09-29 at 09:27 -0500, Peter Bergner wrote: > The first ICE seems to be due to a conversion to long double and LRA ends > up going into a infinite loop spilling things until it hits a threshold and > quits with an ICE. I haven't spent enough time to determine whether this > is a LRA or port issue yet though. The simplest test case I have at the > moment is: > > bergner@genoa:~/gcc/BUGS/LRA/20011123-1$ cat bug2.i > void > foo (long double *ldb1, double *db1) > { > *ldb1 = *db1; > } > bergner@genoa:~/gcc/BUGS/LRA/20011123-1$ > /home/bergner/gcc/build/gcc-fsf-mainline-bootstrap-lra-default-debug/gcc/xgcc > -B/home/bergner/gcc/build/gcc-fsf-mainline-bootstrap-lra-default-debug/gcc/ > -S -O1 -mvsx -S bug2.i > bug2.i: In function ‘foo’: > bug2.i:5:1: internal compiler error: Max. number of generated reload insns > per insn is achieved (90)
So working with Segher and Mike offline, this ends up being a problem with rs6000.md's *extenddftf2_internal pattern using the constraint "ws" in alternative 2. TFmode variables are not allowed in Altivec registers, so this pattern should be using the "d" constraint instead. I'm testing a patch. Peter