Re: adding movz to machine description

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




That means that the combine pass has replaced it with something else
which is equivalent which the combine pass thought would be cheaper.
Look at the generated RTL to see what it turned into.  If the
resulting code is less efficient to run, then you need to adjust your
costs (the TARGET_RTX_COSTS hook).

Ian

Finally, my instruction is generated.
There is off course one problem, when If Then Else is replaced with my pattern,

(define_expand "movsicc"
   [(set (match_operand:SI 0 "register_operand" "=d,d")
    (if_then_else:SI
;;(match_operator 1 "comparison_operator" [(match_operand:SI 3 "register_operand" "=d,d") (const_int 0)])
      (eq:SI (match_operand:SI 1 "register_operand" "=d,d") (const_int 0))
       (match_operand:SI 2 "register_operand" "=d,d")
(match_dup:SI 0)))]
 ""
 "
{
 dlx_compare_op0 = force_reg(SImode, dlx_compare_op0);
emit_insn(gen_movsicc_movz(operands[0], , dlx_compare_op0, operands[2], , operands[0], ));
 DONE;
}")

previous initialization of destination register is lost.
for example,
d = 7;
if (a > b)
d = in1;
return d;

obviously, d should remain 7 if condition is not true.

pattern is replaced with


(insn 50 18 51 0 (set (reg:SI 47)
(const_int 7 [0x7])) 40 {movsi_general} (nil) ////this use to be d = 7;
   (nil))

(insn 51 50 33 0 (set (reg/v:SI 37 [ d ])
       (if_then_else:SI (reg:SI 45)
           (reg/v:SI 42 [ h ])
(reg/v:SI 37 [ d ]))) 0 {movsicc_movz} (nil) //// now d is not initialised??
   (nil))


and in next step, insn 50 is removed!
How come else branch got hanging like that?

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux