Hi Guys, I am applying the patch below to fix some problems building an iq2000-elf toolchain. The main problem is that the conditional branch patterns were specifying a mode for the comparison operator, which then fails to match the rtl generated by the compiler.
The other problem is that the two extend-and-compare patterns were running into reload problems when building libstdc++-v3. I have disabled them until I have time to investigate further. Cheers Nick gcc/ChangeLog 2012-08-17 Nick Clifton <ni...@redhat.com> * config/iq2000/iq2000.md (cbranchsi4): Remove mode from comparison and label. (branch_zero): Likewise. (branch_zero_inverted): Likewise. (branch_equality): Likewise. (branch_equality_inverted): Likewise. (extend-and-compare): Disable until reload issues can be resolved. * config/iq2000/iq2000.c (gen_conditional_branch): Use VOIDmode for comparison. (iq2000_function_arg_advance): Remove CONST_CAST2. Index: gcc/config/iq2000/iq2000.md =================================================================== --- gcc/config/iq2000/iq2000.md (revision 190466) +++ gcc/config/iq2000/iq2000.md (working copy) @@ -1001,10 +1001,10 @@ (define_expand "cbranchsi4" [(set (pc) (if_then_else - (match_operator:SI 0 "ordered_comparison_operator" - [(match_operand:SI 1 "register_operand") - (match_operand:SI 2 "reg_or_const_operand")]) - (label_ref (match_operand:SI 3 "")) + (match_operator 0 "ordered_comparison_operator" + [(match_operand:SI 1 "register_operand") + (match_operand:SI 2 "reg_or_const_operand")]) + (label_ref (match_operand 3 "")) (pc)))] "" " @@ -1019,9 +1019,9 @@ (define_insn "branch_zero" [(set (pc) (if_then_else - (match_operator:SI 0 "cmp_op" - [(match_operand:SI 2 "register_operand" "d") - (const_int 0)]) + (match_operator 0 "cmp_op" + [(match_operand:SI 2 "register_operand" "d") + (const_int 0)]) (label_ref (match_operand 1 "" "")) (pc)))] "" @@ -1040,9 +1040,9 @@ (define_insn "branch_zero_inverted" [(set (pc) (if_then_else - (match_operator:SI 0 "cmp_op" - [(match_operand:SI 2 "register_operand" "d") - (const_int 0)]) + (match_operator 0 "cmp_op" + [(match_operand:SI 2 "register_operand" "d") + (const_int 0)]) (pc) (label_ref (match_operand 1 "" ""))))] "" @@ -1063,9 +1063,9 @@ (define_insn "branch_equality" [(set (pc) (if_then_else - (match_operator:SI 0 "equality_op" - [(match_operand:SI 2 "register_operand" "d") - (match_operand:SI 3 "register_operand" "d")]) + (match_operator 0 "equality_op" + [(match_operand:SI 2 "register_operand" "d") + (match_operand:SI 3 "register_operand" "d")]) (label_ref (match_operand 1 "" "")) (pc)))] "" @@ -1084,9 +1084,9 @@ (define_insn "branch_equality_inverted" [(set (pc) (if_then_else - (match_operator:SI 0 "equality_op" - [(match_operand:SI 2 "register_operand" "d") - (match_operand:SI 3 "register_operand" "d")]) + (match_operator 0 "equality_op" + [(match_operand:SI 2 "register_operand" "d") + (match_operand:SI 3 "register_operand" "d")]) (pc) (label_ref (match_operand 1 "" ""))))] "" @@ -1145,7 +1145,7 @@ (const_int 0)) (match_operand 2 "pc_or_label_operand" "") (match_operand 3 "pc_or_label_operand" "")))] - "" + "0" "bb%A2\\t%0(31-%1),%P2%P3" [(set_attr "length" "4") (set_attr "type" "branch")]) @@ -1159,7 +1159,7 @@ (const_int 0)) (match_operand 2 "pc_or_label_operand" "") (match_operand 3 "pc_or_label_operand" "")))] - "" + "0" "bb%A3\\t%0(31-%1),%P2%P3" [(set_attr "length" "4") (set_attr "type" "branch")]) Index: gcc/config/iq2000/iq2000.c =================================================================== --- gcc/config/iq2000/iq2000.c (revision 190466) +++ gcc/config/iq2000/iq2000.c (working copy) @@ -1076,7 +1076,7 @@ emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, gen_rtx_IF_THEN_ELSE (VOIDmode, gen_rtx_fmt_ee (test_code, - mode, + VOIDmode, cmp0, cmp1), label1, label2))); } @@ -1140,7 +1140,7 @@ "function_adv({gp reg found = %d, arg # = %2d, words = %2d}, %4s, ", cum->gp_reg_found, cum->arg_number, cum->arg_words, GET_MODE_NAME (mode)); - fprintf (stderr, "%p", CONST_CAST2 (void *, const_tree, type)); + fprintf (stderr, "%p", type); fprintf (stderr, ", %d )\n\n", named); }