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);
     }
 

Reply via email to