On Thu, Mar 31, 2011 at 2:57 PM, Ian Lance Taylor <i...@google.com> wrote: > Liu <pro...@gmail.com> writes: > >> On Wed, Mar 30, 2011 at 11:45 PM, Ian Lance Taylor <i...@google.com> wrote: >>> Liu <pro...@gmail.com> writes: >>> >>>> if (GET_MODE (dest) == V32QImode) >>>> tmp_reg = gen_reg_rtx (V32QImode); >>> >>>> vpaddd.c:33:1: internal compiler error: in gen_reg_rtx, at emit-rtl.c:863 >>>> Please submit a full bug report, >>>> with preprocessed source if appropriate. >>>> See <http://gcc.gnu.org/bugs.html> for instructions. >>>> >>>> emit-rtl.c:863 is gcc_assert (can_create_pseudo_p ()); >>> >>> You can only call gen_reg_rtx if can_create_pseudo_p returns true. It >>> will return false during and after register allocation. Your code is >>> being called at that time somehow, probably during reload. You have to >>> either ensure that that does not happen, or, more likely, you have to >>> arrange to use an existing register rather than create a new one. For >>> example, look for uses of can_create_pseudo_p in mips.c. >>> >>> Ian >>> >> >> Thank you very much Ian! >> >> Does SCRATCH will be OK? > > Not directly, no. You can use match_scratch as part of a secondary > reload, though. I don't know whether you need a secondary reload here > or not. > > Ian >
Thanks. I'll go to look into can_create_pseudo_p, maybe reload.c, it is really complex.