On Thu, 2006-07-20 at 12:04, Dave Korn wrote: > On 20 July 2006 07:03, Wolfgang Mües wrote: > > > Hello Rask, > > > > On Wednesday 19 July 2006 13:24, Rask Ingemann Lambertsen wrote: > >> I've spotted a function named emit_set_insn() in arm.c. It might be > >> the problem, because it uses gen_rtx_SET() directly. > > > > But it's not the only function which uses gen_rtx_SET. There are also > > much places with > > > >> emit_constant_insn (cond, > >> gen_rtx_SET (VOIDmode, target, source)); > > > > Isn't it better to replace gen_rtx_SET? > > > > Is there any generic advice available as to when and why one should use > emit_insn (gen_rtx_SET (....)) as opposed to emit_move_insn (...)?
emit_move_insn will validate that the operands and try to make things work if they don't satisfy the predicates for mov<mode>; ultimately it will end up calling the gen_mov<mode> insn to do the right thing. emit_insn (gen_rtx_set... just takes the two operands and forms a set insn, so the operands can be anything that's valid in a set, for example: op0 = reg op1 = plus(reg, const_int) you can only use emit_insn (gen_rtx_set(...)) when you know that the result is a valid insn (for the current context). R.