On 03/20/2014 06:38 PM, Bill Schmidt wrote: > - rtx splat = gen_rtx_VEC_DUPLICATE (V16QImode, > - gen_rtx_CONST_INT (QImode, -1)); > + rtx notx = gen_rtx_NOT (V16QImode, force_reg (V16QImode, x)); > + rtx andx = gen_rtx_AND (V16QImode, notx, notx); > rtx tmp = gen_reg_rtx (V16QImode); > - emit_move_insn (tmp, splat); > - x = gen_rtx_MINUS (V16QImode, tmp, force_reg (V16QImode, x)); > - emit_move_insn (tmp, x); > + emit_move_insn (tmp, andx);
Existing problem, and I know it's done all over that backend, but one shouldn't use emit_move_insn on expressions like that. Moves should be between RTX_OBJ things: registers, constants, and memory. Better to just do "emit_insn (gen_rtx_SET (VOIDmode, tmp, andx));". r~