divmod with -O3

Pierre Mallard pierremallard@yahoo.fr
Tue Nov 19 08:29:00 GMT 2002


Hi ,
I've define udivmodqi4 as follow:

(define_expand "udivmodqi4"
  [(parallel[(set (match_operand:QI 0
"register_operand" "=r")
        	(udiv:QI (match_operand:HI 1
"register_operand" "r")
                	 (match_operand:QI 2
"register_operand"  "r")))
   (set (match_operand:QI 3 "register_operand" "=r")
(umod:QI (match_dup 1) (match_dup 2)))])]
  ""
  "{
  	rtx res,opa,opb;
	res = gen_reg_rtx(HImode);
  	emit_insn (gen_rtx_PARALLEL(VOIDmode, gen_rtvec (2,
               	  gen_rtx_SET
(VOIDmode,gen_rtx_SUBREG(QImode,res,0),gen_rtx_UDIV(QImode,operands[1],operands[2])),
		  gen_rtx_SET
(VOIDmode,gen_rtx_SUBREG(QImode,res,1),gen_rtx_UMOD(QImode,operands[1],operands[2]))
		  )));

emit_move_insn(operands[0],gen_rtx_SUBREG(QImode,res,0));

emit_move_insn(operands[3],gen_rtx_SUBREG(QImode,res,1));
	DONE;
 }")


But the two last "emit_move_insn" doesn't work because
of flag_rename_registers defined with -O3 (it works
fine on other -O or with a commentary on
flag_rename_registers = 1 in toplevel.c)
The error is :
tests/test_micro_gcc/00000007.c: In function
`shellsort':
tests/test_micro_gcc/00000007.c:65: Internal compiler
error in print_rtl_and_abort, at flow.c:6458
Please submit a full bug report,
with preprocessed source if appropriate.

Can someone help me please ?


___________________________________________________________
Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français !
Yahoo! Mail : http://fr.mail.yahoo.com



More information about the Gcc-patches mailing list