On 08/31/2009 01:07 PM, Jean Christophe Beyler wrote:
If I replace this :
(define_insn "extzv"
   [(set (match_operand 0 "register_operand" "")
         (zero_extract (match_operand 1 "register_operand" "")
                       (match_operand 2 "const_int_operand" "")
                       (match_operand 3 "const_int_operand" "")))]
  ""
  "")

Well, I can tell you that an insn pattern with no modes
on the non-immediate operands will definitely cause problems.

(insn 9 8 10 3 struct4.c:24 (set (subreg:DI (reg:QI 76) 0)
         (zero_extract:DI (reg:DI 75)
             (const_int 1 [0x1])
             (const_int 0 [0x0]))) -1 (nil))

(insn 10 9 11 3 struct4.c:24 (set (reg:DI 77)
         (zero_extend:DI (reg:QI 76))) -1 (nil))

Is there anything I can do to remove that zero_extend?

You could try either using a predicate that disallows
a subreg, or by having your expander rewrite things into

  (set (reg:DI new-scratch))
       (zero_extract:DI ...))
  (set (reg:QI 76 (subreg:QI (reg:DI new scratch)))

and relying on subsequent passes to clean that up.


r~

Reply via email to