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